要查看 linux 開機啟動了哪些服務,可使用 systemctl list-unit-files 命令;1. 直接運行 systemctl list-unit-files 可查看所有 unit 文件及其啟用狀態;2. 添加 –type service 參數僅查看服務類型的 unit 文件;3. 使用 grep 或 awk 過濾出 enabled 狀態的服務;4. 區分 systemctl list-unit-files(顯示配置狀態)與 systemctl list-units(顯示運行狀態)的不同作用;5. 通過 systemctl disable/enable 修改服務的開機啟動狀態并建議執行 daemon-reload;6. 使用 systemctl status 或 find 命令查找特定服務對應的 unit 文件。
想知道 linux 開機啟動了哪些服務?其實方法很簡單,systemctl list-unit-files 就能幫你搞定,而且用法靈活,滿足你不同的查看需求。
解決方案
systemctl list-unit-files 命令是 Systemd 系統管理工具的一部分,用于列出所有已安裝的 unit 文件及其啟用狀態。簡單來說,它會告訴你哪些服務被設置為開機啟動,哪些沒有。
最基本的用法就是直接運行:
systemctl list-unit-files
這會列出所有 unit 文件,包括 service、socket、target 等類型,并顯示它們的啟用狀態(enabled、disabled、Static、masked)。
如果你只想查看 service 類型的 unit 文件,可以加上 –type service 參數:
systemctl list-unit-files --type service
這樣輸出的結果就只包含服務相關的 unit 文件了。
有時候,你可能只想知道哪些服務是開機啟動的,可以結合 grep 命令過濾 enabled 狀態的行:
systemctl list-unit-files | grep enabled
或者,更精確地使用 awk 命令:
systemctl list-unit-files | awk '/enabled/{print $1}'
這條命令會只打印出狀態為 enabled 的 unit 文件的名稱。
此外,systemctl list-units 命令可以列出當前正在運行的 unit,但它和開機啟動的服務列表是不同的概念。開機啟動的服務可能正在運行,也可能因為各種原因沒有啟動。
如何理解 systemctl list-unit-files 的輸出結果?
systemctl list-unit-files 的輸出結果包含兩列:
-
第二列是 unit 文件的啟用狀態,有以下幾種:
- enabled: 開機啟動
- disabled: 開機不啟動
- static: 靜態的,不能被啟用或禁用,通常是作為其他服務的依賴
- masked: 被屏蔽的,無法啟動
理解這些狀態可以幫助你更好地管理 Linux 系統的啟動服務。例如,如果你發現某個服務不應該開機啟動,但狀態卻是 enabled,就可以使用 systemctl disable
如何禁用或啟用某個服務的開機啟動?
如果你想禁用某個服務的開機啟動,可以使用 systemctl disable
sudo systemctl disable nginx.service
需要注意的是,這個命令需要 sudo 權限。
相反,如果你想啟用某個服務的開機啟動,可以使用 systemctl enable
sudo systemctl enable ssh.service
禁用或啟用服務后,建議使用 systemctl daemon-reload 命令重新加載 Systemd 的配置,以確保更改生效。雖然大多數情況下會自動reload,但手動執行一次更保險。
systemctl list-unit-files 和 systemctl list-units 的區別是什么?
很多人容易混淆 systemctl list-unit-files 和 systemctl list-units 這兩個命令,它們的功能其實并不相同。
systemctl list-unit-files 列出的是所有已安裝的 unit 文件及其啟用狀態,它關注的是服務的配置信息,告訴你哪些服務被設置為開機啟動。
而 systemctl list-units 列出的是當前正在運行的 unit,它關注的是服務的運行狀態,告訴你哪些服務正在運行。
舉個例子,某個服務可能被設置為開機啟動(systemctl list-unit-files 顯示為 enabled),但由于某些原因,它并沒有成功啟動(systemctl list-units 中沒有顯示該服務)。反之,某個服務可能沒有被設置為開機啟動(systemctl list-unit-files 顯示為 disabled),但你可以手動啟動它,這時 systemctl list-units 中就會顯示該服務。
因此,這兩個命令分別提供了不同的信息,可以結合使用,更好地了解 Linux 系統的服務狀態。
如何查找某個服務對應的 unit 文件?
有時候,你可能知道一個服務的名稱,但不知道它對應的 unit 文件名。例如,你知道有一個名為 “Web Server” 的服務,但不知道它對應的 unit 文件是 nginx.service 還是 apache2.service。
這時,你可以使用 systemctl status
systemctl status nginx
在輸出結果中,你會看到類似這樣的信息:
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since ...
其中 nginx.service 就是該服務對應的 unit 文件名。
另外,你也可以使用 find 命令在 /lib/systemd/system/ 目錄下查找包含服務名稱的 unit 文件。例如:
sudo find /lib/systemd/system/ -name "*nginx*"
這條命令會查找所有文件名中包含 “nginx” 的 unit 文件。