Linux 登陸配置讀取順序
Linux用戶在登陸到Linux服務器時,一些登陸的提示歡迎信息,以及特定的環(huán)境配置等等都按預先設定好的配置來生效。Linux中的這個shell環(huán)境會讀取很多不同的配置文件來達成上述目的,同時還有登陸shell與非登陸shell的區(qū)分。本文對此作簡要描述,供大家參考!
一、登陸shell與非登陸shell
登陸shell(login shell):
??取得 bash 時需要完整的登陸流程的,就稱為 login shell
??比如通過ssh方式連接,或者由tty1 ~ tty6 登陸,需要輸入用戶的賬號與密碼,此時取得的 bash 就稱為login shell
非登陸shell(non-login shell):
??取得 bash 接口的方法不需要重復登陸的舉動
??比如你以 X window 登陸 Linux 后, 再以 X 的圖形化接口啟動終端機,此時該終端接口無需輸入賬號與密碼,則為non-login shell
??比如你在原本的 bash 環(huán)境下再次下達 bash 這個命令,同樣的也沒有輸入賬號密碼, 那第二個 bash (子程序) 也是 non-login shell
查看登陸shell與非登陸shell
###演示環(huán)境
[root@system1 ~]# more /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
###當前從ssh登陸到服務器
[root@system1 ~]# tty
/dev/pts/1
# ### Author : Leshami QQ/Weixin : 645746311
# ### Blog : http://blog.csdn.net/leshami
###輸入 echo $0, 顯示結果為 -bash ,即為登陸shell
[root@system1 ~]# echo $0
-bash
[root@system1 ~]# ps
PID TTY TIME CMD
77122 pts/1 00:00:00 bash
77157 pts/1 00:00:00 ps
###下面在X windows打開一個終端,如下,顯示為/bin/bash,即非登陸shell
[root@system1 Desktop]# echo $0
/bin/bash
[root@system1 ~]# ps -ef|grep pts|grep bash
root 73245 73241 0 11:49 pts/0 00:00:00 /bin/bash
root 76511 73245 0 16:19 pts/0 00:00:00 bash
root 77122 77118 0 17:02 pts/1 00:00:00 -bash
root 77158 77118 0 17:03 pts/2 00:00:00 -bash
root 77210 73241 0 17:04 pts/3 00:00:00 /bin/bash
root 77283 77279 0 17:06 pts/4 00:00:00 -bash
root 77332 77122 0 17:06 pts/1 00:00:00 grep --color=auto bash
###在上傳的結果中73245,77210為非登陸shell,77122,77158,77283為登陸shell
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
二、交換shell與非交互shell
交互式shell(interactive shell)
??交互式模式就是在終端上執(zhí)行,shell等待你的輸入,并且立即執(zhí)行你提交的命令。這種模式被稱作交互式是因為shell與用戶進行交互。這種模式也是大多數用戶非常熟悉的:登錄、執(zhí)行一些命令、退出。當你退出后,shell也終止了。
非交互式shell(non-interactive shell)
??shell也可以運行在另外一種模式:非交互式模式,以shell script(非交互)方式執(zhí)行。在這種模式 下,shell不與你進行交互,而是讀取存放在文件中的命令,并且執(zhí)行它們。當它讀到文件的結尾EOF,shell也就終止了。
###如下,執(zhí)行 echo $-,查看其中的“i”選項(表示interactive shell)
[root@system1 ~]# echo $-
himBH
###如下,為非交互shell
[root@system1 ~]# echo 'echo $-' | bash
hB
- 1
- 2
- 3
- 4
- 5
- 6
- 7
三、登陸shell與非登陸shell調用的shell環(huán)境讀取順序
上圖列出了登陸shell與非登陸shell讀取的不同的shell環(huán)境配置文件。
其中,實線的的方向是主線流程,虛線的方向則是被調用(或讀取)的配置文件
此外,對于登陸shell,讀取~/.bash_profile配置文件時,會做出讀取順序判讀,如下
??~/.bash_profile —> ~/.bash_login —> ~/.profile
但 bash 的 login shell 配置只會讀取上面三個文件的其中一個, 而讀取的順序則是依照上面的順序。也就是說,如果 ~/.bash_profile 存在,那么其他兩個文件不論有無存在,都不會被讀取。 如果 ~/.bash_profile 不存在才會去讀取 ~/.bash_login,而前兩者都不存在才會讀取 ~/.profile 的意思。
四、其他情形
1、除了讀取上述配置文件之外,在登陸shell中還會讀取其他相關配置信息,如讀取 ~/.bash_history
2、對于shell環(huán)境變量修改之后需要立即生效的情形,可以使用source來立即生效。
用法
?? # source 配置文件檔名
###如修改了~/.bash_profile,不重新登陸希望生效的話,執(zhí)行以下命令
# source ~/.bash_profile ###下一命令等價
# . ~/.bash_profile
3、shell登出
在shell登出是會讀取 ~/.bash_logout
浙公網安備 33010602011771號