大部分 Linux 發行版都會在開機的時候啓動各種相關的服務進程,其中有很多你根本都用不上的:藍牙、 Avahi 、調製解調管理器甚至 pppd-dns 等等,你甚至根本不知道這些都是什麼東西。
好在我們有 Systemd ,它給我們帶來了許多工具幫我們查看系統啓動是的狀況,當然也可以讓我們控制系統啓動時候的運行選項。我將會爲你詳細解讀關閉某些無用進程的方法,前提是在 Systemd 類發行版。
查看開機啓動項
通常情況下,你能用 /etc/init.d
查看系統引導時啓動的服務項。但是 systemd 會用不一樣的展現方式,下面是一些命令,用於展示開機啓動時的進程項。
你可以看到,這裏頭有一項是藍牙,我不需要使用它,那麼我應該怎樣關閉並阻止它在開機時後啓動?
完成上面的操作之後,用下面的命令來確定自己是否成功。
這裏的停用並不徹底,因爲其他的服務進程仍舊可以將它喚起。如果要完全阻止開機啓動的話,卸載不是個好方法,像下面這樣把它掩蓋起來就可以了:
我建議在持續使用一段時間並沒有造成任何負面影響之後再選擇卸載。
通過執行命令可以獲得如下服務列表:
有一點需要注意:靜態服務的啓動和禁用狀態無法改變,因爲靜態服務被其他的進程所依賴,而這個狀況下並不是它們自己運行。
哪些服務能夠禁止?
如何知道你需要哪些服務,而哪些又是可以安全地禁用的呢?它總是依賴於你的個性化需求。
這裏舉例了幾個服務進程的作用。許多服務進程都是發行版特定的,所以你應該看看你的發行版文檔(比如通過 google 或 StackOverflow)。
accounts-daemon.service 是一個潛在的安全風險。它是 AccountsService 的一部分,AccountsService 允許程序獲得或操作用戶賬戶信息。我不認爲有好的理由能使我允許這樣的後臺操作,所以我選擇掩蓋mask該服務進程。
avahi-daemon.service 用於零配置網絡發現,使電腦超容易發現網絡中打印機或其他的主機,我總是禁用它,別漏掉它。
brltty.service 提供布萊葉盲文設備支持,例如布萊葉盲文顯示器。
debug-shell.service 開放了一個巨大的安全漏洞(該服務提供了一個無密碼的 root shell ,用於幫助 調試 systemd 問題),除非你正在使用該服務,否則永遠不要啓動服務。
ModemManager.service 該服務是一個被 dbus 激活的守護進程,用於提供移動寬頻broadband(2G/3G/4G)接口,如果你沒有該接口,無論是內置接口,還是通過如藍牙配對的電話,以及 USB 適配器,那麼你也無需該服務。
pppd-dns.service 是一個計算機發展的遺物,如果你使用撥號接入互聯網的話,保留它,否則你不需要它。
rtkit-daemon.service 聽起來很可怕,聽起來像是 rootkit。 但是你需要該服務,因爲它是一個實時內核調度器real-time kernel scheduler。
whoopsie.service 是 Ubuntu 錯誤報告服務。它用於收集 Ubuntu 系統崩潰報告,併發送報告到 https://daisy.ubuntu.com 。 你可以放心地禁止其啓動,或者永久的卸載它。
wpa_supplicant.service 僅在你使用 Wi-Fi 連接時需要。
系統啓動時發生了什麼?
Systemd 還有另外命令一些幫助我們調試開機啓動時出現的問題。使用這一命令可以重現系統啓動時候的所有消息。
輸入 journalctl -b -1
命令可以重現你上一次啓動時候的信息,journalctl -b -2
可以重現倒數第 2 次啓動,以此類推。
這個命令會把所有信息都給打印出來,這可能會造成一定干擾,因爲有時候完全無需關注所有信息,只需要查看重點部分就可以了。所以,我們可以使用過濾器功能來快速發現目標。我們試着以進程 1 爲例來演示一下。
從這些消息裏我們判斷出正在或者即將啓動的進程。
一個最有用的命令工具之一 systemd-analyze blame
,這個命令可以顯示進程耗時,幫助我們發現耗時最長的進程。
這個特定的例子沒有出現任何異常,但是如果存在系統啓動瓶頸,則該命令將能發現它。