Centos8-系統程序管理

10。1 程序概述和ps檢視程序工具

10。2 uptime檢視系統負載-top動態管理程序

10。3 前後臺程序切換-nice程序優先順序-screen後臺執行命令

10。1 程序概述和ps管理程序

10。1。1 什麼是程序?

安裝包地址:滲透測試實戰:內網滲透之域滲透

程序

: 是程式執行的過程, 動態,有生命週期及執行狀態,是已啟動的可執行程式的執行例項。

程序有以下組成部分:

• 已分配記憶體的地址空間;

• 安全屬性,包括所有權憑據和特權;

• 程式程式碼的一個或多個執行執行緒;

• 程序狀態

執行緒

:程序和執行緒都是由作業系統所體現的程式執行的基本單元,系統利用該基本單元實現系統對應用的併發性。程序和執行緒的區別在於:

簡而言之,一個程式至少有一個程序,一個程序至少有一個執行緒。

程式: 二進位制檔案(程式即二進位制檔案),

靜態實體

/bin/date,/usr/sbin/sshd

下圖所示的是程序的生命週期:

Centos8-系統程序管理

父程序複製自己的地址空間(fork [fɔ:k] 分叉)建立一個新的(子)程序結構。每個新程序分配一個唯一的程序 ID (PID),滿足跟蹤安全性之需。PID 和 父程序 ID (PPID)是子程序環境的元素,任何程序都可以建立子程序,所有程序都是第一個系統程序的後代。

centos5或6PID為1的程序是: init

centos7 PID為1的程序是: systemd

centso8 PID為1的程序是: systemd

殭屍程序:一個程序使用fork建立子程序,如果子程序退出,而父程序並沒有呼叫wait或waitpid獲取子程序的狀態資訊,那麼子程序的程序描述符仍然儲存在系統中。這種程序稱之為殭屍程序。

父程序退出了, 子程序沒有退出, 那麼這些子程序就沒有父程序來管理,就變成殭屍程序。

10。1。2 程序的屬性

程序ID(PID):是唯一的數值,用來區分程序

父程序的ID(PPID)

啟動程序的使用者ID(UID)和所歸屬的組(GID)

程序狀態:狀態分為執行R(running)、休眠S(sleep)、殭屍Z(zombie)

程序執行的優先順序

程序所連線的終端名

程序資源佔用:比如佔用資源大小(記憶體、CPU佔用量)

10。1。3 使用ps檢視程序工具

1、ps檢視程序工具

例1:常用的引數:

a: 顯示跟當前終端關聯的所有程序

u: 基於使用者的格式顯示(U: 顯示某使用者ID所有的程序)

x: 顯示所有程序,不以終端機來區分

例2:常用的選項組合是 ps -aux

[root@xuegod63 ~]# ps -axu | more

Centos8-系統程序管理

Centos8-系統程序管理

注: 最後一列[xxxx] 使用方括號括起來的程序是核心態的程序。 沒有括起來的是使用者態程序

上面的引數輸出每列含意:

USER: 啟動這些程序的使用者

PID: 程序的ID

%CPU 程序佔用的CPU百分比;

%MEM 佔用記憶體的百分比;

VSZ:程序佔用的虛擬記憶體大小(單位:KB)

RSS:程序佔用的物理記憶體大小(單位:KB)

STAT:該程式目前的狀態,Linux程序有5種基本狀態:

R :該程式目前正在執行,或者是可被執行;

S :該程式目前正在睡眠當中 (可說是 idle 狀態啦!),但可被某些訊號(signal) 喚醒。

T :該程式目前正在偵測或者是停止了;

Z :該程式應該已經終止,但是其父程式卻無法正常的終止他,造成 zombie (疆屍) 程式的狀態

D 不可中斷狀態。

5個基本狀態後,還可以加一些字母,比如:Ss、R+,如下圖:

Centos8-系統程序管理

它們含意如下::

<: 表示程序執行在高優先順序上

N: 表示程序執行在低優先順序上

L: 表示程序有頁面鎖定在記憶體中

s: 表示程序是控制程序

