/etc/rc.local和〜/ .bashrc有什么区别?

这是一个Linux相关的问题。 我已经四处搜寻,但没有得到一个很好的解释。

在我看来,这两个文件configuration设置,当我login,但有什么区别? 我注意到在决定应该把两个不同的文件分开的时候,似乎有一些“规则”。 例如,如果我需要添加特定的searchpath到$ PATH,我应该在〜/ .bashrc中执行。 但如果我决定改变一些系统设置,比如

/sys/class/backlight 

要么

 /sys/devices/cpu/cpu#/online 

那么我必须在/etc/rc.local中执行此操作,否则将无法工作。

是否因为这些configuration在用户之间不能不同?

谢谢。

不同之处在于它们运行时的运行时间以及运行时的运行时间,即rc.local运行在运行级别的变化上并以root身份运行。 bashrc是特定于bash的,并且作为特定用户在非登录shell上运行。

你可以在这里找到rc.local一个很好的解释

脚本/etc/rc.local供系统管理员使用。 在所有常规系统服务启动之后,在切换到多用户运行级别的过程结束时,传统上执行它。 您可以使用它来启动自定义服务,例如安装在/ usr / local中的服务器。 大多数安装不需要/etc/rc.local,它是为少数需要的情况提供的。

你可以找到你需要关于bashrc

 man bash 

当一个不是登录shell的交互式shell被启动时,如果该文件存在,bash将读取并执行〜/ .bashrc中的命令。 这可以通过使用–norc选项来禁止。 –rcfile文件选项将强制bash从文件读取并执行命令,而不是〜/ .bashrc。

在这个问题上有更多关于bashrc的信息…

https://superuser.com/questions/49289/what-is-the-bashrc-file

这个问题在一个月前被我问过,尽管后来我意识到堆栈溢出并不是这个Linux问题的最佳网站。 感谢早些时候回答这个问题的人,但是我想在这里添加更多的解释。

基本上(至少)有三个阶段,用户可以在Linux中更改系统环境:

  1. 系统启动时 ; 如果我们想要永久性的系统设置 ,这个阶段是最合适的,并且应该通过/etc/... 。 例如,在我原来的问题中,可以通过这种方式设置背光以及一些CPU的联机/脱机管理 ,而/etc/rc.local是我应该编辑的正确的shell脚本。 通过“永久”,这意味着此更新将影响所有使用该系统的用户。
  2. 当用户登录时 ; 如果用户只想改变个人的Linux环境,这个阶段是最合适的。 因此, ~/ (或HOME )下的文件应该是正确的地方。 例如, ~/.profile (历史上称为./bash_profile~/bash_login )是一个在登录时运行的shell脚本。 ~/pam_environment 不是 shell脚本,但对于设置环境变量很有用(有关更多信息,请参阅Ubunte-official-wiki-environmental_variables )。
  3. 当用户启动一个bash shell ; 这个阶段更受限制,因为它只在bash shell(以及它的子进程)中有影响,因此不影响GUI环境。 所以如果一个用户正在从一个shell中完成大部分工作,那么这是一个合适的阶段。 与这个阶段相关的shell脚本是~/.bashrc 。 例如,环境变量PATH可以在这里改变。

希望这个总结比技术更直观。

.bashrc为每个bash会话启动(即每次打开一个shell)。 听起来好像你正在谈论的.bashrc ,就好像它是.bash_profile ,它是每个登录运行一次。

根据你运行的是什么样的设置, rc.local是一个传统的构造,但是传统上它是在启动时运行在最后一个运行级别。 你可以看到这个链接的其他相关的职位谈论rc.local

如果你在运行systemd的系统上,这通常默认包含在systemd软件包systemd-backlight.service