1. 程式人生 > >Linux核心系統管理命令

Linux核心系統管理命令

3.1 lsof:檢視程序開啟的檔案

3.1.1 命令詳解

功能說明:

lsof全名為list open files,也就是列舉系統中已經被開啟的檔案,通過lsof命令,就可以根據檔案找到對應的程序資訊,也可以根據程序資訊找到程序開啟的檔案

選項說明:

引數選項解釋說明
-c <程序名>顯示指定的程序名所開啟的檔案
-p <程序號>顯示指定的程序號所開啟的檔案
-i通過監聽指定的協議,埠和主機等資訊,顯示符合條件的程序資訊
-u顯示指定使用者使用的檔案
-U顯示所有socket檔案

3.1.2 使用範例

(1)顯示使用檔案的程序

[[email protected]_chen ~]# lsof /var/log
/messages #顯示使用檔案的程序 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 870 root w REG 253,0 501224 262654 /var/log/messages

如果想知道某個特定的檔案是由哪個程序在使用,就可以通過“lsof 檔名”的方式來得到。從上面的輸出可以得知,/var/log/messages檔案是由rsyslogd程序在使用。
輸出中每列的含義具體如下:

  • [x] COMMAND:命令,程序的名稱。
  • [x] PID:程序號。
  • [x] USER:程序的所有者。
  • [x] FD:檔案描述符,它又包含如下內容
  • 0:表示標準輸出。
  • 1:表示標準輸入。
  • 2:表示標準錯誤。
  • u:表示該檔案被開啟並處於讀取/寫入模式
  • r:表示該檔案被開啟並處於只讀模式
  • w:表示該檔案被開啟並處於寫入模式
  • [x] TYPE:檔案型別,REG(regular)為普通檔案
  • [x] DEVICE:指定磁碟的名稱。
  • [x] SIZE/OFF:檔案的大小
  • [x] NODE:索引節點
  • [x] NAME:檔名稱

(2)顯示指定程序所開啟的檔案

[[email protected]_chen ~]# lsof -c rsyslog   #使用-c選項顯示指定程序所開啟的檔案
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF       NODE NAME
rsyslogd 870
root cwd DIR 253,0 4096 2 / rsyslogd 870 root rtd DIR 253,0 4096 2 / rsyslogd 870 root txt REG 253,0 396064 130951 /sbin/rsyslogd rsyslogd 870 root mem REG 253,0 27232 393534 /lib64/rsyslog/imklog.so rsyslogd 870 root mem REG 253,0 340568 393540 /lib64/rsyslog/imuxsock.so rsyslogd 870 root mem REG 253,0 65928 392495 /lib64/libnss_files-2.12.so rsyslogd 870 root mem REG 253,0 26984 393541 /lib64/rsyslog/lmnet.so rsyslogd 870 root mem REG 253,0 1921216 392479 /lib64/libc-2.12.so rsyslogd 870 root mem REG 253,0 90880 392452 /lib64/libgcc_s-4.4.7-20120601.so.1 rsyslogd 870 root mem REG 253,0 43832 392507 /lib64/librt-2.12.so rsyslogd 870 root mem REG 253,0 19536 392485 /lib64/libdl-2.12.so rsyslogd 870 root mem REG 253,0 142640 392503 /lib64/libpthread-2.12.so rsyslogd 870 root mem REG 253,0 88600 392529 /lib64/libz.so.1.2.3 rsyslogd 870 root mem REG 253,0 154520 392472 /lib64/ld-2.12.so rsyslogd 870 root 0u unix 0xffff880037d8b6c0 0t0 8910 /dev/log rsyslogd 870 root 1w REG 253,0 501224 262654 /var/log/messages rsyslogd 870 root 2w REG 253,0 5164 262655 /var/log/secure rsyslogd 870 root 3r REG 0,3 0 4026532040 /proc/kmsg rsyslogd 870 root 4w REG 253,0 18512 262652 /var/log/cron

(3)顯示指定程序號說開啟的檔案