l: 表示程序是多執行緒的

+: 表示當前程序執行在前臺

START:該 process 被觸發啟動的時間;

TIME :該 process 實際使用 CPU 運作的時間。

COMMAND:該程式的實際指令

例1: 檢視程序狀態

[root@xuegod63 ~]# vim a。txt

在另一個終端執行:

[root@xuegod63 ~]# ps -aux | grep a。txt #檢視狀態 S表示睡眠狀態, + 表示前臺

root 4435 0。0 0。2 151752 5292 pts/1

S+

20:52 0:00 vim a。txt

root 4661 0。0 0。0 112676 996 pts/0 S+ 21:05 0:00 grep ——color=auto a。txt

在vim a。txt 這個終端上 按下: ctrl+z

[1]+ 已停止 vim a。txt

在另一個終端執行:

[root@xuegod63 ~]# ps -aux | grep a。txt #檢視狀態 T表示停止狀態

root 4435 0。0 0。2 151752 5292 pts/1

T

20:52 0:00 vim a。txt

root 4675 0。0 0。0 112676 996 pts/0 S+ 21:05 0:00 grep ——color=auto a。txt

注:

ctrl-c 是傳送 SIGINT 訊號,終止一個程序

ctrl-z 是傳送 SIGSTOP訊號,掛起一個程序。將作業放置到後臺(暫停) 前臺程序收到這些訊號,就會採取相應動作。

ctrl-d 不是傳送訊號,而是表示一個特殊的二進位制值,表示 EOF。代表輸入完成或者登出

在shell中,ctrl-d表示退出當前shell.

例2: D 不可中斷狀態

[root@xuegod63 ~]# tar -zcvf usr-tar.gz /usr/

#然後在另一個終端不斷檢視狀態,由S+,R+變為D+

Centos8-系統程序管理

2、ps常用的引數: ps -ef

-e 顯示所有程序

-f 顯示完整格式輸出

我們常用的組合: ps -ef

Centos8-系統程序管理

包含的資訊如下

UID: 啟動這些程序的使用者,程式被該UID所擁有

PID: 該程序的ID

PPID: 該程序的父程序的ID

C: 該程序生命週期中的CPU 使用資源百分比

STIME: 程序啟動時的系統時間

TTY: 表明程序在哪個終端裝置上執行。如果顯示 ?表示與終端無關,這種程序一般是核心態程序。另外, tty1-tty6 是本機上面的登入者程式,若為 pts/0 等,則表示執行在虛擬終端上的程序。

TIME: 執行程序一共累計佔用的CPU時間

CMD: 啟動的程式名稱

例1:測試CPU使用時間。

dd if=/dev/zero of=~/zero.txt count=10 bs=100M

[root@localhost ~]# ps -axu | grep dd

注:

ps aux 是用BSD的格式來顯示程序。

ps -ef 是用標準的Unix格式顯示程序

10。2 uptime檢視系統負載-top動態管理程序

10。2。1 uptime檢視CPU負載工具

[root@localhost ~]# uptime

13:22:30 up 20days, 2 users, load average: 0.06, 0.60, 0.48

彈出訊息含意如下:

13:22:30

當前時間

up 20days

系統執行時間 ,說明此伺服器連續執行20天了

2 user

當前登入使用者數

load average: 0.06, 0.60, 0.48

系統負載,即任務佇列的平均長度。 三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。

任務佇列的平均長度是什麼?

大廳排隊買票:

Centos8-系統程序管理

這時佇列是4:

cpu佇列數為3時,如圖:

Centos8-系統程序管理

互動:例1:找出前當系統中,CPU負載過高的伺服器?

伺服器1: load average: 0。15, 0。08, 0。01 1核

伺服器2: load average: 4。15, 6。08, 6。01 1核

伺服器3: load average: 10。15, 10。08, 10。01 4核

答案:伺服器2

如果伺服器的CPU為1核心,則load average中的數字 >=3 負載過高,如果伺服器的CPU為4核心,則load average中的數字 >=12 負載過高。

經驗:單核心,1分鐘的系統平均負載不要超過3,就可以,這是個經驗值。

