Linux系統(tǒng)管理與進(jìn)程任務(wù)管理方式
引言
Linux作為服務(wù)器領(lǐng)域的主流操作系統(tǒng),其強(qiáng)大的系統(tǒng)管理能力和靈活的任務(wù)調(diào)度機(jī)制是每位系統(tǒng)管理員必須掌握的技能。
本文將全面解析Linux系統(tǒng)的引導(dǎo)過程、服務(wù)控制、進(jìn)程管理以及計(jì)劃任務(wù)設(shè)置,幫助讀者構(gòu)建完整的Linux系統(tǒng)管理知識(shí)體系。
一、Linux系統(tǒng)引導(dǎo)過程與服務(wù)控制
1.1 系統(tǒng)引導(dǎo)的五個(gè)關(guān)鍵階段
Linux系統(tǒng)的啟動(dòng)是一個(gè)精心設(shè)計(jì)的鏈?zhǔn)竭^程:
- 開機(jī)自檢:開機(jī)后,通過BIOS對(duì)硬件進(jìn)行初步檢測(cè),確定第一個(gè)啟動(dòng)設(shè)備進(jìn)行引導(dǎo)
- MBR引導(dǎo):從硬盤第一個(gè)扇區(qū)加載MBR(主引導(dǎo)記錄),啟動(dòng)GRUB引導(dǎo)程序
- GRUB引導(dǎo)菜單:讀取/boot/grub2/grub.cfg配置文件,加載并啟動(dòng)操作系統(tǒng)內(nèi)核
- 加載Linux內(nèi)核:將內(nèi)核文件和鏡像文件加載到內(nèi)存
- init進(jìn)程初始化:內(nèi)核加載并啟動(dòng) init 進(jìn)程,完成系統(tǒng)的初始化。
整個(gè)過程可以想象成:
- 1.早上醒來活動(dòng)身體,檢查身體是否有不適
- 2.查看日程表,決定今天要做什么
- 3.起床洗漱準(zhǔn)備,選擇當(dāng)日著裝、早餐
- 4.頭腦清醒后集中注意力,整理代辦事項(xiàng),準(zhǔn)備眼鏡、鑰匙、手機(jī)等工具
- 5.正式開始一天工作
1.2 GRUB2的進(jìn)化優(yōu)勢(shì)
相比傳統(tǒng)GRUB,GRUB2具有顯著改進(jìn):
- 支持ext4、btrfs、xfs等多種現(xiàn)代文件系統(tǒng)
- 模塊化設(shè)計(jì)減小了核心鏡像體積
- 配置文件位置變更為/boot/grub2/grub.cfg
- 支持更靈活的啟動(dòng)參數(shù)配置
1.3 Systemd的優(yōu)點(diǎn)
Systemd作為新一代初始化系統(tǒng),解決了傳統(tǒng)SysVinit的痛點(diǎn):
關(guān)鍵優(yōu)勢(shì)包括:
- 并行啟動(dòng):顯著縮短系統(tǒng)啟動(dòng)時(shí)間
- 按需啟動(dòng):減少不必要的資源占用
總結(jié):Systemd 改善了系統(tǒng)的啟動(dòng)速度和服務(wù)管理效率,解決了 SysVinit 啟動(dòng)慢和腳本復(fù)雜的問題。
1.4 Systemd單元類型
| 單元類型 | 擴(kuò)展名 | 說明 |
|---|---|---|
| Service | .service | 描述一個(gè)系統(tǒng)服務(wù) |
| Socket | .socket | 描述一個(gè)進(jìn)程間通信的套接字 |
| Device | .device | 描述一個(gè)內(nèi)核識(shí)別的設(shè)備文件 |
| Mount | .mount | 描述一個(gè)文件系統(tǒng)的掛載點(diǎn) |
| Automount | .automount | 描述一個(gè)文件系統(tǒng)的自動(dòng)掛載點(diǎn) |
| Swap | .swap | 描述一個(gè)內(nèi)存交換設(shè)備或交換文件 |
| Path | .path | 描述一個(gè)文件系統(tǒng)中文件或目錄 |
| Timer | .timer | 用于保存一個(gè)定時(shí)器(用于實(shí)現(xiàn)類似cron的調(diào)度任務(wù)) |
| Snapshot | .snapshot | 用于保存一個(gè)系統(tǒng)的狀態(tài) |
| Scope | .scope | 使用systemd的總線接口以編程的方式創(chuàng)建外部進(jìn)程 |
| Slice | .slice | 描述屬于CGroup的一組通過層次組織的管理系統(tǒng)進(jìn)程 |
| Target | .target | 描述一組systemd的單元 |
1.5 運(yùn)行級(jí)別與systemd目標(biāo)
#查看運(yùn)行級(jí)別 runlevel命令

