Linux中su和su -區別,別再傻傻分不清
寫在前面
如果你不清楚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 等變數都轉成新用戶的環境。也就不會出現意料之外的事情了。