一空扎、區(qū)別
/etc/profile
# 此文件為系統(tǒng)的每個用戶設(shè)置環(huán)境信息,當(dāng)用戶第一次登錄時,該文件被執(zhí)行.
#并從/etc/profile.d目錄的配置文件中搜集shell的設(shè)置.
/etc/bashrc
#為每一個運行bash shell的用戶執(zhí)行此文件.當(dāng)bash shell被打開時,該文件被讀取.
~/.bash_profile
#每個用戶都可使用該文件輸入專用于自己使用的shell信息,
#當(dāng)用戶登錄時,該文件僅僅執(zhí)行一次!
#默認(rèn)情況下,他設(shè)置一些環(huán)境變量,執(zhí)行用戶的.bashrc文件.
~/.bashrc
#該文件包含專用于你的bash shell的bash信息,當(dāng)?shù)卿洉r以及每次打開新的shell時,該文件被讀取.
~/.profile
#在Debian中使用.profile文件代 替.bash_profile文件藏鹊。
#.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)兩個文件是.bash_profile的同義詞,
#目的是為了兼容其它Shell转锈。在Debian中使用.profile文件代 替.bash_profile文件盘寡。
~/.bash_logout
#當(dāng)每次退出系統(tǒng)(退出bash shell)時,執(zhí)行該文件.
/etc/profile
#此文件為系統(tǒng)的每個用戶設(shè)置環(huán)境信息,當(dāng)用戶第一次登錄時,該文件被執(zhí)行.并從/etc/profile.d目錄的配置文件中搜集shell的設(shè)置.
英文描述為:
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
所以如果你有對/etc/profile有修改的話必須得重啟你的修改才會生效,此修改對每個用戶都生效撮慨。
/etc/bashrc
#為每一個運行bash shell的用戶執(zhí)行此文件.當(dāng)bash shell被打開時,該文件被讀取,每次用戶打開一個終端時竿痰,即執(zhí)行此文件
英文描述為:
# /etc/bashrc
# System wide functions and aliases
# Environment stuff goes in /etc/profile
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
如果你想對所有的使用bash的用戶修改某個配置并在以后打開的bash都生效的話可以修改這個文件,修改這個文件不用重啟砌溺,重新打開一個bash即可生效影涉。
~/.bash_profile
#每個用戶都可使用該文件輸入專用于自己使用的shell信息,當(dāng)用戶登錄時,該文件僅僅執(zhí)行一次!默認(rèn)情況下,他設(shè)置一些環(huán)境變量,執(zhí)行用戶的.bashrc文件.
#此文件類似于/etc/profile,也是需要需要重啟才會生效规伐,/etc/profile對所有用戶生效蟹倾,~/.bash_profile只對當(dāng)前用戶生效。
~/.profile
#### Linux的Shell種類眾多猖闪,常見的有:
Bourne Shell(/usr/bin/sh或/bin/sh)鲜棠、
Bourne Again Shell(/bin/bash)、
C Shell(/usr/bin/csh)培慌、
K Shell(/usr/bin/ksh)豁陆、
Shell for Root(/sbin/sh),等等吵护。
#不同的Shell語言的語法有所不同献联,所以不能交換使用。每種Shell都有其特色之處何址,基本上里逆,掌握其中任何一種 就足夠了。在本文中用爪,我們關(guān)注的重點Bash原押,
#也就是Bourne Again Shell,由于易用和免費偎血,Bash在日常工作中被廣泛使用诸衔;同時盯漂,Bash也是大多數(shù)Linux系統(tǒng)默認(rèn)的Shell。
#在一般情況下笨农,人們并不區(qū)分 Bourne Shell和Bourne Again Shell就缆,所以,在下面的文字中谒亦,我們可以看到#!/bin/sh竭宰,它同樣也可以改為#!/bin/bash。
#由于這層原因在Debian中使用.profile文件代 替.bash_profile文件以兼容不同的shell
.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)兩個文件是.bash_profile的同義詞份招,目的是為了兼容其它Shell切揭。
~/.bashrc
#該文件包含專用于你的bash shell的bash信息,當(dāng)?shù)卿洉r以及每次打開新的shell時,該文件被讀取.(每個用戶都有一個.bashrc文件,在用戶目錄下)
#此文件類似于/etc/bashrc锁摔,不需要重啟生效廓旬,重新打開一個bash即可生效, /etc/bashrc對所有用戶新打開的bash都生效谐腰,但~/.bashrc只對當(dāng)前用戶新打開的bash生效孕豹。
~/.bash_logout
#當(dāng)每次退出系統(tǒng)(退出bash shell)時,執(zhí)行該文件.
#另外,/etc/profile中設(shè)定的變量(全局)的可以作用于任何用戶,而~/.bashrc等中設(shè)定的變量(局部)只能繼承/etc/profile中的變量,他們是”父子”關(guān)系.
~/.bash_profile 是交互式、login 方式進入bash 運行的十气;
~/.bashrc 是交互式 non-login 方式進入bash 運行的励背;
通常二者設(shè)置大致相同,所以通常前者會調(diào)用后者桦踊。
設(shè)置生效:可以重啟生效椅野,也可以使用命令:source
上 面這三個文件是bash shell的用戶環(huán)境配置文件,位于用戶的主目錄下籍胯。其中.bash_profile是最重要的一個配置文件竟闪,它在用戶每次登錄系統(tǒng)時被讀取,里面的所有 命令都會被bash執(zhí)行杖狼。
.bashrc文件會在bash shell調(diào)用另一個bash shell時讀取炼蛤,也就是在shell中再鍵入bash命令啟動一個新shell時就會去讀該文件。這樣可有效分離登錄和子shell所需的環(huán)境蝶涩。但一般 來說都會在.bash_profile里調(diào)用.bashrc腳本以便統(tǒng)一配置用戶環(huán)境理朋。
.bash_logout在退出shell時被讀取。所以我們可把一些清理工作的命令放到這文件中绿聘。
在 /etc目錄的bash.bashrc和profile是系統(tǒng)級(全局)的配置文件嗽上,當(dāng)在用戶主目錄下找不到.bash_profile 和.bashrc\時,就會讀取這兩個文件熄攘。.bash_history是bash shell的歷史記錄文件兽愤,里面記錄了你在bash shell中輸入的所有命令。可通過HISSIZE環(huán)境變量設(shè)置在歷史記錄文件里保存記錄的條數(shù)浅萧。alias l = ‘ls -l’是設(shè)置別名的語句逐沙,把它放在這些配置文檔中就可使我們能用簡單的’l’命令,代替’ls -l’命令洼畅。
當(dāng)我們修改了這些配置件后吩案,可用source .bash_profile命令使它修改內(nèi)容馬上生效。
執(zhí)行順序
關(guān)于登錄linux時帝簇,/etc/profile徘郭、~/.bash_profile等幾個文件的執(zhí)行過程。
如圖所示己儒,
其中 ~/.bash_profile崎岂、~/.bash_login捆毫、~/.profile三個文件中往往系統(tǒng)中往往只存在一個闪湾,在不同的發(fā)行版中不同,如CentOS和RedHat中?~/.bash_profile绩卤,而Debian和Ubunto等系列中往往是~/.profile
在登錄Linux時要執(zhí)行文件的過程如下:
①在 剛登錄Linux時途样,
首先啟動 /etc/profile 文件,
然后再啟動用戶目錄下的 ~/.bash_profile濒憋、 ~/.bash_login或 ~/.profile文件中
的其中一個何暇,執(zhí)行的順序為:~/.bash_profile、 ~/.bash_login凛驮、 ~/.profile
以上兩個文件會在用戶登錄時執(zhí)行
②下面開始執(zhí)行用戶的bash設(shè)置
如果 ~/.bash_profile文件存在的話裆站,一般會以這樣的方式執(zhí)行用戶的 ~/.bashrc文件。
在 ~/.bash_profile文件中一般會有下面的代碼:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
同樣~/.bashrc中黔夭,一般還會在文件的前面有以下代碼宏胯,來執(zhí)行/etc/bashrc
if [ -f /etc/bashrc ] ; then
. /etc/bashrc
fi
所以,~/.bashrc會調(diào)用 /etc/bashrc文件本姥。最后肩袍,在退出shell時,還會執(zhí)行 ~/.bash_logout文件婚惫。
執(zhí)行順序為
/etc/profile
~/.bash_profile | ~/.bash_login | ~/.profile
~/.bashrc
/etc/bashrc
~/.bash_logout
為了驗證氛赐,我 做了個實驗,在/etc/profile,/etc/bashrc,/.bashrc和/.bash_profile文件的最后追加同一個變量分別賦 予不同的值先舷,實驗結(jié)果表明變量最后的值為~/.bash_profile里的值艰管。(4個文件都沒有修改其他設(shè)置,都是安裝系統(tǒng)后的默認(rèn)值蒋川。)
再有就是4個文件都追加一個值到同一個文件牲芋,開機后查看該文件內(nèi)容的順序為:
/etc/profile
~/.bash_profile
~/.bashrc
/etc/bashrc
作用域
關(guān)于各個文件的作用域,在網(wǎng)上找到了以下說明:
(1)/etc/profile: 此文件為系統(tǒng)的每個用戶設(shè)置環(huán)境信息,當(dāng)用戶第一次登錄時,該文件被執(zhí)行. 并從/etc/profile.d目錄的配置文件中搜集shell的設(shè)置。
(2)/etc/bashrc: 為每一個運行bash shell的用戶執(zhí)行此文件.當(dāng)bash shell被打開時,該文件被讀取街图。
(3)~/.bash_profile: 每個用戶都可使用該文件輸入專用于自己使用的shell信息,當(dāng)用戶登錄時,該文件僅僅執(zhí)行一次!默認(rèn)情況下,他設(shè)置一些環(huán)境變量,執(zhí)行用戶的.bashrc文件浇衬。
(4)~/.bashrc: 該文件包含專用于你的bash shell的bash信息,當(dāng)?shù)卿洉r以及每次打開新的shell時,該該文件被讀取。
(5)~/.bash_logout: 當(dāng)每次退出系統(tǒng)(退出bash shell)時,執(zhí)行該文件. 另外,/etc/profile中設(shè)定的變量(全局)的可以作用于任何用戶,而~/.bashrc等中設(shè)定的變量(局部)只能繼承/etc /profile中的變量,他們是”父子”關(guān)系餐济。
(6)~/.bash_profile 是交互式耘擂、login 方式進入 bash 運行的~/.bashrc 是交互式 non-login 方式進入 bash 運行的通常二者設(shè)置大致相同,所以通常前者會調(diào)用后者絮姆。
其他
下面是幾個例子:
- 圖形模式登錄時醉冤,順序讀取:/etc/profile和~/.profile
- 圖形模式登錄后篙悯,打開終端時蚁阳,順序讀取:/etc/bash.bashrc和~/.bashrc
- 文本模式登錄時鸽照,順序讀嚷菥琛:/etc/bash.bashrc,/etc/profile和~/.bash_profile
- 從其它用戶su到該用戶矮燎,則分兩種情況:
(1)如果帶-l參數(shù)(或-參數(shù)定血,–login參數(shù)),如:su -l username诞外,則bash是lonin的澜沟,它將順序讀取以下配置文件:/etc/bash.bashrc,/etc/profile和~ /.bash_profile峡谊。
(2)如果沒有帶-l參數(shù)茫虽,則bash是non-login的,它將順序讀燃让恰:/etc/bash.bashrc和~/.bashrc- 注銷時濒析,或退出su登錄的用戶,如果是longin方式贤壁,那么bash會讀鹊渴唷:~/.bash_logout
- 執(zhí)行自定義的shell文件時,若使用“bash -l a.sh”的方式脾拆,則bash會讀取行:/etc/profile和~/.bash_profile馒索,若使用其它方式,如:bash a.sh名船, ./a.sh绰上,sh a.sh(這個不屬于bash shell),則不會讀取上面的任何文件渠驼。