1. 程式人生 > >sudo和用su切換至root使用者執行命令的區別

sudo和用su切換至root使用者執行命令的區別

我碰到了這樣一個問題,在執行一個國產的java應用伺服器軟體啟動一個java web伺服器時,用su進入root使用者可以正常啟動服務,但是用sudo不能正常啟動,將啟動的指令碼加到rc.local中也不能正常啟動,百思不得騎姐,後來想是不是因為環境的問題。

我懷疑用su切換至root使用者後會初始化一些特殊的環境,但是用sudo執行程式的時候沒有經過此種類型的初始化,後來用sudo env和su 完全登入root使用者後執行env看了一下環境變數的設定,確信了這一點。原來是用sudo執行命令的時候很多環境變數都沒有 export 出來,包括我的應用伺服器軟體所必需的JAVA_HOME等JAVA相關的環境變數,系統配置這些環境變數是在系統的/etc/bashrc裡初始化的,需要登入bash才能夠完成。當然直接在rc.local裡執行的程式也是不會初始化這些環境變數的。

因此,用sudo和su進入root使用者執行程式的一個最大的區別是:su切換至root使用者會提供一個完全登入的SHELL環境,而sudo執行命令只會有一些預設的環境設定,而一些與SHELL相關的環境設定是不會被初始化的。這在執行java伺服器等軟體的時候尤其要注意。