如下圖: 1人只能買1張票,排第四的人可能會急。 所以我們認為超過3就升級CPU

Centos8-系統程序管理

10。2。2 top命令

[root@xuegod63 ~]# top #top彈出的每行資訊含意如下:

第一行內容和uptime彈出的資訊一樣

程序和CPU的資訊( 第二、三行)

Centos8-系統程序管理

當有多個CPU時,這些內容可能會超過兩行。內容如下:

Tasks: 481 total

程序總數

1 running

正在執行的程序數

480 sleeping

睡眠的程序數

0 stopped

停止的程序數

0 zombie

殭屍程序數

Cpu(s): 0。0% us

系統使用者程序使用CPU百分比。

0。0% sy

核心中的程序佔用CPU百分比

0。0% ni

使用者程序空間內改變過優先順序的程序佔用CPU百分比

98。7% id

空閒CPU百分比

0。0% wa

cpu等待I/0完成的時間總量。

測試:

終端1:執行:top

終端2:dd if=/dev/zero of=/a。txt count=10 bs=100M

終端3:dd if=/dev/zero of=/a。txt count=10 bs=100M

正常讀寫時,如果wa佔用較多CPU,那麼就是磁碟效能問題,建議更換磁碟。

如下:

Centos8-系統程序管理

0。0% hi(瞭解)

硬中斷消耗時間

硬中斷,佔用CPU百分比。1。 硬中斷是由硬體產生的,比如,像磁碟,網絡卡,鍵盤,時鐘等。每個裝置或裝置集都有它自己的IRQ(中斷請求)。基於IRQ(

Interrupt Request

),CPU可以將相應的請求分發到對應的硬體驅動上(注:硬體驅動通常是核心中的一個子程式,而不是一個獨立的程序)。# hi -> Hardware IRQ: The amount of time the CPU has been servicing hardware interrupts。

0。0% si(瞭解)

軟中斷消耗時間

軟中斷,佔用CPU百分比。1。 通常,軟中斷是一些對I/O的請求。這些請求會呼叫核心中可以排程I/O發生的程式。對於某些裝置,I/O請求需要被立即處理,而磁碟I/O請求通常可以排隊並且可以稍後處理。根據I/O模型的不同,程序或許會被掛起直到I/O完成,此時核心排程器就會選擇另一個程序去執行。I/O可以在程序之間產生並且排程過程通常和磁碟I/O的方式是相同。# si -> Software Interrupts。: The amount of time the CPU has been servicingsoftware interrupts。

0。0 st (steal 偷)

st:虛擬機器偷取物理的時間。比如:物理機已經運行了KVM虛擬機器。KVM虛擬機器佔用物理機的cpu時間

記憶體資訊(第四五行)

Centos8-系統程序管理

內容如下:

Mem: 2033552k total

物理記憶體總量

340392k used

使用的物理記憶體總量

1376636k free

空閒記憶體總量

316524k buff/cache

用作核心快取的記憶體量。

和free -k 一個意思

Centos8-系統程序管理

Swap: 2017948k total

交換區總量

0k used

使用的交換區總量

192772k free

空閒交換區總量

1518148 avail Mem

總的可利用記憶體是多少

注:如果swap分割槽,被使用,那麼你的記憶體不夠用了。

第7行程序資訊

Centos8-系統程序管理

列名

含義

PID

程序id

USER

程序所有者的使用者名稱

PR

優先順序(由核心動態調整),使用者不能

NI

程序優先順序。 nice值。負值表示高優先順序,正值表示低優先順序,使用者可以自己調整

VIRT(virtual memory usage)

虛擬記憶體,是程序正在使用的所有記憶體(ps中標為VSZ)

VIRT:virtual memory usage 虛擬記憶體

1、程序“需要的”虛擬記憶體大小,包括程序使用的庫、程式碼、資料等

2、假如程序申請100m的記憶體,但實際只使用了10m,那麼它會增長100m,而不是實際的使用量

RES(resident memory usage)

是程序所使用的物理記憶體。實際實用記憶體(ps中標為RSS)

