中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行profile與bashrc分析

發布時間:2021-12-29 12:01:04 來源:億速云 閱讀:157 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關如何進行profile與bashrc分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

/etc/profile : 此文件為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行。并從/etc/profile.d目錄的配置文件中搜集shell的設置.

/etc/bashrc : 為每一個運行bash shell的用戶執行此文件。當bash shell被打開時,該文件被讀取.

~/.bash_profile : 每個用戶都可使用該文件輸入專用于自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件。

~/.bashrc : 該文件包含專用于你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取.

~/.bash_logout : 當每次退出系統(退出bash shell)時,執行該文件.

另外:/etc/profile中設定的變量(全局)的可以作用于任何用戶;~/.bashrc等中設定的變量(局部)只能繼承/etc/profile中的變量,他們是"父子"關系

      ~/.bash_profile是交互式、login 方式進入bash運行的

      ~/.bashrc 是交互式 non-login方式進入bash運行的

通常二者設置大致相同,所以通常前者會調用后者。

* 每次bash作為login shell啟動時會執行.bash_profile。

主要有(我所知道的)以下幾種情形:

a) 每次登錄到服務器時默認啟動的shell

b) “su -l [USER]”時進入的shell

c) “bash --login”進入的shell

* 每次bash作為普通的交互shell(interactive shell)啟動時會執行.bashrc

常見的有:

a) “su [USER]”進入的shell

b) 直接運行“bash”命令進入的shell。

** 注意

1、在shell腳本中“#!/usr/bin/bash”啟動的bash并不執行.bashrc。因為這里的bash不是interactive shell。

2、bash作為login shell(login bash)啟動時并不執行.bashrc。雖然該shell也是interactive shell,但它不是普通的shell。

* 一般.bash_profile里都會調用.bashrc

盡管login bash啟動時不會自動執行.bashrc,慣例上會在.bash_profile中顯式調用.bashrc。

,-------------------------------------

| if [ -f ~/.bashrc ]; then

|    . ~/.bashrc

| fi

