1.路徑與指令搜尋順序
當(dāng)我們下達(dá)一個指令,計算機(jī)都是要在內(nèi)部搜尋這個指令對應(yīng)的操作,然后再執(zhí)行的。假如一個指令可以對應(yīng)很多種操作,那么計算機(jī)該怎么執(zhí)行?如果不理解? 那就舉個栗子:
我們都知道系統(tǒng)里面其實有很多l(xiāng)s 指令,假如我們曾經(jīng) alias ls='ls -l',當(dāng)我們在命令行內(nèi)輸入ls,計算機(jī)是執(zhí)行最原始定義的ls還是ls -l呢?所以這就關(guān)系到 指令搜尋順序 了,一般指令運作的順序可以這么看(簡單了解就好):
- 以相對/絕對路徑執(zhí)行指令,例如「/bin/ls」或「./ls」;
- 由 alias 找到該指令來執(zhí)行;
- 由 bash 內(nèi)建的(builtin)指令來執(zhí)行;
- 透過 $PATH 這個變量的順序搜尋到的第一個指令來執(zhí)行
2. bash 的進(jìn)站與歡迎訊息
大家在登陸終端機(jī)接口一般都會有進(jìn)站的歡迎信息,這個進(jìn)站信息其實都是可以編輯的。
定制屬于自己的進(jìn)站畫面:編輯這個文件/etc/issue
定制telnet遠(yuǎn)程登陸程序的登入畫面:編輯這個文件/etc/issue.net
讓使用者登陸后取得一些訊息:編輯這個文件/etc/motd(一定要以root的身份)
3.bash的環(huán)境配置文件
3.1 認(rèn)識 login 與 non-login shell
- login shell: 取得 bash 時需要完整的登入流程的,就稱為 login shell。
- non-login shell:取得 bash 接口的方法不需要重復(fù)登入的舉動。
不理解?沒關(guān)系,只要知道這兩種shell讀取的配置文件不一致也可以。
3.1-1 login shell 讀取的文件(2個)
(1) /etc/profile
這是每個使用者登入取得bash時一定會讀取的配置文件,所以如果想要幫所有使用者設(shè)定整體環(huán)境,就可以修改這份文檔(這個文件設(shè)定的變量主要有:PATH,MAIL,USER,HOSTNAME,HISTSIZE,unmask-root默認(rèn)022;一般用戶為002)
除此以外,/etc/profile它還會去呼叫外部的設(shè)定數(shù)據(jù),例如如下文檔中的數(shù)據(jù)
-
/etc/profile.d/*.sh
它的意思是指/etc/profile.d/文檔下的所有擴(kuò)展名為sh 的文件,這個目錄底下的文件規(guī)范了bash操作接口的顏色、語系、ll與ls指令的命令別名、vi 的命令別名、which 的命令別名等等。Tips : 如果你要幫所有使用者設(shè)定一些共享的命令別名時,可以在這個目錄底下自行建立擴(kuò)展名為.sh的文件,并將所需要的數(shù)據(jù)寫入即可。
/etc/locale.conf
悄悄告訴你:這個文件實際上是由??/etc/profile.d/*.sh中的/etc/profile.d/lang.sh呼叫進(jìn)來的,是我們決定 bash 預(yù)設(shè)使用哪種語系的重要配置文件(eg: LANG/LC_ALL等變量的設(shè)定)/usr/share/bash-completion/completions/*
同樣的,這個目錄底下的內(nèi)容都是??/etc/profile.d/*.sh中的/etc/profile.d/bash_completion.sh這個文件載入的。我們使用[tab]進(jìn)行命令補齊、檔名補齊、指令的選項/參數(shù)補齊功能,都是在這個目錄里找到相應(yīng)的指令來處理的。
其實 bash 的 login shell 讀取的整體環(huán)境配置文件其實只有/etc/profile,但是/etc/profile會呼叫出/etc/profile.d/文檔下的所有擴(kuò)展名為sh 的文件,而/etc/profile.d/文檔下部分?jǐn)U展名為sh的文件會繼續(xù)往外呼叫出其他的配置文件,這就使得我們的bash操作接口變得非常友善~
(2)~/.bash_profile
bash在讀完了整體環(huán)境設(shè)定的/etc/profile并呼叫其他配置文件之后,接下來會讀取使用者的個人配置文件。按照優(yōu)先順序依次為:
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
注意:只會讀取三個文件中的一個
通過cat 來看一下~/.bash_profile這個優(yōu)先級最高的文件吧:
bash_profile一般都是這個內(nèi)容
我們需要了解這份文檔中的兩個內(nèi)容:
<1> PATH 這個變量
其實 PATH 在 /etc/profile 當(dāng)中已經(jīng)設(shè)定過了(看??(1) /etc/profile),所以這里出現(xiàn)的PATH就以 累加的方式 ,增加 用戶家目錄下的 ~/bin 為額外的執(zhí)行文件放置目錄。所以你可以將執(zhí)行文檔放在自己HOME目錄對應(yīng)的目錄下直接執(zhí)行,而不用使用絕對/相對路徑。
<2> if ... then ...
這是什么東西?這段話的內(nèi)容是“判斷HOME目錄下的~/.bashrc是否存在,如果存在,則讀入~/.bashrc的設(shè)定”
總結(jié)一下,整個login shell 的讀取流程是這樣的:

實線的方向是主線流程,虛線的方向則是被呼叫的配置文件。
Tips:
由于上面提到的這些配置文件都是在取得 login shell 的時候才會讀取的配置文件,所以,如果你將自己的偏好設(shè)定寫入對應(yīng)文件后,通常要注銷再登陸后,設(shè)定才會生效。這么做太麻煩了,可以使用命令行中輸入source 配置文檔名的方法,不需要注銷,便立即將剛剛設(shè)定的內(nèi)容讀進(jìn)目前的環(huán)境中。
3.1-2 non-login shell 讀取的文件
- ~/.bashrc
當(dāng)我們?nèi)〉?non-login shell時,該bash配置文件僅會讀取~/.bashrc!
除此之外,CentOS 7.x 還會主動呼叫 /etc/bashrc,它會幫bash 定義下面的數(shù)據(jù)
1.依據(jù)不同的UID規(guī)范出 umask 的值
2.依據(jù)不同的UID規(guī)范出提示字符(PS1變量)
3.呼叫/etc/profile.d/*.sh的設(shè)定
Tip:
假如不小心把重要的~/.bashrc刪掉了,補救措施:復(fù)制 /etc/skel/.bashrc到家目錄,稍微修訂一些你想要的內(nèi)容,source 去呼叫一下~/.bashrc??梢宰鳛橐粋€填坑的方法~
3.2 其他一些影響bash操作的配置文件
- /etc/man_db.conf
相關(guān)作用:它規(guī)范了使用man的時候, man page的路徑去哪里尋找 - ~/.bash_history
相關(guān)作用:它記錄歷史命令,同時記錄歷史命令的數(shù)量與 HISTFILESIZE這個變數(shù)有關(guān) - ~/.bash_logout
相關(guān)作用:文件記錄了我們注銷bash后,系統(tǒng)幫我們做完什么動作后才離開
