login shell 和 non-login shell 的相關問題

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   io   strong   檔案   

問題:通過su命令切換使用者並沒有進入該使用者的shell環境。這是為什嗎?    要解決這個問題,我們必須清楚用login shell 和non-login shell的區別。 
  • login shell:去的bash時需要完整的登入流程。就是說通過輸入帳號和密碼登入系統,此時取得的shell稱為login shell
  • non-login shell:取得sbash介面的方法不需要重複登入的舉動。如以X Window登入登入linux後,再以X的圖形介面啟動終端機,此時那個終端機並沒有需要輸入帳號和密碼,那個bash環境就是non-login shell。在原本的bash環境下再次執行bash命令,同樣也沒有輸入帳號密碼就進入新的bash環境(前一個bash的子進程),新的bash也是non-login shell。

    那麼,到底兩者的區別在哪裡?

   login shell:此種方式登入時,shell會重新讀取/etc/profile和~/.bash_profile來應用新的環境變數。
   non-login shell:此時shell不會讀取/etc/profile和~/.bash_profile,而是讀取~/.bashrc來應用新的環境變數。話說標題是區別與影響,影響的東西自然源於區別。回到文章開頭的問題,su切換使用者沒有擷取使用者的環境(當時用的命令是"su xxoo",這裡xxoo為要切換的使用者,以root身份執行的此命令),看來問題就在這倆login方式,根據現象我們可以判斷 su xxoo執行了non-login shell。

    為了驗證上面的判斷,我們查看了su命令的簡單協助:

[[email protected] ~]# su --help
 Usage: su [OPTION]... [-] [USER [ARG]...]
 Change the effective user id and group id to that of USER.
 
   -, -l, --login               make the shell a login shell 


很明顯,我的判斷是正確的,預設情況下是執行的non-login shell,因為要執行login shell需要在su後面添加參數"-"或"-l"或"--login"。所以要在su之後擷取使用者的環境變數,需要執行類似"su - xxoo"之類的命令。

  另外還有三個提示:

 

PS1:bash在讀取/etc/profile後會讀取各賬戶的個人設定檔,所讀取的個人設定檔主要有三個:~/.bash_profile,~/.bash_login,~/.profile。其實bash在讀取的時候只會讀取的上述三個檔案的其中一個,而讀取的順序則就是上面的順序。也就是說bash會依次尋找上述三個個人設定檔,且找到一個後,後續的檔案便不再讀取。

PS2:當以non-login shell登入時,如果希望擷取使用者的環境變數,執行"source ~/.bash_profile"即可(.bash_profile根據情況也可能是.bash_login或.profile),而其中source可以用小數點替換,即"source ~/.bash_profile"等價於". ~/.bash_profile"。source命令的解釋可以自行搜尋。

PS3:其實有的linux發行版的login shell也會讀取.bashrc檔案,如Fedora11中執行 "vim ~/.bash_profile"會發現 "if [ -f ~/.bashrc ]; then . ~/.bashrc fi"。這裡就使用了PS2的提到的用小數點替換source特性,即在./bash_profile會讀取執行.bashrc檔案。

轉自:http://blog.sina.com.cn/s/blog_59c0a56201016im6.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.