有连字符和不带连字符的“ su”有什么区别?


86

我是Linux终端的新手,我不确定su使用连字符和su不使用连字符之间的区别,例如:su - usernamevs su username

我查看了文档,但在此未提及。有人可以帮我吗?


“登录外壳”通常是指交互式外壳。这与仅执行脚本并退出的外壳相对。
Shahbaz 2012年

6
就在您链接到同一手册页中:“ -,-l,
ArjunShankar

1
您甚至不必搜索它,只需输入su --help
Art Shayderov

1
noteworthyness的:这是苏-ING根特别有用,因为不使用连字符开始一个新的登录shell,你$PATH将不会被更新,所以你将不能够直接调用仅根二进制文件/sbin/usr/sbin
加勒特

Answers:


84

“-”和“ no连字符”之间的区别在于后者保留了您现有的环境(变量等);前者会创建一个新环境(使用实际用户的设置,而不是您自己的设置)。

https://wiki.archlinux.org/index.php/Su

连字符有两个作用:

1)通过以该用户身份登录,从新用户的当前目录切换到新用户的主目录(例如,对于root用户,切换到/ root)

2)将环境变量更改为新用户的〜/ .bashrc指示的环境变量。也就是说,如果su的第一个参数是连字符,则当前目录和环境将更改为新用户实际登录到新会话(而不是仅接管现有会话)时的预期状态。


这个站点-> admon.org/difference-between-login-shell-and-non-login-shell表示,如果不使用连字符,则不会执行/ etc / profile和〜/ .bash_profile文件。这两个文件对用户环境有什么意义?
user574183 2012年

2
这两件事是设置用户环境的文件:) 执行它们意味着保留原始环境。执行它们(通过使用“-”)意味着使您的环境与您要“求助”的用户相同。使用连字符通常是你有什么 -我用“ - ”习惯,每当我“苏”。
paulsm4 2012年

执行顺序真的重要吗?我之所以这样问是因为,在该站点上,他们提到在非登录外壳中时,两个文件/ etc / bashrc〜/ .bashrc是按相反顺序执行的。有人请帮助我
user574183 '07年

1
@ user574183当然,例如,如果一个设置了某项但另一个未设置某项或设置为其他某项
fikr4n15年

3

su -启动root用户的登录shell。有关与普通shell的区别,请参见此站点


2
是的,但这不是问题:)
paulsm4

这是不正确的,您可以使用破折号运行su并让它为其他用户启动shell。执行以下命令,查看输出sudo su - "testuser" -c "whoami"
David Hergert 2015年

@DavidHergert是的,没有用户名,它将为root打开shell。
Lars Kotthoff 2015年

@LarsKotthoff-好的,很抱歉,它的措辞听起来像破折号是使它成为根外壳的原因,而不是放弃用户默认为root的事实。甚至我当地的居民SA对此也感到困惑。:)
David Hergert,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.