2.42 变更到其他用户,包括其环境变量

su -l

只有在知道用户密码的情况下,su命令才起作用。没有用户密码,就不能切换用户。如果正常运行,你就会切换到用户在/etc/passwd文件中指定的shell,如shtcsh或者bash。大多数Linux用户只使用默认的bash shell,所以你可能不会看到有任何区别。在上一个例子中也要注意的是,当改变用户时目录并没有发生变化。从本质上来说,你已经变成了gromit,但使用的仍然是scott的环境变量。这好比是你发现了超人的衣服并穿上了它,看起来你像个超人了,但是还没有拥有超人的任何能力!

解决这个问题的办法就是使用-l(或--login)选项。

  1. $ ls
  2. /home/scott/libby
  3. $ whoami
  4. scott
  5. $ su -l gromit
  6. Password:
  7. $ whoami
  8. gromit
  9. $ ls
  10. /home/gromit

这个例子看起来与2.41节中的例子大概相同,但是本质内容区别很大。事实是你现在位于gromit的home目录,这就证明确实发生了变化。-l选项告诉su命令使用一个登录shell,好像gromit真正登录到机器中一样。现在你用的是gromit的名字,使用的也是gromit的环境变量,还位于gromit的home目录(就是gromit初次登录到这台机器后所在的位置)。这次就好像既穿上了超人的衣服,又拥有了超人一跃冲天的超能力。