2.42 变更到其他用户,包括其环境变量
su -l
只有在知道用户密码的情况下,su
命令才起作用。没有用户密码,就不能切换用户。如果正常运行,你就会切换到用户在/etc/passwd
文件中指定的shell,如sh
、tcsh
或者bash
。大多数Linux用户只使用默认的bash
shell,所以你可能不会看到有任何区别。在上一个例子中也要注意的是,当改变用户时目录并没有发生变化。从本质上来说,你已经变成了gromit
,但使用的仍然是scott
的环境变量。这好比是你发现了超人的衣服并穿上了它,看起来你像个超人了,但是还没有拥有超人的任何能力!
解决这个问题的办法就是使用-l
(或--login
)选项。
$ ls
/home/scott/libby
$ whoami
scott
$ su -l gromit
Password:
$ whoami
gromit
$ ls
/home/gromit
这个例子看起来与2.41节中的例子大概相同,但是本质内容区别很大。事实是你现在位于gromit
的home目录,这就证明确实发生了变化。-l
选项告诉su
命令使用一个登录shell,好像gromit
真正登录到机器中一样。现在你用的是gromit
的名字,使用的也是gromit
的环境变量,还位于gromit
的home目录(就是gromit
初次登录到这台机器后所在的位置)。这次就好像既穿上了超人的衣服,又拥有了超人一跃冲天的超能力。