續Linux Bash學習(五):特殊檔案、別名、選項和參數
本文也即《Learning the bash Shell》3rd Edition的第三章Customizing Your Environment之讀書筆記二,但我們將不限於此。設定一個好的使用者環境,對我們開發是非常關鍵的。在這一章節中,從四個方面進行介紹:特別的檔案,別名,選項,參數。上回學習到參數設定的部分。繼續……
參數設定
命令尋找路徑
PATH儲存命令尋找檔案,可以用echo $PATH來查看。命令都是執行檔案,它所在的目錄如果不在PATH內,在執行的時候必須指出檔案所在目錄。PATH裡面可包含多個檔案目錄,之間用“:”來分割,例如/bin:/usr/bin:/usr/local/bin:/usr/X386/bin
。它們是由先後順序的,我們敲入一個命令,將按順序進行尋找,直至找到。
有一些命令是已經編譯在Linux中的,例如cd,echo,這些命令不是通過檔案執行的命令。我們有時需要增加這些路徑,例如我們將一些執行檔案放入~/bin中,我們希望登入的時候能夠直接運行,而不需要指出路徑。我們在.bash_profile檔案的最後加入PATH=$PATH:/home/wei/bin
,請注意這裡的順序,為了避免我們自己目錄下的命令幹擾系統命令(同時也可能引起系統安全隱患),我們一般都將新增的路徑放置最後。如果發生衝突,而我們希望使用放置在後面目錄的命令,在執行是需要執行路徑,例如在~/bin/more,這個命令和系統命令衝突,在執行時使用$~/bin/more
。
命令hashing
為了提高在PATH路徑中查詢命令的速度,Linux採用了命令hashing的方式。當shell在PATH中找到一個命令時,將這個命令放入雜湊表。當再次使用命令時,將先在雜湊表中進行查詢,可以用hash
命令來查看當前的雜湊表,裡面不僅包括命令的完整路徑,還包括在本次login中使用的次數。可以用hash -r
來清除整個雜湊表,用-d
來刪除某個命令,用-p
來加入某個命令(即使這個命令不存在)。在環境中可以通過hashall
的set來設定on或者off,但是我們沒有必要去修改它。
目錄查詢路徑
在cd命令的使用,如果非絕對路徑,會在當前路徑開始查詢,可以設定CDPATH來制定cd命令的查詢路徑。格式和PATH類似,使用“:”作為分割,並具有前後先後順序。例如我們設定CDPATH=:~/mybook
,注意不允許路徑以”/”開頭,也不允許以”./“”../“開頭。在上面例子中,我們敲入cd doc,現在目前的目錄尋找,如果沒有則接著在~/mybook下尋找doc目錄。一般來講,如果有一個目錄我們清楚去,我們通常將這個目錄設定為某個變數,例如 mydir=~/myproject/mylearning/,然後通過cd mydir來進入,而不採用CDPATH的方式。
其他參數
除了前面介紹的參數外,還有很多其他的參數,下面一些比較常見。
HOME
:使用者home目錄
SECONDS
:shell被invoke的時間間隔。
BASH
:當前使用的bash的路徑
BASH_VERSION
:shell的版本,例如我使用的cygwin的版本是3.2.49(22)-release
BASH_VERSINFO
:當前使用shell的主要版本資訊。例如我的版本是3
PWD
:當前路徑
OLDPWD
:上次cd前的路徑。
這幾個參數用於擷取數值,沒有案例用於設定。
使用者環境
變數
之前所講的參數其實也是環境變數,例如HOME,MAIL,PATH,PWD。如果將某個變數定義為環境變數,先是定義,然後export
var_names
,可以有多個變數的名字,可以與之前的賦值合一,放置為:export
var_name
=
value
。
有時候我們子希望某個變數值只在某個子進程中起作用,可以使用var_name=
value command
的方式。通常變數的定義可以在命令的任何部分,而不只限於開頭。
有一些不是build-in的變數,但是在使用的過程中已經約定俗成,具有特定的含義。包括下面:
- BASH:顯示當前shell的路徑,例如/usr/bin/bash
- COLUMNS:顯示的列數
- EDITOR:text editor的路徑
- LINES:顯示的行數
- SHELL:顯示login時所使用的shell的路徑,例如/bin/bash,和BASH一般來講是一樣的。
- TERM:當前teminal的類型,例如cygwin
這些有些已經成為我們的環境變數,有些是在/etc/profile設定的全域變數,我們也可以在.bash_profile中定義我們自己的。
在Linux中有個專門記錄使用者環境變數的檔案~/.bashrc,如果我們需要使用這個檔案,需要在.bash_profile中加入source .bashrc
,以保證在login的時候這些環境起效果。我們也可以在.bash_profile中設定,但是一般建議是將OPTIONS和alias放置在.bashrc中,而如果是少量的定義放置在.bash_profile,如果是大量變數的定義考慮放置在.bashrc中。
檔案的修訂
當我們修改.bash_profile,.bashrc當然可以使用vi等editor的方式,但是我們也可以簡單實用echo,將所需要的設定附加在檔案的最後,例如我們要設定PS1="/u /!—> ",我們需要將其加在.bash_profile的最後,使用
$ echo
'PS1="/u /!--> " ' >>
~/.bash_profile
注意這裡使用了單引號,這是為了避免裡面有$或者”或者其他所帶來的意義的變化。>>表示附加在檔案的最後,而>表示則覆蓋整個檔案。
相關連結:
我的Linux操作相關文章