systemctl工具 #臨時(shí)切換運(yùn)行級(jí)別 init命令
systemctl工具
Systemd用target替代了傳統(tǒng)的運(yùn)行級(jí)別概念:
| 運(yùn)行級(jí)別 | Target單元 | 用途 |
|---|---|---|
| 0 | poweroff.target | 關(guān)機(jī) |
| 1 | rescue.target | 單用戶救援模式 |
| 3 | multi-user.target | 多用戶文本模式 |
| 5 | graphical.target | 圖形界面模式 |
| 6 | reboot.target | 重啟 |
設(shè)置與切換運(yùn)行級(jí)別:
查看當(dāng)前默認(rèn)目標(biāo) systemctl get-default 切換到圖形界面 systemctl isolate graphical.target 設(shè)置默認(rèn)目標(biāo)字符化界面 systemctl set-default multi-user.target
- 單用戶/救援模式

- 多用戶模式(不帶圖形界面)

- 圖形界面模式

1.6 系統(tǒng)服務(wù)控制
1、設(shè)置開機(jī)自啟 systemctl enable sshd 2、查看開機(jī)自啟 systemctl is-enabled sshd 3、禁用開機(jī)自啟 systemctl disable sshd 4、查看服務(wù)狀態(tài) systemctl status sshd 5、啟動(dòng)/關(guān)閉/重啟/重新加載防火墻 systemctl start/stop/restart/reload firewalld.service 6、啟動(dòng)服務(wù) systemctl list-unit-files | grep enabled 7、臨時(shí)修改主機(jī)名 hostname 主機(jī)名 8、永久修改主機(jī)名 hostnamectl set-hostname newname 9、設(shè)置系統(tǒng)語言為中文 localectl set-locale LANG=zh_CN.utf8
1.7 優(yōu)化啟動(dòng)過程
#ntsysv工具
- 提供一個(gè)交互式、可視化窗口
- 可以在字符終端運(yùn)行
- 便于集中管理多個(gè)服務(wù)

#systemctl工具
- 不提供交互式、可視化窗口
- 管理單個(gè)服務(wù)效率更高
二、Linux進(jìn)程管理
2.1 程序與進(jìn)程的本質(zhì)區(qū)別
- 程序:靜態(tài)存儲(chǔ)在磁盤上的可執(zhí)行代碼(如firefox)
- 進(jìn)程:程序運(yùn)行的動(dòng)態(tài)實(shí)例,擁有獨(dú)立PID和系統(tǒng)資源
舉例:程序就像是一本寫好的菜譜(靜態(tài)的文本),放在書架上不會(huì)自己動(dòng),進(jìn)程就是廚師按照菜譜一步步烹飪的過程(動(dòng)態(tài)的執(zhí)行),需要用到鍋碗瓢盆等資源。