RES:resident memory usage 常駐記憶體

1、程序當前使用的記憶體大小,但不包括swap out

2、包含其他程序的共享

3、如果申請100m的記憶體,實際使用10m,它只增長10m,與VIRT相反

4、關於庫佔用記憶體的情況,它只統計載入的庫檔案所佔記憶體大小

SHR

共享記憶體大小,單位kb

SHR:shared memory 共享記憶體

1、除了自身程序的共享記憶體,也包括其他程序的共享記憶體

2、雖然程序只使用了幾個共享庫的函式,但它包含了整個共享庫的大小

3、計算某個程序所佔的物理記憶體大小公式:RES – SHR

4、swap out後,它將會降下來

S

程序狀態。

D=不可中斷的睡眠狀態

R=執行中或可執行

S=睡眠中

T=已跟蹤/已停止

Z=僵停

%CPU

上次更新到現在的CPU時間佔用百分比

%MEM

程序使用的物理記憶體百分比

TIME+

程序使用的CPU時間總計,單位1/100秒

COMMAND

命令名/命令列

top快捷鍵:

預設3s重新整理一次,按s修改重新整理時間

按空格 :立即重新整理。

q退出

P:按CPU排序

M:按記憶體排序

T按時間排序

p: 程序pid,檢視某個程序狀態

數字鍵1:顯示每個核心的CPU使用率,展示cpu數量,再按下,就收起來了

u/U:指定顯示的使用者

h:幫助

例1:執行top,依次演示一下top的快捷鍵,讓大家看一下效果

例2:使用TOP動態只檢視某個或某些程序的資訊

找到程序PID

[root@localhost ~]# vim a.txt[root@localhost ~]# ps axu | grep vim

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

root 9667 0.0 0.2 143620 3344 pts/1 S<+ 19:15 0:00 vim a.txt

[root@localhost ~]# top -p 9667

10。2。3 實戰1:找出系統中使用CPU最多的程序

執行top , 找出使用CPU最多的程序 ,按大寫的P,可以按CPU使用率來排序顯示

Centos8-系統程序管理

互動:在linux系統中一個程序,最多可以使用100%cpu對嗎?

如下圖,可以看到dirtycow(髒牛漏洞,用於提權) 程序使用196.8%

Centos8-系統程序管理

這是你第一次看見: 1

如果你的4核心的cpu,你可以執行400%

Centos8-系統程序管理

64核心的cpu,可以執行到6400%

10。2。4 lsof命令

lsof命令用於檢視你程序開啟的檔案,開啟檔案的程序,程序開啟的埠(TCP、UDP)

-i<條件>:列出符合條件的程序。(ipv4、ipv6、協議、:埠、 @ip )

-p<程序號>:列出指定程序號所開啟的檔案;

例:

[root@xuegod63 ~]# vim a.txt

[root@xuegod63 ~]# ps -axu | grep a.txt

root 43641 0.8 0.2 151744 5280 pts/3 S+ 18:19 0:00 vim a.txt

root 43652 0.0 0.0 112676 996 pts/1 S+ 18:19 0:00 grep --color=auto a.txt

[root@xuegod63 ~]# yum -y install lsof

[root@xuegod63 ~]# lsof -p 65641 #程序pid一般用於檢視木馬程序,在讀哪些檔案

[root@xuegod63 ~]# lsof -i :22 #檢視埠,或檢視駭客開啟的後門埠是哪個程序在用

[root@xuegod63 ~]# lsof -c vim #程序名,顯示vim程序現在開啟的檔案

[root@xuegod63 ~]# lsof /test/.abc.txt.swp #顯示佔用檔案.abc.txt.swp的程序

Centos8-系統程序管理

在這個示例中,使用者root正在其/test目錄中進行一些操作。一個 bash是例項正在執行,並且它當前的目錄為/test,另一個則顯示的是vim正在編輯/test下的檔案。要成功地解除安裝/test,應該在通知使用者以確保情況正常之後,中止這些程序。 這個示例說明了應用程式的當前工作目錄非常重要,因為它仍保持著檔案資源,並且可以防止檔案系統被解除安裝。這就是為什麼大部分守護程序(後臺程序)將它們的目錄更改為根目錄、或服務特定的目錄的原因,以避免該守護程序阻止解除安裝不相關的檔案系統。

