簡述osi七層模型和TCP/IP五層模型
OSI(Open System Interconnect),時國際標準化組織ISO指定的網絡互聯模型規范,它是最標準和最科學的網絡互聯模型。
TCP/IP五層模型是互聯網發展初始已經存在并自然發展多年的一套通用網絡互聯模型,它是目前使用和支持最廣泛的模型,相對于OSI標準,它的支持和應用更普遍。
OSI七層模型
OSI標準定義了起個層次的網絡架構,從低到高分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。 數據從高級到低級層,是一個將數據加上各種協議打包并組織成特定大小的流式數據包的過程,當傳輸完成,又是一個從低到高層的拆包還原成源數據的過程。
- 物理層
實現數字信號最終實際傳輸的層,對應了很多實際的物理介質和設備,如網線、同軸電纜、光纖、集線器等。 - 數據鏈路層
數字比特信號以在此層幀的形式,使用鏈路地址(如以太網的MAC地址)來訪問介質,并進行差錯校驗。工作在這一層的常見設備有:網橋、交換機等。 - 網絡層
這一層用到的基本協議就是IP,IP是整個網絡層的基礎。本層通過IP尋址來實現兩個節點的連接,源端傳輸層送來的數據包通過本層的IP協議,選擇合適的路由和交換節點,正確無誤的送給目的端的傳輸層。工作在這一層的常見設備有:路由器、三層交換機。 - 傳輸層
TCP、UDP協議就工作在這一層。它為上層提供了端到端(如A主機的某端口到B主機的某端口)的可靠和透明的數據傳輸服務,包括處理差錯控制和一些設定操作控制等。它對于高層而言向下屏蔽了低層的通信細節,使得高層用戶看到的是兩個傳輸實體之間的一條可控制并且可靠的數據通路。 - 會話層
是用戶應用程序與網絡之間的接口,為2個表示層實體提供建立和使用連接的方法。它將不同實體的表示層連接成會話,組織和協調兩個會話之前的通信,對這一層次的數據交換進行管理。 - 表示層
對來自應用層的數據進行解釋,為其賦予相應的含義與特定的格式后傳給會話層。例如對數據進行編碼、格式轉換 、壓縮解壓縮、加密解密等。 - 應用層
是最接近用戶的一層,直接面對用戶提供服務,組織和實現用戶希望在網絡上完成的工作任務。應用層的網絡服務協議有:HTTP,HTTPS,FTP,POP3、SMTP等。OSI_Detail.png
TCP/IP五層模型
TCP/IP五層模型相對于OSI七層模型進行了簡化表示,主要是OSI高級的應用層、表示層、會話層在TCP/IP模型中統一為應用層。
它們的對應關系如下圖所示:

每一層對應的常見設備:

每一層對應的常用協議:

