禁用未使用的守护进程以加快启动顺序
2023-06-08 08:00:00
·
飞浪
·
重新选择
许多Linux发行版在启动时通常会启动大量守护进程,导致您在启动机器后需要等待很长时间才能开始工作。大多数用户很少(甚至根本不使用)使用其中一些守护进程。本教程介绍如何以适当的方式禁用未使用或很少
许多 Linux 发行版在启动时通常会启动大量守护进程,导致您在启动机器后需要等待很长时间才能开始工作。大多数用户很少(甚至根本不使用)使用其中一些守护进程。本教程介绍如何以适当的方式禁用未使用或很少使用的守护进程,从而加快启动顺序并减少 CPU 负载。注意:虽然本教程旨在对系统友好且不危险,但如果您不知道自己在做什么,请不要禁用任何服务。特别是在服务器系统上,(意外)禁用重要服务可能会产生严重后果。本教程按原样提供,不提供任何担保等。小心点,好吗?=)另一个注意事项:本教程使用“服务”和“守护进程”这两个词。这些词的含义几乎相同,尽管服务更侧重于进程的作用,或者换句话说,进程提供哪些服务。守护进程一词指的是“物理”(软件怎么可能是物理的?)进程。
第一部分:如何做(或如何做)
事实上,本教程分为两部分,以便于阅读。第一部分以简短明了的方式解释了如何禁用这些服务(以及要禁用哪些服务)。第二部分(教程部分)解释了背后的原理,并深入了解了 Linux 启动。如果您不想要和/或不需要更深入的了解,请不要阅读第二部分 =)。
了解你的系统正在运行什么
大多数发行版都提供某种工具,允许您管理计算机启动时启动的守护进程。最常见的工具是 chkconfig,它具有命令行界面。您可以使用以下命令列出启动到图形模式时启动的所有进程:
[rechosen@localhost ~]$ /sbin/chkconfig --list | grep "5:on"
运行文本模式系统时,通常会启动到运行级别 3。要查看这些系统在启动时启动的进程,请使用以下命令:
[rechosen@localhost ~]$ /sbin/chkconfig --list | grep "3:on"
许多发行版还具有用于守护进程启动配置的 GUI。其中一个著名的是 serviceconf。您通常会在“系统”或“配置”等区域找到这样的 GUI,名称为“服务”或“启动配置”或“守护进程”(请注意,第二个也可以是引导加载程序的配置 GUI,如 GRUB 或 lilo,这不是我们现在要处理的)。建议使用 GUI 配置器,因为它们通常比 chkconfig 更适合您的发行版。以下部分包含在某些情况下可以禁用的守护进程列表。将系统上启动的守护进程列表与下面的列表进行比较,阅读说明并确定禁用它是否是个好主意。一旦您决定要禁用哪些服务,请继续禁用守护进程。
常见的未使用/很少使用的守护进程
以下列表包含“普通”最终用户可能不会使用的守护进程。您可以将系统上启动的守护进程列表与此列表进行比较,看看是否可以安全地禁用其中一些守护进程。
- 蓝牙
- hcid、sdpd 和 hidd(这些守护进程提供蓝牙服务,如果您没有任何蓝牙硬件,则不需要它们)
- 印刷
- cups 和 cups-config-daemon(这些守护进程提供打印机服务,如果您的本地 PC 或网络 PC 上没有连接任何打印机硬件,则不需要它们)
- hpiod 和 hpssd(这些守护进程为 HP 打印机提供广泛支持。如果您从未使用 HP 打印机打印,可以安全地禁用它们)
- 安慰
- gpm(此守护进程为基于文本的应用程序(如 Midnight Commander)提供鼠标支持。它还提供在控制台环境中使用鼠标中键进行复制/粘贴的功能。如果您不经常使用控制台,可以将其禁用)
- 网络服务器
- httpd(此守护进程提供网络托管服务,对于不托管任何网站或网络界面的工作站和服务器而言是不必要的)
- mysqld 和 postgresqld(这些守护进程提供数据库后端服务。如果您没有运行 Web 服务器,通常可以禁用它们,尽管有些应用程序使用这些数据库来存储数据)
- 防火墙
- netfilter/iptables(此守护进程提供防火墙服务。如果您位于带有内置防火墙的路由器或 Smoothwall 后面,则这些服务就不是必需的)
- 红外线的
- irda(此守护进程使您的计算机能够使用 IR(红外线)硬件与其他设备进行通信。如果您没有这样的硬件,您可以安全地禁用此服务)
- lircd(此守护进程使用 IR(红外线)接收器提供远程控制支持。如果您没有能够接收 IR 信号的硬件,则可以禁用它)
- 多 CPU
- irqbalance(此守护进程平衡系统中多个 CPU 之间的中断。如果您没有多个 CPU 或双核处理器,则可以禁用它)
- 软件 RAID
- mdmonitor、mdadm 和 mdmpd(这些守护进程提供有关软件 RAID 设备的信息和管理功能。如果您不使用软件 RAID,则不需要它们)
- DNS 服务器
- 命名(也称为 BIND)(此守护进程提供 DNS 服务器功能。工作站通常不需要它)
- 远程内核日志记录
- netdump、netcrashdump 和 netconsole(这些服务提供通过网络连接进行内核日志记录和调试的功能。仅当您想在另一台计算机上查看内核的日志和调试消息时才需要)
- 文件服务器
- NFS 服务器
- nfs(此守护进程提供 NFS 服务器功能,允许其他具有 NFS 客户端的计算机连接到您的计算机并访问文件。如果您不需要/不希望其他人使用 NFS 访问您的系统,您可以禁用此功能)
- portmap(此守护进程管理 RPC 连接,由 NFS 和 NIS 等协议使用。仅在需要充当服务器的计算机上才需要)
- rpcsvcgssd(此守护进程管理 NFSv4 服务器的 RPCSEC GSS 上下文,除非您正在运行 NFS 服务器,否则不需要它)
- Samba 服务器
- smbd 和 nmbd(这些守护进程允许其他计算机(Windows 计算机也是如此)访问您的文件。如果您不希望其他人通过网络访问您的文件,则不需要执行此操作)
- 网络身份验证
- nscd(此守护进程处理密码和组查找并缓存其结果。仅在使用“慢速”名称服务时才需要,如 NIS、NIS+、LDAP 或 hesiod)
- portmap(此守护进程管理 RPC 连接,由 NFS 和 NIS 等协议使用。仅在需要充当服务器的计算机上才需要)
- 远程时间设置
- ntpd(此守护进程将您的系统时间设置为从所谓的 ntp 服务器检索的值,该服务器通常提供非常准确的时间。虽然这是一个有用的功能,但它往往会大大减慢系统启动速度,尤其是在找不到服务器的情况下)
- 流程会计
- psacct(也称为 acct)(此守护进程提供进程记帐,可让您更详细地了解系统上命令的执行情况。除非您正在运行一个由许多您不能完全信任的人访问的服务器,否则通常不需要此功能)
- 明文认证请求
- saslauthd(此守护进程处理 SASL 纯文本身份验证请求,并且仅在需要使用 SASL 机制进行通信的服务器上才需要)
- 邮件服务器
- sendmail(此守护进程充当服务器,发送和转发电子邮件。您不需要此守护进程即可发送普通消息。只有当您需要计算机充当邮件服务器时才需要它)
- spamd(也称为 Spamassassin)(此守护程序检查收到的邮件中是否存在垃圾邮件。通常可以禁用此功能,但请记住,某些邮件客户端(如 KMail)可以使用 spamd 的功能)
- SSH 服务器
- sshd(此守护进程允许使用 SSH 协议远程登录到您的计算机。如果您不想要/不需要此访问权限,可以禁用它)
- VNC 服务器
- vncserver 或 xvnc(此守护进程允许其他人获取实际运行在您的计算机上的虚拟图形桌面)
- 任务计划程序
- cron(及其变体,如 vixie-cron...)(此守护进程在您的系统上运行定期任务,如更新搜索索引或手册页索引,以及轮换日志文件。这通常是服务器系统正常运行所必需的,但工作站可能无需它即可运行)
禁用守护进程
当使用 GUI 管理启动时启动的守护进程时,通常只需取消选中复选框即可禁用它们。使用 chkconfig 时,您可以使用以下语法:
[rechosen@localhost ~]$ /sbin/chkconfig name off
将“name”替换为您要禁用的守护进程的名称。如果您不小心禁用了错误的守护进程,您可以通过以下方式再次将其打开:
[rechosen@localhost ~]$ /sbin/chkconfig 名称 重置
你可能会认为这不合逻辑,但应该是:
[rechosen@localhost ~]$ /sbin/chkconfig 名称
嗯,它不应该。上面的命令将打开守护进程的启动,使其处于一组固定的运行级别,而不管以前的值是什么。这并不是我们想要的,因为我们希望它将其切换回旧状态。单词“reset”告诉 chkconfig 恢复 init 脚本中指定的值,该脚本包含有关如何启动守护进程的说明。这些值是(或应该是)默认值。请记住,默认值并不总是等于旧值,但它们通常会比“on”所暗示的值更接近旧值。您可能需要修改选定数量的运行级别来更正它。您可以通过指定应更改哪些运行级别来执行此操作,如下所示:
[rechosen@localhost ~]$ /sbin/chkconfig --level 35 名称
上述命令将为运行级别 3 和 5 打开守护进程“name”的启动。“--level”的参数只是一串运行级别号,没有分隔符。另一个示例:
[rechosen@localhost ~]$ /sbin/chkconfig --level 235 名称
第二部分:教程
本部分将解释上述所有命令背后的含义。如果您想知道 Linux 如何“知道”在启动时启动什么、什么是“运行级别”以及为什么通常有 7 个(或者可以说是 8 个),请继续阅读。注意:本部分并不适用于每个发行版。目前,发行版之间存在很多差异,因此我尝试展示最默认的配置。
Linux 如何“知道”在启动时启动什么
启动 Linux 计算机时,通常会看到引导加载程序(在 BIOS 完成其引导过程的部分之后)。引导加载程序(通常是Lilo或GRUB)配置为将 Linux 内核加载到计算机内存中。然后内核离开引导加载程序并继续自行引导、初始化硬件并准备好开始运行 init。init 是我们正在寻找的进程:它是第一个运行的进程,并生成所有其他进程。但 init 在哪里查找以知道要启动哪些进程?简短的回答是:在 /etc/rc*.d/ 中(通常)。但这不是完整的答案。要了解它如何使用这些目录中的文件,我们首先需要了解什么是运行级别。
运行级别
运行级别是系统可以驻留的进程状态。例如:运行级别 1 通常是救援模式,它启动系统时启动尽可能少的进程,为用户提供 root 访问控制台,不带网络功能,也没有任何 GUI。另一方面,运行级别 5 通常是功能齐全的图形多用户模式。还有一些特殊的运行级别,您不应该启动到这些运行级别,但您可以在启动后切换到这些运行级别:例如,切换到运行级别 0(零)会关闭您的计算机(在阅读完整教程之前不要尝试这样做),切换到运行级别 6 将使您的系统自行重启。现在来看看运行级别及其常见配置的完整列表:
- 0:关闭系统(启动后切换)
- 1:将系统启动至救援模式
- 2:将系统启动到没有网络功能的多用户模式(某些系统,如 Debian,将此用作成熟模式)
- 3:将系统启动到具有网络功能的多用户模式(某些系统,如 Debian,将此用作成熟模式)
- 4:一般不使用(有时与运行级别5或3相同)
- 5:将系统启动到成熟的图形多用户模式(当然需要联网)
- 6:重新启动系统(开机后切换)
- (s 或 S:通常与运行级别 1 相似或相同)
由于最后一个运行级别并不总是被视为真正的运行级别(它被称为别名),因此运行级别的数量通常为 7,但也有可能是 8。启动后,您可以在所有运行级别之间切换,尽管 0 和 6(当然)需要您再次启动才能再次切换。在运行级别之间切换通常使用 init 命令,如下所示:
[rechosen@localhost ~]$ init 3
上述命令(以 root 身份或具有 root 权限运行)会将您的系统切换到运行级别 3,除非它已经在运行级别 3 中运行(如果您想切换到其他运行级别,请将 3 替换为其他数字)。在运行级别之间切换时,init 会终止在旧运行级别中运行但不应在新运行级别中运行的进程(启动时这些进程为零,关机或重新启动时所有进程),并启动未在旧运行级别中运行但应在新运行级别中运行的进程(关机或重新启动时这些进程为零,但在启动时,这取决于您启动到的运行级别)。现在我们可以继续讨论 init 如何“知道”要启动什么和要停止什么。
什么该开始,什么该停止?
当内核启动 init 进程时,它首先查看 /etc/inittab 文件,以了解在特定运行级别下该做什么。此文件通常告诉 init 查看相应的 /etc/rcX.d/ 目录,其中 X 是运行级别。例如,当启动到运行级别 5 时,init 将运行 /etc/rc5.d/ 中的脚本(请再次注意,这并不适用于所有发行版)。这些“脚本”通常是指向 /etc/init.d/(或 /etc/rc.d/init.d/)中相应服务管理脚本的符号链接。但是这样的脚本如何理解 init 是希望它启动还是停止服务?好吧,当 init 希望脚本启动进程时,它将以“start”作为第一个参数运行脚本。当希望脚本停止服务时,init 将传递“stop”作为第一个参数。如果您想启动或停止服务,也可以自己执行此操作。例如:
[rechosen@localhost ~]$ /etc/init.d/ntpd stop
上述示例将停止 ntpd 守护进程。要重新启动它,请使用以下命令:
[rechosen@localhost ~]$ /etc/init.d/ntpd start
停止和启动通常可以按下列方式组合。
[rechosen@localhost ~]$ /etc/init.d/ntpd restart
如果您希望守护进程重新读取其配置文件,这将非常有用。根据脚本所针对的服务(以及脚本本身),还可以提供其他参数。无论如何,让我们回到 /etc/rcX.d/ 目录。此目录中充满了名为“K59somedaemon”和“S10anotherdaemon”的文件。我来简单解释一下:
- “K” 表示“kill”,“S” 表示“start”:以“K”开头的符号链接将由 init 使用“stop”参数执行,以“S”开头的符号链接将由 init 使用“start”参数执行。
- “K”或“S”后面的两位数字并没有什么特别的含义,它们只是用于排序。需要在某些其他符号链接之前运行的符号链接应该具有比其他符号链接更低的数字。
- 实际上,对于 init 来说,守护进程的名称并不是必需的,但对于系统管理员来说,这是一个很好的做法,这样他们就可以立即看到符号链接的用途。
最后,您应该知道,几乎所有发行版都会在某处进行检查,以确保已运行的进程不会再次启动(这会导致两个相互干扰的进程,除非守护进程本身检查是否有其他实例正在运行),并且已终止的进程不会“重新终止”。这通常由调用来执行实际启动的某些特殊程序或脚本来完成。
最后的话
好吧,我希望本教程能帮助您减少计算机的 CPU 负载和启动时间,并了解在打开计算机后 Linux 系统启动的原因。如果您有任何建议(例如:在某些情况下似乎不需要另一个守护进程或管理守护进程启动的另一种方法),请发表评论。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~