当前位置: 首页 > 科技观察

如何清理Linux系统的启动项

时间:2023-03-17 17:57:13 科技观察

Systemd提供了很多查看系统启动情况的好工具,还可以控制系统启动时运行什么。在这篇文章中,我将解释如何在类似Systemd的发行版中关闭一些讨厌的进程。查看引导条目过去,您可以通过查看/etc/init.d轻松地看到在引导时启动了哪些服务进程。systemd有不同的显示方式,可以使用如下命令列出允许开机启动的服务进程。$systemctllist-unit-files--type=service|greenabledaccounts-daemon.serviceenabledanacron-resume.serviceenabledanacron.serviceenabledbluetooth.serviceenabledbrltty.serviceenabled[...]在这个列表的顶部,对我来说蓝牙服务是多余的,因为我不不需要在这台电脑上使用蓝牙,所以我不需要运行这个服务。以下命令将停止服务进程并使其不在启动时启动。$sudosystemctlstopbluetooth.service$sudosystemctldisablebluetooth.service您可以使用以下命令来判断操作是否成功。$systemctlstatusbluetooth.servicebluetooth.service-BluetoothserviceLoaded:loaded(/lib/systemd/system/bluetooth.service;disabled;vendorpreset:enabled)Active:inactive(dead)Docs:man:bluetoothd(8)禁用的服务进程仍然可以使用另一个服务进程启动。如果实在不想在任何情况下系统启动时启动该进程,则不需要卸载,只需将其覆盖即可,以防止该进程在任何情况下启动。$sudosystemctlmaskbluetooth.serviceCreatedsymlinkfrom/etc/systemd/system/bluetooth.serviceto/dev/null。一旦您对禁用该进程没有副作用感到满意,您还可以选择卸载该程序。执行命令可以得到如下服务列表:$systemctllist-unit-files--type=serviceUNITFILESTATEaccounts-daemon.serviceenabledacpid.servicedisabledalsa-restore.servicestaticalsa-utils.servicemasked静态服务不能启用或者禁用,因为静态服务被屏蔽了被其他进程依赖,并不意味着它们自己运行。可以禁用哪些服务?您如何知道您需要哪些服务以及可以安全地禁用哪些服务?这始终取决于您的个人需求。以下是几个服务进程的作用示例。许多服务流程是特定于发行版的,因此您应该查看发行版的文档(例如通过google或StackOverflow)。accounts-daemon.service是一个潜在的安全风险。它是AccountsService的一部分,允许程序获取或操作用户帐户信息。我认为我没有充分的理由允许这样的后台操作,所以我选择屏蔽服务进程。avahi-daemon.service用于零配置网络发现,让电脑超级容易发现网络上的打印机或其他主机,我一直禁用它,不要错过。brltty.service提供对盲文设备的支持,例如盲文显示器。debug-shell.service打开了一个巨大的安全漏洞(该服务提供了一个无密码的rootshell来帮助调试systemd问题),除非您正在使用它,否则永远不要启动该服务。ModemManager.service这个服务是dbus启动的一个守护进程,提供移动宽带(2G/3G/4G)接口,如果你没有这个接口,不管是内置接口,还是通过手机配对的,比如蓝牙和USB适配器,那么您也不需要该服务。pppd-dns.service是计算机进化的遗物,如果你使用拨号上网就保留它,否则你不需要它。rtkit-daemon.service听起来很可怕,听起来像一个rootkit。但是您需要该服务,因为它是一个实时内核调度程序。whoopsie.service是Ubuntu错误报告服务。它用于收集Ubuntu系统崩溃报告并将报告发送到https://daisy.ubuntu.com。您可以安全地从启动时禁用它,或完全卸载它。只有在使用Wi-Fi连接时才需要wpa_supplicant.service。系统启动时会发生什么?Systemd提供了一些命令来帮助调试系统启动问题。此命令重播系统启动时的所有消息。$journalctl-b--LogsbeginatMon2016-05-0906:18:11PDT,endatMon2016-05-0910:17:01PDT.--May1606:18:11studiosystemd-journal[289]:Runtimejournal(/run/log/journal/)iscurrentlyusing8.0M.Maximumallowedusageissetto157.2M.Leavingatleast235.9Mfree(ofcurrentlyavailable1.5Gofspace).Enforcedusagelimitisthus157.2M.[...]可以通过命令journalctl-b-1查看上一次启动,倒数第二次启动可以通过journalctl-b-2等。这个命令会打印很多信息,你可能不会关注所有的信息,而只关注问题的相关部分。为此,系统提供了几个过滤器来帮助您锁定目标。让我们以1号进程为例,它是所有其他进程的父进程。$journalctl_PID=1May0806:18:17studiosystemd[1]:StartingLSB:Raisenetworkinterfaces...May0806:18:17studiosystemd[1]:StartedLSB:Raisenetworkinterfaces..May0806:18:17studiosystemd[1]:ReachedtargetSystemInitialization.May0806:18:1]:StartedCUPSScheduler.May0806:18:17studiosystemd[1]:ListeningonD-BusSystemMessageBusSocketMay0806:18:17studiosystemd[1]:ListeningonCUPSScheduler.[…]这些打印消息显示已启动或正在尝试启动的内容。最有用的命令工具之一是systemd-analyzeblame以帮助查看哪个服务进程启动时间最长。$systemd-analyzeblame8.708sgpu-manager.service8.002sNetworkManager-wait-online.service5.791smysql.service2.975sdev-sda3.device1.810salsa-restore.service1.806ssystemd-logind.service1.803sirqbalance.service1.800slm-sensors.service1这个.800sgrub-common.service的特殊示例不会抛出任何异常,但如果存在系统启动瓶颈,此命令将能够发现它。您还可以了解Systemd如何使用这些资源:了解和使用SystemdSystemd运行级别和服务管理命令简介继续前进,另一个Linux初始化系统:Systemd简介