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

use*_*183 107 linux su

我对 Linux 终端很陌生,我不太确定su带连字符和su不带连字符的区别是什么,例如:su - usernamevs su username. .

我查看了文档,但在那里没有提到这一点。有人可以帮我吗?

pau*_*sm4 103

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

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

连字符有两个作用:

1) 通过以新用户的身份登录,从当前目录切换到新用户的主目录(例如,在 root 用户的情况下,切换到 /root)

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

  • 这两件事是*设置*用户环境的文件:) *不*执行它们意味着*保持*您的原始环境。执行它们(通过使用“-”)意味着使*您的* 环境与您“su'ing”的用户相同。使用连字符通常是您*想要的* - 每当我“su”时,我习惯性地使用“-”。 (5认同)
  • @user574183 当然,例如,如果一个设置了某些内容而另一个未设置某些内容或设置为其他内容 (3认同)

小智 8

2022 年更新:

不鼓励使用 的简写--login

请参阅: https: //man.archlinux.org/man/su.1#DESCRIPTION

建议始终使用 --login 选项(而不是其快捷方式 - )以避免混合环境引起的副作用。

https://wiki.archlinux.org/title/Su

有时您会遇到使用 su 来使用 su - 获取登录 shell,而不是 su -l/su --login。不鼓励使用这种简写,因为 - 选项可能会遇到解析限制。