父進(jìn)程與子進(jìn)程:
- 父進(jìn)程:是創(chuàng)建其他進(jìn)程的進(jìn)程,就像一個(gè)家長(zhǎng)。
- 子進(jìn)程:是由父進(jìn)程創(chuàng)建并執(zhí)行的獨(dú)立進(jìn)程,就像子女一樣。
舉個(gè)例子:你打開游戲軟件(父進(jìn)程),它彈出一個(gè)商店窗口(子進(jìn)程),這個(gè)窗口就是父進(jìn)程“生出來”的幫手。
2.2 查看進(jìn)程工具介紹
- ps - 靜態(tài)進(jìn)程信息統(tǒng)計(jì)ps(process status)命令用于查看系統(tǒng)中當(dāng)前運(yùn)行的進(jìn)程。它顯示了與進(jìn)程相關(guān)的信息,如進(jìn)程 ID (PID)、用戶、CPU 和內(nèi)存使用率等。
常用選項(xiàng): ps aux # 顯示所有進(jìn)程,包括其他用戶的進(jìn)程 ps aux | grep [進(jìn)程名] # 通過管道和 `grep` 命令過濾進(jìn)程 ps -ef # 以標(biāo)準(zhǔn)格式顯示所有進(jìn)程

輸出字段解釋: - USER:進(jìn)程所屬的用戶。 - PID:進(jìn)程 ID。 - %CPU:進(jìn)程占用的 CPU 百分比。 - %MEM:進(jìn)程占用的內(nèi)存百分比。 - VSZ:進(jìn)程使用的虛擬內(nèi)存(單位 KB)。 - RSS:進(jìn)程使用的物理內(nèi)存(單位 KB)。 - TTY:進(jìn)程關(guān)聯(lián)的終端設(shè)備,如:tty1(物理終端)、pts/0(偽終端)……若進(jìn)程未關(guān)聯(lián)終端(如后臺(tái)任務(wù)),該字段可能顯示?或空白 - STAT:進(jìn)程的狀態(tài),常見狀態(tài)有:R(運(yùn)行)、S(睡眠)、Z(僵尸)、T(停止)等。 - START:進(jìn)程的啟動(dòng)時(shí)間。 - TIME:進(jìn)程占用的 CPU 時(shí)間。 - COMMAND:?jiǎn)?dòng)該進(jìn)程的命令。
詳解 STAT:該進(jìn)程的狀態(tài)(D:不可中斷的休眠狀態(tài):R:正在運(yùn)行狀態(tài);S:處于休眠狀態(tài),可被喚醒;T:停止?fàn)顟B(tài),可能是在后臺(tái)暫停或進(jìn)程處于跟蹤調(diào)試狀態(tài): Z:僵尸進(jìn)程,進(jìn)程已經(jīng)中止,但是部分程序還在內(nèi)存當(dāng)中)。 D:系統(tǒng)守護(hù)進(jìn)程 T:調(diào)式、程序執(zhí)行一般停止 R :該程序目前正在運(yùn)作,或者是可被運(yùn)作; S :該程序目前正在睡眠當(dāng)中 (可說是 idle 狀態(tài)啦!),但可被某些訊號(hào)(signal) 喚醒。 T :該程序目前正在偵測(cè)或者是停止了; Z :該程序應(yīng)該已經(jīng)終止,但是其父程序卻無法正常的終止他,造成 zombie (疆尸) 程序的狀態(tài)D 不可中斷狀態(tài). 它們含意如下:: <: 表示進(jìn)程運(yùn)行在高優(yōu)先級(jí)上 N: 表示進(jìn)程運(yùn)行在低優(yōu)先級(jí)上 L: 表示進(jìn)程有頁面鎖定在內(nèi)存中 s: 表示進(jìn)程是控制進(jìn)程 l: 表示進(jìn)程是多線程的 +: 表示當(dāng)前進(jìn)程運(yùn)行在前臺(tái) D:系統(tǒng)守護(hù)進(jìn)程
- top - 動(dòng)態(tài)查看進(jìn)程信息top 命令用于動(dòng)態(tài)顯示 Linux 系統(tǒng)中運(yùn)行的進(jìn)程和資源使用情況,實(shí)時(shí)更新顯示。
常用快捷鍵: 按P:以CPU使用率排序 按M:以內(nèi)存使用排序 按T:以時(shí)間排序 按1:顯示多核CPU詳情 按q:退出top