10。2。5 free顯示系統中可用記憶體和已用記憶體的數量

free命令檢視記憶體使用狀態

子選項:

-b:以位元組為單位表示。

-k:以KB為單位顯示,預設是以KB為單位顯示。

-m:以MB為單位顯示。

-g:以GB為單位顯示。

[root@localhost ~]# free -m

total used free shared buff/cache available

Mem: 972 603 69 24 299 123

Swap: 2047 69 1978

其中:

第一行:total是總記憶體量,used是已經使用的記憶體量,free是空閒的記憶體,shared是多個程序共享的記憶體總數,buffers是緩衝記憶體數,cache是快取記憶體數。預設單位是KB。available 實際可用

(case 加速讀,buffers加速寫。)

第二行開始:total系統中有972MB的物理記憶體,used是已經使用的記憶體數量。free是空閒的記憶體數量。shared是多個程序共享的記憶體數量。buff/cache用來作為緩衝和快取的空間,核心會在記憶體將要耗盡時釋放這部分記憶體給其他程序使用。availble:可使用空間,評估有多少記憶體可用於啟動新應用程式,不包括swap,不同於free和cache欄位。available欄位考慮了頁快取,而不是所有可回收的記憶體。正因為這個原因所以通常free+buff/cache的數值要比available的數值大。

互動:執行free命令檢視系統狀態,這一瞬間,當前系統,真正,還有多少M 記憶體可以使用?

答案1:free+ buff/cache=69 +299=368M

答案2:available=123M

10。3 前後臺程序切換- nice程序優先順序-screen後臺執行命令

10。3。1 Linux後臺程序與前臺程序的區別

前臺程序:是在終端中執行的命令,那麼該終端就為程序的控制終端,一旦這個終端關閉,這個程序也隨著消失

後臺程序: 也叫守護程序(Daemon),是執行在後臺的一種特殊程序,不受終端控制,它不需要終端的互動;Linux的大多數伺服器就是用守護程序實現的。比如,Web伺服器httpd等。

10。3。2 程序的前臺與後臺執行

跟系統任務相關的幾個命令(瞭解):

& #用在一個命令的最後,可以把這個命令放到後臺執行。

ctrl + z #將一個正在前臺執行的命令放到後臺,並且暫停。

jobs #檢視當前有多少在後臺執行的程序。它是一個作業控制命令

fg(foreground process) #將後臺中的命令調至前臺繼續執行, 如果後臺中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是透過jobs命令查到的後臺正在執行的命令的序號(不是pid)

bg(background process) #將一個在後臺暫停的命令,變成繼續執行; 如果後臺中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是透過jobs命令查到的後臺正在執行的命令的序號(不是pid)

實戰恢復被掛起的程序(瞭解)

例: vim a。txt 按下: ctrl+z

[root@xuegod63 ~]# vim a。txt #開啟後,然後執行 ctrl+z

[1]+ 已停止 vim a。txt

[root@xuegod63 ~]# ps -axu | grep vim

root 43710 0。8 0。2 151744 5304 pts/3 T 18:26 0:00 vim a。txt

root 43720 0。0 0。0 112676 984 pts/3 S+ 18:26 0:00 grep ——color=auto vim

[root@xuegod63 ~]# jobs #檢視當前有多少在後臺執行的程序

[1]+ 已停止 vim a。txt

[root@xuegod63 ~]# fg 1 #將後臺掛起的程序恢復到前臺執行

10。3。3 kill關閉程序

關閉程序3個命令:kill killall pkill

kill關閉程序:kill 程序號 關閉單個程序

killall和pkill 命令用於殺死指定名字的程序

透過訊號的方式來控制程序的

kill -l =====> 列出所有支援的訊號(瞭解) 用最多的是: 9 訊號

Centos8-系統程序管理

