組態檔可分為兩個部份:
第一個部份是整個系統的,其檔案通常放在 /etc 目錄內,系統上的 Bash 使用者會在登入時自動載入設定檔的內容.
/etc/profile
Debian 在這個檔案內設定了最基本的路徑(PATH)、提示字串1(PS1)及檔案建立遮罩(umask).
/etc/bash.bashrc
Debian 在這個檔案內設定讓 Bash 在每次執行一個指令後都會重新檢查視窗的大小,如有必要它會自動更新 LINES 與 COLUMNS 這兩個變數.
這檔案裡面還有一個相當酷的功能預設並未開啟,就是 Programmable Completion (可程式化的自動完成功能 ?)
使用方法: $ apt-cache se[TAB] 它就會自動幫你接著完成 arch 來組成 search 這個字囉,很棒吧
第二個部份則為個人的,其檔案是放在個人目錄內通常為隱藏檔,只有該使用者在登入時會才會載入.
~/.bash_profile
使用者登入後 /etc/profile 會先被執行,緊接著就是執行 ~/.bash_profile,其差異就如同上面的說明只會對使用者產生影響並非對所有的 Bash 使用者產生影響.
Debian 在這個檔案中加入自動偵測 ~/.bashrc 的功能,如檔案存在則自動載入,另外讓使用者能加入一些自己的指令路境 (PATH) 及手冊 (Manual) 路境,不過預設並未開啟.
~/.bashrc
Debian 在這個檔案中加入了一些較為個人的功能設定,如可將指令歷史清單中已有相同指令存在時則不加入的設定
將 # 字符號去除即開啟這個功能
# export HISTCONTROL=ignoredups
以即讓 ls 指令有彩色輸出效果和一些讓使用者能更加方便使用系統的指令別名 (alias),
這邊也有載入 Programmable Completion 的選項,如果 /etc/profile 檔案中並沒有開啟這個功能的話,你可以在這邊自行開啟,將下面這三行 # 字符號去除即可
# if [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
# fi
~/.bash_logout
Debian 預設是沒有這個檔案存在的,其作用為當你登出 Bash 時,系統會載入這個檔案內並執行其內容.
對這些檔案有了基本的認識後,我們就可以對系統做出進一步的設定囉
要做出進一步的設定對於變數 (VARIABLES) 這玩意應該要有一些基本的認識,在 Bash 的世界裡變數也可以分為兩個部份,分別為環境變數與自訂變數,當中環境變數大部份都在登入系統時即由系統自行產生了,部份則是在 /etc/profile 中定訂出來,如指令路徑、提示字串1等等,自訂的變數則大部份都設定於 ~/.bashrc 中,其兩者的差異是環境變數的影響對像為整個系統上的 Bash 使用者,自訂變數則是只對該使用者有所影響而已.
$PATH 變數
這個變數指定出指令存放的位置,讓 Bash 可以找的到它而不需要輸入很長的完全路境,當中每個存放指令的位置以需以 : (冒號)隔開.
- 代碼: 選擇全部
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
那要如何新增一個路境呢 ?
- 代碼: 選擇全部
$ export PATH=$PATH:/我的/新路境/位置
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/我的/新路境/位置
$PS1 變數
這個變數為主要提示字串,通常我們也都只會用到這一個
一般都會在 /etc/profile 中指定,但你可以在 ~/.bashrc 中另行指定, ~/.bashrc 中另行指定時會有推翻 /etc/profile 的效果.
讓我們先看一下 Debian 的預設值:
- 代碼: 選擇全部
$ echo $PS1
\u@\h:\w\$
代表的意義如下
- 代碼: 選擇全部
\u 使用者名稱
\h 主機名稱 (截取至第一個 . 之前 ? 試了一下跟 \H 沒什麼不同)
\w 目前工作目錄
\$ 判斷你的 uid 是否為 0 (root),是的話出現 # 字符號,否則以 $ 字符號代替
基本上 Debian 預設的相當簡潔,下面列出其它 Debian 未使用的其它變數:
- 代碼: 選擇全部
\a 讓 Bash 發出嗶聲..(每執行一個指令都會有聲音,很吵..)
\d 日期,其格式為 星期 月 日(例:四 10月 02)
\e 跳脫字元 (Escape Character),不清處其作用為何,不過用下面的方法試了一下卻發現使用者名稱第一個字被吃了
export PS1='\e\u@\h:\w\$ '
no@localhost:~$ (原為 dno@localhost:~$ )
\H 主機名稱
\j 背景執行中的指令數目 (包含執行中與已經停止的)
\l 目前終端機的名稱
\n 新行 (newline) 控制符號 (這個變數會讓 Bash 每執行一個指令後,自動空一行並等後使用者輸入下個指令)
\r carriage return 控制符號 (不清處做什麼用的)
\s Shell 名稱 例:bash dno@localhost:~$
\t 24 小時制的時間 時:分:秒 例:14:23:32
\T 12 小時制的時間 時:分:秒 例:02:23:32
\@ 12 小時制的時間並加入 AM (上午) 與 PM (下午), 時:分 ?M 例: 02:23 下午
\A 24 小時制的時間 時:分 例:02:23 下午
\u 目前使用者的名稱
\v 所使用的 Bash 版本
\V 所使用的 Bash 版本與修正 (Patch) 的層級
\W 目前所在目錄的基本名稱 (basename),請看以下兩個例子的示範:
$ pwd
/usr/share/doc/kernel-source-2.4.22
$ export PS1='\u@\h:\w\$ '
dno@localhost:/usr/share/doc/kernel-source-2.4.22$
$ export PS1='\u@\h:\W\$ '
dno@localhost:kernel-source-2.4.22$
\! 在指令 history 中的編號
\# 目前已執行指令的數目,當重新開啟一個 Bash 時,會重新計算.
\nnn 八進位 ASCII 控制碼
\\ 反斜線 \
\[ 起始一個由無法顯示字元所組成的序列,你可以使用這種方法來插入終端機控制序列
\] 結束一個由無法顯示字元所組成的序列.
對於提示字串有興趣的人可以參考Bash Prompt HOWTO
--------------------------------------------------
晚上再努力吧..怎麼以前不知道寫一篇文章是這麼的累..