由su和su -的区别谈学习linux运维方法

原文:http://blog.51cto.com/oldboy/1053606

由su和su -的区别谈学习linux运维方法一例

老男孩Linux培训新班刚开始,老男孩发现群里就在讨论这个su和su -的区别,有的同学们说,直接su就可以,有的说必须要su -。有的同学直接发问,到底su和su -有什么区别?

1授之以“鱼”的答案

6.6.1.3 su命令实例

当不加任何参数执行su命令时,表示要切换到root用户,但这样执行,会遇到一些问题。因为虽然是切换到root用户了,但并没有改变为root用户登录环境,用户默认的登录环境,可以在/etc/passwd 中查得到,包括家目录,shell类型等。比较规范的操作方法是”su -“。见下面的实例。

实例1:由普通用户oldboy切换到root用户

[oldboy@oldboy ~]$ whoami  #→确认当前用户为oldboy

oldboy

[oldboy@oldboy ~]$ su  #→不加用户就表示切到root用户。当然也可以使用su root。

Password:  #→这里当然就是root用户的密码了。

[root@oldboy oldboy]# env

HOSTNAME=oldboy

USER=oldboy

MAIL=/var/spool/mail/oldboy

PWD=/home/oldboy

HOME=/root

LOGNAME=oldboy

...省略部分无关内容...

#→细心的读者应该已经看到了,如果使用su而不加上“-”这个参数,那么,切换前的用户的相关信息还会存在,这会引起很多麻烦,甚至会出现意想不到的结果。因此,切换用户时,最好是 “su - 用户名”。这是生产场景中标准的切换用户的操作方法。

[root@oldboy oldboy]# exit  #→退出当前用户,这个命令也可以用ctrl+d快捷键命令替代。

[oldboy@oldboy ~]$ su -  #→带上“-”参数做切换,也可用su - root命令。这是生产场景中的标准操作方法。

Password:

[root@oldboy ~]# env|egrep "USER|MAIL|PWD|LOGNAME"  #→切换后的环境变量信息结果。使用egrep过滤包含想查看的字符串的行。

USER=root

MAIL=/var/spool/mail/root

PWD=/root

LOGNAME=root

#→这次和上次就不同了,所有的环境变量信息都切换到了root下。因此,请大家在切换用户时一定要加上“su - 用户名”,这里提醒下,不光是切到root呦,切换到其他用户也是一样,呵呵。

su命令总结:

1)普通用户切换到root用户,可使用su -或su - root。必须输入root密码才能完成切换。

2)root用户切换到普通用户,可使用“su - 普通用户名”的写法。不需要输入任何密码就能完成切换。切换到普通用户后,在执行一些命令如ifconfig时,可能会遭遇到环境变量PATH路径问题而找不到某些系统命令(一般是/sbin,/usr/sbin等下面的命令),这时就需要将普通用户的PATH,配置成root的PATH内容,前面的文章已讲解过这个配置方法,不清楚的读者,可以翻阅下。

3)如果仅希望在某用户下执行命令,而不直接切换到该用户下操作,可以使用 su - 用户名 -c "命令"的方式,-c指定用户身份执行任务。

企业案例如下:

####分用户方案启动服务命令####

su - wasadmin -c '/bin/sh /home/wasadmin/bin/deploy.sh'

上文摘录于老男孩Linux培训讲课与出书教案笔记部分。

老男孩评论:虽然这样给同学们讲解不错,但这依然是授之以鱼的讲解方式,学生必须要意识到自己如何能获取到这样的知识,而不是轻易去问老师获得,只有学会了学习方法与自学能力才是学习Linux运维比较高的境界,也是未来发展之道。

2授之以“渔”的答案

1)可以去搜索引擎搜索,然后根据说的去实践下,最后别忘了总结。

这个算是“渔”,但还不彻底,即不是学习Linux运维的优秀思想,但是很多初学者默认就会这样(但搜索的技能缺乏很多),所以,这条路也算可以吧,但最好还是下面的思想。