[[email protected]_chen ~]# lsof -p 870   #使用-p選項顯示指定程序號所開啟的檔案
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF       NODE NAME
rsyslogd 870 root  cwd    DIR              253,0     4096          2 /
rsyslogd 870 root  rtd    DIR              253,0     4096          2 /
rsyslogd 870 root  txt    REG              253,0   396064     130951 /sbin/rsyslogd
rsyslogd 870 root  mem    REG              253,0    27232     393534 /lib64/rsyslog/imklog.so
rsyslogd 870 root  mem    REG              253,0   340568     393540 /lib64/rsyslog/imuxsock.so
rsyslogd 870 root  mem    REG              253,0    65928     392495 /lib64/libnss_files-2.12.so
rsyslogd 870 root  mem    REG              253,0    26984     393541 /lib64/rsyslog/lmnet.so
rsyslogd 870 root  mem    REG              253,0  1921216     392479 /lib64/libc-2.12.so
rsyslogd 870 root  mem    REG              253,0    90880     392452 /lib64/libgcc_s-4.4.7-20120601.so.1
rsyslogd 870 root  mem    REG              253,0    43832     392507 /lib64/librt-2.12.so
rsyslogd 870 root  mem    REG              253,0    19536     392485 /lib64/libdl-2.12.so
rsyslogd 870 root  mem    REG              253,0   142640     392503 /lib64/libpthread-2.12.so
rsyslogd 870 root  mem    REG              253,0    88600     392529 /lib64/libz.so.1.2.3
rsyslogd 870 root  mem    REG              253,0   154520     392472 /lib64/ld-2.12.so
rsyslogd 870 root    0u  unix 0xffff880037d8b6c0      0t0       8910 /dev/log
rsyslogd 870 root    1w   REG              253,0   501224     262654 /var/log/messages
rsyslogd 870 root    2w   REG              253,0     5164     262655 /var/log/secure
rsyslogd 870 root    3r   REG                0,3        0 4026532040 /proc/kmsg
rsyslogd 870 root    4w   REG              253,0    18512     262652 /var/log/cron

(4)監聽指定的協議,埠和主機等資訊,顯示符合條件的程序資訊

在講解範例之前,我們先來看看相應語法格式:
lsof -i [46] [protocol] [@hostname] [:service|port]
其中各項的含義如下:

  • [x] 46:4代表IPv4,6代表IPv6
  • [x] protocol:傳輸協議,可以是TCP或UDP
  • [x] hostname:主機名稱或者IP地址
  • [x] port:系統中與服務對應的埠號。例如HTTP服務預設對應的埠號為80,SSH服務預設對應的埠號為22.
[[email protected]_chen ~]# lsof -i   #檢視所有程序
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    885 root    3u  IPv4   8948      0t0  TCP *:ssh (LISTEN)
sshd    885 root    4u  IPv6   8950      0t0  TCP *:ssh (LISTEN)
sshd    918 root    3r  IPv4   9075      0t0  TCP localhost:ssh->localhost:54216 (ESTABLISHED)
[[email protected]_chen ~]# lsof -i tcp   #顯示所有tcp網路連線的程序資訊
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    885 root    3u  IPv4   8948      0t0  TCP *:ssh (LISTEN)
sshd    885 root    4u  IPv6   8950      0t0  TCP *:ssh (LISTEN)
sshd    918 root    3r  IPv4   9075      0t0  TCP localhost:ssh->localhost:54216 (ESTABLISHED)
[[email protected]_chen ~]# lsof -i:22    #顯示埠為22的程序,這條命令很常用
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    885 root    3u  IPv4   8948      0t0  TCP *:ssh (LISTEN)
sshd    885 root    4u  IPv6   8950      0t0  TCP *:ssh (LISTEN)
sshd    918 root    3r  IPv4   9075      0t0  TCP localhost:ssh->localhost:54216 (ESTABLISHED)
[[email protected]_chen ~]# lsof -i tcp:22    #顯示同時滿足TCP和埠為22的程序
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    885 root    3u  IPv4   8948      0t0  TCP *:ssh (LISTEN)
sshd    885 root    4u  IPv6   8950      0t0  TCP *:ssh (LISTEN)
sshd    918 root    3r  IPv4   9075      0t0  TCP localhost:ssh->localhost:54216 (ESTABLISHED)

(5)顯示指定使用者使用的檔案

[[email protected]_chen ~]# lsof -u Mr_chen   #使用-u選項顯示Mr_chen使用者使用的檔案
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    1012 Mr_chen  cwd    DIR  253,0     4096 138686 /home/Mr_chen
bash    1012 Mr_chen  rtd    DIR  253,0     4096      2 /
bash    1012 Mr_chen  txt    REG  253,0   903336 786016 /bin/bash
bash    1012 Mr_chen  mem    REG  253,0 99158576 655748 /usr/lib/locale/locale-archive
bash    1012 Mr_chen  mem    REG  253,0    65928 392495 /lib64/libnss_files-2.12.so
bash    1012 Mr_chen  mem    REG  253,0  1921216 392479 /lib64/libc-2.12.so
bash    1012 Mr_chen  mem    REG  253,0    19536 392485 /lib64/libdl-2.12.so
bash    1012 Mr_chen  mem    REG  253,0   135896 392521 /lib64/libtinfo.so.5.7
bash    1012 Mr_chen  mem    REG  253,0   154520 392472 /lib64/ld-2.12.so
bash    1012 Mr_chen  mem    REG  253,0    26060 916570 /usr/lib64/gconv/gconv-modules.cache
bash    1012 Mr_chen    0u   CHR  136,1      0t0      4 /dev/pts/1
bash    1012 Mr_chen    1u   CHR  136,1      0t0      4 /dev/pts/1
bash    1012 Mr_chen    2u   CHR  136,1      0t0      4 /dev/pts/1
bash    1012 Mr_chen  255u   CHR  136,1      0t0      4 /dev/pts/1

