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

李哲源*_*李哲源 10 linux ubuntu

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

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

/sys/class/backlight
Run Code Online (Sandbox Code Playgroud)

要么

/sys/devices/cpu/cpu#/online
Run Code Online (Sandbox Code Playgroud)

然后我必须在/etc/rc.local中执行此操作,否则它将无法正常工作.

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

谢谢.

Har*_*rry 14

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

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

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

你可以找到你需要的东西 bashrc

man bash
Run Code Online (Sandbox Code Playgroud)

当启动不是登录shell的交互式shell时,如果该文件存在,bash将从〜/ .bashrc读取并执行命令.使用--norc选项可以禁止此操作.--rcfile文件选项将强制bash从文件而不是〜/ .bashrc读取和执行命令.

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

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


李哲源*_*李哲源 14

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

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

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

希望这个摘要比技术更直观.