2)要了解su和su -的区别,其实就是要知道su -的作用就可以了,su -这样的命令显然,-是su的参数,因此,完全可以man su或者su --help获取到你想要的答案,然后,在辅助上面教案的提示去实践敲一下体会下(别忘了总结好笔记)。

man su或者su --help的如下:

su 参数选项

注释说明(带※的表示重要,需要掌握)

-, -l, --login

make the shell a login shell

#→※使一个shell成为登陆的shell,如执行su - oldboy 时,表示该用户想改变身份为 oldboy,并且使用oldboy用户的环境变量配置,如:/home/oldboy/.bash_profile等。

 

[oldboy@student ~]$ su --help

Usage: su [OPTION]... [-] [USER [ARG]...]

Change the effective user id and group id to that of USER.

-, -l, --login               make the shell a login shell

省略部分…

[oldboy@student ~]$ man su

NAME

su - run a shell with substitute user and group IDs

SYNOPSIS

su [OPTION]... [-] [USER [ARG]...]

DESCRIPTION

Change the effective user id and group id to that of USER.

       -, -l, --login

              make the shell a login shell

省略部分…

实践的过程非常重要,见上文。

拓展:在举个例子就是老男孩曾经发布在博客的考试题

1.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r-- 为644,要求使用命令取得644这样的数字。
解答如下:
http://oldboy.blog.51cto.com/2561410/791638

这道题就是一个很好的培养学习思维和自学能力的例子。其中的当命令结果包含我们需要的内容的时候,我们要想到此命令是否有具体的参数能够一步达到我们需要的结果。
重视学习方法的学习,才是学好Linux运维之道,这也是老男孩写博客时很少发表一些服务的部署过程给大家或者具体的业务脚本,因为,老男孩觉得这些都是授之以“鱼”的方法,应尽可能避免或者一定要多种方法结合,完全授之以“鱼”作用比较小。所以,“渔”的过程基本是在老男孩给学生留的课后作业部分完成的,老男孩讲“渔”,同学们给老师“鱼”。

补充一个老男孩课后要求大家上交捕的“鱼”:

提示:既然同学们学会捕鱼的技巧了,就要让老男孩看到鱼:下面是要求大家上交的捕的鱼:
老男孩培训第15次讲课课后shell作业:

(面授班按个人分配的总结,网络班全部都编写)

请全体同学务必完成,捕鱼的技巧不是老男孩讲了你们就会的,必须要多次的实践才能掌握,同学们加油,有不会的问题课后群内讨论或者找导师咨询。

1)lnmp一键安装脚本<==zhengdong
要求:linux centos5.8,nginx1.3.4,mysql5.5.27,php5.3.17

2)linux系统一键优化脚本<==chenya

3)lamp一键安装脚本<==zhangji

4)rsync,sersync,inotify一键安装及配置脚本<==sanyapen

5)mysql多实例安装及备份脚本<==zhangxian

6)apache,nginx,mysql,rsync的服务检测监控脚本<==yanggongwan

7)mysql主从同步一键实现脚本<==fengyiwe

8)lamp一键安装脚本<==lifen

