程序管理篇
如何產(chǎn)生一個程序呢?就是執(zhí)行一個程式或指令,系統(tǒng)只認(rèn)識二進(jìn)制文件,當(dāng)我們啟動一個二進(jìn)制文件的時候會生成程序,而二進(jìn)制文件里的東西就是程式,程式被某個條件觸發(fā)生成程序。

程式一般是放置在實(shí)體磁碟中,然后透過使用者的執(zhí)行來觸發(fā)。觸發(fā)后會載入到記憶體中成為一個個體,那就是程序。
程序有給予執(zhí)行者的權(quán)限/屬性等參數(shù),并包括程式所需要的指令碼與資料或檔案資料等, 最后再給予一個PID 。系統(tǒng)就是透過這個PID 來判斷該process 是否具有權(quán)限進(jìn)行工作的

也就是說,當(dāng)我們登入并執(zhí)行bash時,系統(tǒng)已經(jīng)給我們一個PID了,這個PID就是依據(jù)登入者的UID/GID (/etc/passwd)來的
我們知道/bin/bash是一個程式(program),當(dāng)dmtsai登入后,他取得一個PID號碼為2234的程序,這個程序的User/Group都是dmtsai ,而當(dāng)這個程式進(jìn)行其他作業(yè)時,例如上面提到的touch這個指令時,那么由這個程序衍生出來的其他程序在一般狀態(tài)下,也會沿用這個程序的相關(guān)權(quán)限
讓我們將程式與程序作個總結(jié):
- 程式(program):通常為binary program ,放置在儲存媒體中(如硬碟、光碟、軟碟、磁帶等), 為實(shí)體檔案的型態(tài)存在;
- 程序(process):程式被觸發(fā)后,執(zhí)行者的權(quán)限與屬性、程式的程式碼與所需資料等都會被載入記憶體中, 作業(yè)系統(tǒng)并給予這個記憶體內(nèi)的單元一個識別碼(PID),可以說,程序就是一個正在運(yùn)作中的程式。
關(guān)于父進(jìn)程與子進(jìn)程

程式彼此之間是有相關(guān)性的,連續(xù)執(zhí)行兩個bash 后,第二個bash 的父程序就是前一個bash。因?yàn)槊總€程序都有一個PID ,那某個程序的父程序該如何判斷?就透過Parent PID (PPID) 來判斷即可。

fork and exec:程序呼叫的流程

系統(tǒng)先以fork 的方式復(fù)制一個與父程序相同的暫存程序,這個程序與父程序唯一的差別就是PID 不同!但是這個暫存程序還會多一個PPID 的參數(shù),PPID 如前所述,就是父程序的程序識別碼,然后暫存程序開始以exec 的方式載入實(shí)際要執(zhí)行的程式,以上述圖示來講,新的程式名稱為qqq ,最終子程序的程式碼就會變成qqq 了
系統(tǒng)或網(wǎng)路服務(wù):常駐在記憶體的程序
就是會一直運(yùn)行的程序。
主要大致分成系統(tǒng)本身所需要的服務(wù),例如剛剛提到的crond及atd ,還有rsyslogd等等的。還有一些則是負(fù)責(zé)網(wǎng)路連線的服務(wù),例如Apache, named, postfix, vsftpd...等等的
工作管理
『進(jìn)行工作管理的行為中,其實(shí)每個工作都是目前bash的子程序,亦即彼此之間是有相關(guān)性的。我們無法以job control的方式由tty1的環(huán)境去管理tty2的bash !』
在可以出現(xiàn)提示字元讓你操作的環(huán)境就稱為前景(foreground),至于其他工作就可以讓你放入背景(background)去暫停或運(yùn)作。要注意的是,放入背景的工作想要運(yùn)作時,他必須不能夠與使用者互動。舉例來說, vim絕對不可能在背景里面執(zhí)行(running)的!因?yàn)槟銢]有輸入資料他就不會跑啊!而且放入背景的工作是不可以使用[ctrl]+c來終止
總之,要進(jìn)行bash 的job control 必須要注意到的限制是:
- 這些工作所觸發(fā)的程序必須來自于你shell 的子程序(只管理自己的bash);
- 前景:你可以控制與下達(dá)指令的這個環(huán)境稱為前景的工作(foreground);
- 背景:可以自行運(yùn)作的工作,你無法使用[ctrl]+c 終止他,可使用bg/fg 呼叫該工作;
- 背景中『執(zhí)行』的程序不能等待terminal/shell 的輸入(input)
job control 管理
直接將指令放到后臺(背景)運(yùn)行

