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

本文详细解析了Linux系统中su与su-命令的区别及应用场景,通过实例对比两种命令执行后的环境变量变化,强调了使用su-进行用户切换的重要性。

  susu -的区别谈学习linux运维方法一例

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

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密码才能完成切换。

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

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

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

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

2授之以“渔”的答案

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

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

2)要了解susu -的区别,其实就是要知道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

本文出自 “老男孩的linux博客” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/1053606

<think>嗯,用户想了解Linuxsu - rootsu root的区别。这个问题其实涉及到Linux用户切换的环境变量加载机制,之前提供的引用资料已经解释得很清楚了。 用户可能是个刚接触Linux系统管理的新手,正在学习权限管理相关操作。ta特意强调了要理解不同用法的区别,说明可能在实际使用中遇到了环境变量相关的问题。从ta能准确区分两种写法来看,应该已经有一定基础。 需要重点解释环境变量工作目录的差异,这是最核心的区别。引用[2][3]都强调su -会加载完整的root环境,包括.bashrc等配置文件,而su则保留原用户环境。这个细节对后续命令执行影响很大。 另外要注意安全提示,引用[4]提到su需要输入密码的安全机制。可以补充说明在生产环境中更推荐使用sudo -i来获得root环境,避免密码泄露风险。 用户提供的三个引用内容其实已经覆盖了主要知识点: - 引用[1]说明su - root是完整切换 - 引用[2]对比了环境变量差异 - 引用[3]强调了工作目录变化 - 引用[4]解释su命令的本质是开启新会话 把这些点组织成对比表格会清晰很多,再配上实际终端演示的代码块。最后用电梯演讲式总结强调关键区别,这样既专业又易懂。 需要补充的是PATH变量差异的实例,比如/usr/local/sbin目录是否包含,这个在实际运维中经常引发问题。还有提到su -c的用法也很实用,很多管理员喜欢用这个临时执行单条命令。</think>在 Linux 系统中,`su - root` `su root` 的核心区别在于 **环境变量加载方式工作目录**,具体如下: --- ### 一、核心区别对比 | **命令** | **环境变量** | **工作目录** | **配置文件加载** | |----------------|--------------------------------------------|----------------|------------------------------| | `su - root` | **完全切换**:加载 root 用户的完整环境变量(如 `PATH`、`HOME`) | 切换到 `/root` | 加载 `.bashrc`、`.profile` 等 | | `su root` | **部分切换**:保留当前用户的环境变量 | **不改变** | 仅加载最小配置 | --- ### 二、详细说明 #### 1. **`su - root`(推荐方式)** - **行为**:模拟 root 用户重新登录,创建一个**全新的登录会话**。 - **环境变量**:完全使用 root 用户的配置(如 `PATH` 包含 `/sbin` 等系统路径)。 - **工作目录**:自动切换到 root 的家目录 `/root`。 - **配置文件**:加载 root 的 Shell 配置文件(如 `~/.bashrc`, `~/.profile`)。 - **使用场景**:需要以 root 身份执行需要完整环境变量的命令(如服务管理、编译安装软件)。 ```bash # 示例:切换后环境变量为 root 专属 $ su - root Password: # echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin # pwd /root ``` #### 2. **`su root`** - **行为**:仅切换用户身份,**保留当前会话的环境变量**。 - **环境变量**:继承原用户的 `PATH` 等设置(可能导致 root 命令找不到)。 - **工作目录**:保持切换前的目录不变。 - **配置文件**:仅加载基础配置(不加载完整的环境初始化文件)。 - **使用场景**:临时执行单条 root 命令,且不需要完整环境时。 ```bash # 示例:切换后环境变量可能缺失系统路径 $ su root Password: # echo $PATH /home/user/bin:/usr/local/bin:/usr/bin # 原用户的环境变量 # pwd /home/user # 未切换目录 ``` --- ### 三、关键差异示例 假设原用户环境变量中缺少 `/sbin`: - **`su - root`**: `service nginx restart` 可执行(`/sbin/service` 在 PATH 中)。 - **`su root`**: `service nginx restart` 可能报错 `command not found`(因 PATH 未更新)。 --- ### 四、安全实践建议 1. **优先使用 `sudo`**: 临时授权单条命令(如 `sudo systemctl restart nginx`),避免长期使用 root 会话[^4]。 2. **必须用 `su` 时选择 `su -`**: 确保环境完整,减少因配置缺失导致的异常[^2][^3]。 3. **避免直接登录 root**: 通过 `sudo -i` 切换到 root 环境(比 `su -` 更安全且可审计)。 > 📌 **总结一句话**: > `su - root` = 全新登录(纯净 root 环境),`su root` = 仅切换身份(保留原环境)。 > **日常操作推荐 `sudo`,必须切 root 时用 `su -`**。 --- ### 相关问题 1. `sudo -i` `su - root` 有何异同? 2. 如何配置 `sudoers` 文件实现免密执行特定命令? 3. Linux 环境变量加载顺序是怎样的(如 `/etc/profile` vs `~/.bashrc`)? [^1]: 引用[1] [^2]: 引用[2] [^3]: 引用[3] [^4]: 引用[4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值