輸出解釋: - PID:進(jìn)程 ID。 - USER:?jiǎn)?dòng)該進(jìn)程的用戶。 - %CPU:進(jìn)程占用的 CPU 百分比。 - %MEM:進(jìn)程占用的內(nèi)存百分比。 - TIME+:進(jìn)程累計(jì)使用的 CPU 時(shí)間。 - COMMAND:執(zhí)行的命令。
- pgrep - 查詢進(jìn)程信息
常用的參數(shù): -l:選項(xiàng)可同時(shí)輸出對(duì)應(yīng)的進(jìn)程名以及PID -U:選項(xiàng)查詢特定用戶的進(jìn)程 -t:選項(xiàng)查詢?cè)谔囟ńK端運(yùn)行的進(jìn)程



- pstree - 以樹形結(jié)構(gòu)列出進(jìn)程信息
pstree 命令默認(rèn)情況下只是以樹形結(jié)構(gòu)顯示各進(jìn)程的名稱,結(jié)合以下常用的參數(shù)使用: pstree -p # 顯示對(duì)應(yīng)PID號(hào) pstree -u # 顯示對(duì)應(yīng)用戶名 pstree -a # 顯示完整命令行

從輸出結(jié)果中可以看出,systemd 進(jìn)程確實(shí)是 Linux 操作系統(tǒng)中所有進(jìn)程的“始祖”。
2.3 進(jìn)程調(diào)度與控制
1.Linux進(jìn)程前后臺(tái)運(yùn)行機(jī)制對(duì)比
| 特性 | 前臺(tái)運(yùn)行 | 后臺(tái)運(yùn)行 |
|---|---|---|
| 終端控制 | 獨(dú)占終端輸入輸出 | 釋放終端控制權(quán) |
| 交互方式 | 需等待進(jìn)程結(jié)束 | 可立即輸入新命令 |
| 信號(hào)響應(yīng) | 直接接收Ctrl+C中斷 | 需通過kill命令終止 |
| 典型場(chǎng)景 | 即時(shí)性命令(ls,grep等) | 耗時(shí)操作(大文件復(fù)制/編譯) |
| 啟動(dòng)方式 | 直接輸入命令 | 命令末尾添加&符號(hào) |
例如,當(dāng)使用 cp 命令從光盤中制作鏡像文件時(shí),由于需要復(fù)制的數(shù)據(jù)較多,耗時(shí)較長(zhǎng),因此可結(jié)合“&” 符號(hào)將復(fù)制操作放到后臺(tái)運(yùn)行,以便用戶可以繼續(xù)執(zhí)行其他命令操作。

2.調(diào)度啟動(dòng)
調(diào)度啟動(dòng)的目的:在服務(wù)器維護(hù)中,將耗時(shí)且占用資源多的任務(wù)(如數(shù)據(jù)備份、數(shù)據(jù)庫導(dǎo)出)安排在系統(tǒng)相對(duì)空閑時(shí)段(如夜間)自動(dòng)執(zhí)行。用戶需預(yù)先設(shè)定任務(wù)的具體運(yùn)行時(shí)間,系統(tǒng)會(huì)在到達(dá)指定時(shí)間后自動(dòng)啟動(dòng)并完成任務(wù)。
核心特點(diǎn):
- 后臺(tái)運(yùn)行: 調(diào)度啟動(dòng)的計(jì)劃任務(wù)進(jìn)程均在后臺(tái)運(yùn)行,不會(huì)占用用戶的命令終端。
- 定時(shí)觸發(fā): 任務(wù)在預(yù)設(shè)的時(shí)間點(diǎn)或周期自動(dòng)觸發(fā)執(zhí)行。
| 命令 | 用途 |
|---|---|
| at | 設(shè)置一次性執(zhí)行的計(jì)劃任務(wù) |
| crontab | 設(shè)置周期性重復(fù)執(zhí)行的計(jì)劃任務(wù) |
3.前后臺(tái)調(diào)度技巧:
Ctrl+Z組合鍵 # 掛起當(dāng)前進(jìn)程 jobs -l # 列出當(dāng)前所有后臺(tái)任務(wù)及其進(jìn)程 ID fg %1 # 將后臺(tái)任務(wù)編號(hào)為 1 的任務(wù)帶回前臺(tái) bg %1 # 將后臺(tái)任務(wù)編號(hào)為 1 的任務(wù)恢復(fù)在后臺(tái)運(yùn)行