(转)由su和su -的区别谈学习linux运维方法的更多相关文章

  1. Linux运维:CentOS6和7的区别

    Liunx笔记:CentOS6和CentOS7的区别 路飞学城运维人员 在线流程图软件 Ago linux运维群: 93324526 笔者QQ:578843228 常用安装包下载 yum instal ...

  2. 网络工程师和Linux运维工程师有什么区别?学哪个比较好?

    网络工程师和Linux运维工程师有什么区别?学哪个比较好? 机缘巧合下,我进入了一家从事vpn与系统集成的公司,很感谢公司能留下我这个非网络工程专业的毕业生,从对网络一窍不通,慢慢可以自己独立完成工作 ...

  3. 从谷歌CRE谈起,运维如何培养服务意识?

    从谷歌CRE谈起,运维如何培养服务意识? 2016年10月,谷歌云平台博客(Google Cloud Platform Blog)上更新了一篇文章,谷歌宣布了一个新的专业岗位,CRE(Customer ...

  4. Linux运维之——每日小技巧,谈进程与线程的区别

    线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源. ...

  5. Linux运维之--LVS、Nginx、HAproxy有什么区别?

    LVS: 是基于四层的转发 HAproxy: 是基于四层和七层的转发,是专业的代理服务器 Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发 区别: LVS由于是基于四层的 ...

  6. 文科生细谈学习Linux系统的重要性

    首先大概介绍下自己,我学的是公共事业管理方面的专业,可以说是面向纯理论,社区管理社会管理的专业,但是从大二开始,对网络及服务器运维方面产生浓厚兴趣,并不断在网上找相关资料. 在这期间经历过很多,单说桌 ...

  7. su和su - 的区别

    Linux中切换用户的命令是su或su -.前天我在使用useradd这个命令时,才体会到这两者的本质区别.如图: 我首先是用su命令切换到root身份的,但是运行useradd时,出现错误:bash ...

  8. shell切换用户执行后面语句 su与su -的区别

    关于su和su -的区别,切换用户是可以使用su tom或者su - tom来实现,但是两者有区别,su只是切换身份,但shell环境仍然是原用户的shell,su -是连用户的shell环境一起切换 ...

  9. Linux下su与su -命令的区别

    在启动服务器ntpd服务时遇到一个问题 使用 su root 切换到root用户后,不可以使用service命令: 使用 su - 后,就可以使用service命令了. 原因: su命令和su -命令 ...

随机推荐

  1. Poj_1004_FinancialManagement

    一.Description Larry graduated this year and finally has a job. He's making a lot of money, but someh ...

  2. HDOJ1151有向图最小路径覆盖

    //有向图最小路径覆盖:从某一点出发沿着有向路径,不走回路,能将所有的结点遍历. #include<iostream> #include<cstdio> #include< ...

  3. Python:easygui的安装、导入、使用、设置

    转于:https://blog.csdn.net/sinat_37390744/article/details/55211652 博主:钏的博客 一.下载安装 1)下载0.96的easygui.htt ...

  4. netty支持的协议

    流经网络的数据总是具有相同的类型:字节.这些字节是如何流动的主要取决于我们所说的 网络传输--一个帮助我们抽象底层数据传输机制的概念.用户并不关心这些细节:他们只想确保他们的字节被可靠地发送和接收. ...

  5. tomcat solr 限制ip

    <Context path="/solr" reloadable="false" docBase="/var/www"> < ...

  6. servlet课堂笔记

    1.servlet生命周期: 1> 加载和实例化 2> 初始化 init() 3> 处理请求 service()->doGet()/doPost() 4> 销毁 dest ...

  7. LoadRunner 12 模拟 RSA加密 登录的实现(JS)

    LR 12 中 web_js_run API 非常坑,只能调用一个 JS 文件:更坑的是,不能通用 一个JS调用另外一个JS:(可能有,但在网上找了N个国家,都没有找到!如有,还请朋友告之,谢谢.) ...

  8. MQTT协议实现Eclipse Paho学习总结二

    一.概述 前一篇博客(MQTT协议实现Eclipse Paho学习总结一) 写了一些MQTT协议相关的一些概述和其实现Eclipse Paho的报文类别,同时对心跳包进行了分析.这篇文章,在不涉及MQ ...

  9. HDU 5242 Game (贪心)

    题意:给定一棵树,要求从根结点1走k次,每次都是到叶子结点结束,把走过的所有的结点权值加起来,最大是多少. 析:先把每个结点到根结点的路径之和求出来,然后按权值从大到小排序,然后每次把路径中的权值求出 ...

  10. Educational Codeforces Round 52D(ARRAY,模拟最短路)

    #include<bits/stdc++.h>using namespace std;int n,x;int chess[17*17];//记录棋盘上的numberarray<int ...