写在前面

  如果你不清楚su和su -切换用户的区别,你一定会遇到在使用su切换用户执行命令出现报错"command not found"感到惊讶。分明之前这个指令执行的好好的,为什么现在就报错了呢?关键原因就在于你不清楚su和su -命令使用的区别。

su与su -区别

  su和su - 命令使用最主要的区别主要是涉及login-shell和non-login shell的变量读取方法,两种不同的变量读取方法导致执行用户切换后HOME/PATH/USER/MAIL等变量不同。

  下面我们通过实例再具体展开讲述这两者间的区别。

  su切换用户

Linux中su和su -区别,别再傻傻分不清-LMLPHP

  划重点:

  (1)PATH变量没有切换成新用户root,还是dmtsai用户的。su切换新用户后的PATH变量不包含/sbin、/usr/sbin等目录。

  (2)PWD目录没有发生切换。

  (3)用户身份发生切换,切换成root。但是USER变量还是切换前用户。

  su - 切换用户

Linux中su和su -区别,别再傻傻分不清-LMLPHP

   划重点:

  (1)PATH变量切换成新用户root,包含/sbin、/usr/sbin等目录。

  (2)PWD目录切换成root用户家目录。

  (3)用户身份发生切换,且USER变量为root。

回归问题 

  现在知道为什么su切换用户后执行命令依然会出现报错"command not found"的原因了吧。linux执行命令会通过PATH变量中的目录依次查找,当路径中不包含/sbin、/usr/sbin等目录时自然就找不到。

总结

  如果想要完整的切换到新用户环境,必须使用su -切换 ,这样才会连同PATH/USER/MAIL 等变量都转成新用户的环境。也就不会出现意料之外的事情了。

08-16 16:16