Linux 登錄配置讀取順序

Linux用戶在登錄到Linux服務器時,一些登錄的提示歡迎信息,以及特定的環境配置等等都按預先設定好的配置來生效。Linux中的這個shell環境會讀取不少不一樣的配置文件來達成上述目的,同時還有登錄shell與非登錄shell的區分。本文對此做簡要描述,供你們參考!shell

1、登錄shell與非登錄shell

登錄shell(login shell): 
  取得 bash 時須要完整的登錄流程的,就稱爲 login shell 
  好比經過ssh方式鏈接,或者由tty1 ~ tty6 登錄,須要輸入用戶的帳號與密碼,此時取得的 bash 就稱爲login shellwindows

非登錄shell(non-login shell): 
  取得 bash 接口的方法不須要重複登錄的舉動 
  好比你以 X window 登錄 Linux 後, 再以 X 的圖形化接口啓動終端機,此時該終端接口無需輸入帳號與密碼,則爲non-login shell 
  好比你在本來的 bash 環境下再次下達 bash 這個命令,一樣的也沒有輸入帳號密碼, 那第二個 bash (子程序) 也是 non-login shellruby

查看登錄shell與非登錄shellbash

###演示環境 [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

2、交換shell與非交互shell

交互式shell(interactive shell) 
  交互式模式就是在終端上執行,shell等待你的輸入,而且當即執行你提交的命令。這種模式被稱做交互式是由於shell與用戶進行交互。這種模式也是大多數用戶很是熟悉的:登陸、執行一些命令、退出。當你退出後,shell也終止了。服務器

非交互式shell(non-interactive shell) 
  shell也能夠運行在另一種模式:非交互式模式,以shell script(非交互)方式執行。在這種模式 下,shell不與你進行交互,而是讀取存放在文件中的命令,而且執行它們。當它讀到文件的結尾EOF,shell也就終止了。ssh

###以下,執行 echo $-,查看其中的「i」選項(表示interactive shell) [root@system1 ~]# echo $- himBH ###以下,爲非交互shell [root@system1 ~]# echo 'echo $-' | bash hB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、登錄shell與非登錄shell調用的shell環境讀取順序

這裏寫圖片描述 
上圖列出了登錄shell與非登錄shell讀取的不一樣的shell環境配置文件。 
其中,實線的的方向是主線流程,虛線的方向則是被調用(或讀取)的配置文件 
此外,對於登錄shell,讀取~/.bash_profile配置文件時,會作出讀取順序判讀,以下 
  ~/.bash_profile —> ~/.bash_login —> ~/.profile 
但 bash 的 login shell 配置只會讀取上面三個文件的其中一個, 而讀取的順序則是依照上面的順序。也就是說,若是 ~/.bash_profile 存在,那麼其餘兩個文件不論有無存在,都不會被讀取。 若是 ~/.bash_profile 不存在纔會去讀取 ~/.bash_login,而前二者都不存在纔會讀取 ~/.profile 的意思。spa

4、其餘情形

一、除了讀取上述配置文件以外,在登錄shell中還會讀取其餘相關配置信息,如讀取 ~/.bash_history 
二、對於shell環境變量修改以後須要當即生效的情形,可使用source來當即生效。 
用法 
   # source 配置文件檔名.net

###如修改了~/.bash_profile,不從新登錄但願生效的話,執行如下命令 
# source ~/.bash_profile ###下一命令等價 
# . ~/.bash_profile3d

三、shell登出 
在shell登出是會讀取 ~/.bash_logoutcode

相關文章
相關標籤/搜索