歡迎您光臨本站 註冊首頁

Linux的登陸腳本

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

看一篇debian的學習筆記裡面說,.bash_profile是bash全局設置文件,而.bashrc是當一個bash shell調用另一個bash shell時候讀取的設置。我在配置debian的時候,參照網上的一個做法,將/etc/.bash_profile裡面內容複製到/root/.bashrc內,並將下列反註釋掉

if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi

使root帳戶具有table補全的能力。

那麼,我的問題就在這裡,我登錄linux時候,直接登錄的root帳戶,並沒有調用其他的shell阿,那麼怎麼需要將這些複製到.bashrc中,並反註釋掉這些,才能具有補全作用?如果我直接將.bash_profile中的這幾句反註釋掉,是不是root帳戶也具有了補全的能力了?我安裝系統時候,新建了一個用戶,這個用戶並不需要這一步設置,就直接具有補全作用了,這個帳戶下的.bashrc有上面的內容了。這是為什麼?

達人,給我解釋一下把,多謝

回帖1

1. 首先要分清login shell和non-login shell, login shell是用戶登錄的時候啟動的帶身份驗證的shell, /etc/passwd中可以看到,username對應的shell name,常見的是bin/bash. 當login shell啟動后,會讀入兩個文件,/etc/profile 和用戶根目錄下的.bash_profile(如果沒有,會再執行~/.bash_login, ~/.profile).

2. shell還分互動式shell和非互動式shell, 顯然login shell也是一種互動式的shell。對於non-login的互動式shell, 啟動時會執行~/.bashrc,而~/.bashrc中又會去執行/etc/bashrc. 對於login shell,為了更一致一些所以會在~/.bash_profile中執行~/.bashrc,所以對.bashrc的修改能影響所有的互動式shell。

3. 新添加一個用戶時,會添加一個記錄到/etc/passwd,創建用戶的home目錄,將/etc/skel目錄下的內容,拷貝到home目錄下,skel中包含了用戶home目錄的基本文件和目錄結構,包括.bashrc.(當然這些都是可以用戶自定義的,如useradd -k -m 什麼的)。

回帖2:

所以
1 .bashrc確實是為non-login 互動式shell準備的。login shell並不直接讀取,但是在.bahs_profile中會執行。
2 對於login shell改bash_profile當然也可以。所以是修改.bash_profile還是.bashrc,要看具體的情況。
3 至於新建用戶的問題,看看/etc/skel。

當然最有效的就是把.bash_profile改了,登錄看看,往/etc/skel里添加幾個文件,改改.bashrc,再創建一個新用戶看看。鑒於linux的多樣性,實踐+理解才是王道。

[火星人 ] Linux的登陸腳本已經有373次圍觀

http://coctec.com/docs/linux/show-post-187591.html