0 Linux的環境配置文件.bashrc
.bashrc文件主要保存個人的一些個性化設置,如命令別名、路徑等。也即在同一個服務器上,只對某個用戶的個性化設置相關。它是一個隱藏文件,需要使用ls -a來查看。
.bash_history 記錄之前輸入的命令
.bash_logout 當你退出時執行的命令
.bash_profile 當你登入shell時執行
.bashrc 當你登入shell時執行
後兩個的區別:'.bash_profile'只在會話開始時被讀取一次,而'.bashrc'則每次打開新的終端時,都要被讀取。
這些文件是每一位用戶對終端功能和屬性設置,修改.bashrc可以改變環境變量PATH、別名alias和提示符。具體如何修改會在下面做介紹。
除了可以修改用戶目錄下的.bashrc文件外,還可以修改如“/etc/profile”文件、“/etc/bashrc”文件及目錄“/etc /profile.d”下的文件。但是修改/etc路徑下的配置文件將會應用到整個系統,屬於系統級的配置,而修改用戶目錄下的.bashrc則只是限制在用戶應用上,屬於用戶級設置。兩者在應用範圍上有所區別,建議如需修改的話,修改用戶目錄下的.bashrc,即無需root權限,也不會影響其他用戶。
0.1 PATH環境變量修改
PATH變量決定了shell 將到哪些目錄中尋找命令或程序。如果要執行的命令的目錄在 $PATH 中,您就不必輸入這個命令的完整路徑,直接輸入命令就可以了。一些第三方軟件沒有將可執行文件放到 Linux 的標準目錄中。因此,將這些非標準的安裝目錄添加到 $PATH 是一種解決的辦法。此外,您也將看到如何處理一般的環境變量。
首先,作爲慣例,所有環境變量名都是大寫。由於 Linux 區分大小寫,這點您要留意。當然,您可以自己定義一些變量,如'$path'、'$pAtH',但 shell 不會理睬這些變量。
第二點是變量名有時候以'$'開頭,但有時又不是。當設置一個變量時,直接用名稱,而不需要加“$”,如
“PATH=/usr/bin:/usr/local/bin:/bin”
假如要獲取變量值的話,就要在變量名前加'$':
“echo $PATH”
則會顯示當前設置的PATH變量“/usr/bin:/usr/local/bin:/bin”
否則的話,變量名就會被當作普通文本了:
“echo PATH”
顯示“PATH”
處理 $PATH 變量要注意的第三點是:您不能只替換變量,而是要將新的字符串添加到原來的值中。在大多數情況下,您不能用“PATH=/some /directory”,因爲這將刪除 $PATH 中其他的所有目錄,這樣您在該終端運行程序時,就不得不給出完整路徑。所以,只能作添加:“PATH=$PATH:/some/directory”,假如你要添加/usr/local/arm/3.4.1/bin交叉編譯命令,則操作爲“PATH=$PATH:/usr/local/arm/3.4.1/bin”
這樣,PATH 被設成當前的值(以 $PATH 來表示)+新添的目錄。
到目前爲止,你只爲當前終端設置了新的 $PATH 變量。如果您打開一個新的終端,運行 echo $PATH ,將顯示舊的 $PATH 值,而看不到你剛纔添加的新目錄。因爲你先前定義的是一個局部環境變量(僅限於當前的終端)。
要定義一個全局變量,使在以後打開的終端中生效,您需要將局部變量輸出(export),可以用"export"命令:
export PATH=$PATH:/some/directory
現在如果打開一個新的終端,輸入 echo $PATH ,也能看到新設置的$PATH 了。請注意,命令'export'只能改變當前終端及以後運行的終端裏的變量。對於已經運行的終端沒有作用。
爲了將目錄永久添加到 $PATH ,只要將"export"的那行添加到.bashrc或/etc/bashrc文件中。
使用命令:
sudo gedit ~/.bashrc
0.2 別名
一般在.bashrc或/etc/bashrc文件裏有幾句話
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
有了這幾句話,當在終端中輸入“mv test.c led.c”實際上輸入的是“mv -i test.c led.c”,所以說alias是一個別名。你可以在該配置文件中添加自己風格的別名,如“alias ll='ls -l'”,只需要在終端中輸入“ll”就實現了“ls -l”的功能。還可以添加其他語句,隨自己喜好。
0.3 提示符
當打開一個控制檯(console) 時,最先看到的就是提示符(prompt),如:[root@localhost ~]#
在默認設置下,提示符將顯示用戶名、主機名(默認是'localhost')、當前所在目錄(在 Unix 中,'~'表示您的 home 目錄)。按照傳統,最後一個字符可以標識普通用戶($),還是'root'(#)。可以通過 $PS1 變量來設置提示符。
命令“echo $PS1”,將顯示當前的設定。其中可用字符的含義在 man bash 的'PROMPTING'部分有說明。
如何才能完成理想的設置呢?對於健忘的初學者來講,默認設定有些不友好,因爲提示符只顯示當前目錄的最後一部分。如果你看到象這樣的提示符
[wsf@localhost bin]$
則當前目錄可能是'/bin'、'/usr/bin'、'/usr/local/bin'及'/usr/X11R6/bin'。當然,你可以用
pwd (輸出當前目錄,print working directory)
能不能叫 shell 自動告訴你當前目錄呢?
當然可以。這裏我將提到的設定,包括提示符,大都包含在文件'/etc/bashrc'中。您可以通過編輯各自 home 目錄下的'.bash_profile'和'.bashrc'來改變設置。
在 man bash 中的'PROMPTING'部分,對這些參數(parameter)有詳細說明。您可以加入一些小玩意,如不同格式的當前時間,命令的歷史記錄號,甚至不同的顏色。
一種更適當的設定:
PS1="[\u: \w]\\$ "
這樣,提示符就變成:
[wsf: /usr/bin]$
你可以通過命令 export 來測試不同的設置(比如,export PS1="\u: \w\\$ ")。如果找到了適合的提示符,就將設置放到您的'.bashrc''中。這樣,每次打開控制檯或終端窗口時,都會生效。
0.4 修改生效
source ~/.bashrc
1 Linux的環境配置文件.profile
在Unix/Linux系統中有兩個對用戶而言必不可少的文件——etc目錄下的profile文件和用戶主目錄($HOME)下的.profile文件。
前者是系統文件,對系統下全體用戶起作用,後者是用戶自己的"私人"文件。它們在用戶登錄(Login註冊)時,被系統自動執行,爲用戶設置工作環境,若使用得當,可發揮強大作用。etc目錄下的profile文件是每一個用戶登錄時,操作系統首先執行的文件,然後再將控制
權交給用戶主目錄下的.profile文件,當系統給出主提示符($PS1)後,用戶就可以開始自己的工作了。
(1)./etc/profile:是全局profile文件,設置後會影響到所有用戶
(2)./home/username/.profile或.bash_profile是針對特定用戶的,可以針對用戶,來配置自己的環境變量。
Bash登陸(login)的時候,profile執行的順序:先執行全局/etc/profile -> 接着bash會檢查使用者的HOME目錄中,是否有 .bash_profile 或者 .bash_login或者 .profile,若有,則會執行其中一個,執行順序爲: .bash_profile 最優先 > .bash_login其次 > .profile
(3)配置環境變量
我們可以在 .proflie
文件末尾加入下面這句代碼:
export PATH="$PATH:$HOME/scripts"
然後,我們需要退出終端再重新登錄使修改生效。
如果你使用 Ubuntu 及其衍生髮行版,那麼就需要修改 .pam_environment
文件,而不是 .profile
文件。同樣地,在該文件末尾加入這麼一句代碼:
PATH DEFAULT=${PATH}:/home/@{PAM_USER}/scripts
2 bashrc和profile的差異
bashrc和profile的差異在於:
1. profile是在用戶登錄後纔會運行。
2. bashrc是在啓動終端或者在系統啓動運行~/.bash_profie文件時時候運行的。
3. 進行設置後,可運用source bashrc命令更新bashrc,也可運用source profile命令更新profile。
PS:通常我們修改bashrc,有些linux的發行版本不一定有profile這個文件
3 關於登錄linux時,/etc/profile、~/.bash_profile等幾個文件的執行順序
在登錄Linux時要執行文件的過程如下:
在剛登錄Linux時,首先啓動 /etc/profile 文件,然後再啓動用戶目錄下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一個,執行的順序爲:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的話,一般還會執行 ~/.bashrc文件。因爲在 ~/.bash_profile文件中一般會有下面的代碼:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般還會有以下代碼:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc會調用 /etc/bashrc文件。最後,在退出shell時,還會執行 ~/.bash_logout文件。
執行順序爲:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
4 關於各個文件的作用域,說明如下
(1)/etc/profile: 此文件爲系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行. 並從/etc/profile.d目錄的配置文件中搜集shell的設置。
(2)/etc/bashrc: 爲每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取。
(3)~/.bash_profile: 每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件。
(4)~/.bashrc: 該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取。
(5)~/.bash_logout:當每次退出系統(退出bash shell)時,執行該文件. 另外,/etc/profile中設定的變量(全局)的可以作用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承/etc /profile中的變量,他們是”父子”關係。
(6)~/.bash_profile 是交互式、login 方式進入 bash 運行的~/.bashrc 是交互式 non-login 方式進入 bash 運行的通常二者設置大致相同,所以通常前者會調用後者。