(6)顯示所有socket檔案

[[email protected]_chen ~]# lsof -U   #使用-U選項顯示所有socket檔案
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF  NODE NAME
init        1 root    7u  unix 0xffff880037afa680      0t0  7510 socket
udevd     360 root    4u  unix 0xffff880037afa980      0t0  7857 socket
udevd     360 root    8u  unix 0xffff880037afac80      0t0  7873 socket
udevd     360 root    9u  unix 0xffff880037afa080      0t0  7874 socket
udevd     635 root    9u  unix 0xffff880037afa080      0t0  7874 socket
rsyslogd  870 root    0u  unix 0xffff880037d8b6c0      0t0  8910 /dev/log
crond     893 root    4u  unix 0xffff880037d8b3c0      0t0  8976 socket
sshd      918 root    4w  unix 0xffff880037d8b0c0      0t0  9125 socket
anacron   983 root    4u  unix 0xffff880037d8b9c0      0t0 10018 socket
su       1011 root    3u  unix 0xffff880037d8bcc0      0t0 10151 socket

3.2 free:檢視系統記憶體資訊

3.2.1 命令詳解

功能說明:

free命令用於顯示系統記憶體狀態,具體包括系統實體記憶體,虛擬記憶體,共享記憶體和系統快取等。

選項說明:

引數選項
-b以Byte為單位顯示記憶體的使用情況
-m以MB為單位顯示記憶體的使用情況@
-K以KB為單位顯示記憶體的使用情況
-h以人類可讀的形式顯示記憶體的使用情況@
-t顯示記憶體總和列
-s <間隔秒數>根據指定的間隔秒數持續顯示記憶體的使用情況@
-o不顯示系統緩衝區列

3.2.2 使用範例

(1)檢視系統記憶體

[[email protected]_chen ~]# free  #不加引數預設顯示的是位元組數,很難讀懂
             total       used       free     shared    buffers     cached
Mem:       1004412      85788     918624          0       6168      22904
-/+ buffers/cache:      56716     947696
Swap:      2031608          0    2031608
[[email protected]_chen ~]# free -m   #使用-m選項,以MB為單位顯示記憶體的使用情況
             total       used       free     shared    buffers     cached
Mem:           980         83        897          0          6         22
-/+ buffers/cache:         55        925
Swap:         1983          0       1983

針對上面的輸出,有以下說明

  • [x] Linux系統的特性是將不用的實體記憶體快取起來,因此897MB不是系統的真實剩餘記憶體。
  • [x] 系統真正可用的記憶體為925MB
  • [x] buffers為寫入資料緩衝區
  • [x] cache為讀取資料快取區

(2)定時查詢記憶體

[[email protected]_chen ~]# free -s 10    #使用-s選項定時重新整理記憶體的使用情況,單位為秒
             total       used       free     shared    buffers     cached
Mem:       1004412      85888     918524          0       6168      22932
-/+ buffers/cache:      56788     947624
Swap:      2031608          0    2031608

3.3 iftop:動態顯示網路介面流量資訊

3.3.1 命令詳解

功能說明:

  • iftop是一款實時流量監控工具,可用於監控TCP/IP連線等,必須以root使用者的身份執行。
  • 一般最小化安裝系統都是沒有這個命令的,需要使用yum命令額外安裝,而且還要從epel源下載。
    epel源的安裝幫助請參見:http://mirrors.aliyun.com/help/epel
    安裝iftop命令的步驟請參見:
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    yum -y install iftop

選項說明:

引數選項
-i指定監聽的網路介面@
-n不進行DNS解析@
-N不將埠號解析成服務名@
-B以byte為單位顯示流量(預設是bit)@
-p設定網絡卡為混雜模式,以便不直接通過指定介面傳遞的流量也能被計數
-P(大寫)顯示埠號@
-m設定介面最上邊的刻度的最大值,刻度分為五個大段顯示
-F顯示特定網段的進出流量

3.3.2 使用範例

(1)不接任何引數啟動iftop命令監控流量。

[[email protected]_chen yum.repos.d]# iftop
interface: eth0 #預設監聽系統的第一塊網絡卡,可以使用-i選項指定監聽網絡卡
IP address is: 192.168.0.233
MAC address is: 00:0c:29:a8:ca:50

QQ截圖20180306231637.png-16.2kB

上圖為iftop介面,相關說明如下:

  • [x] 介面上顯示的是類似刻度尺的刻度範圍,是以標尺的形式顯示流量圖形的長條
  • [x] 中間的<=或=>這兩個左右箭頭,表示的是流量的反向
  • [x] TX:傳送流量
  • [x] RX:接收