4.進(jìn)程終止方法:
Ctrl+C組合鍵 # 中斷正在執(zhí)行的命令 kill -9 2248 # 強(qiáng)制終止PID號(hào)為2248的進(jìn)程(不可恢復(fù)) killall vim # 終止所有名為vim進(jìn)程 pkill -u "python app" # 終止匹配進(jìn)程







三、計(jì)劃任務(wù)管理
計(jì)劃任務(wù)用于自動(dòng)執(zhí)行系統(tǒng)中的任務(wù)。Linux 中常用的計(jì)劃任務(wù)工具包括 at 和 cron。
3.1 一次性任務(wù):at命令
at 命令用于設(shè)置一次性任務(wù),任務(wù)將在指定時(shí)間執(zhí)行。
命令格式: at [HH:MM] [yyyy-mm-dd] at> [要執(zhí)行的命令]
常用選項(xiàng): atq:列出待執(zhí)行的任務(wù)。 atrm [任務(wù)編號(hào)]:刪除指定的任務(wù)。



3.2 周期性任務(wù):cron系統(tǒng)
cron 用于設(shè)置定期執(zhí)行的任務(wù)。用戶可以通過 crontab 命令編輯和管理自己的計(jì)劃任務(wù)。
命令格式: * * * * * command 分 時(shí) 日 月 周 命令
| 順序 | 含義 | 具體要求 |
|---|---|---|
| 1 | 分鐘 | 取值為 0~59 的任意整數(shù) |
| 2 | 小時(shí) | 取值為 0~23 的任意整數(shù) |
| 3 | 日期 | 取值為 1~31 的任意整數(shù)(日期在該月份中必須有效) |
| 4 | 月份 | 取值為 1~12 的任意整數(shù) |
| 5 | 星期 | 取值為 0~7 的任意整數(shù),0 或 7 代表星期日 |
| 6 | 命令 | 可以是普通的命令,也可以是自己編寫的程序腳本 |
星號(hào)“*”:表示上表要求的任意整數(shù)。 減號(hào)“-”:可以表示一個(gè)連續(xù)的時(shí)間范圍,如“1-4”表示整數(shù) 1、2、3、4。 逗號(hào)“,”:可以表示一個(gè)間隔的不連續(xù)范圍,如“3, 4, 6, 8”。 斜杠符號(hào)“/”:可以用來指定間隔頻率,如在日期字段中的“*/3”表示每隔 3 天。
常用命令: crontab -e :編輯當(dāng)前用戶的 cron 任務(wù)。 crontab -l :列出當(dāng)前用戶的 cron 任務(wù)。 crontab -r :刪除當(dāng)前用戶的所有 cron 任務(wù)。 crontab -u :指定XX用戶的 cron 服務(wù)。
實(shí)用案例:
每天的 7:50 啟動(dòng) sshd 服務(wù),22:50 停止 sshd服務(wù)。


cron服務(wù)管理:
啟動(dòng) cron 服務(wù):systemctl start crond 啟用 cron 服務(wù)開機(jī)啟動(dòng):systemctl enable crond 查看 cron 服務(wù)狀態(tài):systemctl status crond

四、常用系統(tǒng)管理命令
4.1date
date 命令用于顯示當(dāng)前的系統(tǒng)日期和時(shí)間,可以指定不同的輸出格式,或用它來設(shè)置系統(tǒng)的日期和時(shí)間。
- 查看時(shí)間和日期

- 自定義時(shí)間格式

- 顯示當(dāng)前時(shí)間戳(1970年1月1日至今的秒數(shù))

- 設(shè)置系統(tǒng)時(shí)間

- 與阿里云同步時(shí)間

