1. 程式人生 > >Linux中su和su -區別,別再傻傻分不清

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 等變數都轉成新使用者的環境。也就不會出現意料之外的事情