我在輸入一個指令后,在該指令的最后面加上一個『 & 』代表將該指令丟到背景中, 此時bash 會給予這個指令一個『工作號碼(job number)』 ,就是那個[1] 啦!至于后面那個14432 則是該指令所觸發(fā)的『 PID 』了,這里注意工作號碼和pid不是一個東西,該任務(wù)如果執(zhí)行完畢或出問題,提示會跑到前臺,所以要將提示信息導(dǎo)入一個文件中存起來,防止出提示信息影響前臺工作,另一方面,在后臺運(yùn)行的程序無法用ctrl+c結(jié)束。

如此一來,輸出的資訊都給他傳送到/tmp/log.txt 當(dāng)中
將『目前』的工作丟到背景中『暫停』:[ctrl]-z

在vim的一般模式下,按下[ctrl]及z這兩個按鍵,螢?zāi)簧蠒霈F(xiàn)[1] ,表示這是第一個工作,而那個+代表最近一個被丟進(jìn)背景的工作,且目前在背景下預(yù)設(shè)會被取用的那個工作(與fg這個指令有關(guān))!而那個Stopped則代表目前這個工作的狀態(tài)。在預(yù)設(shè)的情況下,使用[ctrl]-z丟到背景當(dāng)中的工作都是『暫停』的狀態(tài)
觀察目前的背景工作狀態(tài): jobs

那個+代表預(yù)設(shè)的取用工作,『目前我有兩個工作在背景當(dāng)中,兩個工作都是暫停的,而如果我僅輸入fg時,那么那個[2]會被拿到前景當(dāng)中來處理』
將背景工作拿到前景來處理:fg

我們會發(fā)現(xiàn)+出現(xiàn)在第一個工作后!怎么會這樣啊?這是因?yàn)槟銊倓偫胒g %1將第一號工作捉到前景后又放回背景,此時最后一個被放入背景的將變成vi那個指令動作,所以當(dāng)然[1]后面就會出現(xiàn)+了
讓工作在背景下的狀態(tài)變成運(yùn)作中: bg

這里那jobs;bg %3 ; jobs是三個命令,用;隔開而已
管理背景當(dāng)中的工作: kill

kill 后面接的數(shù)字預(yù)設(shè)會是PID ,如果想要管理bash 的工作控制,就得要加上%數(shù)字了
至少記得kill -15是正常結(jié)束進(jìn)程,kill -9是強(qiáng)制結(jié)束進(jìn)程
離線管理問題

如果你想要讓在背景的工作在你登出后還能夠繼續(xù)的執(zhí)行,那么使用nohup 搭配&
程序觀察


