真的超贊!用systemd命令來管理linux系統!
因為linux操作系統里出現的這一個新人,PID 1被「systemd」佔據了,這能通過pstree命令看到。
[root@linoxide ~]# pstree
那麼現在讓我們來探索systemd擅長什麼,它又有多大的可能性成為sysVinit的新的替代品。
1. 更快啟動
sysvinit一次一個串列地啟動進程。
而Systemd則並行地啟動系統服務進程,並且最初僅啟動確實被依賴的那些服務,極大地減少了系統引導的時間。
你可以用下面的命令看到系統引導用時:
[root@linoxide ~]# systemd-analyze
使用 time 參數也能夠顯示同樣的內容。
[root@linoxide ~]# systemd-analyze time
如果你想以進程初始化所佔用時間排序列印出所有正在運行的單元列表,那麼systemd-analyze命令可以幫助你完成這個任務。
[root@linoxide ~]# systemd-analyze blame
上面的截屏只顯示了小部分進程,你可以就像less分頁器那樣用箭頭滾動列表。
2. systemctl 命令
systemctl命令是自systemd出現以來被廣泛討論的命令。你可以通過這個命令管理你的整個系統,讓我們通過探究這個命令來更進一步。
2.1 列出單元
systemctl命令可以帶上list-units,也可以什麼選項都不帶來列出所有正在運行的單元。
[root@linoxide ~]# systemctl
或
[root@linoxide ~]# systemctl list-units
2.2 列出失敗的單元
運行失敗的單元可以用帶--failed選項的命令顯示出來。
[root@linoxide ~]# systemctl --failed
你可以在這篇文章很多地方看到systemctl的用法。
3. 管理服務
讓我們來看看systemd是怎麼管理系統服務的。
3.1 激活的服務
所有被激活的服務可以同下面這條命令來查看。
[root@linoxide ~]# systemctl list-units -t service
3.2 服務狀態
在sysvinit中,我們可以用「service」命令來管理服務,但在systemd中,我們用systemctl這個命令。 我們可以用下面這個命令來查看服務是否在運行。
[root@linoxide ~]# systemctl status dnsmasq
3.3 啟動一個服務
用下面這條命令來啟動服務。
[root@linoxide ~]# systemctl start dnsmasq
對應於service命令,這個命令不進行輸出。但是毋庸置疑,我們可以通過再次查看這個剛剛被啟動的服務的status(狀態)來確認他是否被成功地啟動了。
3.4 停止一個服務
現在聰明的你一定知道怎麼在systemd下用命令來關閉服務了吧。
[root@linoxide ~]# systemctl stop dnsmasq
3.5 重啟一個服務
類似的,重啟系統服務是用『systemctl restart』來管理的。
[root@linoxide ~]# systemctl restart dnsmasq
3.6 重新載入一個服務
在我們需要重新載入服務的配置文件又不想重啟這個服務(例如ssh)時,我們可以用這個命令。
[root@linoxide ~]# systemctl reload sshd
雖然上述幾個命令的語法是可以工作的,但是官方文檔建議我們用下面這種語法形式來運行命令(LCTT 譯註,即使用在服務名後面跟上「.service」的完整名稱):
[root@linoxide ~]# systemctl status dnsmasq.service
4. 管理引導時的服務
chkconfig命令被用來管理系統引導時的服務。同樣用systemd也可以管理引導時的系統服務。
4.1 檢查服務引導時是否運行
這條命令用來確定服務是否是引導時啟動的。
[root@linoxide ~]# systemctl is-enabled dnsmasq.service
4.2 讓服務在引導時運行
systemctl命令是這樣來enable(使之在引導時啟動)一個服務的。(這相當於sysvinit中的『chkconfig on』)
[root@linoxide ~]# systemctl enable dnsmasq.service
4.3 取消服務在引導時運行
類似的,使服務不在引導時啟動用這個命令。
[root@linoxide ~]# systemctl disable dnsmasq.service
5. 管理遠程系統
所有剛才提到的systemctl命令通常都能被用來管理遠程主機,完成這個任務將用到ssh來進行通訊。你只需要像這樣將遠程主機和用戶名添加到systemctl命令後。
[root@linoxide ~]# systemctl status sshd -H root@1.2.3.4
6. 管理目標
Systemd有一個完成與sysVinit的runlevels相似任務的構想。
sysVinit的runlevels大多是以數字分級的。這裡是runlevers在systemd中的對應元素。
0 runlevel0.target, poweroff.target
1, s, single runlevel1.target, rescue.target
2, 4 runlevel2.target, runlevel4.target, multi-user.target
3 runlevel3.target, multi-user.target
5 runlevel5.target, graphical.target
6 runlevel6.target, reboot.target
emergency emergency.target
6.1 改變當前目標
當前target可以用這個命令切換。
[root@linoxide ~]# systemctl isolate graphical.target
6.2 列出當前目標
如果你想查看你正處於哪個target中,你需要列出相應的單元。雖然這樣操作可能讓你不太爽,但是這就是systemd工作的方式。
[root@linoxide ~]# systemctl list-units --type=target
你可以看到「graphical.target」列在此處,這就是我們剛才切換到的目標。現在,讓我們切換runlevel到multi-user.target,然後分析下列命令的輸出。
[root@linoxide ~]# systemctl isolate multi-user.target
[root@linoxide ~]# systemctl list-units --type=target
6.3 列出默認目標
用這個systemctl命令來查看默認目標。
[root@linoxide ~]# systemctl get-default
6.4 改變默認目標
通過systemctl的set-default命令可以將某個目標設置成默認目標。
[root@linoxide ~]# systemctl set-default graphical.target
7. 記錄 systemd 的日誌
journald是systemd獨有的日誌系統,替換了sysVinit中的syslog守護進程。命令journalctl用來讀取日誌。
[root@linoxide ~]# journalctl
7.1 查看引導信息
運行journalctl -b命令來查看所有引導日誌。
[root@linoxide ~]# journalctl -b
7.2 即時顯示引導日誌
下面這個命令可以實時顯示系統日誌(類似tail -f)。
[root@linoxide ~]# journalctl -f
7.3 查看特定服務的日誌
你可以像這樣運用journalctl來查看你只想看到的服務或可執行程序的日誌。
[root@linoxide ~]# journalctl /usr/sbin/dnsmasq
8. 電源管理
systemctl命令也可以用來關機,重啟或者休眠。
要關機、重啟、掛起和休眠,分別使用如下命令:
[root@linoxide ~]# systemctl poweroff
[root@linoxide ~]# systemctl reboot
[root@linoxide ~]# systemctl suspend
[root@linoxide ~]# systemctl hibernate
9. 又及
systemd帶來了一整套與操作系統交互的新途徑,並且極具特色。舉個栗子,你可以用hostnamectl命令來獲得你的linux機器的hostname和其它有用的獨特信息。
[root@linoxide ~]# hostnamectl
via: http://linoxide.com/linux-command/linux-systemd-commands/
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive