1. 程式人生 > >Linux系統用戶登陸

Linux系統用戶登陸

配置文件 profile logout 操作系統 linux

當一個用戶登陸到Linux系統時,系統會自動為這個用戶加載profile類和bashrc類兩類文件,當用戶退出時又會加載logout類文件,這是一個固定的過程,我們可以通過修改這些文件來達到我們想要在登陸或退出時完成的動作。下面詳細的介紹一下這些命令。

註意:只有超級用戶root可以修改全局類的配置文件;普通用戶只能修改其家目錄中的個人配置文件

首先是profile類文件,這類文件為交互式登陸的shell進程實現功能初始化的配置文件,如:僅僅用戶有效的配置文件:~/.bash_profile和對所有用戶都生效的配置文件/etc/profile和/etc/profile.d/*.sh(保存了大量的命令(為了緩解profile文件過大)註意

:在Redhat或Centos系列的操作系統中,通常情況下,如果一個配置文件內容很多,格式復雜,我們會將其切割成多個片段,將切割出來的片段統一的存放在“程序名稱.d”目錄中;在這樣目錄中所保存的片段文件,大多會以統一的文件後綴名來命名),作用為:

1)用於定義用戶的環境變量

2)用於運行腳本或執行命令

第二個是bashrc類文件,這類為非交互式登陸的shell進程實現功能啟動配置的配置文件,分別是全局:/etc/bashrc和用戶個人:~/.bashrc。作用為:

1)用於定義本地變量

2)用於定義命令的別名

3)定義umask

第三個是logout類,這類為交互式登陸的shell進程提供終止及清理類功能的配置文件

以上三類文件我們可以在每一個用戶的家目錄中查看到,比如:

 ~]$ ls -a ./.bash*
./.bash_history  ./.bash_logout  ./.bash_profile  ./.bashrc

(第一個文件“ ./.bash_history”為歷史記錄的文件,暫時先跳過)

剩下的三個文件就是最開始提到的三類文件,它們分別包含著以下內容:

 ~]$ cat ./.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don‘t like systemctl‘s auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
 ~]$ cat ./.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
 ~]$ cat ./.bash_logout
# ~/.bash_logout

根據這些腳本文件中的內容我們可以發現./.bash_profile文件會去執行當前目錄下的./.bashrc文件,而./.bashrc文件會去執行/etc/bashrc文件,由此我們可以得出結論,當我們在登陸系統之後會先執行自己的配置文件,然後再去執行系統的配置文件。如果在自己的腳本中有一些和系統配置相同的內容或變量就會被系統的配置文件重寫。


在不同的登陸方式下會有不同的加載配置的方式,不同的登陸方式分別有以下兩種:

1.交互式登陸的shell,比如:

1)直接通過某個終端輸入帳號和密碼後登陸打開的shell進程

2)使用su - USERNAME或su -l USERNAME執行切換登陸打開的shell進程

2.非交互式登陸的shell

1)在圖形界面下,通過菜單或右鍵菜單打開的終端的shell進程

2)使用su USERNAME執行切換登陸打開的shell進程


交互式登陸的shell進程,會按照順序加載下列配置文件

/etc/profile -> /etc/profile.d/*.sh(profile.d相當於就是profile) -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc

非交互式登陸的shell進程,會按照順序加載下列配置文件

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


所有在命令行中執行的命令的操作,只要沒涉及到文件的修改的,一般都只是針對當前的shell聲明周期有效;只要shell進程結束,所有設置均失效,比如聲明一個變量,當我們重啟當前shell之後這個變量的值就丟失了。所以配置文件的作用就是使得我們賴以生存的配置信息可以長期有效,只要不修改配置文件中的內容,每一次打開shell都會使曾經的配置生效。但是當我們使用一些修改文本的命令對這些已經加載的文件進行修改後,並不能及時生效,只有在重啟之後或使用命令重新加載之後才能正常生效。可是有的時候並不能允許我們隨意的重啟,所以命令就稱為了一個最重要的方式。讓配置文件中新定義的配置能夠立即生效的方式:

1.source命令,使用格式:

source /PATH/TO/SOME_CONF_FILES(在當前的shell中運行腳本中的命令,比如腳本中有exit命令,那麽如果source運行,那麽會退出當前shell)

. /PATH/TO/SOME_CONF_FILES

2.exec命令,使用格式:

exec /PATH/TO/SOME_CONF_FILES


Linux系統用戶登陸