- F:代表這個程序旗標(biāo)(process flags),說明這個程序的總結(jié)權(quán)限,常見號碼有:
- 若為4 表示此程序的權(quán)限為root ;
- 若為1則表示此子程序僅進(jìn)行復(fù)制(fork)而沒有實(shí)際執(zhí)行(exec)。
- S:代表這個程序的狀態(tài)(STAT),主要的狀態(tài)有:
- R (Running):該程式正在運(yùn)作中;
- S (Sleep):該程式目前正在睡眠狀態(tài)(idle),但可以被喚醒(signal)。
- D :不可被喚醒的睡眠狀態(tài),通常這支程式可能在等待I/O 的情況(ex>列印)
- T :停止?fàn)顟B(tài)(stop),可能是在工作控制(背景暫停)或除錯(traced) 狀態(tài);
- Z (Zombie):僵尸狀態(tài),程序已經(jīng)終止但卻無法被移除至記憶體外。
- UID/PID/PPID:代表『此程序被該UID 所擁有/程序的PID 號碼/此程序的父程序PID 號碼』
- C:代表CPU 使用率,單位為百分比;
- PRI/NI:Priority/Nice的縮寫,代表此程序被CPU所執(zhí)行的優(yōu)先順序,數(shù)值越小代表該程序越快被CPU執(zhí)行。詳細(xì)的PRI與NI將在下一小節(jié)說明。
- ADDR/SZ/WCHAN:都與記憶體有關(guān),ADDR 是kernel function,指出該程序在記憶體的哪個部分,如果是個running 的程序,一般就會顯示『 - 』 / SZ 代表此程序用掉多少記憶體/ WCHAN 表示目前程序是否運(yùn)作中,同樣的, 若為- 表示正在運(yùn)作中。
- TTY:登入者的終端機(jī)位置,若為遠(yuǎn)端登入則使用動態(tài)終端介面(pts/n);
- TIME:使用掉的CPU 時間,注意,是此程序?qū)嶋H花費(fèi)CPU 運(yùn)作的時間,而不是系統(tǒng)時間;
- CMD:就是command 的縮寫,造成此程序的觸發(fā)程式之指令為何。
所以你看到的ps -l 輸出訊息中,他說明的是:『bash 的程式屬于UID 為0 的使用者,狀態(tài)為睡眠(sleep), 之所以為睡眠因?yàn)樗|發(fā)了ps (狀態(tài)為run)之故。此程序的PID 為14836,優(yōu)先執(zhí)行順序?yàn)?0 , 下達(dá)bash 所取得的終端介面為pts/0 ,運(yùn)作狀態(tài)為等待(wait) 。』

- USER:該process 屬于那個使用者帳號的?
- PID :該process 的程序識別碼。
- %CPU:該process 使用掉的CPU 資源百分比;
- %MEM:該process 所占用的實(shí)體記憶體百分比;
- VSZ :該process 使用掉的虛擬記憶體量(Kbytes)
- RSS :該process 占用的固定的記憶體量(Kbytes)
- TTY :該process 是在那個終端機(jī)上面運(yùn)作,若與終端機(jī)無關(guān)則顯示?,另外, tty1-tty6 是本機(jī)上面的登入者程序,若為pts/0 等等的,則表示為由網(wǎng)路連接進(jìn)主機(jī)的程序。
- STAT:該程序目前的狀態(tài),狀態(tài)顯示與ps -l 的S 旗標(biāo)相同(R/S/T/Z)
- START:該process 被觸發(fā)啟動的時間;
- TIME :該process 實(shí)際使用CPU 運(yùn)作的時間。
- COMMAND:該程序的實(shí)際指令為何?
一般來說,ps aux 會依照PID 的順序來排序顯示,我們還是以14836 那個PID 那行來說明!該行的意義為『 root 執(zhí)行的bash PID 為14836,占用了0.1% 的記憶體容量百分比,狀態(tài)為休眠(S),該程序啟動的時間為8 月4 號,因此啟動太久了, 所以沒有列出實(shí)際的時間點(diǎn)。且取得的終端機(jī)環(huán)境為pts/0 。』與ps aux 看到的其實(shí)是同一個程序


top 動態(tài)觀察程序的變化