`-------------------------------------

.bash_profile顯示內容如下:

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

    . ~/.bashrc

fi

# User specific environment and startup programs

PATH=.:$PATH:$HOME/bin

BASH_ENV=$HOME/.bashrc

USERNAME="root"

export USERNAME BASH_ENV PATH

用戶登錄后加載profile和bashrc的流程如下:

1)/etc/profile--->/etc/profile.d/*.sh

2)$HOME/.bash_profile--->$HOME/.bashrc--->/etc/bashrc

說明:

bash首先執行/etc/profile腳本,/etc/profile腳本先依次執行/etc/profile.d/*.sh,隨后bash會執行用戶主目錄下的.bash_profile腳本,.bash_profile腳本會執行用戶主目錄下的.bashrc腳本,而.bashrc腳本會執行/etc/bashrc腳本,至此所有的環境變量和初始化設定都已經加載完成.

    bash隨后調用terminfo和inputrc,完成終端屬性和鍵盤映射的設定.

其中PATH這個變量特殊說明一下:

如果是超級用戶登錄,在沒有執行/etc/profile之前,PATH已經設定了下面的路徑:

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

如果是普通用戶,PATH在/etc/profile執行之前設定了以下的路徑:

/usr/local/bin:/bin:/usr/bin

這里要注意的是:在用戶切換并加載變量,例如su -,這時,如果用戶自己切換自己,比如root用戶再用su - root切換的話,加載的PATH和上面的不一樣.

準確的說,是不總是一樣.所以,在/etc/profile腳本中,做了如下的配置:

if [ `id -u` = 0 ]; then

    pathmunge /sbin

    pathmunge /usr/sbin

    pathmunge /usr/local/sbin

fi

如果是超級用戶登錄,在/etc/profile.d/krb5.sh腳本中,在PATH變量搜索路徑的最前面增加/usr/kerberos/sbin:/usr/kerberos/bin

如果是普通用戶登錄,在/etc/profile.d/krb5.sh腳本中,在PATH變量搜索路徑的最前面增加/usr/kerberos/bin

在/etc/profile腳本中,會在PATH變量的最后增加/usr/X11R6/bin目錄

在$HOME/.bash_profile中,會在PATH變量的最后增加$HOME/bin目錄

以root用戶為例,最終的PATH會是這樣(沒有其它自定義的基礎上):

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

以alice用戶(普通用戶)為例:

/usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/alice/bin

下面是做的腳本解析:

###############################################

#strace -o su -e trace=open su - alice

#grep ^open /etc/su|grep -v null|grep "= 3"|nl

###############################################

打開的文件如下:

1   open("/etc/ld.so.cache", O_RDONLY)      = 3

2   open("/lib/libcrypt.so.1", O_RDONLY)    = 3

3   open("/lib/tls/libc.so.6", O_RDONLY)    = 3

4   open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3

5   open("/etc/nsswitch.conf", O_RDONLY)    = 3

6   open("/etc/ld.so.cache", O_RDONLY)      = 3

7   open("/lib/libnss_files.so.2", O_RDONLY) = 3

8   open("/etc/passwd", O_RDONLY)           = 3

9   open("/etc/shadow", O_RDONLY)           = 3

10   open("/etc/group", O_RDONLY)            = 3

11   open("/etc/ld.so.cache", O_RDONLY)      = 3

12   open("/lib/libtermcap.so.2", O_RDONLY)  = 3

13   open("/lib/libdl.so.2", O_RDONLY)       = 3

14   open("/lib/tls/libc.so.6", O_RDONLY)    = 3

15   open("/dev/tty", O_RDWR|O_NONBLOCK|O_LARGEFILE) = 3

16   open("/etc/mtab", O_RDONLY)             = 3

17   open("/proc/meminfo", O_RDONLY)         = 3

18   open("/etc/nsswitch.conf", O_RDONLY)    = 3

19   open("/etc/ld.so.cache", O_RDONLY)      = 3

20   open("/lib/libnss_files.so.2", O_RDONLY) = 3

21   open("/etc/passwd", O_RDONLY)           = 3

22   open("/etc/profile", O_RDONLY|O_LARGEFILE) = 3

23   open("/etc/profile.d/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3

24   open("/etc/profile.d/colorls.sh", O_RDONLY|O_LARGEFILE) = 3

25   open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3

26   open("/etc/profile.d/glib2.sh", O_RDONLY|O_LARGEFILE) = 3

27   open("/etc/profile.d/gnome-ssh-askpass.sh", O_RDONLY|O_LARGEFILE) = 3

28   open("/etc/profile.d/krb5.sh", O_RDONLY|O_LARGEFILE) = 3

29   open("/etc/profile.d/lang.sh", O_RDONLY|O_LARGEFILE) = 3

30   open("/etc/sysconfig/i18n", O_RDONLY|O_LARGEFILE) = 3

31   open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3

32   open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3

33   open("/etc/profile.d/less.sh", O_RDONLY|O_LARGEFILE) = 3

34   open("/etc/profile.d/qt.sh", O_RDONLY|O_LARGEFILE) = 3

35   open("/etc/profile.d/vim.sh", O_RDONLY|O_LARGEFILE) = 3

36   open("/etc/profile.d/which-2.sh", O_RDONLY|O_LARGEFILE) = 3

37   open("/ceno/product/imeg/etc/profile", O_RDONLY|O_LARGEFILE) = 3

38   open("/home/alice/.bash_profile", O_RDONLY|O_LARGEFILE) = 3

39   open("/home/alice/.bashrc", O_RDONLY|O_LARGEFILE) = 3

40   open("/etc/bashrc", O_RDONLY|O_LARGEFILE) = 3

41   open("/home/alice/.bash_history", O_RDONLY|O_LARGEFILE) = 3

42   open("/home/alice/.bash_history", O_RDONLY|O_LARGEFILE) = 3

43   open("/etc/termcap", O_RDONLY)          = 3

44   open("/etc/inputrc", O_RDONLY|O_LARGEFILE) = 3

45   open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3

46   open("/home/alice/.bash_logout", O_RDONLY|O_LARGEFILE) = 3

47    open("/home/alice/.bash_history", O_WRONLY|O_APPEND|O_LARGEFILE) = 3

48    open("/home/alice/.bash_history", O_RDONLY|O_LARGEFILE) = 3

########################################################

第一部分:

從1-21行基本是打開動態鏈接庫文件和身份驗證的文件.

第二部分:

第22行是打開/etc/profile文件,如下:

########################################################

# /etc/profile

# System wide environment and startup programs, for login setup

# Functions and aliases go in /etc/bashrc

########################################################

#定義pathmunge函數

#echo $PATH | /bin/egrep -q "(^|:)$1($|:)"是過濾$PATH中的可執行目錄,如果egrep到批配項,返回真但取反

#也就是不增加執行目錄到$PATH中,選項-q禁止所有的輸出到標準輸出,不管匹配行。如果選中輸入行,以 0 狀態退出

#這里由 | (豎線)或者換行符隔開的多個正則表達式會匹配與任何一個正則表達式所匹配的字符串

#一個正則表達式可以被包括在“()”(括弧)中進行分組

pathmunge () {

    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then

       if [ "$2" = "after" ] ; then

          PATH=$PATH:$1

       else

          PATH=$1:$PATH

       fi

    fi

}

#如果uid為0的用戶,將在$PATH變量上加入/sbin/,/usr/sbin,/usr/local/sbin三個目錄-q "(^|:)($|:)"

#因為調用pathmunge函數,沒有加入after參數,所以以上三個目錄都加在了$PATH變量的最前面

# Path manipulation

if [ `id -u` = 0 ]; then

    pathmunge /sbin

    pathmunge /usr/sbin

    pathmunge /usr/local/sbin

fi

#調用pathmunge函數,在$PATH后面增加/usr/X11R6/bin

pathmunge /usr/X11R6/bin after

unset pathmunge

#ulimit設定-S為軟控制,-c為core file文件大小,這里是不做限制

# No core files by default

ulimit -S -c 0 > /dev/null 2>&1

#id -un是打印輸出當前的用戶名,例如:root

#定義了LOGNAME變量和MAIL變量,會有程序用到這些變量

USER="`id -un`"

LOGNAME=$USER

MAIL="/var/spool/mail/$USER"

#通過/bin/hostname獲取主機名

#定義history的記錄數為1000

HOSTNAME=`/bin/hostname`

HISTSIZE=1000

#如果沒有定義$INPUTRC并且不存在$HOME/.inputrc文件

#定義變量INPUTRC的值為/etc/inputrc

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then

    INPUTRC=/etc/inputrc

fi

export REMOTE_JAVA_DEBUG=on

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

#執行/etc/profile.d/下的所有腳本,-r是確認它們可讀

for i in /etc/profile.d/*.sh ; do

    if [ -r "$i" ]; then

        . $i

    fi

done

unset i

. /ceno/product/imeg/etc/profile

export PS1="\[\e[32;1m\][\u@\h]\[\e[33;1m\]:\[\e[31;1m\]\w>\\$ \[\e[0m\]"

第三部分:

從24行到36行是執行/etc/profile.d/下的所有腳本,這個執行過程在/etc/profile中定義.

見前面/etc/profile中的腳本分析.

下面是對/etc/profile.d/下腳本做的簡要說明,主要設定了環境變量(例如:PATH),alias等

/etc/profile.d/colorls.sh:對/etc/DIR_COLORS的提取,并用dircolors進行設定,最后定義了一些ls的alias

/etc/profile.d/glib2.sh:設定G_BROKEN_FILENAMES=1

/etc/profile.d/gnome-ssh-askpass.sh:設定SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass

/etc/profile.d/krb5.sh:增加/usr/kerberos/bin或/usr/kerberos/sbin到PATH變量中

/etc/profile.d/lang.sh:設定語言環境,首先會加載/etc/sysconfig/i18n中的環境變量(LANG,SUPPORTED,SYSFONT)到shell中,

根據以上的變量再定義語言環境支持子集,最后再根據LANG設定終端

/etc/profile.d/less.sh:設定LESSOPEN="|/usr/bin/lesspipe.sh %s",LANGVAR=$LANG

/etc/profile.d/qt.sh:設定QTDIR="/usr/lib/qt-3.1"

/etc/profile.d/vim.sh:設定alias vi=vim

/etc/profile.d/which-2.sh:設定alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

第四部分:

第37行open("/ceno/product/imeg/etc/profile", O_RDONLY|O_LARGEFILE) = 3,這里加載了用戶自己的環境設定腳本. 

第五部分:

第38行open("/home/alice/.bash_profile", O_RDONLY|O_LARGEFILE) = 3

第39行open("/home/alice/.bashrc", O_RDONLY|O_LARGEFILE) = 3

第40行open("/etc/bashrc", O_RDONLY|O_LARGEFILE) = 3

第一步:bash打開/home/alice/.bash_profile文件,

第二步:.bash_profile文件再判斷有無/home/alice/.bashrc,如果有加載.bashrc文件

第三步:最后通過.bashrc文件加載/etc/bashrc文件

第六部分:

在41行open("/home/alice/.bash_history", O_RDONLY|O_LARGEFILE) = 3

在42行open("/home/alice/.bash_history", O_RDONLY|O_LARGEFILE) = 3

在43行open("/etc/termcap", O_RDONLY)          = 3

在44行open("/etc/inputrc", O_RDONLY|O_LARGEFILE) = 3

第一步打開.bash_history文件準備記錄命令

第二步打開termcap文件

terminfo 數據庫用于定義終端和打印機的屬性及功能,包括各設備(例如,終端和打印機)的行數和列數以及要發送至該設備的文本的屬性

第三步打開inputrc

inputrc 文件為特定的情況處理鍵盤映射,這個文件被 Readline 用作啟動文件,Readline 是 Bash 和其它大多數 shell 使用的與輸入相關的庫

第七部分:

第46行open("/home/alice/.bash_logout", O_RDONLY|O_LARGEFILE) = 3

第47行open("/home/alice/.bash_history", O_WRONLY|O_APPEND|O_LARGEFILE) = 3

第48行open("/home/alice/.bash_history", O_RDONLY|O_LARGEFILE) = 3

這里是用戶用logout或exit退出的表現.如果直接關閉掉terminal,則不會執行.bash_logout和寫回.bash_history文件

.bash_logout腳本默認是調用clear清一下屏幕

上述就是小編為大家分享的如何進行profile與bashrc分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高邑县| 通江县| 乐山市| 怀来县| 通州市| 治多县| 荣昌县| 白城市| 章丘市| 黄陵县| 镇远县| 会昌县| 禄劝| 汝城县| 太保市| 鱼台县| 二手房| 苍南县| 镇雄县| 营口市| 来凤县| 桃江县| 昭苏县| 乡宁县| 和平县| 舞阳县| 庐江县| 宝清县| 历史| 汉川市| 武陟县| 泸州市| 鄱阳县| 闻喜县| 昆明市| 巴青县| 罗山县| 五寨县| 玉林市| 盖州市| 胶州市|