簡述iproute家族命令
在CentOS系統中,iproute的版本號與內核是一致的,因為很多iproute的設置是直接放置到內核當中的。
- ip命令
命令格式 ip [OPTION] OBJECT {COMMAND | help}
常用OBJECT有: link, addr, route, netns
注意: OBJECT可簡寫,各OBJECT的子命令也可簡寫,接上OBJECT之后可以在后面再接上具體的OBJECT 支持的選項
help的使用: 例如# ip link help可以顯示簡要的幫助信息
- ip link
功能:網絡接口的配置 -
- ip link show:顯示網絡接口的信息
可以使用dev IFACE來指定接口
- ip link show:顯示網絡接口的信息
例如僅顯示指定網卡的信息
~]$ ip link show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
僅顯示UP狀態的網卡信息
~]$ ip link show up
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
-
- ip link set dev IFACE COMMAND : 對網絡接口進行設置,dev可以省略
例如禁用某個網卡
~]# ip link set lo down
~]# ip link show lo
1: lo: <LOOPBACK> mtu 65536 qdisc noqueue state DOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
重新啟用
~]# ip link show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
multicast on或multicast off:啟用或禁用多播功能
~]# ip link set ens33 multicast off
~]# ip link show ens33
2: ens33: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
name NAME:為網絡接口重命名
~]# ip link set ens33 name ens34
mtu NUMBER:設置MTU的大小,默認為1500
~]# ip link set ens33 mtu 1000
~]# ip link show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1000 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
-
- ip netns : 管理網絡用戶空間
實例:
ip netns add NAME:創建指定的netns
~]# ip netns add abc
ip netns list:列出所有的netns
~]# ip netns list
abc
ip netns exec NAME COMMAND:在指定的netns中運行命令
~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
~]# ip link set ens33 netns abc #將ens36移至abc網絡空間
~]# ip link show #此時會發現無法顯示出ens36的信息了
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
~]# ip netns exec abc ip link show #在abc網絡空間里運行ip link show命令
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: ens36: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
ip netns del NAME:刪除指定的netns
~]# ip netns del abc
~]# ip link show #刪除網絡空間abc后,其內的ens36又回來了
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
-
- ip address COMMAND : 管理ip網絡接口地址,address可簡寫addr
ip addr add : 添加新的地址
~]# ip addr add 192.168.1.128/24 dev ens36
ip addr show : 顯示接口的地址
~]# ip addr show dev ens36
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.244.128/24 brd 192.168.244.255 scope global dynamic ens36
valid_lft 1189sec preferred_lft 1189sec
inet 192.168.1.128/24 scope global ens36
valid_lft forever preferred_lft forever
inet6 fe80::7116:d660:c900:460f/64 scope link
valid_lft forever preferred_lft forever
ip addr delete : 刪除指定接口的指定ip地址
~]# ip addr del 192.168.1.128/24 dev ens36
~]# ip addr show dev ens36
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.244.128/24 brd 192.168.244.255 scope global dynamic ens36
valid_lft 1057sec preferred_lft 1057sec
inet6 fe80::7116:d660:c900:460f/64 scope link
valid_lft forever preferred_lft forever
ip addr flush : 清空指定接口所有的ip地址
~]# ip addr flush dev ens36
~]# ip addr show dev ens36
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
-
- ip route COMMAND : 實現路由表管理
實例:
ip route show : 顯示路由,可以指定via、src等
~]# ip route show
default via 192.168.31.1 dev ens33 proto static metric 100
default via 192.168.244.2 dev ens36 proto static metric 101
192.168.1.0/24 dev ens36 proto kernel scope link src 192.168.1.128
192.168.31.0/24 dev ens33 proto kernel scope link src 192.168.31.113 metric 100
192.168.244.0/24 dev ens36 proto kernel scope link src 192.168.244.128 metric 100
ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP] : 添加一個路由,src是你網卡的ip,只有你網卡的ip被設置多個時才有必要指定src。
~]# ip route add 172.16.0.0/16 via 192.168.1.1 dev ens36 src 192.168.1.128
~]# ip route show dev ens36
default via 192.168.244.2 proto static metric 101
172.16.0.0/16 via 192.168.1.1 src 192.168.1.128
192.168.1.0/24 proto kernel scope link src 192.168.1.128
192.168.1.0/24 proto kernel scope link src 192.168.1.128 metric 100
192.168.1.128 proto kernel scope link src 192.168.1.128 metric 100
192.168.244.0/24 proto kernel scope link src 192.168.244.128 metric 100
添加默認路由
~]# ip route add default via 192.168.1.1 dev ens36 src 192.168.1.128
~]# ip route show dev ens36
default via 192.168.1.1 src 192.168.1.128
default via 192.168.244.2 proto static metric 101
172.16.0.0/16 via 192.168.1.1 src 192.168.1.128
192.168.1.0/24 proto kernel scope link src 192.168.1.128
192.168.1.0/24 proto kernel scope link src 192.168.1.128 metric 100
192.168.1.128 proto kernel scope link src 192.168.1.128 metric 100
192.168.244.0/24 proto kernel scope link src 192.168.244.128 metric 100
ip route del TYPE PRIFIX : 刪除路由
~]# ip route del 172.16.0.0/16 dev ens36
~]# ip route del default via 192.168.1.1
~]# ip route show dev ens36
default via 192.168.244.2 proto static metric 100
192.168.1.0/24 proto kernel scope link src 192.168.1.128
192.168.1.0/24 proto kernel scope link src 192.168.1.128 metric 100
192.168.244.0/24 proto kernel scope link src 192.168.244.128 metric 100
ip route get TYPE PRIFIX : 查看單條路由
~]# ip route get 192.168.1.0/24
broadcast 192.168.1.0 dev ens36 src 192.168.1.128
ip route flush : 清空某類路由
~]# ip route flush dev ens36
~]# ip route show dev ens36
~]#
- ss命令
用來顯示socket的工具
ss [options] [ FILTER ]
選項:
-t:TCP協議的相關連接
-u:UDP相關的連接
-w:raw socket相關的連接
-l:監聽狀態的連接
-a:所有狀態的連接
-n:數字格式
-p:相關的程序及其PID
-e:擴展格式信息
-m:內存用量
-o:計時器信息
顯示所有TCP相關連接的狀態,端口以數字形式顯示
~]# ss -tan
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
ESTAB 0 244 192.168.31.113:22 192.168.31.106:1945
LISTEN 0 128 :::22 :::*
顯示UDP相關連接及相關進程的PID、內存情況,端口以數字形式顯示
~]# ss -unpm
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 192.168.31.113:48591 163.172.177.158:123 users:(("chronyd",pid=834,fd=6))
skmem:(r0,rb212992,t0,tb212992,f0,w0,o0,bl0)
0 0 192.168.31.113:41933 51.15.41.135:123 users:(("chronyd",pid=834,fd=7))
skmem:(r0,rb212992,t0,tb212992,f0,w0,o0,bl0)
0 0 192.168.31.113:59668 221.229.173.182:123 users:(("chronyd",pid=834,fd=4))
skmem:(r0,rb212992,t0,tb212992,f0,w0,o0,bl0)
- nmcli
一種新興的網絡管理命令
格式nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device COMMAND = {status | show | connect | disconnect | delete | wifi | wimax }
查看和管理網絡接口
~]# nmcli dev show
GENERAL.DEVICE: ens36
GENERAL.TYPE: ethernet
GENERAL.HWADDR: xx:xx:xx:xx:xx:xx
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: Wired connection 1
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 192.168.244.128/24
IP4.ADDRESS[2]: 192.168.1.128/24
IP4.GATEWAY: 192.168.244.2
IP4.DNS[1]: 192.168.244.2
IP4.DOMAIN[1]: localdomain
IP6.ADDRESS[1]: fe80::7116:d660:c900:460f/64
IP6.GATEWAY: --
~]# nmcli dev status
DEVICE TYPE STATE CONNECTION
ens33 ethernet connected ens33
ens36 ethernet connected Wired connection 1
lo loopback unmanaged --
~]# nmcli dev disconnect ens36
Device 'ens36' successfully disconnected.
~]# nmcli dev status
DEVICE TYPE STATE CONNECTION
ens33 ethernet connected ens33
ens36 ethernet disconnected --
lo loopback unmanaged --
connection COMMAND = { show| up | down | add | edit | modify | delete | reload | load }
開啟、禁止、管理網絡連接
~]# nmcli conn show
NAME UUID TYPE DEVICE
Wired connection 1 4f39ffe0-01f0-3a93-970c-d935f7e91f37 802-3-ethernet ens36
ens33 dd6bd51b-3c2b-4a39-a7ff-324b5f7f007b 802-3-ethernet ens33
~]# nmcli conn down ens36
~]# nmcli conn up ens36
使用modify添加ip地址,添加地址后,使用up刷新一次才能生效
~]# nmcli modify ens36 +ipv4.addr 192.168.2.102/24
~]# nmcli conn up ens36
- nmtui
圖形界面設置和管理網絡
使用命令啟動界面
~]# nmtui

