1. 程式人生 > >Linux Shell基礎 環境變數配置檔案

Linux Shell基礎 環境變數配置檔案

source命令:使環境變數配置檔案強制生效

source 命令會強制執行指令碼中的全部命令,而忽略指令碼檔案的許可權。該命令主要用於讓重新配置的環境變數配置檔案強制生效。source 命令格式如下:

[[email protected] ~]# source 配置檔案
或
[[email protected] ~]#.配置檔案

"."就是 source 命令

環境變數配置檔案

 在環境變數配置檔案中儲存了對系統的操作環境生效的系統預設環境變數,比如 PATH、HISTSIZE、PS1、HOSTNAME 等 

登入時生效的環境變數配置檔案

在 Linux 系統登入時主要生效的環境變數配置檔案有以下 5 個:
  • /etc/profile。
  • /etc/profile.d/*.sh。
  • ~/.bash_profile。
  • -/.bashrc。
  • /etc/bashrc。
這 5 個環境變數配置檔案(/etc/profile.d/*.sh 是一系列的配置檔案)在使用者登入過程中會依次生效。不過需要注意,/etc/profile、/etc/profile_d/*.sh 和 /etc/bashrc 這三個環境變數配置檔案會對所有的登入使用者生效;而 ~/.bash_profile 和 ~/.bashrc 這兩個環境變數配置檔案只會對當前使用者生效(因為每個使用者的家目錄中都有這兩個檔案)。這些環境變數配置檔案是依靠如圖 1 所示的順序被呼叫的。
  1. 使用者登入過程中先呼叫 /etc/profile 檔案。在這個環境變數配置檔案中會定義如下預設環境變數。
  • -USER 變數:根據登入的使用者給這個變數賦值(就是讓 USER 變數的值是當前使用者)。
  • -LOGNAME 變數:根據 USER 變數的值給這個變數賦值。
  • -MAIL 變數:根據登入的使用者來定義使用者的郵箱為 /var/spool/mail/ 使用者名稱。
  • -PATH 變數:根據登入使用者的 UID 是否為 0,判斷 PATH 變數是否包含 /sbin、/usr/sbin 和 /usr/local/sbin 這三個系統命令目錄。
  • -HOSTNAME 變數:根據主機名給這個變數賦值。
  • -HISTSIZE 變數:定義歷史命令的儲存條數。
  • -umask:定義 umask 預設許可權。注意:/etc/profile 檔案中的 umask 許可權是在"有使用者登入過程(輸入了使用者名稱和密碼)"時才會生效的。
  • -呼叫 /etc/profile.d/*.sh檔案,也就是呼叫 /etc/porfile.d/ 目錄下所有以 .sh 結尾的檔案。
2. 由 /etc/profile 檔案呼叫 /etc/profile.d/*.sh 檔案。該目錄中所有以 .sh 結尾的檔案都會被 /etc/profile 檔案呼叫,這裡最常用的就是 lang.sh 檔案,而這個檔案又會呼叫 /etc/sysconfig/i18n 檔案。/etc/sysconfig/i18n 就是前面講過的預設語系配置檔案。
3. 由 /etc/profile 檔案呼叫 ~/.bash_profile檔案。~/.bash_profile檔案主要實現了兩個功能:   1. 呼叫了 ~/.bashrc 檔案。   2. 在 PATH 變數後面加入了":$HOME/bin"這個目錄。也就是說,如果我們在自己的家目錄中建立了 bin 目錄,然後把自己的指令碼放入"~/bin"目錄中,就可以直接執行指令碼,而不用通過目錄執行了。
4. 由 ~/.bash_profile 檔案呼叫 -/.bashrc 檔案。在 -/.bashrc 檔案中主要實現了兩個功能:   1. 定義預設別名。筆者把自己定義的別名也放入了這個檔案。   2. 呼叫/etc/bashrc。

5. 由 ~/.bashrc 檔案呼叫 /etc/bashrc 檔案。在 /etc/bashrc 檔案中主要定義瞭如下內容。
  • PS1 變數:也就是使用者的提示符。如果我們想要永久修示符,就要在這個檔案中修改。
  • umask:定義 umask 預設許可權。這個檔案中定義的 umask 是針對"沒有使用者登入過程(不需要輸入使用者名稱和密碼,比如從一個終端切換到另一個終端,或進入子Shell)"時生效的。如果是"有使用者登入過程",則 /etc/profile 檔案中的 umask 生效。
  • PATH 變數:會給 PATH 變數追加值,當然也是在"沒有使用者登陸過程"時才呼叫的。
  • 呼叫 /etc/profile.d/*.sh 檔案,這也是在"沒有使用者登入過程"時才呼叫的。在"有使用者登入過程"時,/etc/profile_d/*.sh 檔案已經被 /etc/profile 檔案呼叫過了。
這 5 個環境變數配置檔案會被依次呼叫。如果是我們自己定義的環境變數,則應該放入哪個檔案呢?如果你的修改是打算對所有使用者生效的,那麼可以放入 /etc/profile 環境變數配置檔案;如果你的修改只是給自己使用的,那麼可以放入 ~/.bash_profile 或 -/.bashrc 環境變數配置檔案。

但是如果我們誤刪除了這些環境變數,比如刪除了 /etc/bashrc 或 ~/.bashrc 檔案,那麼這些檔案中的配置就會失效(~/.bashrc 檔案會呼叫 /etc/bashrc 檔案),我們的提示符就會變成下面這樣:

-bash-4.1#

因為在 /etc/bashrc 檔案中會設定 PS1 命令提示符,如果這個檔案不存在或沒有被呼叫,那麼提示符就會是 Bash 最基本的樣子。

登出時生效的環境變數配置檔案

在使用者退出登入時,只會呼叫一個環境變數配置檔案,就是 ~/.bash_logout。這個檔案預設沒有寫入任何內容,但是如果我們希望在退出登入時執行一些操作,比如清除歷史命令、備份某些資料,就可以把命令寫入這個檔案。

其他的環境變數配置檔案

 ~/bash_history 檔案是歷史命令儲存檔案。

登陸資訊及修改 

在登入本地終端時的歡迎資訊儲存在 /etc/issue 檔案中,我們檢視一下這個檔案:

[[email protected] /]# cat /etc/issue
\S
Kernel \r on an \m

系統在每次登入時,會依賴這個檔案的配置顯示歡迎介面。在 /etc/issue 檔案中允許使用轉義符呼叫相應資訊,其支援的轉義符可以通過 man agetty 命令查詢,如表 1 所示。

轉義符 作 用
\d 顯示當前系統日期
\s 顯示作業系統名稱
\1 顯示登入的終端號,這個轉義符比較常用
\m 顯示硬體體系結構,如i386、i686等
\n 顯示主機名
\o 顯示域名
\r 顯示核心版本
\t 顯示當前系統時間
\u 顯示當前登入使用者的序列號

/etc/issue.net

配置 /etc/issue 檔案會在本地終端登入時顯示歡迎資訊,如果遠端登入(如 ssh 遠端登入,或 Telnet 遠端登入)需要顯示歡迎資訊,則需要配置 /etc/issue.net 檔案。使用這個檔案時有兩點需要注意:
  • 在 /etc/issue 檔案中支援的轉義符在 /etc/issue.net 檔案中不能使用。
  • ssh 遠端登入是否顯示 /etc/issue.net 檔案中的歡迎資訊,是由 ssh 的配置檔案決定的。
需要 ssh 遠端登入可以査看 /etc/issue.net 檔案中的歡迎資訊時,要修改 ssh 的配置檔案 /etc/ssh/sshd_config,加入如下內容:
[[email protected] ~]# cat /etc/ssh/sshd_config ...省略部分輸出...
# no default banner path
#Banner none
Banner /etc/issue.net
…省略部分輸出…

這樣,在 ssh 遠端登入時,也可以顯示歡迎資訊,只是不能再識別"\d"和"\l"等資訊了。

/etc/motd

/etc/motd 檔案中也有歡迎資訊的,這個檔案和 /etc/issue 及 /etc/issue.net 檔案的區別是:/etc/issue 及 /etc/issue.net 檔案是在使用者登入之前顯示歡迎資訊的;而 /etc/motd 檔案是在使用者輸入使用者名稱和密碼,正確登入之後顯示歡迎資訊的。/etc/motd 檔案中的歡迎資訊,不論是本地登入,還是遠端登入,都可以顯示。

自定義快捷鍵 

 檢視已有快捷鍵 ,命令如下所示:

[[email protected] /]# stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

 修改已有快捷鍵,命令如下:

[[email protected] ~] # stty 關鍵字 快捷鍵
例如:
[root01ocalhost ~]# stty intr ^p
#定義Ctrl +P快提鍵為強制中止,"^"字元只需手工輸入即可
[[email protected] ~】# stty -a
speed 38400 baud; rows 21; columns 104; line = 0;
intr = ^P; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;

強制中止的快提鍵變成了Ctrl+P