1. 程式人生 > 實用技巧 >Linux程式管理與SELinux(鳥哥)

Linux程式管理與SELinux(鳥哥)

為方便查閱和記憶

1.程序

執行一個程式或命令時,產生一個程序,PID標識不同程序
不同的使用者身份執行程式時,系統給予的許可權是不同的,每個程序有三組人的許可權,每組人具有r/w/x許可權,由這個程序衍生出來的其他程序在一般狀態下,也會沿用這個程序的相關許可權。
程式:二進位制程式放置在儲存媒介中,以物理檔案的形式存在
程序:程式被觸發後,執行者的許可權與屬性、程式的程式程式碼與所需要的資料等都會被載入到記憶體中,作業系統並給予這個記憶體內的單元一個識別符號PID,程序是一個正在執行中的程式
子程序與父程序:PID PPID
fork and exec:過程呼叫的流程
系統以fork的方式複製一個與父程序相同的暫存程序,新的PID,新增PPID引數是父程序的PID,然後被複製出來的暫存程序以exec的方式來載入實際要執行的程式,最終成為一個子程序的存在

cp file1 file2 &
&表示置於後臺執行,在終端中仍然可以做其他的工作

2.工作管理


工作管理中,每個工作其實是bash的子程序,bash只能管理自己的工作,不能管理其他bash的工作
假設只有一個終端,出現提示符操作的環境稱為前臺foreground,對應的工作還可以放入後臺background去暫停或執行,放入後臺的工作必須不能與使用者互動,後臺工作不能ctrl+c終止
前臺:可以控制與執行命令的這個環境稱為前臺工作
後臺:可以自行執行的工作,無法使用ctrl+c終止,可使用fg/bg呼叫該工作
後臺中執行的程序不能等待terminal/shell的輸入
直接將命令丟到後臺執行的&

:分配一個job number,利用資料重定向,將命令的stdout和stderr重定向到檔案,以免影響前臺工作
將目前的工作丟到後臺中暫停:ctrl+z

例如vim,在一般模式下ctrl+z將vim丟到後臺當中並等待即可,+號表示最近一個被丟進後臺的工作,且fg命令預設取用這個工作,stopped表示目前工作狀態,暫停狀態,-號表示最近最後第二個被放置到後臺的工作,fg -可以取用,其他沒有+-號標識

jobs [lnprs]命令檢視目前後臺工作狀態

將後臺工作拿到前臺來處理:fg

fg %jobnumber,如fg %2,fg %1

將工作在後臺下的狀態變成執行中:bg

管理後臺當中的工作:kill

kill -l檢視能夠使用的訊號signal,kill -signal $jobnumber

kill -9 %jobnumberor kill -SIGKILL %jobnumber

-9強制刪除一個不正常的工作時使用,-15以正常步驟結束一項工作,-1重新讀取一次引數配置

kill 預設加PID,用於工作管理時加%jobnumber

離線管理:此處的後臺被並不是放到系統後臺去,工作管理的後臺與終端機有關,終端退出,後臺工作也會結束,使用at和nohub命令可以讓你離線或登出系統後,還能夠讓工作繼續進行

3.程序管理

3.1程序檢視

靜態ps和動態top,ps將某個時間點的程序執行情況選取下來

僅檢視自己bash相關程序:ps -l

F表示程序標誌,說明程序許可權,常見號碼4表示此程序的許可權是root

S表示程序狀態,S=sleep睡眠狀態,可以被喚醒,R=running執行中,T=stop停止狀態,Z=zombie殭屍狀態,程序已經終止但是無法從記憶體中刪除,D不可被喚醒的睡眠狀態,可能在等待I/O

UID/PID/PPID該程序被該UID所擁有/PID號碼/PPID號碼

C,CPU使用率,百分比

PRI/NI,priority/nice縮寫,優先順序,越小越快執行

ADDR/SZ/WCHAN,都與記憶體有關,SZ此程序有調多少記憶體,WCHAN此程序是否執行中,-表示正在執行

TTY登陸者的終端機位置,pts/n

TIME使用掉的CPU時間,此程序實際花費CPU執行時間

CMD即command,造成此程式觸發程序的命令

檢視系統所有程序:ps aux

USER該程序屬於哪個使用者賬號,%CPU使用掉的CPU資源百分比,%MEM佔用的實體記憶體百分比,VSZ使用掉的虛擬記憶體量,RSS佔用的固定記憶體量,TTY該程序在哪個終端機上執行,?表示與終端機無關,STAT該程序目前的狀態,與ps -l的S標識相同(R/S/T/Z),START該程序被觸發啟動的時間,TIME該程序實際使用CPU執行時間,COMMAND該程序的實際命令

以ps -l的格式顯示所有的程序:ps -lA

程序樹的程式顯示:ps axjf

ps aux | grep egrep '(cron|syslog)'

殭屍程序表示該程序已經執行完畢,或因故應該要終止了,但是父程序卻無法完整將該程序結束掉,而造成那個程序一直存在記憶體中,如果某個程序的CMD後有<defunct>字樣時,表示是殭屍程序

top動態產看程序的變化:top -d 秒數,預設5s

top主要分為兩個介面,上面是整個系統的資源使用情況,按行顯示的內容如下:第一行依次是目前的時間,開機所經過的時間,已經登陸的使用者數量,系統在1,5,15分鐘的平均工作負載,平均執行幾個程序(工作),越小越空閒,若高於1需要注意

第二行依次是程序總數,R,S,T,Z的程序數量,注意Z數量;第三行依次是CPU整體負載,其中%wa表示I/O wait,第四行和第五行表示實體記憶體和虛擬記憶體使用情況,若swap佔用多,表示實體記憶體不足

top的後半部分是每個程序使用資源情況,PID,USER,PR是priority的縮寫,程序的優先執行順序,NI是nice的縮寫,與PR有關,%CPU,%MEM,TIME+是CPU使用時間的累加,top預設使用%cpu排序

在top執行過程中,可以使用的按鍵命令有

?(shift+?)顯示在top當中可以輸入的按鍵命令

P(shift+p大寫P)以%CPU排序,M以%MEM排序,N以PID排序,T以TIME+排序

k(小寫)給予某個PID一個訊號,r給予某個PID重新一個nice值,q離開top

重定向:top -b -n 2 > test.txt

echo $$列印當前bash PID

pstree找出程序間的相關性

所有的程序都是依附在init這個程序下面,PID為1,linux核心主動呼叫的第一個程序,發生殭屍程序需要重新啟動init,啟動init的是reboot

3.2程序的管理

給程序一個訊號signal去告知該程序你想要它做什麼,常用訊號:

1 SIGHUP 啟動被終止的程序,重新讀取配置檔案,類似重新啟動

2 SIGINT 相當於ctrl-c來中斷一個程序的進行

9 SIGKILL 強制中斷一個程序的進行,可能有半產品產生

15 SIGTERM 以正常的結束程序來終止該程序,已經有問題的程序無法正常終止

17 SIGSTOP 相當於ctrl-z暫停一個程序的執行

kill -signal PID kill傳送訊號給PID或jobnumber

killall -signal 命令名稱 直接跟啟動該程序的命令名稱

3.3程序執行順序