訊號編號 訊號名

1) SIGHUP 重新載入配置

2) SIGINT 鍵盤中斷 crtl+c

3) SIGQUIT 退出

9) SIGKILL 強制終止

15) SIGTERM 終止(正常結束),預設訊號

18) SIGCONT 繼續

19) SIGSTOP 停止

20) SIGTSTP 暫停 crtl+z

例1: kill和killall終止程序

[root@xuegod63 ~]# yum -y install psmisc

[root@xuegod63 ~]# kill -9 pid

[root@xuegod63 ~]# killall vim

[root@xuegod63 ~]# pkill vim

10。3。4 程序的優先順序管理

優先順序取值範圍為(-20,19),值越小優先順序越高, 預設優先順序是0

優先順序越高佔用的CPU值就越高

命令1:nice 指定程式的執行優先順序

格式:nice n command

命令2:renice 改變程式的執行優先順序

格式:renice -n pid

例1:指定執行vim的優先順序為5

[root@xuegod63 ~]# nice -n 5 vim a。txt

輸入內容,然後ctrl+z 掛起

Centos8-系統程序管理

透過ps檢視這個檔案的PID號

[root@xuegod63 ~]# ps -aux|grep vim

Centos8-系統程序管理

透過top命令檢視優先順序

[root@xuegod63 ~]# top -p 26154

Centos8-系統程序管理

改變正在執行的程序的優先順序

Centos8-系統程序管理

Centos8-系統程序管理

10。3。5 使用screen後臺實時執行備份命令

實戰場景:公司晚上需要備份1T資料,我在xshell上直接執行備份指令碼back。sh可以嗎? 或直接執行back。sh & 放到後臺執行可以嗎? 當關了xshell後,back。sh & 還在後臺執行嗎?

答:xshell長時間連線,如果本地網路偶爾斷開或xshell不小心關閉,都會讓後臺執行的備份命令停止執行的。正確做法使用: srceen

10。3。6 screen概述和安裝

Screen中有會話的概念,,使用者可以在一個screen會話中建立多個screen視窗,在每一個screen視窗中就像操作一個真實的telnet/SSH連線視窗那樣。

安裝screen軟體包

# rpm -ivh /mnt/Packages/screen-4。1。0-0。23。20120314git3c2946。el7_2。x86_64。rpm

或者

[root@xuegod63 ~]# yum -y install screen

10。3。7 screen使用方法

直接在命令列鍵入screen命令回車,如下圖

[root@xuegod63 ~]# screen

Screen將建立一個執行shell的全屏視窗。你可以執行任意shell程式,就像在ssh視窗中那樣

Centos8-系統程序管理

例如,我們在做某個大型的操作但是突然之間斷開:

實戰:使用screen後臺實時執行命令備份命令

[root@xuegod63 ~]# screen #進入

[root@xuegod63 ~]# vim a。txt #執行命令, 或執行你自己需要執行的備份命令

此時想離開一段時間,但還想讓這個命令繼續執行

[root@xuegod63 ~]# #在screen當前視窗鍵入快捷鍵

Ctrl+a+d

[detached from 44074。pts-3。xuegod63] #分離出來獨立的一個會話

detached [dɪˈtætʃt] 分離,獨立

半個小時之後回來了,找到該screen會話:

[root@tivf06 ~]# screen -ls #檢視已經建立的會話ID

There is a screen on:

44074。pts-1。tivf06 (Detached)

1 Socket in /tmp/screens/S-root。

重新連線會話:

[root@xuegod63 ~]# screen -r 44074

root@xuegod63 ~]# exit #不想使用screen 會話了,執行:exit退出。

附:常用screen引數

screen -S test -> 新建一個叫test的會話

screen -ls -> 列出當前所有的會話

screen -r test -> 回到test會話

screen -S 會話id -X quit -> 刪除會話

screen -S 會話名 -X quit -> 刪除會話

總結:

10。1 程序概述和ps檢視程序工具

10。2 uptime檢視系統負載-top動態管理程序

10。3 前後臺程序切換- nice程序優先順序-screen後臺執行命令