bash初探與PATH詳解 1.認識bash這個shell 在/etc/shells裡面記錄有本機提供的shell,這些shell本身是二進位可執行檔。而/etc/passwd可以尋找固定使用者對應的啟動進入的shell,使用type可以查看bash命令的別名等資訊,使用alias可以進行命令的別名。 1.1shell變數功能 1.1.1變數的設定規則1)變數用=賦值(在終端中賦值的變數會在終端重啟後消失!!!,因為這個進程結束了)2)等號兩邊不能直接用空格符,若有空格需要用單引號或者雙引號雙引號內的字元保持原有的特性:“$pwd”表示當前路徑單引號內的字元為一般字元,用以保護空格和特殊字元避免受到shell的特殊解釋 :3)可使用轉意字元/將特殊字元轉換成一般字元4)在一串命令中,還需要調用其他命令提供資訊,可以使用反單引號~或者$Eg:version=$(uname-r) then echo $version5)為了增加變數內容,則可以使用$name累加內容Eg:PATH=”$PATH”:/home/bin6)該變數需要其他子進程執行,需要用export來使變數變成環境變數7)大寫為系統變數,小寫為使用者變數8)使用unset取消變數使用PATH=$PATH:/home/binPATH=”$PATH”:/home/binPATH=${PATH}:/home/bin效果是一樣的,但最後一個最好 1.1.2環境變數的功能:注意:自訂變數就是set命令所顯示的變數僅僅在當前進程可用,即使在子進程也不可以。而環境變數是可以在子進程使用的。 1.2命令別名與曆史變數1.2.1命令別名設定:alias,unalias注意alias在終端中直接設定是儲存在記憶體之中的,不會寫入到檔案;所以開啟另外一個終端並不會生效. 1.3bashshell的作業環境 1.3.1路徑與命令尋找順序命令的尋找執行順序:1)以相對、絕對路徑來執行命令:例如“/bin/ls”或者“./ls”(定向執行命令)2)以alias找到該命令來執行(保證名可以執行別名)3)由bash內建的(builtin)命令來執行4)通過$PATH這個變數的順序找到第一個命令來執行通過type可以尋找某個命令具體是來自於哪個地方,通過type–a可以尋找該命令的執行順序。 1.3.2bash的登入與歡迎資訊:/etc/issue,/etc/issue.net,/etc/motd 1.3.3bash的環境設定檔 所有的配置要在寫入設定檔以後,才能夠儲存在下一次使用。 Login與non-loginshell Loginshell會讀取的兩個設定檔: (1)/etc/profile:系統整體設定,最好不要修改,它會根據使用者id決定不同的配置 (2)~/.bash_profile或~/.Bash_login或者~/.profile:屬於個人設定/etc/profile(loginshell才會讀取)該檔案設定的變數主要有:PATH/MAIL/USER/HOSTNAME/HISTSIZE 調用的外部資料有:/etc/inputrc/etc/profile.d/*.shBash操作介面的顏色,語系、ll與ls命令的別名、vi的命令別名、which的命令別名等。如果你需要幫所有使用者佈建一些共用的命令別名時,可以在這個目錄下建立拓展名為.sh的檔案,並將所需要的資料寫入即可/etc/sysconfig/i18n~/.bash_profile(loginshell才讀取) Bash在讀完整體配置以後,會依次讀取個人配置:~/.bash_profile ~/.bash_login ~/.profile(這三個檔案只會讀取一個,就前原則)下面是loginshell的設定檔讀取流程: ~/.bashrc(non-loginshell會讀取)其他相關設定檔/etc/man.config:主要是MANPATH這個變數,~/.bash_history和~/.bash_logout 注意:每次重新開啟終端的時候,.bashrc會自動執行一次,而.bash_profile不會。因為~/.bash_profile 是互動式、login 方式進入 bash 啟動並執行~/.bashrc 是互動式 non-login 方式進入 bash 啟動並執行 2.PATH詳解 從第一部分中,我們已經知道bash設定檔的讀取流程是/etc/profile---->~/.bash_profle(~/.bash_login)(~/.profile)。如果需要設定對全體使用者都可用的path,我們可以在/etc/profile中設定,反之,在後面三個檔案中設定。設定完成後,重新啟動終端或者直接source .filename就可以使用了。