分享

Linux中系统变量rc.local、profile、bashrc、bash_profile之间的区别和联系

 岚风窗 2015-08-05

使用者自订启动启动程序 (/etc/rc.d/rc.local)

在 完成默认 runlevel 指定的各项服务的启动后,如果我还有其他的动作想要完成时,举例来说, 我还想要寄一封 mail 给某个系统管理账号,通知他,系统刚刚重新启动完毕,那么是否应该要制作一个 shell script 放置在 /etc/init.d/ 里面,然后再以连结方式连结到 /etc/rc5.d/ 里面呢?呵呵!当然不需要!还记得上一小节提到的 /etc/rc.d/rc.local 吧? 这个文件就可以运行您自己想要运行的系统命令了。

也就是说,我有任何想要在启动时就进行的工作时,直接将他写入 /etc/rc.d/rc.local , 那么该工作就会在启动的时候自动被加载喔!而不必等我们登陆系统去启动呢! 是否很方便啊!一般来说,鸟哥就很喜欢把自己制作的 shell script 完整档名写入 /etc/rc.d/rc.local ,如此一来,启动就会将我的 shell script 运行过,真是好棒那!

  When  bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profileif that file
       exists.  After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is read-
       able.  The --noprofile option may be used when the shell is started to inhibit this behavior.
       以上是man bash的原文. 不知道你看得懂不. 
       意思就是login shell会执行/etc/profile. 所以/etc/profile是影响所有用户的. 而且是登录的时候最先执行的. 然后依次~/.bash_profile, ~/.bash_login , ~/.profile. 
       rc.local应该是比/etc/profile更早, 登录之前就执行了.

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.

英文描述为:

# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

所以如果你有对/etc/profile有修改的话必须得重启你的修改才会生效,此修改对每个用户都生效。

/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.

英文描述为:

# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

如果你想对所有的使用bash的用户修改某个配置并在以后打开的bash都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个bash即可生效。

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.

此文件类似于/etc/profile,也是需要需要重启才会生效,/etc/profile对所有用户生效,~/.bash_profile只对当前用户生效。

~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.(每个用户都有一个.bashrc文件,在用户目录下)

此文件类似于/etc/bashrc,不需要重启生效,重新打开一个bash即可生效,  /etc/bashrc对所有用户新打开的bash都生效,但~/.bashrc只对当前用户新打开的bash生效。

~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
_________________________________________________________________________________________~/.bash_profile 是交互式、login 方式进入bash 运行的;
~/.bashrc 是交互式 non-login 方式进入bash 运行的;
通常二者设置大致相同,所以通常前者会调用后者。

>不过这要区别登录前,也就是说,在登陆之前,系统处于开机启动的流程中,会自动的处执行一系列的脚本文件,以便设置好系统的环境参数,这个过程并不叫做启动完毕,真正的启动完毕是在出现登陆界面时候,在此之前只设置系统的参数,并不会去设置个人用户的参数,个人用户的参数要在用户输入用户名密码以及通过验证后才设置。


①对于单个用户的,即 :

  • 对象——————单个用户--------局部---------对于一些局部任务如果要它登陆后立即执行就放在~/.bash_profile脚本中。

~/.bash_profile 这个脚本设置了用户的登陆环境,当用户登陆后,就会立即执行该脚本下了内容,而且只执行一次。

~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取,每打开一次shell就执行一次,如果在这个脚本中加入了/usr /bin/gnome-terminal 这条语句后 系统就会陷入死循环。

①对于系统所有用户的,即 :

  • 对象——————系统或者系统的所有用户---------全局-----对于全局任务如果要所有用户中不管哪个用户登陆后立即执行就放在/etc/profile脚本中。

/etc/profile

/etc/bashrc

上面的这些并不是等于开机自启动的:如:chkconfig 命令以及,rc.d等文件脚本。这些脚本是在没有登陆之前就已经执行完毕了。

————————————————————————————————————————————

wKioL1NuVrWj1h-6AADPUIb6mGA203.jpg


当用户输入账号密码登录一个用户终端的时候,那么,首先,系统会读取文件/etc/profile,加载其中的配置,/etc/profile这个文件又会调用几个文件,包括/etc/sysconfig/i18n这个文件用来设置终端的语言信息,/etc/inputrc这个文件主要设置终 端的输入方式,比如Ctrl+C之类的情况,还有一个比较重要的就是/etc/profile.d/目录下的脚本文件,那么如果真的需要修改一些全局的 bash环境的话,最好是将环境写成一个shell脚本,放在/etc/profile.d/目录中,那么登录的时候,/etc/profile会自动去 调用。

那么,面说到的是用户登录的时候 ,执行的全局文件,那么在自己的家目录下,还会执行个人的 shell配置文件,主要有.bash_profile,.bash_login,.profile这三个文件,一般情况下,你的家目录下应该只 有.bash_profile这个文件,因为系统只执行这三个文件中的一个,如果没有找到.bash_profile,才会继续搜 索.bash_login,没有的话,搜索.profile。

用vim编辑器打开.bash_profile,可以看到,这个文件又会调用~/.bashrc这个文件,可以看到一些alias设置,所以,如果你需要设置你自己个人的一些alias和一些环境变量的时候,强烈建议写在这个文件中或者~/.bash_profile中。但是还是写在~/.bashrc中比较好,为什么呢?因为有一种情况,比如你在X window下,直接开启一个命令行终端的话,是不用输入账号密码登录的,都有印象吧,那么在这个情况下,实际是不会去读取/etc/profile,~/.bash_profile这些文件的,而是直接读取./bashrc这个文件,所以,如果你想你的环境设置在任何时候都有效的话,建议写入这个文件。

    最后再提一点,那么看~/.bashrc这个文件中的内容,可以看到,这个文件其实还会调用/etc/bashrc文件的内容,用vim打开/etc/bashrc这个文件看看,会发现在这个文件的最后又会调用/etc/profile.d/里面的sh文件,呵呵,很有趣吧~~~其实Linux中很多都是这样,最后都是殊途同归,到一个文件中。


_______________________________________个人总结_______________________________________________________

/etc/profile——登录shell读取,系统所有,仅执行一次

~/.bash_profile——登录shell读取,个人所有,仅执行一次,该文件会递归读取~/.bashrc

/ect/bashrc——Ubuntu没有此文件,与之对应的是/ect/bash.bashrc,全局(公有)的bash执行时,不管是何种方式,都会读取此文件。

~/.bashrc——非登录shell读取(每打开一个终端都会读取),个人所有


若想个人配置在任何时候都生效,建议个人配置写在~/.bashrc(因为~/.bash_profile也读取前者)

注:此文章来源于网络http://www./content-4071718.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多