寫在前面
如果你不清楚su和su -切換用戶的區別,你一定會遇到在使用su切換用戶執行命令出現報錯"command not found"感到驚訝。分明之前這個指令執行的好好的,為什么現在就報錯了呢?關鍵原因就在於你不清楚su和su -命令使用的區別。
su與su -區別
su和su - 命令使用最主要的區別主要是涉及login-shell和non-login shell的變量讀取方法,兩種不同的變量讀取方法導致執行用戶切換后HOME/PATH/USER/MAIL等變量不同。
下面我們通過實例再具體展開講述這兩者間的區別。
su切換用戶
划重點:
(1)PATH變量沒有切換成新用戶root,還是dmtsai用戶的。su切換新用戶后的PATH變量不包含/sbin、/usr/sbin等目錄。
(2)PWD目錄沒有發生切換。
(3)用戶身份發生切換,切換成root。但是USER變量還是切換前用戶。
su - 切換用戶
划重點:
(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 等變量都轉成新用戶的環境。也就不會出現意料之外的事情了。