在開始介紹bash的配置文件之前,需要了解的就是login shell與non-login shell。這兩個shell區別如下:
* login shell:就是取得bash時需要完整的登陸流程,就是login shell。如:由tty1登陸,需輸入用戶名和密碼,此時取得的bash就是login shell了。
* non-login shell:取得bash界面的方法不需要重複登陸的舉動。如:在x-window環境下來啓動終端,測試終端界面不需要再次輸入帳戶與密碼,那個bash的環境就是non-login shell了;或在原來的bash環境下再次下達bash的這個指令,也不需要輸入帳戶與密碼,那個第二個bash也是non-login shell
* 上面兩個shell不同之處在於這兩個取得的bash時,讀取的配置文件不同。
========================================
一、系統設置值 /etc/profile文件(login shell纔會讀取)
這是系統整體的配置文件,該配置文件可以利用登陸者的UID來決定很多重要的變量信息,這也是每個用戶登陸取得bash時一定會讀取的配置文件,所以想要對所有用戶設置整體環境,可對其進行修改。該文件設置的變量主要有:
* PATH:會根據UID決定PATH變量要不要含有sbin的系統指令目錄;
* MAIL:根據帳戶設置/var/spool/mail/賬號名稱;
* USER:根據用戶的賬號設置此變量內容;
* HOSTNAME:依據主機的hostname指令設置此變量的內容;
* HISTSIZE:歷史命令記錄數,一般設置成50,比較安全.
/etc/profile不止完成上述內容,還會調用外部的設置資料:
* /etc/inputrc:用來設置bash的熱鍵、[tab]是否有聲音等信息;
* /etc/profile.d/*.sh:該目錄下的文件規定了bash的操作界面、語系以及一些公共的命令別名。
* /etc/sysconfig/i18n:這個文件是由/etc/profile.d/lang.sh調用的,是決定bash默認使用何種語系的重要配置文件。
二、個人設置值 (login shell纔會讀)
bash在讀取完/etc/profile配置文件後,接下來會讀取用戶的個人配置文件。在login shell的bash環境中,所讀取的個人設定主要有三個,依序分別是:
~/.bash_profile、 ~/.bash_login、 ~/.profile
這三個個人設置文件在個人家目錄的幾個隱藏文件中.(上面幾個文件都是隱藏文件,需要使用ls -al才能顯示).
其實bash的login shell設置只會讀取上面三個文件中的一個,一般默認是以~/.bash_profile文件名存在.之所以有這麼多的文件,是因爲其他shell轉換過來的用戶的習慣,它們的讀取的順序依照上面 ~/.bash_profile --> ~/.bash_login --> ~/.profile的順序。也就是說,如果~/.bash_profile存在,那麼其他兩個文件不論是否存在均不會被讀取。若~/.bash_profile不存在纔會讀取~/.bash_login,而前兩者均不存在纔會讀取~/.profile文件。下面介紹一下~/.bash_profile文件的內容(以root用戶爲例):
[root@localhost ~]# cat ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then #判斷~/.bashrc是否存在,存在則執行該文件 . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin #根據用戶進行特定設置 export PATH unset USERNAME
~/.bash_history
默認情況下,歷史命令就記錄在這裏.而這個文件記錄能夠記錄在這裏.而這個文件能夠記錄多少數據,則與HISTORY變量有關.每次登錄bash後,bash會先讀取這個文件,將
所有的歷史命令讀入內存,因此,當我們登錄bash後,就可以查知上次使用過哪些命令.更多的歷史命令,請參考以前的內容.
~/.bash_logout
這個文件記錄"當我註銷後,系統再幫我做完什麼操作後才離開".可以讀取這個文件
的內容,默認情況下,註銷時,bash只是清掉屏幕的消息.不過,也可以將一些備份或者其他你認爲重要的工作寫在這個文件中.
三、 ~/.bashrc(non-login shell會讀取)
當你取得non-login shell時,該bash僅僅會讀取~/.bashrc文件,該文件內容爲:
[root@localhost ~]# cat ~/.bashrc # .bashrc # User specific aliases and functions #用戶的個人設置 alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # Source global definitions #整體環境設置 if [ -f /etc/bashrc ]; then . /etc/bashrc fi
在該配置文件中看到會讀取/etc/bashrc,那麼該文件主要用於:
* 依據不同的UID給出umask的值;
* 依據不同的UID給出提示字符(就是PS1變量)
* 調用/etc/profile.d/*.sh的設置
四、 歸納
最後我們來看一下整個的login shell的流程:
實線的方向是主要流程,虛線表示被呼叫的配置文件。從上面流程,我們可以知道在login shell的環境下,最終被讀取的配置文件是“~./bashrc”。所以,我們可以將個人需要的設置寫在該文件即可。
ps:
另外說明一下,由於/etc/profile與~/.bash_profile都是在取得login shell的時候纔會讀取配置文件,所以,如果你將自己的特定設置寫入上述文件後,通常需要退出後再登陸配置文件才能生效。其他我們可以留用source命令或小數點(.)將配置文件的內容讀入當前shell環境中。