在 Linux 系统中,直接按电源键强制关机的操作绝对不可取,这种行为极易造成文件系统的严重损坏。
核心原因在于,Linux 运行时需要将硬盘分区的文件系统挂载到系统目录树中。所谓挂载,就是把光驱、硬盘分区这类存储设备的文件目录,与系统的整体文件结构建立关联,使其能够被系统识别和访问。
而当系统停止运行时,通过 umount 命令正确卸载已挂载的文件系统至关重要。如果直接按电源键断电,系统将没有时间执行卸载流程,未正常卸载的文件系统大概率会出现数据紊乱或结构损坏的问题。
你可能会说,诸如突然停电这类不可控因素,都可能导致设备意外关机,岂不是文件系统会被损坏。值得庆幸的是,Linux 主流文件系统具备一定的自愈能力,通常会在重启时执行全盘检查并完成修复,但这种硬关机后的容错性并非绝对可靠,无法保证系统数据毫无损伤。
因此,最稳妥的做法始终是通过 shutdown 命令执行规范关机。
shutdown -h now
上面命令是立即关闭 Linux 系统的正确方法。-h 选项表示停机,now 表示立即关机。
如果你通过 Linux 机器运行网络,当需要停机维护时,此命令可能并非理想选择。因为此时,其他同事可能正在访问服务器服务或保存关键工作数据,强制关机将导致服务中断或数据丢失。建议采用如下操作方案:
shutdown -h +15
上面命令表示系统将在15分钟后停止运行(+15)。
重启 Linux 系统最常见的原因是加载新安装的内核。您可能需要对现有内核进行修改,或更新至刚发布的全新版本。此时必须重启系统才能使修改生效。重启 Linux 系统时请使用 -r 选项:
shutdown -r +15
上面命令是 Linux 系统中用于计划重启的命令,表示安排系统在 15 分钟后自动重启。
注意:执行 shutdown -r +15 后,系统会向所有在线用户发送提示(如 “System will reboot in 15 minutes”),提醒保存工作。
Linux 系统中的部分命令(例如 shutdown)默认仅限 root 用户执行。而当 Linux 被用作个人工作站操作系统时,你可能需要将 shutdown 命令添加到 sudoers 文件的命令列表中。这样一来,工作站的普通用户便能自行执行关机操作。
Cmnd_Alias TOOLS = /bin/mount, /bin/umount, /sbin/shutdown
上述命令是 Linux 系统中 sudo 配置文件(通常是 /etc/sudoers) 里的命令别名定义语句,核心作用是将 /bin/mount(挂载文件系统)、/bin/umount(卸载文件系统)、/sbin/shutdown(关机 / 重启)这三个系统关键命令,统一命名为一个别名 TOOLS,方便后续在 sudo 规则中批量引用。
定义这个别名后,在 sudoers 文件中可以简化规则配置。比如:
# 未用别名的写法(冗长) user ALL=(ALL) /bin/mount, /bin/umount, /sbin/shutdown # 用别名的写法(简洁) user ALL=(ALL) TOOLS
Linux 中最重要的配置文件位于 /etc 目录下,任何优秀的系统管理员都会对这个目录了如指掌。以下是您可能需要定期修改的关键文件列表:
hosts hosts.allow hosts.deny
让我们来看看这些文件的作用。
hosts 文件是一份包含网络中所有机器名称及其 IP 地址的列表。每当向网络添加新机器时,都应在此处添加一条记录。实际上,在域名系统(DNS)出现之前,曾存在一个用于定位互联网所有机器的“主”hosts 文件。当然,那是在互联网尚未普及的年代。该文件格式如下:
# this machine 127.0.0.1 localhost # other hosts in the local network 192.168.0.1 enterprise.mycompany.com enterprise 192.168.0.2 constellation.mycompany.com constellation 192.168.0.3 intrepid.mycompany.com intrepid 192.168.0.4 exeter.mycompany.com exeter 192.168.0.5 router.mycompany.com router
命名方案完全由您决定,这里展示的是一个连接至互联网的 C 类网络(192.168.X.X),可能通过某条高速线路接入。如您所见,第一部分是IP地址,随后是包含域名和顶级域名的完全合格主机名。若未连接互联网,请勿使用 .com、.org 等顶级域名。末尾部分是主机名称或“别名”。该 hosts 文件首行缺少末尾部分,因为 Linux 系统支持“回环”功能。当您需要在无实际网络环境的机器上运行网络程序时,此功能便可派上用场。可将 127.0.0.1 视为机器内部的虚拟网络。当输入 127.0.0.1 或 localhost 时,请求会“回环”至本机。即使存在外部网络,此功能仍常用于运行开发版 Web 服务器等场景,以限制外部访问。
hosts.allow 文件用于控制哪些用户能访问本机提供的服务。其内容可能类似如下:
ALL : 192.168. imapd: .friendly.com, 999.99. sshd: .friendly.com
语法很简单,您需定义服务(all、imapd、sshd),并用冒号分隔允许使用这些服务的主机列表。主机名或IP地址必须以逗号分隔。名称和数字均无需完整,但应在适用位置以点(.)开头或结尾。例如上文示例中,主机名可以点开头,这意味着 friendly.com 域内的任意机器均可访问该服务。(例如:quite.friendly.com、very.friendly.com)。对于数字地址,可在首组数字后添加点号来指定允许访问服务的网络段,如示例中的 192.168. 和 999.99 所示。
在此示例中,本地网络(192.168.)内的计算机可使用所有可用服务(ALL)。属于 .friendly.com 域及 999.99. 网段的计算机可访问 IMAP 守护进程(通常用于通过 IMAP 协议访问电子邮件)。.friendly.com 域的计算机可通过 SSH(安全外壳协议)登录至本网络。
hosts.deny 文件用于控制哪些主机无法访问您机器提供的服务。多数 hosts.deny 文件格式相同,其内容如下所示:
ALL : ALL
这意味着所有用户都被拒绝使用所有服务。这是标准做法。正如我们在 cron 和 at 中看到的,X.deny 和 X.allow 文件遵循这样的原则:未被明确允许使用服务的用户将被拒绝访问。虽然这听起来合乎逻辑,但需要重申的是:若采用 hosts.deny 方案,只要用户名未被列出,即可使用所有提供的服务。若采用 hosts.allow 模式,则需明确列出允许使用特定服务的用户,其余用户均被默认拒绝。这种方式更易于维护且安全性更高。
resolv.conf 主要用于列出您的计算机用于在互联网上查找其他计算机的域名服务器。如下:
search mycompany.com domain mycompany.com nameserver 192.168.0.3 nameserver 999.99.9.9 nameserver 999.99.9.8
其中,前两行配置 search 和 domain 用于定义域名搜索后缀:当用户仅输入简短主机名(例如在浏览器中输入 intrepid)时,系统会自动将配置的后缀(.mycompany.com)附加到主机名后,拼接为完整域名 intrepid.mycompany.com 再进行解析。
其余以 nameserver 开头的条目,则依次列出了 DNS 服务器的 IP 地址,系统会按照从上到下的顺序依次尝试这些服务器进行域名解析。通常第一条记录是本地网络内的 DNS 服务器(如示例中的 192.168.0.3),后续条目则多为互联网服务提供商(ISP)或公共 DNS 服务商提供的地址。
⚠️注意:
domain mycompany.com 定义本地域名,即当前主机所属的域名后缀。当你输入简短主机名(如 intrepid)时,系统会自动拼接该后缀,解析为 intrepid.mycompany.com。一个 resolv.conf 文件中只能配置一条 domain 指令。
search mycompany.com 定义域名搜索列表,功能与 domain 类似,但支持配置多个后缀(用空格分隔,如 search mycompany.com dev.mycompany.com)。系统会按顺序尝试将列表中的后缀拼接到主机名后进行解析,直到解析成功。优先级高于 domain,如果同时配置 search 和 domain,search 会覆盖 domain 的作用。