在預(yù)設(shè)的情況下,每次更新程序資源的時間為5 秒,不過,可以使用-d 來進(jìn)行修改。top 主要分為兩個畫面,上面的畫面為整個系統(tǒng)的資源使用狀態(tài),基本上總共有六行,顯示的內(nèi)容依序是:
- 第一行(top...):這一行顯示的資訊分別為:
- 目前的時間,亦即是00:53:59 那個項(xiàng)目;
- 開機(jī)到目前為止所經(jīng)過的時間,亦即是up 6:07, 那個項(xiàng)目;
- 已經(jīng)登入系統(tǒng)的使用者人數(shù),亦即是3 users, 項(xiàng)目;
- 系統(tǒng)在1, 5, 15分鐘的平均工作負(fù)載。我們在第十五章談到的batch 工作方式為負(fù)載小于0.8就是這個負(fù)載啰!代表的是1, 5, 15分鐘,系統(tǒng)平均要負(fù)責(zé)運(yùn)作幾個程序(工作)的意思。越小代表系統(tǒng)越閑置,若高于1得要注意你的系統(tǒng)程序是否太過繁復(fù)了!
- 第二行(Tasks...):顯示的是目前程序的總量與個別程序在什么狀態(tài)(running, sleeping, stopped, zombie)。比較需要注意的是最后的zombie 那個數(shù)值,如果不是0 !好好看看到底是那個process 變成僵尸了吧?
- 第三行(%Cpus...):顯示的是CPU 的整體負(fù)載,每個項(xiàng)目可使用? 查閱。需要特別注意的是wa 項(xiàng)目,那個項(xiàng)目代表的是I/O wait, 通常你的系統(tǒng)會變慢都是I/O 產(chǎn)生的問題比較大!因此這里得要注意這個項(xiàng)目耗用CPU 的資源喔!另外,如果是多核心的設(shè)備,可以按下數(shù)字鍵『1』來切換成不同CPU 的負(fù)載率。
- 第四行與第五行:表示目前的實(shí)體記憶體與虛擬記憶體(Mem/Swap) 的使用情況。再次重申,要注意的是swap 的使用量要盡量的少!如果swap 被用的很大量,表示系統(tǒng)的實(shí)體記憶體實(shí)在不足!
- 第六行:這個是當(dāng)在top 程式當(dāng)中輸入指令時,顯示狀態(tài)的地方。
至于top 下半部分的畫面,則是每個process 使用的資源情況。比較需要注意的是:
- PID :每個process 的ID 啦!
- USER:該process 所屬的使用者;
- PR :Priority 的簡寫,程序的優(yōu)先執(zhí)行順序,越小越早被執(zhí)行;
- NI :Nice 的簡寫,與Priority 有關(guān),也是越小越早被執(zhí)行;
- %CPU:CPU 的使用率;
- %MEM:記憶體的使用率;
- TIME+:CPU 使用時間的累加;
top 預(yù)設(shè)使用CPU 使用率(%CPU) 作為排序的重點(diǎn),如果你想要使用記憶體使用率排序,則可以按下『M』, 若要回復(fù)則按下『P』即可。如果想要離開top 則按下『 q 』吧!如果你想要將top 的結(jié)果輸出成為檔案時, 可以這樣做:

觀察指定的單一程序:

修改NI(越小越優(yōu)先):

在你完成上面的動作后,在狀態(tài)列會出現(xiàn)如下的資訊:

接下來你就會看到如下的顯示畫面!

想要找出最損耗CPU 資源的那個程序時,大多使用的就是top 這支程式,然后強(qiáng)制以CPU 使用資源來排序(在top 當(dāng)中按下P 即可)
關(guān)于pstree

可以加管道符號縮小范圍

killall -signal 指令名稱
kill -1 重啟
-9 強(qiáng)殺
-15正常中斷

grep -v表示去除包含grep的進(jìn)程,awk '{$2}'表示輸出第二個元素就是pid,如果改成1則輸出root
killall 更方便的操作
利用『下達(dá)指令的名稱』來給予訊號

刪除某個程序,我們可以使用PID 或者是啟動該程序的指令名稱, 而如果要刪除某個服務(wù)呢?呵呵!最簡單的方法就是利用killall , 因?yàn)樗梢詫⑾到y(tǒng)當(dāng)中所有以某個指令名稱啟動的程序全部刪除。
程序優(yōu)先度調(diào)整
我們知道CPU 一秒鐘可以運(yùn)作多達(dá)數(shù)G 的微指令次數(shù),透過核心的CPU 排程可以讓各程序被CPU 所切換運(yùn)作, 因此每個程序在一秒鐘內(nèi)或多或少都會被CPU 執(zhí)行部分的指令碼。如果程序都是集中在一個隊(duì)列運(yùn)作, 而不具有優(yōu)先順序之分,也就是像我們?nèi)ビ螛穲鐾鏌衢T游戲需要排隊(duì)一樣,每個人都是照順序來!你玩過一遍后還想再玩(沒有執(zhí)行完畢),請到后面繼續(xù)排隊(duì)等待。情況有點(diǎn)像底下這樣:

假設(shè)pro1, pro2 是緊急的程序, pro3, pro4 是一般的程序,在這樣的環(huán)境中
我們可以將程序的優(yōu)先順序與CPU 排程進(jìn)行如下圖的解釋:

如上圖所示,具高優(yōu)先權(quán)的pro1, pro2可以被取用兩次,而較不重要的pro3, pro4則運(yùn)作次數(shù)較少。如此一來pro1, pro2就可以較快被完成啦!要注意,上圖僅是示意圖,并非較優(yōu)先者一定會被運(yùn)作兩次啦!為了要達(dá)到上述的功能,我們Linux給予程序一個所謂的『優(yōu)先執(zhí)行序(priority, PRI)』,這個PRI值越低代表越優(yōu)先的意思。不過這個PRI值是由核心動態(tài)調(diào)整的,使用者無法直接調(diào)整PRI值的。先來瞧瞧PRI曾在哪里出現(xiàn)?

由于PRI 是核心動態(tài)調(diào)整的,我們使用者也無權(quán)去干涉PRI !那如果你想要調(diào)整程序的優(yōu)先執(zhí)行序時,就得要透過Nice 值了!Nice 值就是上表的NI 啦!一般來說, PRI 與NI 的相關(guān)性如下:
PRI(new) = PRI(old) + nice
不過你要特別留意到,如果原本的PRI是50 ,并不是我們給予一個nice = 5 ,就會讓PRI變成55喔!因?yàn)镻RI是系統(tǒng)『動態(tài)』決定的,所以,雖然nice值是可以影響PRI ,不過,最終的PRI仍是要經(jīng)過系統(tǒng)分析后才會決定的。另外, nice值是有正負(fù)的喔,而既然PRI越小越早被執(zhí)行,所以,當(dāng)nice值為負(fù)值時,那么該程序就會降低PRI值,亦即會變的較優(yōu)先被處理。此外,你必須要留意到:
- nice 值可調(diào)整的范圍為-20 ~ 19 ;
- root 可隨意調(diào)整自己或他人程序的Nice 值,且范圍為-20 ~ 19 ;
- 一般使用者僅可調(diào)整自己程序的Nice 值,且范圍僅為0 ~ 19 (避免一般用戶搶占系統(tǒng)資源);
- 一般使用者僅可將nice 值越調(diào)越高,例如本來nice 為5 ,則未來僅能調(diào)整到大于5;
這也就是說,要調(diào)整某個程序的優(yōu)先執(zhí)行序,就是『調(diào)整該程序的nice 值』啦!那么如何給予某個程序nice 值呢?有兩種方式,分別是:
- 一開始執(zhí)行程式就立即給予一個特定的nice 值:用nice 指令;
- 調(diào)整某個已經(jīng)存在的PID 的nice 值:用renice 指令。
新執(zhí)行的指令即給予新的nice 值

通常什么時候要將nice 值調(diào)大呢?舉例來說,系統(tǒng)的背景工作中, 某些比較不重要的程序之進(jìn)行:例如備份工作!由于備份工作相當(dāng)?shù)暮南到y(tǒng)資源, 這個時候就可以將備份的指令之nice 值調(diào)大一些,可以使系統(tǒng)的資源分配的更為公平
另外,『 nice -n N command 』那個N 指的是『在原本的nice 值底下,再加上的一個值,變成新的nice 值』之意。所以在上面的范例中,原本的nice 為10,使用了nice -n -5 之后,就會變成(10+(-5)),最終結(jié)果就是5!并不是直接指定nice 值
已存在程序的nice 重新調(diào)整

雖然修改的是bash那個程序,但是該程序所觸發(fā)的ps指令當(dāng)中的nice也會繼承而為-5!了解了吧!整個nice值是可以在父程序-->子程序之間傳遞的!另外,除了renice之外,其實(shí)那個top同樣的也是可以調(diào)整nice值的!
系統(tǒng)資源的觀察
free 觀察內(nèi)存(記憶體)

我的系統(tǒng)當(dāng)中有2848MB 左右的實(shí)體記憶體,我的swap 有1GB 左右, 那我使用free -m 以MBytes 來顯示時,就會出現(xiàn)上面的資訊。Mem 那一行顯示的是實(shí)體記憶體的量, Swap 則是記憶體置換空間的量。total 是總量, used 是已被使用的量, free 則是剩余可用的量。后面的shared/buffers/cached 則是在已被使用的量當(dāng)中,用來作為緩沖及快取的量,這些shared/buffers/cached 的用量中,在系統(tǒng)比較忙碌時, 可以被釋出而繼續(xù)利用!因此后面就有一個available (可用的) 數(shù)值!。
我們可以發(fā)現(xiàn)這部測試機(jī)根本沒有什么特別的服務(wù),但是竟然有706MB 左右的cache !因?yàn)轼B哥在測試過程中還是有讀/寫/執(zhí)行很多的檔案嘛!這些檔案就會被系統(tǒng)暫時快取下來,等待下次運(yùn)作時可以更快速的取出之意!也就是說,系統(tǒng)是『很有效率的將所有的記憶體用光光』,目的是為了讓系統(tǒng)的存取效能加速,一般來說, swap 最好不要被使用,尤其swap 最好不要被使用超過20% 以上, 如果您發(fā)現(xiàn)swap 的用量超過20% ,那么,最好還是買實(shí)體記憶體來插吧!因?yàn)椋?Swap 的效能跟??實(shí)體記憶體實(shí)在差很多,而系統(tǒng)會使用到swap , 絕對是因?yàn)閷?shí)體記憶體不足了才會這樣做的
uname:查閱系統(tǒng)與核心相關(guān)資訊

uname 可以列出目前系統(tǒng)的核心版本、 主要硬體平臺以及CPU 類型等等的資訊。以上面范例一的狀態(tài)來說,我的Linux 主機(jī)使用的核心名稱為Linux,而主機(jī)名稱為study.centos.vbird,核心的版本為3.10.0-229.el7.x86_64 ,該核心版本建立的日期為2015-3-6,適用的硬體平臺為x86_64 以上等級的硬體平臺。
uptime:觀察系統(tǒng)啟動時間與工作負(fù)載

顯示出目前系統(tǒng)已經(jīng)開機(jī)多久的時間,以及1, 5, 15分鐘的平均負(fù)載
netstat :追蹤網(wǎng)路或插槽檔

在上面的結(jié)果當(dāng)中,顯示了兩個部分,分別是網(wǎng)路的連線以及l(fā)inux 上面的socket 程序相關(guān)性部分。我們先來看看網(wǎng)際網(wǎng)路連線情況的部分:
- Proto :網(wǎng)路的封包協(xié)定,主要分為TCP與UDP封包
- Recv-Q:非由使用者程式連結(jié)到此socket 的復(fù)制的總bytes 數(shù);
- Send-Q:非由遠(yuǎn)端主機(jī)傳送過來的acknowledged 總bytes 數(shù);
- Local Address :本地端的IP:port 情況
- Foreign Address:遠(yuǎn)端主機(jī)的IP:port 情況
- State :連線狀態(tài),主要有建立(ESTABLISED)及監(jiān)聽(LISTEN);
除了網(wǎng)路上的連線之外,其實(shí)Linux系統(tǒng)上面的程序是可以接收不同程序所發(fā)送來的資訊,那就是Linux上頭的插槽檔(socket file)
上表中socket file的輸出欄位有:
- Proto :一般就是unix 啦;
- RefCnt:連接到此socket 的程序數(shù)量;
- Flags :連線的旗標(biāo);
- Type :socket 存取的類型。主要有確認(rèn)連線的STREAM 與不需確認(rèn)的DGRAM 兩種;
- State :若為CONNECTED 表示多個程序之間已經(jīng)連線建立。
- Path :連接到此socket 的相關(guān)程式的路徑!或者是相關(guān)資料??輸出的路徑。

偵測系統(tǒng)資源變化

