在linux中,使用者的登入也就是登入shell,是通過按次序的讀取配置檔案,根據檔案設定使用者的環境,進而來完成登入。配置檔案對系統非常重要,而對我們系統工程師來講,了解他們也是至關重要的,通過配置檔案我們就可以知道系統是怎麼啟動的,使用者時怎麼登陸的。顧名思義,所謂全局配置檔案,是對所有使用者生效,是使用者登入後的預設環境,可以通過編輯檔案配置。而個人的配置檔案隻對目前使用者生效,使用者也可以自己更改自己的環境配置資訊。下面我們來讨論使用者登入所讀取的檔案及各檔案的作用:
與使用者登入相關的全局配置檔案:/etc/profile,/etc/profile.d,/etc/bashrc等。
與使用者登入相關的個人配置檔案:~/.bash_profile,~/.bashrc,~/.bash_logout(退出用到)等
首先我們呢來說一下登入shell的類型:互動式登入和非互動式登入
一:互動式登入shell:就是可以與shell進行互動,需要驗證的登入。有:
1,通過控制台或遠端連接配接,需要使用者名,密碼。
2,su - username(可看做互動式登入)
互動式登入依次讀取的檔案為:/etc/profile-->/etc/profile.d/*-->(~/.bash_profile | ~/.bash_login | ~/.profile)-->~/.bashrc-->/etc/bashrc-->~/.bash_logout
這幾種檔案的作用分别是:
1,/etc/profile:當使用者登入系統後,通常使用這個檔案給給使用者提供預設的環境。這個預設環境實際上就是一組環境變量的定義,最後會調用/etc/profile.d中的檔案。檔案作用于全部使用者。檔案中的各環境變量的意思如下:
PATH:根據UID設定PATH要不要到含有sbin的系統指令目錄
USER:根據目前登陸使用者名設定。
MAIL:根據使用者賬号設定目前使用者的郵件存放目錄。
HISTSIZE:是指儲存曆史指令記錄的條數。
LOGNAME:是指目前使用者的登入名。
HOSTNAME:内容是/bin/hostname,如果要用到主機名的話,通常是從這個環境變量中來取得的。
INPUTRC:如果使用者沒有自定義輸入的按鍵功能,則設定INPUTRC=/etc/inputrc,此檔案定義bash的熱鍵等資料,有的話就不設定。
2,/etc/profile.d:主要是對shell的設定,作用于全部使用者。其中,這個目錄檔案中有一個lang.sh腳本會調用檔案/etc/sysconfig/i18n,這是一個覺得我們bash預設使用何種語系的重要配置檔案,檔案中重要的是LANG變量的設定。
3,~/.bash_profile:當使用者登入時,該檔案僅僅執行一次,預設情況下,他設定一些環境變量,執行使用者的.bashrc檔案,作用于目前使用者。如果這個檔案不存在會讀取~/.bash_login,這個檔案還不存在的話讀取~./profile。
4,~/.bashrc: 當使用者登入時以及每次打開新的shell時,該該檔案被讀取。存有改使用者的的所有的指令别名等;作用于目前使用者。
5,/etc/bashrc:為運作bash shell的使用者執行此檔案,對bash進行設定.當bash shell被打開時,該檔案被讀取。作用于所有使用者。
6,~/.bash_logout:當使用者退出bash時讀取該檔案,執行一些操作。作用于目前使用者。
二,非互動式登入shell:就是使用者擷取shell後,一次性讀取全部檔案,不與使用者進行互動。例:
1,su username(可看做非互動式shell)
2,執行腳本的shell
3,圖形界面下打開的模拟shell
非互動式登入依次讀取的檔案為: ~/.bashrc-->/etc/bashrc-->/etc/profile.d/*
各檔案對使用者shell登入的作用和互動式登入時的作用相同(需要說明的是./bashrc檔案會調用/etc/bashrc檔案)
本文轉自 leejia1989 51CTO部落格,原文連結:http://blog.51cto.com/leejia/777700,如需轉載請自行聯系原作者