亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 923 | 回復: 0
打印 上一主題 下一主題

profile和bashrc的深入分析 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-11-17 17:17 |只看該作者 |倒序瀏覽

                用戶登錄后加載profile和bashrc的流程如下:
1)/etc/profile-------->/etc/profile.d/*.sh
2)$HOME/.bash_profile-------->$HOME/.bashrc---------->/etc/bashrc
說明:
bash首先執(zhí)行/etc/profile腳本,/etc/profile腳本先依次執(zhí)行/etc/profile.d/*.sh
隨后bash會執(zhí)行用戶主目錄下的.bash_profile腳本,.bash_profile腳本會執(zhí)行用戶主目錄下的.bashrc腳本,
而.bashrc腳本會執(zhí)行/etc/bashrc腳本
至此,所有的環(huán)境變量和初始化設定都已經(jīng)加載完成.
bash隨后調(diào)用terminfo和inputrc,完成終端屬性和鍵盤映射的設定.
其中PATH這個變量特殊說明一下:
如果是超級用戶登錄,在沒有執(zhí)行/etc/profile之前,PATH已經(jīng)設定了下面的路徑:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
如果是普通用戶,PATH在/etc/profile執(zhí)行之前設定了以下的路徑:
/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會是這樣(沒有其它自定義的基礎(chǔ)上)
/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行基本是打開動態(tài)鏈接庫文件和身份驗證的文件.
########################################################
########################################################
第二部分:
第22行是打開/etc/profile文件,如下:
########################################################
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
########################################################
#定義pathmunge函數(shù)
#echo $PATH | /bin/egrep -q "(^|:)$1($|:)"是過濾$PATH中的可執(zhí)行目錄,如果egrep到批配項,返回真但取反
#也就是不增加執(zhí)行目錄到$PATH中,選項-q禁止所有的輸出到標準輸出,不管匹配行。如果選中輸入行,以 0 狀態(tài)退出
#這里由 | (豎線)或者換行符隔開的多個正則表達式會匹配與任何一個正則表達式所匹配的字符串
#一個正則表達式可以被包括在“()”(括弧)中進行分組
########################################################
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 "(^|:)($|:)"
#因為調(diào)用pathmunge函數(shù),沒有加入after參數(shù),所以以上三個目錄都加在了$PATH變量的最前面
###########################################
# Path manipulation
if [ `id -u` = 0 ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi
##########################################
#調(diào)用pathmunge函數(shù),在$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的記錄數(shù)為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
##########################################
#執(zhí)行/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行是執(zhí)行/etc/profile.d/下的所有腳本,這個執(zhí)行過程在/etc/profile中定義.
見前面/etc/profile中的腳本分析.
下面是對/etc/profile.d/下腳本做的簡要說明,主要設定了環(huán)境變量(例如: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:設定語言環(huán)境,首先會加載/etc/sysconfig/i18n中的環(huán)境變量(LANG,SUPPORTED,SYSFONT)到shell中,
根據(jù)以上的變量再定義語言環(huán)境支持子集,最后再根據(jù)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,這里加載了用戶自己的環(huán)境設定腳本.
########################################################
########################################################
第五部分:
第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 數(shù)據(jù)庫用于定義終端和打印機的屬性及功能,包括各設備(例如,終端和打印機)的行數(shù)和列數(shù)以及要發(fā)送至該設備的文本的屬性
第三步打開inputrc
inputrc 文件為特定的情況處理鍵盤映射,這個文件被 Readline 用作啟動文件,Readline 是 Bash 和其它大多數(shù) shell 使用的與輸入相關(guān)的庫
########################################################
########################################################
第七部分:
第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退出的表現(xiàn).如果直接關(guān)閉掉terminal,則不會執(zhí)行.bash_logout和寫回.bash_history文件
.bash_logout腳本默認是調(diào)用clear清一下屏幕
########################################################
               
               
               
               
               

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/104564/showart_2096976.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP