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

时间:2016-04-02 16:14:05

标签: linux ubuntu

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

在我看来,两个文件都在我登录时配置设置,但是有什么区别吗?我注意到在确定应该分成两个不同文件的内容时似乎存在“一些规则”。例如,如果我需要为$ PATH添加特定的搜索路径,我应该在〜/ .bashrc中进行。但是如果我决定改变一些系统设置,比如

/sys/class/backlight

/sys/devices/cpu/cpu#/online

然后我必须在/etc/rc.local中执行此操作,否则它将无效。

是否因为这些配置在用户之间无法区分?

感谢。

3 个答案:

答案 0 :(得分:12)

这个问题是我一个月前问到的,虽然后来我意识到堆栈溢出并不是这个Linux问题的最佳站点。感谢之前回答过这个问题的人,但我想在这里补充更多解释。

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

    系统启动时
  1. ;如果我们想要永久系统设置,这个阶段是最合适的,并且应该通过/etc/...进行。例如,在我原来的问题中,可以通过这种方式设置背光以及某些CPU的在线/离线管理,{{1我应该编辑正确的shell脚本。通过" permanent",这意味着此更新将影响使用该系统的所有用户。
  2. 用户登录时;如果用户只想更改其个人Linux环境,则此阶段最合适。因此,/etc/rc.local(或~/)下的文件应该是正确的查找位置。例如,HOME(历史上称为~/.profile./bash_profile)是在登录时运行的shell脚本。 ~/bash_login 是一个shell脚本,但对设置环境变量很有用(有关详细信息,请参阅Ubunte-official-wiki-environmental_variables)。
  3. 用户启动bash shell时
  4. ;这个阶段受到更多限制,因为它只在bash shell(以及它的子进程)中有效,因此不会影响GUI环境。因此,如果用户通过shell完成大部分工作,那么这是一个合适的阶段。与此阶段相关的shell脚本为~/pam_environment。例如,可以在此处更改环境变量~/.bashrc
  5. 希望这个摘要比技术更直观。

答案 1 :(得分:11)

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

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

  

脚本/etc/rc.local供系统管理员使用。它是   传统上在所有正常系统服务之后执行   在切换到多用户的过程结束时开始   运行级别。您可以使用它来启动自定义服务,例如a   安装在/ 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

答案 2 :(得分:2)

每个.bashrc会话开始运行

bash(即每次打开shell时)。听起来好像你正在谈论.bashrc,好像它是.bash_profile,每次登录都会运行一次。

根据您运行的设置类型rc.local是遗留构造,但传统上它是在启动期间在最后一个运行级别运行的。对于其他相关帖子,您可以看到此link,其中涉及rc.local

如果你正在运行systemd的系统,则默认情况下会在systemdsystemd-backlight.service中包含此内容。