Linux系統運維基礎管理命令總結


 1、查看系統負載命令:w、uptime

[root@localhost ~]# w
 23:38:24 up 33 days,  1:03,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.56.1     Fri16    0.00s  0.95s  0.00s w

[root@localhost ~]# uptime 23:38:38 up 33 days, 1:03, 1 user, load average: 0.00, 0.01, 0.05

load average:1分鍾內系統的平均負載值,5分鍾內系統的平均負載值,15分鍾內系統的平均負載值

這個值的意義是,單位時間段內CPU活動進程數。這個值越大就說明服務器壓力越大。一般情況下這個值不超過服務器cpu數量就沒有關系。假設服務器的cpu數量為8,那么這個值若小於8,就說明當前服務器沒有壓力,否則就要關注一下了。那么如何查看服務器有幾個cpu呢?

[root@localhost ~]# cat /proc/cpuinfo |grep processor #查看cpu核數
processor    : 0
[root@localhost ~]# cat /proc/cpuinfo |grep processor |wc -l
1

 [www@wef66fxcdgkbsdsd790fd9z ~]$ cat /proc/cpuinfo |grep processor|wc -l  #線上環境使用了4核
 4

2、vmstat詳解

[root@localhost ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0   1540 126124      0 600364    0    0     0     1    4   12  0  1 99  0  0
 0  0   1540 126124      0 600364    0    0     0     0  165  286  0  0 100  0  0
 2  0   1540 126124      0 600364    0    0     0     0  152  280  0  0 100  0  0
 1  0   1540 126124      0 600364    0    0     0     0  157  276  0  1 99  0  0
 1  0   1540 126124      0 600364    0    0     0     0  166  281  1  0 99  0  0

①procs 顯示進程相關信息
r:表示運行和等待cpu時間片的進程數。如果長時間大於服務器cpu的個數,則說明cpu不夠用了
b:表示等待資源的進程數。比如,等待I/O、內存等,這列的值如果長時間大於1,則需要關注一下了
②memory 內存相關信息 swpd:表示切換到交換分區中的內存數量
free:當前空閑的內存數量 buff:緩沖大小,(即將寫入磁盤的) cache:緩存大小,(從磁盤中讀取的)
③swap 內存交換情況 si:由交換區寫入到內存的數據量 so:由內存寫入到交換區的數據量
④io 磁盤使用情況 bi:從塊設備讀取數據的量(讀磁盤) bo:從塊設備寫入數據的量(寫磁盤)
⑤system 顯示采集間隔內發生的中斷次數
in:表示在某一時間間隔中觀測到的每秒設備中斷數 cs:表示每秒產生的上下文切換次數
⑥CPU 顯示cpu的使用狀態 us:顯示用戶下所花費cpu時間的百分比 sy:顯示系統花費cpu時間百分比
id:表示cpu處於空閑狀態的時間百分比 wa:表示I/O等待所占用cpu時間百分比 st:表示被偷走的cpu所占百分比(一般都為0,不用關注)

以上介紹的各個參數中,比較關注r列、b列、wa列。IO部分的bi以及bo也是經常參考的對象。如果磁盤io壓力很大時,這兩列的數值會比較高。另外當si、so兩列的數值比較高,並且在不斷變化時,說明內存不夠用了,內存中的數據會頻繁交換到swap分區中,這樣往往對系統的性能產生影響。

3、top動態查看負載

這個命令用於動態監控進程所占系統資源,每隔3s變一次。它的特點是把占用系統資源(CPU,內存,磁盤IO等)最高的進程放到最前面。top命令打印出了很多信息,包括系統負載(loadaverage)、進程數(Tasks)、cpu使用情況、內存使用情況及交換分區使用情況。需要關注的有幾項:%CPU、%MEM、COMMAND。RES為進程所占內存大小,而%MEM為使用內存百分比。在top狀態下,按“shift+m”,可以按照內存使用大小排序。按數字1可以列出各顆cpu的使用狀態。

top - 15:06:39 up 38 days, 15:09,  1 user,  load average: 0.45, 0.49, 0.52
Tasks: 328 total,   2 running, 326 sleeping,   0 stopped,   0 zombie
%Cpu0  : 12.0 us,  6.7 sy,  0.0 ni, 80.7 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu1  :  4.3 us,  3.3 sy,  0.0 ni, 91.7 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu2  : 13.0 us,  5.7 sy,  0.0 ni, 81.0 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu3  : 10.0 us,  4.0 sy,  0.0 ni, 84.6 id,  0.0 wa,  0.0 hi,  1.3 si,  0.0 st
KiB Mem :  8010096 total,   195140 free,  1800572 used,  6014384 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  5398572 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                
24423 www       20   0  586460  38764  24164 S   5.0  0.5  55:44.43 php-fpm                                                                                                
24333 www       20   0  586392  39308  24748 S   4.7  0.5  55:58.71 php-fpm                                                                                                
24328 www       20   0  586336  41876  27360 S   4.3  0.5  55:35.53 php-fpm                                                                                                
24483 www       20   0  586480  37964  23388 S   2.0  0.5  55:41.00 php-fpm                                                                                                
24310 www       20   0  586356  38540  24008 S   1.0  0.5  55:38.32 php-fpm                                                                                                
24311 www       20   0  588468  41120  26536 S   1.0  0.5  56:00.00 php-fpm                                                                                                
24324 www       20   0  586448  39064  24348 S   1.0  0.5  56:09.32 php-fpm                                                                                                
24332 www       20   0  587924  40548  26608 S   1.0  0.5  55:37.79 php-fpm                                                                                                
24341 www       20   0  586456  38224  23572 S   1.0  0.5  56:06.65 php-fpm                                                                                                
24361 www       20   0  586324  38576  24020 S   1.0  0.5  56:12.87 php-fpm                                                                                                
24366 www       20   0  586388  37864  23468 S   1.0  0.5  55:34.51 php-fpm      

PID:進程ID號

 
         

USER:用戶名

 
         

PR:priority其取值范圍是0~39,進程優先級,PR值越小,優先級越高

 
         

NI:nice,表示進程優先級狀態的值,其取值范圍是-20~19,一共40個級別。這個值越小,表示進程優先級越高,而值越大,表示優先級越低。

 
         

PR+NI=20

 
         

VIRT:虛擬內存多大

 
         

RES:實際內存使用

 
         

SHR:共享內存

 
         

S:進程狀態

 
         

TIME+:cpu占用時長

 
         

top -bn1表示非動態打印系統資源使用情況,可以用在shell腳本中。和tip命令的區別就是,它一次性全部把所有信息輸出出來而非動態顯示。

 
         

iostat -x 1 10  查看io,看%until    表示有多少沒有寫入磁盤,等待需要寫入磁盤的,如果過高,就要查看進程了。

 
         

沒有iostat命令可以安裝:sysstat-9.0.4-31.el6.i686

4、sar命令(監控網卡流量)

[root@localhost ~]# yum install -y sysstat #如果沒有sar命令,需要安裝sysstat

[www@localhost
~]$ sar -n DEV #查看網卡流量 Linux 3.10.0-693.21.1.el7.x86_64 (localhost) 07/07/2018 _x86_64_ (4 CPU) 12:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 12:10:01 AM eth0 782.73 391.12 642.35 80.69 0.00 0.00 0.00 12:10:01 AM lo 182.90 182.90 55.27 55.27 0.00 0.00 0.00 12:20:01 AM eth0 762.37 384.97 619.17 78.28 0.00 0.00 0.00 12:20:01 AM lo 182.80 182.80 55.26 55.26 0.00 0.00 0.00 12:30:01 AM eth0 815.71 414.54 662.49 84.65 0.00 0.00 0.00 12:30:01 AM lo 184.49 184.49 60.96 60.96 0.00 0.00 0.00 12:40:01 AM eth0 731.05 354.88 609.65 71.97 0.00 0.00 0.00 12:40:01 AM lo 179.47 179.47 51.47 51.47 0.00 0.00 0.00 12:50:01 AM eth0 699.75 345.80 575.08 72.07 0.00 0.00 0.00 12:50:01 AM lo 177.91 177.91 51.58 51.58 0.00 0.00 0.00 01:00:02 AM eth0 672.47 319.08 553.33 76.75 0.00 0.00 0.00 01:00:02 AM lo 178.08 178.08 58.16 58.16 0.00 0.00 0.00 01:10:01 AM eth0 537.61 287.04 409.51 53.91 0.00 0.00 0.00 01:10:01 AM lo 174.22 174.22 39.61 39.61 0.00 0.00 0.00 01:20:01 AM eth0 450.01 250.07 325.20 49.19 0.00 0.00 0.00 01:20:01 AM lo 171.17 171.17 37.62 37.62 0.00 0.00 0.00 01:30:01 AM eth0 506.51 257.61 394.53 48.44 0.00 0.00 0.00 01:30:01 AM lo 170.50 170.50 37.90 37.90 0.00 0.00 0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:          eth0   108.23     87.20     27.30     25.59      0.00      0.00      0.00
Average: lo 11.34 11.34 61.10 61.10 0.00 0.00 0.00

IFACE:表示設備名稱
 
         

rxpck/s:表示每秒進入收取的包的數量,單位為"個"

 
         

txpck/s:表示每秒發送出去的包的數量,單位為"個"

 
         

rxkb/s:表示每秒收取的數據量,單位為kb

 
         

txkb/s:表示每秒發送的數據量,單位為kb

如果有一天服務器的丟包很嚴重,此時應觀察這個網卡流量是否異常,如果rxpck/s那一列的數值大於4000,或者rxkb/s那列大於5000,則很有可能是被攻擊了,正常的服務器網卡流量不會高於這么多,除非是自己在拷貝數據。

實時查看網卡流量每秒打印,打印5次:sar -n DEV 1 5

[www@localhost ~]$ sar -n DEV 1 2
Linux 3.10.0-862.3.2.el7.x86_64 (localhost)     07/07/2018     _x86_64_    (2 CPU)

03:21:47 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
03:21:48 PM      eth0    126.00    101.00     54.70     54.87      0.00      0.00      0.00
03:21:48 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

03:21:48 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
03:21:49 PM      eth0     66.00     59.00      5.15      5.41      0.00      0.00      0.00
03:21:49 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:         eth0    100.60     85.80     28.03     18.35      0.00      0.00      0.00
Average:           lo      8.00      8.00      3.49      3.49      0.00      0.00      0.00

另外也可以查看某一天的網卡流量歷史,使用-f選項,后面跟文件名。sar的庫文件在/var/log/sa/目錄下:默認該目錄下文件保留時長為30天

[www@localhost ~]$ sar -n DEV -f /var/log/sa/sa01
Linux 3.10.0-693.5.2.el7.x86_64 (localhost)     07/01/2018     _x86_64_    (2 CPU)

12:00:01 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
12:10:01 AM      eth0     49.80     24.46     41.21     15.63      0.00      0.00      0.00
12:10:01 AM        lo      8.97      8.97      0.88      0.88      0.00      0.00      0.00
12:20:01 AM      eth0     50.09     24.56     41.44     15.94      0.00      0.00      0.00
12:20:01 AM        lo      8.93      8.93      0.87      0.87      0.00      0.00      0.00
12:30:01 AM      eth0     50.02     24.68     41.45     15.93      0.00      0.00      0.00
......

ls /var/log/sa/會看到有兩種不同的文件,一個是以sa開頭加日期,一個是sar開頭加日期,其中sa加日期的文件為二進制文件,是不能直接cat查看,只能用sar -f查看,另外一種sar加日期的文件是可以直接cat的。他們都是記錄的系統狀態歷史信息。

也可以使用sar查看歷史負載:sar -q,每隔1s打印,打印10次:sar -q 1 10

[www@localhost ~]$ sar -q
Linux 3.10.0-862.3.2.el7.x86_64 (localhost)  07/06/2018  _x86_64_ (2 CPU)

12:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
12:10:01 AM         3       356      0.12      0.07      0.05         0
12:20:01 AM        16       354      0.01      0.05      0.05         1
12:30:01 AM        15       354      0.00      0.02      0.05         0
12:40:01 AM         3       362      0.00      0.01      0.05         0
12:50:01 AM         6       353      0.00      0.02      0.05         0

ldavg-1 :1分鍾負載
ldavg-5 :5分鍾負載
ldavg-15:15分鍾負載

5.nload命令(監控網卡流量)

[root@localhost ~]# yum install -y epel-release nload
[root@localhost ~]# nload 

(1/2):表示有2個網卡,可以用箭頭進行來回切換

Curr:當前流量

Avg:平均流量

Min:最小流量

Max:最大流量

Ttl:總共流量

6.iostat   iotop (監控IO性能)

[www@localhost ~]$ iostat -x
Linux 3.10.0-693.5.2.el7.x86_64 (loccalhost)     07/07/2018     _x86_64_    (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.89    0.00    0.66    0.18    0.00   98.27

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     3.24    0.02    9.94     0.46    64.19    12.99     0.42   42.13   17.21   42.17   0.55   0.55

%util:表示磁盤IO等待比例。這個數值過大,說明磁盤IO擁堵。說明rkB/s和wkB/s也會增大,如果只是單純%util較大,說明可能磁盤存在問題。

當發現磁盤IO很忙,需要查看某個進程在讀寫,就可以使用iotop

[root@localhost ~]# yum install -y iotop
[root@localhost ~]# iotop  #可以看到是mysql進程在進行讀寫

7.free(查看內存使用,默認單位是kb)

[www@localhost ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3790         308         153         128        3328        3050
Swap:             0           0           0

total:內存總大小
used:已經使用的內存
free:空閑內存
available:可用內存,包含free和buffer/cache剩余部分
total=used+free+buff/cache

系統啟動完畢后,會先拿出一部分內存分給buffer、cache,緩存用來隨時提供給程序使用。如果程序不用時,那這部分內存就空閑。寫入磁盤數據時,會把數據寫入buffer,緩沖。cache是從磁盤讀取數據,先放到緩存中。

磁盤-->內存(cache)-->cpu

cpu-->內存(buffer)-->磁盤

 

8.ps(查看系統進程)

常用:ps -elf   ps -axu

選項:

-a:顯示所有終端機下執行的程序,除了階段作業領導者之外。
a:顯示現行終端機下的所有程序,包括其他用戶的程序。
-A:顯示所有程序。
-c:顯示CLS和PRI欄位。
c:列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,選項或常駐服務的標示。
-C<指令名稱>:指定執行指令的名稱,並列出該指令的程序的狀況。
-d:顯示所有程序,但不包括階段作業領導者的程序。
-e:此選項的效果和指定"A"選項相同。
e:列出程序時,顯示每個程序所使用的環境變量。
-f:顯示UID,PPIP,C與STIME欄位。
f:用ASCII字符顯示樹狀結構,表達程序間的相互關系。
-g<群組名稱>:此選項的效果和指定"-G"選項相同,當亦能使用階段作業領導者的名稱來指定。
g:顯示現行終端機下的所有程序,包括群組領導者的程序。
-G<群組識別碼>:列出屬於該群組的程序的狀況,也可使用群組名稱來指定。
h:不顯示標題列。
-H:顯示樹狀結構,表示程序間的相互關系。
-j或j:采用工作控制的格式顯示程序狀況。
-l或l:采用詳細的格式來顯示程序狀況。
L:列出欄位的相關信息。
-m或m:顯示所有的執行緒。
n:以數字來表示USER和WCHAN欄位。
-N:顯示所有的程序,除了執行ps指令終端機下的程序之外。
-p<程序識別碼>:指定程序識別碼,並列出該程序的狀況。
p<程序識別碼>:此選項的效果和指定"-p"選項相同,只在列表格式方面稍有差異。
r:只列出現行終端機正在執行中的程序。
-s<階段作業>:指定階段作業的程序識別碼,並列出隸屬該階段作業的程序的狀況。
s:采用程序信號的格式顯示程序狀況。
S:列出程序時,包括已中斷的子程序資料。
-t<終端機編號>:指定終端機編號,並列出屬於該終端機的程序的狀況。
t<終端機編號>:此選項的效果和指定"-t"選項相同,只在列表格式方面稍有差異。
-T:顯示現行終端機下的所有程序。
-u<用戶識別碼>:此選項的效果和指定"-U"選項相同。
u:以用戶為主的格式來顯示程序狀況。
-U<用戶識別碼>:列出屬於該用戶的程序的狀況,也可使用用戶名稱來指定。
U<用戶名稱>:列出屬於該用戶的程序的狀況。
v:采用虛擬內存的格式顯示程序狀況。
-V或V:顯示版本信息。
-w或w:采用寬闊的格式來顯示程序狀況。 
x:顯示所有程序,不以終端機來區分。
X:采用舊式的Linux i386登陸格式顯示程序狀況。
-y:配合選項"-l"使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位 。
-<程序識別碼>:此選項的效果和指定"p"選項相同。
--cols<每列字符數>:設置每列的最大字符數。
--columns<每列字符數>:此選項的效果和指定"--cols"選項相同。
--cumulative:此選項的效果和指定"S"選項相同。
--deselect:此選項的效果和指定"-N"選項相同。
--forest:此選項的效果和指定"f"選項相同。
--headers:重復顯示標題列。
--help:在線幫助。
--info:顯示排錯信息。
--lines<顯示列數>:設置顯示畫面的列數。
--no-headers:此選項的效果和指定"h"選項相同,只在列表格式方面稍有差異。
--group<群組名稱>:此選項的效果和指定"-G"選項相同。
--Group<群組識別碼>:此選項的效果和指定"-G"選項相同。
--pid<程序識別碼>:此選項的效果和指定"-p"選項相同。
--rows<顯示列數>:此選項的效果和指定"--lines"選項相同。
--sid<階段作業>:此選項的效果和指定"-s"選項相同。
--tty<終端機編號>:此選項的效果和指定"-t"選項相同。
--user<用戶名稱>:此選項的效果和指定"-U"選項相同。
--User<用戶識別碼>:此選項的效果和指定"-U"選項相同。
--version:此選項的效果和指定"-V"選項相同。
--widty<每列字符數>:此選項的效果和指定"-cols"選項相同。
View Code
[root@localhost ~]# ps -elf |head -n 5
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 - 31307 ep_pol May31 ?        00:01:56 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
1 S root         2     0  0  80   0 -     0 kthrea May31 ?        00:00:00 [kthreadd]
1 S root         3     2  0  80   0 -     0 smpboo May31 ?        00:12:12 [ksoftirqd/0]
1 S root         5     2  0  60 -20 -     0 worker May31 ?        00:00:00 [kworker/0:0H]
[root@localhost
~]# ps axu |head -n 5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 125228 3408 ? Ss May31 1:56 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 2 0.0 0.0 0 0 ? S May31 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S May31 12:12 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< May31 0:00 [kworker/0:0H]

PID:進程的id

STAT:表示進程的狀態,進程狀態分為以下幾種(不要求記住,但要了解)

         D:不能中斷的進程(通常為IO),當CPU負載高,而使用率不高,可以查看是否進程狀態為D的數量是否較多,該數量較多會影響系統負載值。

         R:run狀態的進程,正在運行中的進程

         S:sleep狀態的進程,通常情況下,系統中大部分進程都是這個狀態

         T:已經停止或者暫停的進程

         W:表示沒有足夠的內存頁分配

         X:已經死掉的進程

         Z:僵屍進程,殺不掉,打不死的垃圾進程,占用系統一小點資源,不過沒有關系,如果太多的話就存在問題。

         <:高優先級進程

         N:低優先級進程

         L:在內存中被鎖了內存分頁

         s:主進程

         l:多線程進程

         +:代表在前台運行的進程

 

9.netstat(查看網絡狀態)

netstat命令用來打印網絡連接狀況、系統所開放的端口、路由表等信息。

netstat -lnp:打印當前系統啟動哪些端口

[root@localhost ~]# netstat -lntp  #打印當前系統啟動哪些端口,-t表示只查看tcp的端口,不加-t表示查看所有的端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      5106/nginx: master  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5106/nginx: master  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      734/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      818/master          
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      25837/php-fpm: mast 
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      43059/mysqld        
tcp6       0      0 :::22                   :::*                    LISTEN      734/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      818/master          
tcp6       0      0 :::2377                 :::*                    LISTEN      977/dockerd         
tcp6       0      0 :::7946                 :::*                    LISTEN      977/dockerd         
udp        0      0 0.0.0.0:4789            0.0.0.0:*                           -                   
udp        0      0 127.0.0.1:323           0.0.0.0:*                           513/chronyd         
udp6       0      0 :::7946                 :::*                                977/dockerd         
udp6       0      0 ::1:323                 :::*                                513/chronyd         
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     22022    981/docker-containe  /var/run/docker/containerd/docker-containerd-debug.sock

還可以使用組合命令來查看TCP的狀態統計。關注ESTABLISHED這個數值如果較大,說明網站較忙,1000以內可以接受。並發較高

[www@localhost ~]$ netstat -an | awk '/^tcp/{++sta[$NF]} END {for(key in sta) print key , sta[key]}'
LISTEN 8
ESTABLISHED 5
TIME_WAIT 173

 10.lsof :列出當前系統打開文件的工具(list open files) 

(1)獲取網絡信息

使用-i顯示所有連接

[root@localhost ~]# lsof -i
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
chronyd   513 chrony    1u  IPv4   14838      0t0  UDP localhost:323 
chronyd   513 chrony    2u  IPv6   14839      0t0  UDP localhost:323 
sshd      734   root    3u  IPv4   16833      0t0  TCP *:ssh (LISTEN)
sshd      734   root    4u  IPv6   16835      0t0  TCP *:ssh (LISTEN)
master    818   root   13u  IPv4   17273      0t0  TCP localhost:smtp (LISTEN)
master    818   root   14u  IPv6   17274      0t0  TCP localhost:smtp (LISTEN)
dockerd   977   root   21u  IPv6   22761      0t0  TCP *:2377 (LISTEN)
dockerd   977   root   26u  IPv6   22776      0t0  TCP *:7946 (LISTEN)
dockerd   977   root   28u  IPv6   22777      0t0  UDP *:7946 
nginx    5106   root    6u  IPv4 1433341      0t0  TCP *:http (LISTEN)
nginx    5106   root    7u  IPv4 1433342      0t0  TCP *:webcache (LISTEN)
php-fpm 25837   root    6u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25838 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25839 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25840 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25841 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25842 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25843 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
nginx   25857  nginx    6u  IPv4 1433341      0t0  TCP *:http (LISTEN)
nginx   25857  nginx    7u  IPv4 1433342      0t0  TCP *:webcache (LISTEN)
sshd    34937   root    3u  IPv4 1958031      0t0  TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
mysqld  43059  mysql   14u  IPv4  916196      0t0  TCP *:mysql (LISTEN)
View Code

使用-i 4僅獲取IPv4流量

[root@localhost ~]# lsof -i 4
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
chronyd   513 chrony    1u  IPv4   14838      0t0  UDP localhost:323 
sshd      734   root    3u  IPv4   16833      0t0  TCP *:ssh (LISTEN)
master    818   root   13u  IPv4   17273      0t0  TCP localhost:smtp (LISTEN)
nginx    5106   root    6u  IPv4 1433341      0t0  TCP *:http (LISTEN)
nginx    5106   root    7u  IPv4 1433342      0t0  TCP *:webcache (LISTEN)
php-fpm 25837   root    6u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25838 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25839 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25840 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25841 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25842 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 25843 apache    0u  IPv4 1491295      0t0  TCP localhost:cslistener (LISTEN)
nginx   25857  nginx    6u  IPv4 1433341      0t0  TCP *:http (LISTEN)
nginx   25857  nginx    7u  IPv4 1433342      0t0  TCP *:webcache (LISTEN)
sshd    34937   root    3u  IPv4 1958031      0t0  TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
mysqld  43059  mysql   14u  IPv4  916196      0t0  TCP *:mysql (LISTEN)
View Code

僅顯示TCP連接(同理可獲得UDP連接)

也可以通過在-i后提供對應的協議來僅僅顯示TCP或者UDP連接信息。

[root@localhost ~]# lsof -iUDP
COMMAND PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chronyd 513 chrony    1u  IPv4  14838      0t0  UDP localhost:323 
chronyd 513 chrony    2u  IPv6  14839      0t0  UDP localhost:323 
dockerd 977   root   28u  IPv6  22777      0t0  UDP *:7946 
View Code

使用-i:port來顯示與指定端口相關的網絡信息

也可以通過端口搜索,這對於要找出什么阻止了另外一個應用綁定到指定端口實在是太棒了。

[root@localhost ~]# lsof -i:22
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd      734 root    3u  IPv4   16833      0t0  TCP *:ssh (LISTEN)
sshd      734 root    4u  IPv6   16835      0t0  TCP *:ssh (LISTEN)
sshd    34937 root    3u  IPv4 1958031      0t0  TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
View Code

使用@host來顯示指定到指定主機的連接

在檢查是否開放連接到網絡中或互聯網上某個指定主機的連接時十分有用。

[root@localhost ~]# lsof -i@192.168.56.11
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd    34937 root    3u  IPv4 1958031      0t0  TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
View Code

使用@host:port顯示基於主機與端口的連接

也可以組合主機與端口的顯示信息。

 

[root@localhost ~]# lsof -i@192.168.56.11:22
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd    34937 root    3u  IPv4 1958031      0t0  TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
View Code

(2)找出監聽端口

找出正等候連接的端口。

[root@localhost ~]# lsof -i -sTCP:LISTEN
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd      734   root    3u  IPv4   16833      0t0  TCP *:ssh (LISTEN)
sshd      734   root    4u  IPv6   16835      0t0  TCP *:ssh (LISTEN)
master    818   root   13u  IPv4   17273      0t0  TCP localhost:smtp (LISTEN)
master    818   root   14u  IPv6   17274      0t0  TCP localhost:smtp (LISTEN)
dockerd   977   root   21u  IPv6   22761      0t0  TCP *:2377 (LISTEN)
dockerd   977   root   26u  IPv6   22776      0t0  TCP *:7946 (LISTEN)
View Code

找出已建立的連接

[root@localhost ~]# lsof -i -sTCP:ESTABLISHED
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd    34937 root    3u  IPv4 1958031      0t0  TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
View Code

(3)用戶信息

使用-u顯示指定用戶打開了什么

[root@localhost ~]# lsof -u nginx
COMMAND   PID  USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
nginx   25857 nginx  cwd       DIR                8,3      265       64 /
nginx   25857 nginx  rtd       DIR                8,3      265       64 /
nginx   25857 nginx  txt       REG                8,3  1132976   738655 /usr/sbin/nginx

殺死指定用戶所做的一切事情

[root@localhost ~]# kill -9 `lsof -t -u mysql`

 

(4)命令和進程

可以查看指定程序或進程由什么啟動,這通常會很有用,而你可以使用lsof通過名稱或進程ID過濾來完成這個任務。下面列出了一些選項:

使用-c查看指定的命令正在使用的文件和網絡連接

[root@localhost ~]# lsof -c php-fpm

使用-p查看指定進程ID已打開的內容

[root@localhost ~]# lsof -p 25843

-t選項只返回PID

[root@localhost ~]# lsof -t -c nginx
5106
25857

(5)文件和目錄

通過查看指定文件或目錄,你可以看到系統上所有正與其交互的資源——包括用戶、進程等。

顯示與指定目錄交互的所有一切

[root@localhost ~]# lsof /var/log/messages/
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
rsyslogd 492 root    6w   REG    8,3   863866 17552622 /var/log/messages

顯示與指定文件交互的所有一切

[root@localhost ~]# lsof /var/log/cron
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
rsyslogd 492 root    4w   REG    8,3    42911 17552620 /var/log/cron

(6)高級用法

與tcpdump類似,當你開始組合查詢時,它就顯示了它強大的功能。

顯示nginx連接到192.168.56.11所做的一切

[root@localhost ~]# lsof -u nginx -i @192.168.56.11
COMMAND   PID  USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
nginx   25857 nginx  cwd       DIR                8,3      265       64 /
nginx   25857 nginx  rtd       DIR                8,3      265       64 /
nginx   25857 nginx  txt       REG                8,3  1132976   738655 /usr/sbin/nginx
nginx   25857 nginx  mem       REG                8,3    27616 17547606 /usr/lib64/perl5/vendor_perl/auto/nginx/nginx.so

同時使用-t和-c選項以給進程發送 HUP 信號

# kill -HUP `lsof -t -c sshd`

lsof +L1顯示所有打開的鏈接數小於1的文件

這通常(但不總是)表示某個攻擊者正嘗試通過刪除文件入口來隱藏文件內容。

[root@localhost ~]# lsof +L1
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NLINK     NODE NAME
mysqld  43059 mysql    4u   REG    8,3        0     0 16939513 /var/tmp/ibiJ3IU3 (deleted)
mysqld  43059 mysql    5u   REG    8,3        0     0 17225230 /var/tmp/ibAhlMEQ (deleted)
mysqld  43059 mysql    6u   REG    8,3        0     0 16952289 /var/tmp/ibODsPoD (deleted)
mysqld  43059 mysql    7u   REG    8,3        0     0 17616006 /var/tmp/ibqYeF3c (deleted)
mysqld  43059 mysql   11u   REG    8,3        0     0 17635488 /var/tmp/ibGYCrRc (deleted)

 

11.抓包工具tchdump

有時候我們需要查看某個網卡都有哪些數據包,尤其是當你初步判定服務器上有流量攻擊時,此時使用抓包工具來抓一下數據包,就可以知道有哪些ip在攻擊了。

[root@localhost ~]# yum install -y tcpdump
[root@localhost ~]# tcpdump -nn -i eth0
00:42:51.396212 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 141808:142084, ack 1, win 473, length 276
00:42:51.396380 IP 192.168.56.1.53338 > 192.168.56.11.22: Flags [.], ack 142084, win 16110, length 0
00:42:51.396396 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142084:142264, ack 1, win 473, length 180
00:42:51.396579 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142264:142540, ack 1, win 473, length 276
00:42:51.396703 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142540:142720, ack 1, win 473, length 180
00:42:51.396977 IP 192.168.56.1.53338 > 192.168.56.11.22: Flags [.], ack 142720, win 16383, length 0
00:42:51.396989 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142720:142900, ack 1, win 473, length 180
00:42:51.397119 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142900:143176, ack 1, win 473, length 276
00:42:51.397206 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 143176:143356, ack 1, win 473, length 180
00:42:51.397370 IP 192.168.56.1.53338 > 192.168.56.11.22: Flags [.], ack 143356, win 16224, length 0
00:42:51.397386 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 143356:143536, ack 1, win 473, length 180
00:42:51.397539 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 143536:143812, ack 1, win 473, length 276
00:42:51.397714 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 143812:143992, ack 1, win 473, length 180
00:42:51.397875 IP 192.168.56.1.53338 > 192.168.56.11.22: Flags [.], ack 143812, win 16110, length 0

參數解析:

 
         

-i:后面跟設備名稱,如果像抓eht0網卡的包,后面則要跟eth0

 
         

-nn:是讓第3列和第4列顯示成ip+port端口號形式,如果不加-nn則顯示的是主機名+服務名稱

 
         

host:指定ip

 
         

prot:指定端口

 
         

-c:指定包數量

 
         

-w:寫入指定文件里

如果沒有tcpdump這個命令,我們需要用“yum install -y tcpdump”命令去安裝一下。上圖中第3列和第4列顯示的信息為哪一個ip+port在連接哪一個ip+port,后面的信息為該數據包的相關信息。

直接使用tcpdump -nn -i 網卡名稱展示得太快,無法全面分析查看,所以將抓包結果輸出到文件

tcpdump -nn -i eth0 -c 100 -w /tmp/1.cap
tcpdump -r /tmp/1.cap

 案例使用:

(1)用tcpdump嗅探80端口的訪問哪個ip最高

[root@localhost ~]# tcpdump -i eth0 -tnn dst port 80 -c 100 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
100 packets captured
102 packets received by filter
0 packets dropped by kernel
     41 IP 192.168.100.171
     29 IP 120.27.173.9
     15 IP 120.27.173.8
      9 IP 120.27.173.41
      6 IP 120.27.173.35

(2)蜘蛛分析,查看是哪些蜘蛛在抓取內容

[root@localhost ~]# tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C57 packets captured
57 packets received by filter
0 packets dropped by kernel

 (3)查看數據庫執行的sql

[root@localhost ~]# tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM