Linux程序管理及相關命令
一些概念
終端
也叫終端裝置,早期因為計算機比較昂貴,所以一個主機會有多個終端,這些終端本身不具備計算能力,僅僅承擔資訊的輸入與輸出工作,運算和處理均由主機來完成。
現在個人計算機也可以執行終端模擬程式來模擬一個終端來工作。
隨著計算機的發展,移動終端也有了廣泛應用,不僅有可以進行輸入輸出的工作,也可以進行一定的運算,實現部分系統的功能。
程序的許可權
參看Linux下程序許可權分析
一般程序有3個uid,分別為ruid(真實使用者ID),euid(有效使用者ID),suid(儲存使用者ID)
setuid(uid)
當你是root時,可以用這個函式把自己變成ID為uid的使用者,並且不可以返回再成為root。即你是root時,使用這個函式你的ruid,euid,suid都變了
seteuid(euid)
但是你用這個函式時,你的ruid,suid還是0,改變的只是你的euid。這樣你可以返回成為root。
另外有一個設定使用者ID(set uid),這個是對應的檔案的9個許可權中第三個欄位。如果一個二進位制檔案設定設定使用者ID,那麼如果非該檔案所有者具有該檔案的x許可權,且要執行這個檔案,那麼執行時生成的程序的euid就是該檔案的所有者
許可權的繼承
當使用fork子程序的時候,子程序全部繼承父程序四個uid,和父程序uid相同;當使用exec系列函式時候,會把suid置為euid。
例子說明:
比如登入時,不同的使用者獲取bash shell時,生成的shell是不同的。會根據使用者的身份資訊來生成具有不同許可權的shell。
系統或網路服務
常駐在記憶體中的程序。也叫daemon。
工作管理
進行工作管理時,每個工作都是目前bash的子程式。也就是說不同的終端之間是不可以互相管理的。每個bash只能管理自己的工作,而不可以去管理其他的bash的工作。
概念
前臺:就是出現提示字元讓你操作的環境
後臺:揹著你執行的環境,這裡的工作是不可以通過ctrl+c來打斷的,也就是說你不可以互動的與後臺中的工作互動。
job control管理
後臺中的job的狀態:
在後臺裡面的工作,他的狀態一般有Stop,Running。
如何講一個job放到後臺處理
1.
可以在指令的最末尾加上 &來將工作新增到後臺去處理。
比如:
注意
[1] 8400
這裡1是工作的job ID,用來標識一個工作。
8400這是這個工作對應的程序的PID
2.
對於當前正在處理的工作可以使用ctrl+z來把當前的工作放到後臺。
jobs命令
用途:
觀察目前後臺中job的狀態
注意這裡
[1]- 10314
[2]+ 10833
+:表示的是最近放到後臺的job ID
-:最近最後第二個被放到後臺的job ID
fg指令
用途:
將後臺的工作放到前臺來
fg %jobID
bg指令
用途:
讓工作在背景下的狀態變為工作中。因為有的job在後臺是Stopped,我們可以用這個指令來讓你Run起來。
bg %jobID
離線管理job
注意在後臺的job是在終端模式下的,並不是在系統的後臺中。即若我們是遠端連線到Linux主機的,當我們離線之後,在後臺的工作都會被中斷。所以為了避免這個情況,我們可以使用nohup指令。
nohup [指令與引數] & /* 將指令放到系統後臺去 */
nohup [指令與引數] /* 將指令放在前臺中執行 */
程序管理
程序觀察指令
ps指令
例子:
ps -l /* 只是看自己bash中的任務 */
F:process flag,說明這個程序的總結許可權。
- 若為4表示該程序許可權為root
- 若為1表示此子程序僅僅使用了fork而沒有執行exec
S:表示這個程序的狀態,主要有
- R:執行
- S:睡眠,可以被喚醒
- D:不可以被喚醒的睡眠
- T:停止
- Z:殭屍狀態
UID/PID/PPID
C:cpu使用率,單位為百分比
PRI/NI:優先順序
PRI(new) = PRI(old) + nice
PRI越低說明優先順序越高。
ADDR/SZ/WCHAN:
- ADDR:指出該程序在記憶體中的哪個部分
- SZ:代表這個程序用掉了多少記憶體
- WCHAN:表示目前程序是否執行中
TTY:登入者的終端機的位置,若是遠端則為(pts/n)
TIME:使用掉的CPU時間
CMD:造成這個程序觸發的指令是什麼
ps aux
top指令
動態觀察程式的變換
例子:
第一行(top)顯示的資訊分別是:
- 目前時間
- 開機到目前所經過的時間
- 已經登入到系統的使用者個數
- 系統在1,5,15分鐘的平均負載。
第二行(Tasks)顯示的資訊分別是:
目前程序的總量,與他們分別都是什麼狀態
第三行(Cpus)顯示的資訊是CPU的整體負載
第四行與第五行:表示的是目前的物理與虛擬記憶體的使用情況。
第六行
pstree
形成一個樹狀的程序關係圖。
程序的管理
程序之間是可以互相控制的。可以通過kill命令來發送訊號。
kill -signal PID
killall -signal 指令名稱
程序優先順序
nice命令
nice [-n 數字] command
-n :後面接一個數字,數值的範圍-20~19
注意一般使用者只可以調整自己程序的nice值,範圍為0~19,即只會把自己程序的優先順序調低。
command:因為執行一個command就當於啟動了一個子程序,所以這裡nice就是相當於給這個子程序設定nice值。
renice命令
reniec [number] PID
調整PID的nice值為number