ubuntu 16.04 系統環境變量讀取的探索

最近在ubuntu系統中做一個關於程序開機自啓動的問題

由於環境變量在不同的運行模式下讀取的流程不一樣,導致在服務器開機重啓後運行既定程序找不到相應的環境變量錯誤

這裏做一篇博客來探討一下環境變量的讀取過程

首先,要明確幾個概念,登錄型shell和非登錄型shell,交互型shell(interactive shell) 和非交互型shell(non-interactive shell)

登錄型shell:簡單來說, 就是在終端輸入用戶名和密碼後得到的shell 

非登錄型shell:簡單來說,就是在圖形界面或者文字界面鍵入(strl+alt+t)或者Bash命令得到的一個新窗口

交互型shell:簡單來說,就是需要用戶在圖形或者文本界面下需要鍵入命令和shell進行交互

非交互型shell:簡單來說,就是執行一個sh腳本,eg:bash  example.sh 

 首先,聲明一點的是ubuntu 16.04系統家目錄下(~目錄),與環境變量相關的文件只有.bashrc  .bash_logout  .profile

在系統目錄下有兩個文件:/etc/profile和/etc/bash.bashrc

首先在/etc/profile文件裏:export a='/etc/profile'

同樣的,在/etc/bash.bashrc文件中設置export a='/etc/bash.bashrc'

同樣的,在~/.profile文件中設置export a='/home/mllabs/.profile',因爲普通用戶是mllabs

同樣的,在~/.bashrc文件中設置export a='/home/mllabs/.bashrc'

準備工作就緒,下面登錄賬戶mllabs

在shell界面echo $a:

從該圖可以看出,文本模式登錄,讀取的環境變量文件是:/etcc/profile->/etc/bash.bashrc->~/.profile->~/.bashrc

在普通用戶模式下,鍵入su命令,然後echo  $a

可以看到,在上一步的基礎上重新讀取了/etc/bash.bashrc文件和root用戶自身的~/.bashrc文件

在root用戶環境下,鍵入su - mllabs -c 'echo $a'

 

可以看到,只讀取了/etcc/profile文件和~/.profile兩個文件,說明su - user命令相當登錄型非交互式shell

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章