詳細說明進行管理工具htop、vmstat等相關命令,并舉例
htop
- 簡介
相當于監控軟件TOP的增強版,htop有如下優勢:
- 相對于top更簡單的操作
- 支持圖形界面和橫向縱向的滾動操作以及鼠標操作
- 殺進程時可以不用輸入進程號
- 使用介紹
在命令行輸入htop回車即可進入htop界面htop1.png
下面分區域截圖說明界面使用方法

左側分別有cpu、內存、交換分區的使用情況,右邊分別有Tasks進程總數、thr線程總數、當前運行的進程數、Load average(系統1分鐘,5分鐘,10分鐘的平均負載情況)、Uptime系統運行的時間

- PID:進程號
- USER:運行此進程的用戶
- PRI:進程的優先級
- NI:進程的NICE值,默認的為0,范圍從-20到+19,正值表示低優先級,負值表示高優先級,可以進行調整
- VIRT:進程占用的虛擬內存值
- RES:進程占用的物理內存值
- SHR:進程占用的共享內存值
- S:進程的運行狀況,R表示正在運行、S表示休眠,等待喚醒、Z表示僵死狀態
- %CPU:該進程占用的CPU使用率
- %MEM:該進程占用的物理內存相對于總內存的百分比
- TIME+:該進程啟動后占用的總的CPU時間
- COMMAND:進程啟動的啟動命令名稱

