導(dǎo)讀一般情況下,常規(guī)用途的?Linux?發(fā)行版在開機(jī)啟動(dòng)時(shí)拉起各種相關(guān)服務(wù)進(jìn)程,包括許多你可能無(wú)需使用的服務(wù),例如藍(lán)牙、Avahi、 調(diào)制解調(diào)管理器、ppp-dns(LCTT 譯注:此處作者筆誤 ppp-dns 應(yīng)該為 pppd-dns) 等服務(wù)進(jìn)程,這些都是什么東西?用于哪里,有何功能?
Systemd 提供了許多很好的工具用于查看系統(tǒng)啟動(dòng)情況,也可以控制在系統(tǒng)啟動(dòng)時(shí)運(yùn)行什么。在這篇文章中,我將說(shuō)明在 Systemd 類發(fā)行版中如何關(guān)閉一些令人討厭的進(jìn)程。
在過(guò)去,你能很容易通過(guò)查看 /etc/init.d 了解到哪些服務(wù)進(jìn)程會(huì)在引導(dǎo)時(shí)啟動(dòng)。Systemd 以不同的方式展現(xiàn),你可以使用如下命令羅列允許開機(jī)啟動(dòng)的服務(wù)進(jìn)程。
$ systemctl list-unit-files --type=service | grep enabledaccounts-daemon.service enabledanacron-resume.service enabledanacron.service enabledbluetooth.service enabledbrltty.service enabled[...]
在此列表頂部,對(duì)我來(lái)說(shuō),藍(lán)牙服務(wù)是冗余項(xiàng),因?yàn)樵谠撾娔X上我不需要使用藍(lán)牙功能,故無(wú)需運(yùn)行此服務(wù)。下面的命令將停止該服務(wù)進(jìn)程,并且使其開機(jī)不啟動(dòng)。
$ sudo systemctl stop bluetooth.service$ sudo systemctl disable bluetooth.service
你可以通過(guò)下面命令確定是否操作成功。
$ systemctl status bluetooth.servicebluetooth.service - Bluetooth serviceLoaded: loaded (/lib/systemd/system/bluetooth.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:bluetoothd(8)
停用的服務(wù)進(jìn)程仍然能夠被另外一個(gè)服務(wù)進(jìn)程啟動(dòng)。如果你真的想在任何情況下系統(tǒng)啟動(dòng)時(shí)都不啟動(dòng)該進(jìn)程,無(wú)需卸載該它,只需要把它掩蓋起來(lái)就可以阻止該進(jìn)程在任何情況下開機(jī)啟動(dòng)。
$ sudo systemctl mask bluetooth.serviceCreated symlink from /etc/systemd/system/bluetooth.service to /dev/null.
一旦你對(duì)禁用該進(jìn)程啟動(dòng)而沒(méi)有出現(xiàn)負(fù)面作用感到滿意,你也可以選擇卸載該程序。
通過(guò)執(zhí)行命令可以獲得如下服務(wù)列表:
$ systemctl list-unit-files --type=serviceUNIT FILE STATEaccounts-daemon.service enabledacpid.service disabledalsa-restore.service staticalsa-utils.service masked
你不能啟用或禁用靜態(tài)服務(wù),因?yàn)殪o態(tài)服務(wù)被其他的進(jìn)程所依賴,并不意味著它們自己運(yùn)行。
如何知道你需要哪些服務(wù),而哪些又是可以安全地禁用的呢?它總是依賴于你的個(gè)性化需求。
這里舉例了幾個(gè)服務(wù)進(jìn)程的作用。許多服務(wù)進(jìn)程都是發(fā)行版特定的,所以你應(yīng)該看看你的發(fā)行版文檔(比如通過(guò) google 或 StackOverflow)。
- accounts-daemon.service 是一個(gè)潛在的安全風(fēng)險(xiǎn)。它是 AccountsService 的一部分,AccountsService 允許程序獲得或操作用戶賬戶信息。我不認(rèn)為有好的理由能使我允許這樣的后臺(tái)操作,所以我選擇掩蓋該服務(wù)進(jìn)程。
- avahi-daemon.service 用于零配置網(wǎng)絡(luò)發(fā)現(xiàn),使電腦超容易發(fā)現(xiàn)網(wǎng)絡(luò)中打印機(jī)或其他的主機(jī),我總是禁用它,別漏掉它。
- brltty.service 提供布萊葉盲文設(shè)備支持,例如布萊葉盲文顯示器。
- debug-shell.service 開放了一個(gè)巨大的安全漏洞(該服務(wù)提供了一個(gè)無(wú)密碼的 root shell ,用于幫助 調(diào)試 systemd 問(wèn)題),除非你正在使用該服務(wù),否則永遠(yuǎn)不要啟動(dòng)服務(wù)。
- ModemManager.service 該服務(wù)是一個(gè)被 dbus 激活的守護(hù)進(jìn)程,用于提供移動(dòng)寬頻(2G/3G/4G)接口,如果你沒(méi)有該接口,無(wú)論是內(nèi)置接口,還是通過(guò)如藍(lán)牙配對(duì)的電話,以及 USB 適配器,那么你也無(wú)需該服務(wù)。
- pppd-dns.service 是一個(gè)計(jì)算機(jī)發(fā)展的遺物,如果你使用撥號(hào)接入互聯(lián)網(wǎng)的話,保留它,否則你不需要它。
- rtkit-daemon.service 聽起來(lái)很可怕,聽起來(lái)像是 rootkit。 但是你需要該服務(wù),因?yàn)樗且粋€(gè)實(shí)時(shí)內(nèi)核調(diào)度器。
- whoopsie.service 是 Ubuntu 錯(cuò)誤報(bào)告服務(wù)。它用于收集 Ubuntu 系統(tǒng)崩潰報(bào)告,并發(fā)送報(bào)告到 https://daisy.ubuntu.com 。 你可以放心地禁止其啟動(dòng),或者永久的卸載它。
- wpa_supplicant.service 僅在你使用 Wi-Fi 連接時(shí)需要。
Systemd 提供了一些命令幫助調(diào)試系統(tǒng)開機(jī)啟動(dòng)問(wèn)題。該命令會(huì)重演你的系統(tǒng)啟動(dòng)的所有消息。
$ journalctl -b-- Logs begin at Mon 2016-05-09 06:18:11 PDT,end at Mon 2016-05-09 10:17:01 PDT. --May 16 06:18:11 studio systemd-journal[289]:Runtime journal (/run/log/journal/) is currently using 8.0M.Maximum allowed usage is set to 157.2M.Leaving at least 235.9M free (of currently available 1.5G of space).Enforced usage limit is thus 157.2M.[...]
通過(guò)命令 journalctl -b -1 可以復(fù)審前一次啟動(dòng),journalctl -b -2 可以復(fù)審倒數(shù)第 2 次啟動(dòng),以此類推。
該命令會(huì)打印出大量的信息,你可能并不關(guān)注所有信息,只是關(guān)注其中問(wèn)題相關(guān)部分。為此,系統(tǒng)提供了幾個(gè)過(guò)濾器,用于幫助你鎖定目標(biāo)。讓我們以進(jìn)程號(hào)為 1 的進(jìn)程為例,該進(jìn)程是所有其它進(jìn)程的父進(jìn)程。
$ journalctl _PID=1May 08 06:18:17 studio systemd[1]: Starting LSB: Raise network interfaces....May 08 06:18:17 studio systemd[1]: Started LSB: Raise network interfaces..May 08 06:18:17 studio systemd[1]: Reached target System Initialization.May 08 06:18:17 studio systemd[1]: Started CUPS Scheduler.May 08 06:18:17 studio systemd[1]: Listening on D-Bus System Message Bus SocketMay 08 06:18:17 studio systemd[1]: Listening on CUPS Scheduler.[...]
這些打印消息顯示了什么被啟動(dòng),或者是正在嘗試啟動(dòng)。
一個(gè)最有用的命令工具之一 systemd-analyze blame,用于幫助查看哪個(gè)服務(wù)進(jìn)程啟動(dòng)耗時(shí)最長(zhǎng)。
$ systemd-analyze blame8.708s gpu-manager.service8.002s NetworkManager-wait-online.service5.791s mysql.service2.975s dev-sda3.device1.810s alsa-restore.service1.806s systemd-logind.service1.803s irqbalance.service1.800s lm-sensors.service1.800s grub-common.service
這個(gè)特定的例子沒(méi)有出現(xiàn)任何異常,但是如果存在系統(tǒng)啟動(dòng)瓶頸,則該命令將能發(fā)現(xiàn)它。
你也能通過(guò)如下資源了解 Systemd 如何工作:
理解和使用 Systemd
介紹 Systemd 運(yùn)行級(jí)別和服務(wù)管理命令
再次前行,另一個(gè) Linux 初始化系統(tǒng):Systemd 介紹
評(píng)論
查看更多