/etc/rc.local和~/.bashrc之间有什么区别?

14

这是一个与Linux相关的问题。我已经搜索过,但没有得到一个好的解释。

在我看来,这两个文件都可以在登录时配置设置,但它们之间有什么区别吗?我注意到在决定应该放入两个不同文件中时似乎有“一些规则”。例如,如果我需要将特定搜索路径添加到$PATH中,我应该在~/.bashrc中进行操作。但是如果我决定更改某些系统设置,比如

/sys/class/backlight
或者
/sys/devices/cpu/cpu#/online

否则它将无法正常工作,我必须在/etc/rc.local中进行这样的操作。

是因为这些配置不能区分用户吗?

谢谢。

3个回答

22

一个月前,我曾在Stack Overflow上提出过这个Linux问题,但后来意识到那不是最好的网站。感谢之前回答过这个问题的人们,但我想在这里补充一些更多的解释。

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

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

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


21
区别在于它们何时运行以及在运行时作为谁运行,即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 file选项将强制bash从文件中读取并执行命令,而不是从~/.bashrc中读取。更多关于bashrc的信息可以在这个问题中找到...

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


2

.bashrc文件会在每次启动bash会话时运行(即每次打开shell时)。听起来你好像把.bashrc当作只运行一次的.bash_profile

根据你使用的系统设置,rc.local可能是一个旧的构造,但传统上它会在最后一个运行级别中启动。你可以查看这个链接了解其他相关帖子,讨论rc.local

如果你正在使用systemd的系统,通常默认包含在systemd软件包systemd-backlight.service中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接