一本让普通人了解 Ubuntu 启动/引导阶段的指南

一本让普通人了解 Ubuntu 启动/引导阶段的指南

这是因为我想在每次系统启动时运行一个脚本。

我注意到,有很多地方,例如、、、,init.d以及大量其他地方,在系统每次启动时都会运行。这很容易理解。但它确实显示了系统启动的模糊图景。rc.localbash_profile~/config/autostart~/local/share/applications

有人能告诉我如何简要快速地理解

  1. 启动 Ubuntu 系统涉及的各个阶段以及
  2. (忽略那些不太有趣的垃圾)一般来说,用户对于他的定制真正感兴趣的是什么?

请考虑一下,我已经在谷歌上找到了一些糟糕的资源,其中包含难以理解的细节。如果您能用外行人能理解的语言解释一下,或者至少给我指出一个不是外行人无法阅读的厚厚参考手册的地方,我将不胜感激。

我要对那些吹毛求疵的人说,这些答案毫无用处:

虽然它们可能有一些相似之处,但显然它们都没有为初学者提供任何有用的东西。例如,最后一个只能获得一个图表生成解决方案。

答案1

GRUB 加载内核,内核启动 init 进程(通常是/sbin/init)。接下来发生的事情通常很有趣。在 Ubuntu 历史的不同阶段,有三个 init 系统:

  1. SysV 初始化黑暗时代
  2. 暴发户,Ubuntu 9.10 - 14.10
  3. 系统化,来自 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,但每会话 init 是 Upstart)。例如,请参阅我的回答:如何在 Unity 登录/注销时运行脚本?


现在你可能可以更好地理解如何在启动时运行脚本?


~/.bash_profile~/.profile~/.bashrc等不适合在启动时启动命令。这些通常由命令行 shell 读取,因此当您启动终端或登录 TTY 时。因此,.bashrc适合每次打开终端时运行命令,以及.profile当您从 TTY 登录时运行命令。(请参阅这个答案)这些文件也主要用于设置环境变量,但环境变量的规范位置是/etc/environment系统范围的变量和~/.pam_environment用户特定的变量。请参阅这个答案

~/.local/share/applications与本次讨论无关。

相关内容