4.2cal
cal 命令用來顯示當(dāng)前月份或指定月份的日歷,可以方便的查看日期。
- 查看當(dāng)前月份的日歷:

- 查看指定年份和月份的日歷:

- 顯示一整年的日歷:

4.3history
history 命令用來查看當(dāng)前用戶的歷史命令,這個(gè)命令可以幫助你快速找到之前運(yùn)行的命令。
- 查看命令歷史:

- 查看歷史命令的特定條目:

- 使用歷史編號(hào)執(zhí)行命令:

4.4scp
scp 命令用于通過 SSH 協(xié)議在本地和遠(yuǎn)程服務(wù)器之間安全地復(fù)制文件或目錄。它加密了數(shù)據(jù)傳輸,因此更加安全。
- 將本地文件復(fù)制到遠(yuǎn)程服務(wù)器:


- 將本地目錄復(fù)制到遠(yuǎn)程服務(wù)器:


總結(jié)
掌握Linux系統(tǒng)管理和進(jìn)程控制是成為合格系統(tǒng)管理員的基石。從系統(tǒng)引導(dǎo)到服務(wù)管理,從進(jìn)程監(jiān)控到任務(wù)調(diào)度,這些技能構(gòu)成了Linux系統(tǒng)運(yùn)維的核心能力框架。建議讀者:
- 在測(cè)試環(huán)境練習(xí)各種systemctl命令
- 使用crontab設(shè)置實(shí)際需要的定時(shí)任務(wù)
- 通過top和ps監(jiān)控系統(tǒng)資源使用情況
- 定期審查自動(dòng)啟動(dòng)的服務(wù)項(xiàng)
只有通過持續(xù)實(shí)踐,才能真正掌握這些強(qiáng)大的系統(tǒng)管理工具,構(gòu)建高效穩(wěn)定的Linux運(yùn)行環(huán)境。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
linux設(shè)置tomcat自啟動(dòng)的方法
這篇文章主要介紹了linux設(shè)置tomcat自啟動(dòng)的方法,需要的朋友可以參考下2014-03-03
Linux學(xué)習(xí)教程之redis哨兵集群詳解
這篇文章主要給大家介紹了關(guān)于Linux學(xué)習(xí)教程之Redis哨兵集群的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
Linux實(shí)現(xiàn)一鍵部署Docker并配置鏡像加速源
這篇文章主要為大家詳細(xì)介紹了Linux實(shí)現(xiàn)一鍵部署Docker并配置鏡像加速源的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-02-02
解決Linux+Apache服務(wù)器URL區(qū)分大小寫問題
Linux服務(wù)器的大小寫敏感有時(shí)候很不方便,在地址欄里一定要輸入準(zhǔn)確的URL才能訪問,對(duì)搜索引擎和用戶不是很友好,那么如何解決LINUX服務(wù)器URL的大小寫問題2020-01-01
從Linux源碼看Socket(TCP)Client端的Connect的示例詳解
這篇文章主要介紹了從Linux源碼看Socket(TCP)Client端的Connect,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
關(guān)閉linux終端還讓程序繼續(xù)執(zhí)行的實(shí)現(xiàn)方式
這篇文章主要介紹了關(guān)閉linux終端還讓程序繼續(xù)執(zhí)行的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
centos 5 手動(dòng)分區(qū)來安裝系統(tǒng)的方法
近來我想體驗(yàn)一下centos系統(tǒng),于是在虛擬機(jī)中安裝了centos 5。2010-03-03
Apache?Log4j2?遠(yuǎn)程代碼執(zhí)行漏洞分析+檢測(cè)+防護(hù)(最新推薦)
Apache?Log4j2是一款開源的Java日志框架,被廣泛地應(yīng)用在中間件、開發(fā)框架與Web應(yīng)用中,用來記錄日志信息,這篇文章主要介紹了Apache?Log4j2?遠(yuǎn)程代碼執(zhí)行漏洞分析+檢測(cè)+防護(hù)(最新推薦),需要的朋友可以參考下2024-07-07