利用vmstat 甚至可以進(jìn)行追蹤?quán)福?/span>你可以使用類似『 vmstat 5 』代表每五秒鐘更新一次,且無窮的更新!直到你按下 [ctrl]-c 為止。如果你想要即時的知道系統(tǒng)資源的運(yùn)作狀態(tài),這個指令就不能不知道!那么上面的表格各項(xiàng)欄位的意義為何?基本說明如下:
- 程序欄位(procs)的項(xiàng)目分別為:
r :等待運(yùn)作中的程序數(shù)量;b:不可被喚醒的程序數(shù)量。這兩個項(xiàng)目越多,代表系統(tǒng)越忙碌(因?yàn)橄到y(tǒng)太忙,所以很多程序就無法被執(zhí)行或一直在等待而無法被喚醒之故)。 - 記憶體欄位(memory)項(xiàng)目分別為:
swpd:虛擬記憶體被使用的容量; free:未被使用的記憶體容量; buff:用于緩沖記憶體; cache:用于快取記憶體。這部份則與free是相同的。 - 記憶體置換空間(swap)的項(xiàng)目分別為:
si:由磁碟中將程序取出的量; so:由于記憶體不足而將沒用到的程序?qū)懭氲酱诺膕wap的容量。如果si/so的數(shù)值太大,表示記憶體內(nèi)的資料常常得在磁碟與主記憶體之間傳來傳去,系統(tǒng)效能會很差! - 磁碟讀寫(io)的項(xiàng)目分別為:
bi:由磁碟讀入的區(qū)塊數(shù)量; bo:寫入到磁碟去的區(qū)塊數(shù)量。如果這部份的值越高,代表系統(tǒng)的I/O非常忙碌! - 系統(tǒng)(system)的項(xiàng)目分別為:
in:每秒被中斷的程序次數(shù); cs:每秒鐘進(jìn)行的事件切換次數(shù);這兩個數(shù)值越大,代表系統(tǒng)與周邊設(shè)備的溝通非常頻繁!這些周邊設(shè)備當(dāng)然包括磁碟、網(wǎng)路卡、時間鐘等。 - CPU的項(xiàng)目分別為:
us:非核心層的CPU使用狀態(tài); sy:核心層所使用的CPU狀態(tài); id:閑置的狀態(tài); wa:等待I/O所耗費(fèi)的CPU狀態(tài); st:被虛擬機(jī)器( virtual machine)所盜用的CPU使用狀態(tài)(2.6.11以后才支持)
具有SUID/SGID 權(quán)限的指令執(zhí)行狀態(tài)
- SUID 權(quán)限僅對二進(jìn)位程式(binary program)有效;
- 執(zhí)行者對于該程式需要具有x 的可執(zhí)行權(quán)限;
- 本權(quán)限僅在執(zhí)行該程式的過程中有效(run-time);
- 執(zhí)行者將具有該程式擁有者(owner) 的權(quán)限。
整個SUID的權(quán)限會生效是由于『具有該權(quán)限的程式被觸發(fā)』,而我們知道一個程式被觸發(fā)會變成程序,所以啰,執(zhí)行者可以具有程式擁有者的權(quán)限就是在該程式變成程序的那個時候
你或許那時候會覺得很奇怪,為啥執(zhí)行了passwd后你就具有root的權(quán)限呢?不都是一般使用者執(zhí)行的嗎?這是因?yàn)槟阍谟|發(fā)passwd后,會取得一個新的程序與PID,該P(yáng)ID產(chǎn)生時透過SUID來給予該P(yáng)ID特殊的權(quán)限設(shè)定啦!我們使用dmtsai登入系統(tǒng)且執(zhí)行passwd后,透過工作控制來理解一下!

如何查詢整個系統(tǒng)的SUID/SGID的檔案呢
find / -perm /6000
fuser:藉由檔案(或檔案系統(tǒng))找出正在使用該檔案的程序
想要知道我的程序到底在這次啟動過程中開啟了多少檔案,可以利用fuser 來觀察啦!舉例來說,你如果卸載時發(fā)現(xiàn)系統(tǒng)通知:『 device is busy 』,那表示這個檔案系統(tǒng)正在忙碌中, 表示有某支程序有利用到該檔案系統(tǒng)

- c :此程序在當(dāng)前的目錄下(非次目錄);
- e :可被觸發(fā)為執(zhí)行狀態(tài);
- f :是一個被開啟的檔案;
- r :代表頂層目錄(root directory);
- F :該檔案被開啟了,不過在等待回應(yīng)中;
- m :可能為分享的動態(tài)函式庫;

僅針對單一檔案

如何查出某個程序開啟或者使用的檔案與裝置呢?呼呼!那就是使用lsof


找出某支正在執(zhí)行的程式的PID


浙公網(wǎng)安備 33010602011771號