详解/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc的用途
?
? ? ? ? Linux安裝時可能要修改的配置文件:/etc/profile、/etc/bashrc(ubuntu沒有這個文件,對應地,其有/etc/bash.bashrc文件。我用的是ubuntu系統,所以下面將一律使用/etc/bash.bashrc來敘述)、~/.bash_profile、~/.bash_login、~/.profile、~/.bashrc。
我的ubuntu系統(版本為10.04)默認情況下,只有/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc這四個文件。其他文件可以創建。
?
? ? ? ??現在來簡單說一下這些配置文件。
?
1.這些文件的作用
? ? ? ??這些文件的作用有很多,比如環境變量的設定、定制符合自己風格的shell、還可以設置縮寫功能,那個ll命令是 ls –alF命令的縮寫。
? ? ? ??相信大家最關心這些文件在安裝軟件時候的作用。為什么要配置這些文件?配置后,要不要重啟Linux才能使得生效。
?
? ? ? ??要弄清這些問題。首先要知道打開一個終端或者打開一個新shell時(注意,兩者是不同的。比如在終端里輸入bash,會進入一個新shell。此時并沒有打開新終端),會讀取到哪些文件。
? ? ? ??之所以是要配置這些文件,是因為這些軟件要在環境變量中添加屬于自己的信息,或者新建一個屬于自己的環境變量(如安裝JDK時要新建一個JAVA_HOME環境變量)。系統會根據環境變量里的值,找到軟件的一些文件的路徑。
2.這些文件的訪問順序
2.1測試
? ? ? ??如果對測試過程沒興趣的,直接跳過這一步,到結論部分看結論。
?
? ? ? ??分別在這個四個文件的最后,加入一個新的環境變量TESTBASH。每一個文件都為這個環境變量加入不同的值。如下圖所示:
/etc/profile ?
/etc/bash.bashrc?
~/.profile?
~/.bashrc?
?
? ? ? ??都保存后,在原來這個終端輸入$export(這個命令可以用來導入和查看環境變量),并沒有在輸出中看到這個TESTBASH。現在輸入$bash?,打開一個新的shell。再輸入$export?可以看到輸出已經有這個環境變量了(如果在一大串輸出中沒有找到這個TESTBASH,那么就用命令$echo $TESTBASH)。并且,該環境變量的值為: /etc/bash.bashrc:/home/luotuo/.bashrc。
? ? ? ??現在打開一個新的終端。輸入$export?可以看到其結果和輸入$bash命令,再輸入$export?一樣。只有其中兩項。
?
? ? ? ??現在輸入$su root?切換到root用戶。再輸入$export?其結果是在原來的基礎上加上了?/home/luotuo/.bashrc:/etc/bash.bashrc。
? ? ? ??輸入$exit?退出root。然后再輸入$su –l root?切換到root用戶,此時輸入$export?看到其結果僅僅為?/etc/bash.bashrc:/etc/profile。
? ? ? ??(這兩種方式是不同的。分別叫做nonlogin shell和login shell。另外,在終端輸入bash打開一個新的shell也是non login?)
?
? ? ? ??現在是時候重啟Linux了。
?
? ? ? ??重啟之后,在終端輸入?$export?,其結果為: ??
? ? ? ??已經有/etc/profile和/etc/bash.bashrc了。
? ? ? ??此時,輸入$bash?打開一個新的shell 。再輸入$export?.可以看到:
? ? ? ??
? ? ? ??是在原來的基礎上加入了 /etc/bash.bashrc:/home/luotuo/.bashrc
?
? ? ? ??輸入$exit?退出這個shell(注意,此時這個終端是沒有被關閉了。因為在這個終端打開了兩個shell。一個exit只能退出一個).
? ? ? ??此時,輸入$su root?切換到root用戶。然后再輸入$export?。可以看到輸出為:
? ? ? ??
? ? ? ??在原來的基礎上加入了/etc/bash.bashrc。
? ? ? ??現在輸入$pwd?,可以看到其路徑為:
? ? ? ? ?
? ? ? ??現在輸入$exit?退出這個root。然后輸入$su –l root?切換到root用戶。此時再輸入$export?其結果為:
? ? ? ??
? ? ? ??現在輸入$pwd,可以看到其路徑為:
? ? ? ? ?
? ? ? ??兩者有不同的路徑。后者是轉到了root用戶的用戶目錄下,而前者還是在之前所在的目錄。
2.2、結論
? ? ? ??從測試過程可以看到。打開一個新的shell(包括打開一個新終端和在終端上輸入bash),都會重新讀取/etc/bash.bashrc 和 ~/.bashrc文件里面的內容。
? ? ? ??而Linux啟動登錄時會讀取/etc/profile和~/.profile文件的內容。所以,在測試的時候,重啟登錄時會讀取/etc/profile和~/.profile文件的內容(此時并不讀取/etc/bash.bashrc和~/.bashrc文件)。然后再打開終端時,會去讀取/etc/bash.bashrc和?~/.bashrc文件。這就出現了那種結果。
?
? ? ? ??使用login和non login術語來說,就是使用login 方式是會讀取/etc/profile 和 ~/.profile文件。使用non login方式的話,會讀取/etc/bash.bashrc 和 ~/.bashrc文件的內容。
也就是說/etc/profile 和 ~/.profile文件是在login時才會讀取。所以,在不使用su命令的情況下,只有在Linux啟動登錄的時候才會被讀取(這也就導致了有些軟件安裝后,要重啟才能生效)。
?
? ? ? ??因為我的ubuntu沒有~/.bash_profile和?~/.bash_login文件。如果有這兩個文件的話,那么用login方式登錄,將只讀取?~/.bash_profile?、~/.bash_login、~/.profile三個中的一個。其讀取順序在上面的排序順序。
?
? ? ? ??說了這么多。到講安裝軟件時的修改這些文件的配置信息 了。安裝軟件修改這個文件,一般是為了在這個文件中添加用于那些軟件的環境變量。在這些配置文件中都可以添加環境變量。但由于,有些文件會被讀取,有些文件卻不會被讀取(這個上面已經說了),所以在不同文件下的配置信息的有效性或者說生效日期就有所不同了。這也導致了在這些文件添加配置信息,要不要重啟的問題。
?
? ? ? ??如果是在/etc/bash.bashrc 和 ~/.bashrc文件中添加配置信息,那么打開一個新的shell,就生效了,可以用了(因為打開新的shell會讀取這個兩個文件)。也可以輸入$source /etc/bash.bashrc或者$./etc/bash.bashrc命令(?.和/之間還有一個空格)來使得在本shell中,也可以生效使用。
? ? ? ??如果是在/etc/profile 和 ~/.profile 文件中添加配置信息。那么就只能重啟了。因為這個兩個文件只會在login 下才會讀取。當然,也是可以使用$source /etc/profile?命令的。但也只能在使用過這個命令的shell才能使用。
?
?
3.總結
? ? ? ??如果為了一完成配置信息就能使用,那么就不用在/etc/profile 和 ~/.profile文件中添加關于軟件的配置信息。而是在/etc/bash.bashrc 或者 ~/.bashrc 中添加,這樣就能馬上使用了。
總結
以上是生活随笔為你收集整理的详解/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc的用途的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下ps -ef和ps aux的
- 下一篇: pthread_join和pthread