一个外行的指南,了解ubuntu启动/启动的阶段
它起源于我想在每次系统启动时运行脚本的情况。
我注意到有很多地方,比如init.d
, rc.local
, bash_profile
, ~/config/autostart
, ~/local/share/applications
以及每次系统启动时运行的大量其他地方。 这是可以理解的。 但它确实显示了系统启动的模糊图像。
我是否可以知道是否有人可以指出我如何简要快速地理解标准资源
- 启动Ubuntu系统所涉及的各个阶段
- (留下不那么有趣的垃圾)一般来说,用户对他的自定义的实际兴趣是什么?
请注意,我确实已经谷歌,并发现可怕的资源与难以理解的细节。 如果您能够以外行的方式实际解释自己,或者至少指出一个不是一个外行人无法读取的大胖参考手册的地方,将不胜感激。
让我为那些挑剔的人做好准备,这些答案都没有用:
- 如何理解引导加载的不同阶段?
- 免费在线Ubuntu用户指南,简单易懂?
- Ubuntu启动过程如何工作?
虽然他们可能有一些相似之处,但他们都明显没有获得任何对初学者有用的东西。 例如,最后一个只能获得一个图表生成解决方案。
GRUB加载内核,内核启动init进程(通常是/sbin/init
)。 这是通常感兴趣的事情之后发生的事情。 在Ubuntu历史的各个阶段,有三个init系统:
- SysV init ,黑暗时代
- Upstart ,Ubuntu 9.10 – 14.10
- Systemd ,来自Ubuntu 15.04
除了其他职责之外,初始系统通常会启动应该运行的各种服务。 init系统做什么?
/etc/init.d
是旧sysv init系统所关注的shell脚本所在的位置。 如果可以,请避免它。 它仅出于向后兼容的原因而存在。
/etc/rc.local
是sysv init时代的一个脚本,由于向后兼容性,它仍然有效。 以root身份在系统启动时运行短命令是很好的。 它在启动期间执行一次。 对于长期任务,请改用Upstart( /etc/init
)或systemd( /etc/systemd/system
)服务。 Upstart和systemd都允许有条件地启动程序,但它们的执行方式是不同的。
登录GUI后,大多数桌面环境将启动~/.config/autostart
列出的应用程序。 这是登录GUI后应该运行的命令的好地方,比如启动邮件客户端。 它们在您每次登录时都会执行,因此每次您注销并重新登录时,都会执行它们(与/etc/rc.local
不同)。
~/.config/upstart
就像~/.config/autostart
,但它是由登录GUI时启动的每会话Upstart进程处理的。 它比~/.config/autostart
更灵活,它只是在登录时执行命令。 这在Ubuntu 16.10之前很有用,其中每个会话进程现在是systemd(从15.04到16.04,主init是systemd,但是每个会话都是Upstart)。 例如,请参阅我的答案: 如何在Unity登录/注销上运行脚本?
现在您可以更好地了解如何在启动时运行脚本中的选项?
~/.bash_profile
, ~/.profile
, ~/.bashrc
等不适合在启动时启动命令。 这些通常由命令行shell读取,因此当您启动终端或登录TTY时。 因此, .bashrc
适用于每次打开终端时运行命令,而.profile
适用于从TTY登录时。 (请参阅此答案 。)这些文件也主要用于设置环境变量,但环境变量的规范位置是系统范围变量的/etc/environment
和用户特定变量的~/.pam_environment
。 看到这个答案 。
~/.local/share/applications
与此讨论无关。