Linux中rc.local、profile、bashrc、bash_profile之間的區別和聯繫

使用者自訂啓動啓動程序 (/etc/rc.d/rc.local)

在完成默認 runlevel 指定的各項服務的啓動後,如果我還有其他的動作想要完成時,舉例來說, 我還想要寄一封 mail 給某個系統管理帳號,通知他,系統剛剛重新啓動完畢,那麼是否應該要製作一個 shell script 放置在 /etc/init.d/ 裏面,然後再以連結方式連結到 /etc/rc5.d/ 裏面呢?呵呵!當然不需要!還記得上一小節提到的 /etc/rc.d/rc.local 吧? 這個文件就可以運行您自己想要運行的系統命令了。

也就是說,我有任何想要在啓動時就進行的工作時,直接將他寫入 /etc/rc.d/rc.local , 那麼該工作就會在啓動的時候自動被加載喔!而不必等我們登陸系統去啓動呢! 是否很方便啊!一般來說,鳥哥就很喜歡把自己製作的 shell script 完整檔名寫入 /etc/rc.d/rc.local ,如此一來,啓動就會將我的 shell script 運行過,真是好棒那!

  When  bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profileif that file
       exists.  After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is read-
       able.  The --noprofile option may be used when the shell is started to inhibit this behavior.
       以上是man bash的原文. 不知道你看得懂不. 
       意思就是login shell會執行/etc/profile. 所以/etc/profile是影響所有用戶的. 而且是登錄的時候最先執行的. 然後依次~/.bash_profile, ~/.bash_login , ~/.profile. 
       rc.local應該是比/etc/profile更早, 登錄之前就執行了.

/etc/profile:此文件爲系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.並從/etc/profile.d目錄的配置文件中搜集shell的設置.

英文描述爲:

# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

所以如果你有對/etc/profile有修改的話必須得重啓你的修改纔會生效,此修改對每個用戶都生效。

/etc/bashrc:爲每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取.

英文描述爲:

# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

如果你想對所有的使用bash的用戶修改某個配置並在以後打開的bash都生效的話可以修改這個文件,修改這個文件不用重啓,重新打開一個bash即可生效。

~/.bash_profile:每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件.

此文件類似於/etc/profile,也是需要需要重啓纔會生效,/etc/profile對所有用戶生效,~/.bash_profile只對當前用戶生效。

~/.bashrc:該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該文件被讀取.(每個用戶都有一個.bashrc文件,在用戶目錄下)

此文件類似於/etc/bashrc,不需要重啓生效,重新打開一個bash即可生效,  /etc/bashrc對所有用戶新打開的bash都生效,但~/.bashrc只對當前用戶新打開的bash生效。

~/.bash_logout:當每次退出系統(退出bash shell)時,執行該文件.

另外,/etc/profile中設定的變量(全局)的可以作用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承/etc/profile中的變量,他們是"父子"關係.
_________________________________________________________________________________________~/.bash_profile 是交互式、login 方式進入bash 運行的;
~/.bashrc 是交互式 non-login 方式進入bash 運行的;
通常二者設置大致相同,所以通常前者會調用後者。

>不過這要區別登錄前,也就是說,在登陸之前,系統處於開機啓動的流程中,會自動的處執行一系列的腳本文件,以便設置好系統的環境參數,這個過程並不叫做啓動完畢,真正的啓動完畢是在出現登陸界面時候,在此之前只設置系統的參數,並不會去設置個人用戶的參數,個人用戶的參數要在用戶輸入用戶名密碼以及通過驗證後才設置。


①對於單個用戶的,即 :

  • 對象——————單個用戶--------局部---------對於一些局部任務如果要它登陸後立即執行就放在~/.bash_profile腳本中。

~/.bash_profile 這個腳本設置了用戶的登陸環境,當用戶登陸後,就會立即執行該腳本下了內容,而且只執行一次。

~/.bashrc:該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該文件被讀取,每打開一次shell就執行一次,如果在這個腳本中加入了/usr/bin/gnome-terminal 這條語句後 系統就會陷入死循環。

①對於系統所有用戶的,即 :

  • 對象——————系統或者系統的所有用戶---------全局-----對於全局任務如果要所有用戶中不管哪個用戶登陸後立即執行就放在/etc/profile腳本中。

/etc/profile

/etc/bashrc

上面的這些並不是等於開機自啓動的:如:chkconfig 命令以及,rc.d等文件腳本。這些腳本是在沒有登陸之前就已經執行完畢了。

————————————————————————————————————————————

wKioL1NuVrWj1h-6AADPUIb6mGA203.jpg


當用戶輸入帳號密碼登錄一個用戶終端的時候,那麼,首先,系統會讀取文件/etc/profile,加載其中的配置,/etc/profile這個文件又會調用幾個文件,包括/etc/sysconfig/i18n這個文件用來設置終端的語言信息,/etc/inputrc這個文件主要設置終端的輸入方式,比如Ctrl+C之類的情況,還有一個比較重要的就是/etc/profile.d/目錄下的腳本文件,那麼如果真的需要修改一些全局的bash環境的話,最好是將環境寫成一個shell腳本,放在/etc/profile.d/目錄中,那麼登錄的時候,/etc/profile會自動去調用。

那麼,面說到的是用戶登錄的時候 ,執行的全局文件,那麼在自己的家目錄下,還會執行個人的shell配置文件,主要有.bash_profile,.bash_login,.profile這三個文件,一般情況下,你的家目錄下應該只有.bash_profile這個文件,因爲系統只執行這三個文件中的一個,如果沒有找到.bash_profile,纔會繼續搜索.bash_login,沒有的話,搜索.profile。

用vim編輯器打開.bash_profile,可以看到,這個文件又會調用~/.bashrc這個文件,可以看到一些alias設置,所以,如果你需要設置你自己個人的一些alias和一些環境變量的時候,強烈建議寫在這個文件中或者~/.bash_profile中。但是還是寫在~/.bashrc中比較好,爲什麼呢?因爲有一種情況,比如你在X window下,直接開啓一個命令行終端的話,是不用輸入帳號密碼登錄的,都有印象吧,那麼在這個情況下,實際是不會去讀取/etc/profile,~/.bash_profile這些文件的,而是直接讀取./bashrc這個文件,所以,如果你想你的環境設置在任何時候都有效的話,建議寫入這個文件。

    最後再提一點,那麼看~/.bashrc這個文件中的內容,可以看到,這個文件其實還會調用/etc/bashrc文件的內容,用vim打開/etc/bashrc這個文件看看,會發現在這個文件的最後又會調用/etc/profile.d/裏面的sh文件,呵呵,很有趣吧~~~其實Linux中很多都是這樣,最後都是殊途同歸,到一個文件中。


_______________________________________個人總結_______________________________________________________

/etc/profile——登錄shell讀取,系統所有,僅執行一次

~/.bash_profile——登錄shell讀取,個人所有,僅執行一次,該文件會遞歸讀取~/.bashrc

/ect/bashrc——Ubuntu沒有此文件,與之對應的是/ect/bash.bashrc,全局(公有)的bash執行時,不管是何種方式,都會讀取此文件。

~/.bashrc——非登錄shell讀取(每打開一個終端都會讀取),個人所有


若想個人配置在任何時候都生效,建議個人配置寫在~/.bashrc(因爲~/.bash_profile也讀取前者)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章