快捷鍵 | 功能說明 |
---|---|
h, ? , F1 | 查看htop使用說明 |
S, F2 | htop 設定 |
/, F3 | 搜索進程 |
, F4 | 增量進程過濾器 |
t, F5 | 顯示樹形結構 |
<, >, F6 | 選擇排序方式 |
[, F7 | 可減少nice值以提高對應進程的優先級 |
], F8 | 可增加nice值以降低對應進程的優先級 |
k, F9 | 可對進程傳遞信號 |
q, F10 | 結束htop |
u | 只顯示一個給定的用戶的過程 |
U | 取消標記所有的進程 |
H | 顯示或隱藏用戶線程 |
K | 顯示或隱藏內核線程 |
F | 跟蹤進程 |
P | 按CPU 使用排序 |
M | 按內存使用排序 |
T | 按Time+ 使用排序 |
l | 顯示進程打開的文件 |
I | 倒轉排序順序 |
s | 選擇某進程,按s:用strace追蹤進程的系統調用 |
F1顯示幫助信息:

鼠標點擊Setup或者按下F2之后進入htop的設定頁面
關于F2設定頁面的說明:
- Meters
設定頂端的 顯示信息,分為左右兩側,Left column 表示左側的顯示的信息,Right column表示右側顯示的信息,如果要新加選項,可以選擇Available meters添加,F5新增到上方左側,F6新增到上方右側。Left column和Right column下面的選項,可以選定信息的顯示方式,有LED、Bar(進度條)、Text(文本模式),可以根據個人喜好進行設置htop6.png
- Display options
htop7.png
選擇要顯示的內容,按空格 x表示顯示,選擇完后,按F10保存
- Colors
htop8.png
設定界面以什么顏色來顯示
- Colums
htop9.png
作用是增加或取消要顯示的各項內容,選擇后F7(向上移動)、F8(向下移動)、F9(取消顯示)、F10(保存更改)例如增加PPID(父進程號)、PGRP(進程組號),根據各人需求,顯示信息
在界面下按F3或直接輸入”/”就可以直接進入搜索模式,按照進程名進行搜索

搜索到的進程會用設定的顏色標記出來,方便查看
F4:過濾器
相當于模糊查找,不區分大小寫,下方輸入要搜索的內容后,則界面只顯示搜索到的內容,更加方便查看

F5:以樹形方式顯示進程

F6:排序方式
按下F6后會跳轉至上圖界面,讓您選擇以什么方式進行排序,在Sort by下選擇您要以什么來排序

F7,F8:調整進程nice值
F7表示減小nice值(增大優先級),F8增大nice值(減小優先級),選擇某一進程,按F7或F8來增大或減小nice值,nice值范圍為-20到19

