




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/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) 每次登录到服务器时默认启动的shellb) “su -l USER”时进入的shellc) “bash -login”进入的shell* 每次bash作为普通的交互shell(interactive shell)启动时会执行.bashrc常见的有:i) “su USER”进入的shellii) 直接运行“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 functionsif -f /.bashrc ; then . /.bashrcfi# User specific environment and startup programsPATH=.:$PATH:$HOME/binBASH_ENV=$HOME/.bashrcUSERNAME=rootexport USERNAME BASH_ENV PATH用户登录后加载profile和bashrc的流程如下:1)/etc/profile-/etc/profile.d/*.sh2)$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/sbinfi如果是超级用户登录,在/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 manipulationif id -u = 0 ; then pathmunge /sbin pathmunge /usr/sbin pathmunge /usr/local/sbinfi#调用pathmunge函数,在$PATH后面增加/usr/X11R6/bin#pathmunge /usr/X11R6/bin afterunset pathmunge#ulimit设定-S为软控制,-c为core file文件大小,这里是不做限制# No core files by defaultulimit -S -c 0 /dev/null 2&1#id -un是打印输出当前的用户名,例如:root#定义了LOGNAME变量和MAIL变量,会有程序用到这些变量#USER=id -unLOGNAME=$USERMAIL=/var/spool/mail/$USER#通过/bin/hostname获取主机名#定义history的记录数为1000#HOSTNAME=/bin/hostnameHISTSIZE=1000#如果没有定义$INPUTRC并且不存在$HOME/.inputrc文件#定义变量INPUTRC的值为/etc/inputrc#if -z $INPUTRC -a ! -f $HOME/.inputrc ; then INPUTRC=/etc/inputrcfiexport REMOTE_JAVA_DEBUG=onexport PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC#执行/etc/profile.d/下的所有脚本,-r是确认它们可读#for i in /etc/profile.d/*.sh ; do if -r $i ; then . $i fidoneunset i. /ceno/product/imeg/etc/profileexport PS1=e32;1muhe33;1m:e31;1mw$ e0m#第三部分:从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) =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论