reference document
《鳥哥的linux私房菜》
login 與 non-login shell
在開始介紹 bash 的配置檔案前,我們一定要先知道的就是 login shell 與 non-login shell! 重點在於有沒有登入 (login) 啦!
login shell:取得 bash 時需要完整的登入流程的,就稱為 login shell。舉例來說,你要由 tty1 ~ tty6 登入,需要輸入使用者的賬號與密碼,此時取得的 bash 就稱為『 login shell 』囉;
non-login shell:取得 bash 介面的方法不需要重複登入的舉動,舉例來說,(1)你以 x window 登入 linux 後, 再以 x 的圖形化介面啟動終端機,此時那個終端介面並沒有需要再次的輸入賬號與密碼,那個 bash 的環境就稱為 non-login shell了。
為什麼要介紹 login, non-login shell 呢?這是因為這兩個取得 bash 的情況中,讀取得配置檔案資料並不一樣所致。 由亍我們需要登入系統,所以先談談 login shell 會讀取哪些配置檔案?一般來說,login shell 其實只會讀取這兩個配置檔案:
login shell:
1. /etc/profile:這是系統整體的設定,你最好不要修改這個檔案;
2. ~/.bash_profile 或 ~/.login 或 ~/.profile:屬於使用者個人設定,你要改自己的資料,就寫入這裡!
non-login shell 該 bash 配置檔案僅會讀取 ~/.bashrc 而已
bash 環境變數解釋
1. home
代表使用者的主目錄。還記得我們可以使用 cd ~ 去到自己的主目錄嗎?或者利用 cd 就可以直接回到使用者主目錄了。那就是取用這個變數啦~ 有很多多程式都可能會取用到這個變數的值!
2. shell
告知我們,目前這個環境使用的 shell 是哪支程式? linux 預設使用 /bin/bash
3. histsize
這個與『歷史命令』有關,亦即是, 我們曾經下達過的指令可以被系統記錄下來,而記錄的『筆數』則是由這個值來設定的。
4. mail
當我們使用 mail 這個指令在收信時,系統會去讀取的郵件信箱檔案 (mailbox)。
5. path
就是執行檔案搜尋的路徑 ~目錄與目錄中間以冒號(:)分隔, 由亍檔案的搜尋是依序由 path 的髮量內的目錄來查詢,所以,目錄的順序也是重要的哦。
6. lang
這個重要!就是語系資料
7. random
這個玩意兒就是『隨機隨機數』癿變數!目前大多數的 distributions 都會有隨機數生成器,那就是 /dev/random 這個檔案。 我們可以透過這個隨機數檔案相關的變數($random) 來隨機取得隨機數值
8. ps1
提示符的設定
\d :可顯示出『星期 月 日』癿日期格式,如:"mon feb 2"
\h :完整的主機名。舉例來說,鳥哥的練習機為『www.vbird.tsai』
\h :僅取主機名在第乙個小數點之前的名字,如鳥哥主機則為『www』後面省略
\t :顯示時間,為 24 小時格式的『hh:mm:ss』
\t :顯示時間,為 12 小時格式的『hh:mm:ss』
\a :顯示時間,為 24 小時格式的『hh:mm』
\@ :顯示時間,為 12 小時格式的『am/pm』樣式
\u :目前使用者的賬號名稱,如『root』;
\v :bash 的版本資訊,如鳥哥的測試主機板本為 3.2.25(1),僅取『3.2』顯示
\w :完整的工作目錄名稱,由根目錄寫起的目錄名稱。但家目錄會以 ~ 取代;
\w :利用 basename 凼數取得工作目錄名稱,所以僅會列出最後乙個目錄名。
\# :下達的第幾個指令。
\$ :提示字元,如果是 root 時,提示字元為 # ,否則就是 $
case $term in***************====special environments vars***************xterm*)
ps1='$@$: $^g$@$ !$'
;;*)
ps1='\u@$: \w$' ;;
esac
9. $
(關於本 shell 的 pid)
pid (process id)
e.g. echo $$
10. ?
(關於上個執行指令的回傳值)
e.g. echo $?
在 bash 裡面這個變數可重要的很! 這個變數是:『上乙個執行的指令所回傳的值』, 上面這句話的重點是『上乙個指令』不『回傳值』兩個地方。當我們執行某些指令時, 這些指令都會回傳乙個執行後的**。一般來說,如果成功的執行該挃令, 則會回傳乙個 0 值,如果執行過程發生錯誤,就會回傳『錯誤**』才對!一般就是以非為 0 的數值來取代。
11. ostype, hosttype, machtype
主機硬體與核心的等級
使bash更好地為我們服務,我們需定製bash shell環境,這裡講述bash使用者環境配置
bash_profile、.bashrc、和.bash_logout
上面這三個檔案是bash shell的使用者環境配置檔案,位於使用者的主目錄下。其中.bash_profile是最重要的乙個配置檔案,它在使用者每次登入系統時被讀取,裡面的所有命令都會被bash執行。.profile(由bourne shell和korn shell使用)和.login(由c shell使用)兩個檔案是.bash_profile的同義詞,目的是為了相容其它shell。在debian中使用.profile檔案代替.bash_profile檔案。
.bashrc檔案會在bash shell呼叫另乙個bash shell時讀取,也就是在shell中再鍵入bash命令啟動乙個新shell時就會去讀該檔案。這樣可有效分離登入和子shell所需的環境。但一般來說都會在.bash_profile裡呼叫.bashrc指令碼以便統一配置使用者環境。
.bash_logout在退出shell時被讀取。所以我們可把一些清理工作的命令放到這檔案中。
在/etc目錄的bash.bashrc和profile是系統級(全域性)的配置檔案,當在使用者主目錄下找不到.bash_profile和.bashrc\時,就會讀取這兩個檔案。.bash_history是bash shell的歷史記錄檔案,裡面記錄了你在bash shell中輸入的所有命令。可通過hissize環境變數設定在歷史記錄檔案裡儲存記錄的條數。alias l = 『ls -l』是設定別名的語句,把它放在這些配置文件中就可使我們能用簡單的』l'命令,代替』ls -l』命令。
當我們修改了這些配置件後,可用source .bash_profile命令使它修改內容馬上生效。
選項
bash shell中的選項可控制shell的行為和功能,我們可以通過shopt命令來設定。使用set命令也可以,但它已被shopt替代,但為了向下相容,set命令還是可以使用的。使用不帶引數的shopt命令可以列出當前shell中只能由shopt設定的選項,用shopt -o可列出可由set命令設定的選項。
下面是一些可由set命令基本的選項,預設是關閉的。
emacs 進入emacs編輯模式
vi 進入vi編輯模式
ignoreeof 不允許單獨使用ctrl_d退出的用法,要使用exit。與ignoreeof=10等價
noclobber 不允許重定向覆蓋已存在檔案
noglob 不允許擴充套件檔名萬用字元
nounset 使用未定義的變數時給出錯誤
下面是一些只能由shopt命令設定的選項。
cdspell 自動改正cd命令引數中的小錯誤
hostcomplete 以@開頭時,按tab鍵可進行主機名的自動完成
dotgblob 以點開始的檔名被包含在路徑名擴充套件中
mailwarn 顯示郵件警告資訊
shopt命令的選項如下:
-p 顯示可設定選項及當前取值
-s 設定每一選項為on
-u 設定每一選項為off
-q 不輸出資訊
-o
shell 變數 環境變數 bash
1.在bash中,shell變數可以直接通過通過如下形式建立 name value 2.shell變數不能被子程序 字shell 繼承,通過export,可以令shell變數成為環境變數 此時會出現在env的輸出中 環境變數可以被子程序繼承 3.shell中檢視當前所有環境變數用命令 env或者pr...
Bash的環境變數
一 環境變數與使用者自定義變數的區別 使用者自定義變數只在當前的shell中生效 環境變數在當前shell和這個shell的所有自shell中生效 對系統生效的環境名和變數作用是固定的。環境變數和使用者自定義變數最主要的區別在於,環境變數是全域性變數,而使用者自定義變數是區域性變數。使用者自定義變數...
bash程式設計系列 環境變數
在 bash 和幾乎所有其它 shell 中,使用者可以定義環境變數,這些環境變數在以 ascii字串儲存。環境變數的最便利之處在於 它們是 unix 程序模型的標準部分。這意味著 環境變數不僅由 shell指令碼獨用,而且還可以由編譯過的標準程式使用。當在 bash 中 匯出 環境變數時,以後執行...