F9:殺死進程
選擇某一進程按F9即可殺死此進程
F10:退出htop
vmstat命令
最常見的Linux監控工具之一,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。相比top,可以看到整個機器的CPU,內存,IO的使用情況,而不是單單看到各個進程的CPU使用率和內存使用率
一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是采樣的時間間隔數,單位是秒,第二個參數是采樣的次數
例如
~]$ vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 15813676 2124 195180 0 0 574 26 421 289 1 5 86 7 0
上述應用實例中2表示每個兩秒采集一次主機的狀態,1表示只采集一次
~]$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 15808692 2124 195388 0 0 17 1 41 31 0 0 100 0 0
0 0 0 15808552 2124 195388 0 0 0 3 152 87 0 0 100 0 0
0 0 0 15808552 2124 195388 0 0 0 0 148 107 0 0 100 0 0
1 0 0 15808552 2124 195388 0 0 0 0 100 94 0 0 100 0 0
0 0 0 15808552 2124 195388 0 0 0 0 89 82 0 0 100 0 0
^C
每2秒采集一次狀態,采集次數沒有指定,采集會一直持續下去,直到主動去停止它
vmstat命令的顯示結果中,各項參數的說明如下:
- r 表示運行中的隊列(就是說多少個進程真的分配到CPU),當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關系,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,此時主機的狀態就需要警惕了。top的負載類似每秒的運行隊列。如果運行隊列過大,表示CPU很繁忙,一般會造成CPU使用率很高。
- b 表示阻塞的進程。
- swpd 虛擬內存已使用的大小,如果大于0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那么很可能該升級內存或者進行優化了。
- free 空閑的物理內存的大小。
- buff 緩沖頁面間的大小,Linux系統為了提高內存和硬盤(或其他I/O設備)之間的數據交換的速度而設計的。buffers是用來元數據,例如inode、權限等等。
- cache cache直接用來記憶我們打開的文件,給文件做緩沖,buffers與cache共同作用構成了系統的緩存機制,提高了程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。
- si 每秒從磁盤進入虛擬內存的大小,如果這個值大于0,表示物理內存不夠用或者內存泄露了,要查找耗內存的進程解決掉。
- so 每秒虛擬內存進入磁盤的大小,如果這個值大于0,同樣表示經常有虛擬內存數據交換。
- bi 塊設備每秒接收的塊數量,這里的塊設備是指系統上所有的磁盤和其他塊設備,當有磁盤I/O操作時會有數字表示。
- bo 塊設備每秒發送的塊數量。
- in 每秒CPU的中斷次數,包括時間中斷
- cs 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,一般做性能測試時會進行幾千并發甚至幾萬并發的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU干正經事的時間少了,CPU沒有充分利用。
- us 用戶CPU時間,一般此時間比例適當大一些表示主機在較多的執行用戶進程,是比較理想的狀態。
- sy 系統CPU時間,如果太高,表示系統調用時間長。
- id 空閑CPU時間,一般來說,id + us + sy = 100,一般可以認為id是空閑CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
- wt 等待I/O的CPU時間。這個指標通常意味著CPU在等待磁盤讀寫操作的時間,用百分比表示。wait越大則機器io性能就越差。說明IO等待比較嚴重,這可能由于磁盤大量作隨機訪問造成,也有可能磁盤出現瓶頸。
ps命令
使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多 的資源等等。 ps為我們提供了進程的瞬時狀態,它所提供的查看結果并不動態連續的;如果想對進程實時監控,應該用 top 工具。
使用格式:ps [options] [–help]
慣常用法:
- ps a 顯示現行終端機下的所有程序,包括其他用戶的程序。
- ps -A 顯示所有進程。
- ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。
- ps -e 此參數的效果和指定”A”參數相同。
- ps e 列出程序時,顯示每個程序所使用的環境變量。
- ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關系。
- ps -H 顯示樹狀結構,表示程序間的相互關系。
- ps -N 顯示所有的程序,除了執行ps指令終端機下的程序之外。
- ps s 采用程序信號的格式顯示程序狀況。
- ps S 列出程序時,包括已中斷的子程序資料。
- ps -t<終端機編號> 指定終端機編號,并列出屬于該終端機的程序的狀況。
- ps u 以用戶為主的格式來顯示程序狀況。
- ps x 顯示所有程序,不以終端機來區分。
最常用的方法是ps -aux,然后再利用一個
管道符號導向到grep去查找特定的進程,
然后再對特定的進程進行操作。
~]$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 193700 6820 ? Ss 14:34 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 14:34 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:34 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 14:34 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 14:34 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 14:34 0:00 [rcu_bh]
~]$ ps -aux | grep "bash"
sky 1575 0.0 0.0 115524 2136 pts/0 Ss 14:35 0:00 -bash
sky 1704 0.0 0.0 112660 968 pts/0 S+ 15:26 0:00 grep --color=auto bash
ps命令顯示結果中各項HEAD的含義:
- USER 用戶名
- UID 用戶ID(User ID)
- PID 進程ID(Process ID)
- PPID 父進程的進程ID(Parent Process id)
- SID 會話ID(Session id)
- %CPU 進程的cpu占用率
- %MEM 進程的內存占用率
- VSZ 進程所使用的虛存的大?。╒irtual Size)
- RSS 進程使用的駐留集大小或者是實際內存的大小,Kbytes字節。
- TTY 與進程關聯的終端(tty)
- STAT 進程的狀態:進程狀態使用字符表示的(STAT的狀態碼)
- R 運行 Runnable (on run queue) 正在運行或在運行隊列中等待。
- S 睡眠 Sleeping 可中斷睡眠, 在等待某個條件的形成或接收信號。
- I 空閑 Idle
- Z 僵死 Zombie(a defunct process) 進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用后釋放。
- D 不可中斷睡眠 Uninterruptible sleep (ususally IO) 不能被信號喚醒, 進程必須等待直到有某種特定條件滿足(例如I/O完成)。
- T 終止 Terminate 進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行運行。
- P 等待交換頁
- W 無駐留頁 has no resident pages 沒有足夠的記憶體分頁可分配。
- X 死掉的進程
- < 高優先序的進程
- N 低優先序的進程
- L Lock, 有記憶體分頁分配并鎖在記憶體內
- s session leader,會話領導者(在它之下有子進程);比如shell下運行好多進程,這個shell就是領導者,若這個shell被關閉,其下的所有進程全部會關閉
- l 多進程的進程(使用 CLONE_THREAD, 類似 NPTL pthreads)
-
- 位于前臺的進程
- START 進程啟動時間和日期
- TIME 進程累計占用的cpu時間
- COMMAND 由哪個命令啟動的此進程,帶中括號的是內核線程
- NI Nice值
- PRI 進程優先級編號(Priority)。0-139:實時優先級,優先級與靜態相反。 100-139:靜態優先級,數字越小,優先級越高,必要時可讓出優先級
- WCHAN 進程正在睡眠的內核函數名稱;該函數的名稱是從/root/system.map文件中獲得的。
- FLAGS 與進程相關的數字標識
kill命令
發送指定的信號到相應進程。不指定型號將發送SIGTERM(15)終止指定進程。如果任無法終止該程序可用“-KILL” 參數,其發送的信號為SIGKILL(9) ,將強制結束進程,使用ps命令或者jobs 命令可以查看進程號。root用戶可以影響其他用戶的進程,非root用戶只能影響自己的進程。
使用格式kill [ -s signal | -p ] [ -a ] pid
- 命令參數:
- -l 后加信號編號可以列出相應信號信息,若果不加信號的編號參數,則使用“-l”參數會列出全部的信號名稱
- -a 當處理當前進程時,不限制命令名和進程號的對應關系
- -p 指定kill 命令只打印相關進程的進程號,而不發送任何信號
- -s 指定發送信號
- -u 指定用戶
- 實例
~]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略。 下面是常用的信號:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
~]$ kill -l 1
HUP
~]$ kill -l KILL
9
先用ps查找進程,然后用kill殺掉
~]$ ps aux | grep "vim"
sky 1871 0.1 0.0 151600 5340 pts/0 T 16:12 0:00 vim issue1
sky 1874 0.0 0.0 112660 972 pts/0 S+ 16:13 0:00 grep --color=auto vim
~]$ kill -9 1871
~]$ ps aux | grep "vim"
sky 1880 0.0 0.0 112660 972 pts/0 S+ 16:15 0:00 grep --color=auto vim
[1]+ Killed vim issue1
殺死指定用戶所有進程
~]# killall -u centos
使用killall命令
使用until和while分別實現192.168.0.0/24網段內,地址是否能夠ping通,ping通則輸出”success!”,若ping不通則輸出”fail!”
while循環實現
#!/bin/bash
#
i=1
while [ $i -le 254 ];do
ping -c 1 -w 1 192.168.0.$i &> /dev/null
if [ $? -eq 0 ];then
echo "192.168.0.$i is success!"
else
echo "192.168.0.$i is fail!"
fi
let "i+=1"
done
until循環實現
#!/bin/bash
#
i=1
until [ $i -ge 255 ];do
ping -c 1 -w 1 192.168.0.$i &> /dev/null
if [ $? -eq 0 ];then
echo "192.168.0.$i is success!"
else
echo "192.168.0.$i is fail!"
fi
let "i+=1"
done
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91117