第四周總結

SI模型的七層結構

1 物理層 :二進制傳輸;爲啓動,維護以及關閉物理鏈路定義了電氣規範,機械規範,過程規範和功能規範。
2 數據鏈路層:訪問介質;定義如何格式化數據以便進行傳輸以及如何控制對網絡的訪問
;支持錯誤檢測
3 網絡層 :數據傳輸;路由數據包
; 選擇傳遞數據的最佳路徑
; 支持邏輯尋址和路徑選擇
4 傳輸層 :端到端鏈接;傳輸問題
; 確保數據傳輸的可靠性
; 建立,維護和終止虛擬電路
; 通過錯誤檢測和恢復
; 信息流控制來保障可靠性
5 會話層 : 端鏈接;主機間通信
; 建立,管理和終止在應用程序之間的會話
6 表示層 : 數據顯示 ;數據表示
; 確保接收系統可以讀出該數據
; 格式化數據
; 構建數據
; 協商用於應用層的數據傳輸語法
; 提供加密
7 應用層 : 網絡進程訪問應用層
;爲應用程序進程(例如,電子郵件,文件傳輸和終端仿真)提供網絡服務
; 提供用戶身份驗證
TCP 包頭:

TCP包頭
源端口、目標端口:計算機上的進程要和其他進程通信是要通過計算機端口的,而一個計算機端口某個時刻只能被一個進程佔用,所以通過指定源端口和目標端口,就可以知道是哪兩個進程需要通信。源端口、目標端口是用16位表示的,可推算計算機的端口個數爲2^16個
序列號:表示本報文段所發送數據的第一個字節的編號。在TCP連接中所傳送的字節流的每一個字節都會按順序編號。由於序列號由32位表示,所以每2^32個字節,就會出現序列號迴繞,再次從 0 開始
確認號:表示接收方期望收到發送方下一個報文段的第一個字節數據的編號。也就是告訴發送方:我希望你(指發送方)下次發送的數據的第一個字節數據的編號爲此確認號
數據偏移:表示TCP報文段的首部長度,共4位,由於TCP首部包含一個長度可變的選項部分,需要指定這個TCP報文段到底有多長。它指出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠。該字段的單位是32位(即4個字節爲計算單位),4位二進制最大表示15,所以數據偏移也就是TCP首部最大60字節

TCP 三次握手:

TCP 四次揮手:

TCP 協議中的三次握手和四次揮手

ARP 表
[root@magedu ~]#ip neigh
192.168.1.110 dev eth0 lladdr 60:02:b4:e3:8a:c0 STALE
192.168.1.156 dev eth0 lladdr 50:01:d9:8a:1d:3f STALE
192.168.1.114 dev eth0 lladdr 40:8d:5c:e1:97:34 STALE
192.168.1.118 dev eth0 lladdr 94:65:2d:38:44:82 STALE
[root@magedu ~]#arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.110 ether 60:02:b4:e3:8a:c0 C eth0
192.168.1.156 ether 50:01:d9:8a:1d:3f C eth0
192.168.1.114 ether 40:8d:5c:e1:97:34 C eth0
192.168.1.118 ether 94:65:2d:38:44:82 C eth0

IP PDU 報頭

IP PDU 報頭
版本:佔4位,指 IP 協議的版本目前的IP協議版本號爲4
首部長度:佔4位,可表示的最大數值是15個單位,一個單位爲4字節,因此IP 的首部長度的最大值是60字節
區分服務:佔8位,用來獲得更好的服務,在舊標準中叫做服務類型,但實際上一直未被使用過.後改名爲區分服務.只有在使用區分服務(DiffServ)時,這個字段才起作用.一般的情況下不使用
總長度:佔16位,指首部和數據之和的長度,單位爲字節,因此數據報的最大長度爲 65535 字節.總長度必須不超過最大傳送單元 MTU
標識:佔16位,它是一個計數器,通常,每發送一個報文,該值會加1, 也用於數據包分片,在同一個包的若干分片中,該值是相同的
標誌(flag):佔3位,目前只有後兩位有意義
DF: Don’t Fragment 中間的一位,只有當 DF=0 時才允許分片
MF: More Fragment 最後一位,MF=1表示後面還有分片,MF=0 表示最後一個分片

IP PDU 報頭示例
片偏移以8個字節爲偏移單位,假定MTU=1500
三個包標識 ID都相同,三個包DF都爲0,前兩個MF=1,最後一個MF=0

IP地址
它們可唯一標識 IP 網絡中的每臺設備
每臺主機(計算機、網絡設備、外圍設備)必須具有唯一的地址
IP地址由兩部分組成
•網絡ID:
•標識網絡
•每個網段分配一個網絡ID
•主機 ID:
•標識單個主機
•由組織分配給各設備

IPv4地址格式:點分十進制記法

IP地址分類

IP地址分類
A類:
0 000 0000 - 0 111 1111: 1-127
網絡數:126, 127
每個網絡中的主機數:2^24-2
默認子網掩碼:255.0.0.0
私網地址:10.0.0.0
B類:
10 00 0000 - 10 11 1111:128-191
網絡數:2^14
每個網絡中的主機數:2^16-2
默認子網掩碼:255.255.0.0
私網地址:172.16.0.0-172.31.0.0
IP地址分類
C類:
110 0 0000 - 110 1 1111: 192-223
網絡數:2^21
每個網絡中的主機數:2^8-2
默認子網掩碼:255.255.255.0
私網地址:192.168.0.0-192.168.255.0
D類:組播
1110 0000 - 1110 1111: 224-239
E類:保留未使用
240-255

公共IP地址

私有IP地址

特殊地址
0.0.0.0
0.0.0.0不是一個真正意義上的IP地址。它表示所有不清楚的主機和目的網絡
255.255.255.255
限制廣播地址。對本機來說,這個地址指本網段內(同一廣播域)的所有主機
127.0.0.1~127.255.255.254
本機迴環地址,主要用於測試。在傳輸介質上永遠不應該出現目的地址爲“127.0.0.1”的 數據包
224.0.0.0到239.255.255.255
組播地址,224.0.0.1特指所有主機,224.0.0.2特指所有路由器。224.0.0.5指OSPF 路由器,地址多用於一些特定的程序以及多媒體程序
169.254.x.x
如果Windows主機使用了DHCP自動分配IP地址,而又無法從DHCP服務器獲取地址,系統會爲主機分配這樣地址

保留地址

子網掩碼

有子網的子網絡掩碼

子網掩碼的八位

可變長度子網掩碼

跨網絡通信
跨網絡通信:路由
路由分類:
主機路由
網絡路由
默認路由
優先級:精度越高,優先級越高

基本網絡配置
將Linux主機接入到網絡,需要配置網絡相關設置
一般包括如下內容:
主機名
IP/netmask
路由:默認網關
DNS服務器
主DNS服務器
次DNS服務器
第三DNS服務器

CentOS 6 網卡名稱
接口命名方式:CentOS 6
以太網:eth[0,1,2,...]
ppp:ppp[0,1,2,...]
網絡接口識別並命名相關的udev配置文件:
/etc/udev/rules.d/70-persistent-net.rules
查看網卡:
dmesg |grep –i eth
ethtool -i eth0
卸載網卡驅動:
modprobe -r e1000
rmmod e1000
裝載網卡驅動:
modprobe e1000

網絡配置方式
靜態指定:
ifconfig, route, netstat
ip: object {link, addr, route}, ss, tc
system-config-network-tui,setup
配置文件
動態分配:
DHCP: Dynamic Host Configuration Protocol

配置網絡接口
ifconfig命令
ifconfig [interface]
ifconfig -a
ifconfig IFACE [up|down]
ifconfig interface [aftype] options | address ...
ifconfig IFACE IP/netmask [up]
ifconfig IFACE IP netmask NETMASK
注意:立即生效
啓用混雜模式:[-]promisc

route命令
路由管理命令
查看:route -n
添加:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
目標:192.168.1.3 網關:172.16.0.1
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
目標:192.168.0.0 網關:172.16.0.1
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0

route命令
默認路由,網關:172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add default gw 172.16.0.1
刪除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
目標:192.168.1.3 網關:172.16.0.1
route del -host 192.168.1.3
目標:192.168.0.0 網關:172.16.0.1
route del -net 192.168.0.0 netmask 255.255.255.0

netstat命令
顯示網絡連接:
netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
-t: tcp協議相關
-u: udp協議相關
-w: raw socket相關
-l: 處於監聽狀態
-a: 所有狀態
-n: 以數字顯示IP和端口
-e:擴展格式
-p: 顯示相關進程及PID

netstat命令
常用組合:
-tan, -uan, -tnl, -unl
顯示路由表:
netstat {--route|-r} [--numeric|-n]
-r: 顯示內核路由表
-n: 數字格式
顯示接口統計數據:
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
netstat -i
netstat –I=IFACE
ifconfig -s eth0

ip命令
配置Linux網絡屬性:ip 命令
ip - show / manipulate routing, devices, policy routing and tunnels
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }
ip link - network device configuration
set dev IFACE
可設置屬性:
up and down:激活或禁用指定接口
ifup/ifdown
show [dev IFACE]:指定接口
[up]:僅顯示處於激活狀態的接口

ip命令
ip addr { add | del } IFADDR dev STRING
[label LABEL]:添加地址時指明網卡別名
[scope {global|link|host}]:指明作用域
global: 全局可用
link: 僅鏈接可用
host: 本機可用
[broadcast ADDRESS]:指明廣播地址
ip address show - look at protocol addresses
[dev DEVICE]
[label PATTERN]
[primary and secondary]
ip addr flush 使用格式同show
ip addr add 172.16.100.100/16 dev eth0 label eth0:0
ip addr del 172.16.100.100/16 dev eth0 label eth0:0
ip addr flush dev eth0 label eth0:0

ip命令
ip route - routing table management
添加路由:ip route add
ip route add TARGET via GW dev IFACE src SOURCE_IP
TARGET:
主機路由:IP
網絡路由:NETWORK/MASK
ip route add 192.168.0.0/24 via 172.16.0.1
ip route add 192.168.1.13 via 172.16.0.1
添加網關:ip route add default via GW dev IFACE
ip route add default via 172.16.0.1
刪除路由:ip route del TARGET
顯示路由:ip route show|list
清空路由表:ip route flush [dev IFACE] [via PREFIX]
ip route flush dev eth0

ss命令
格式:ss [OPTION]... [FILTER]
netstat通過遍歷proc來獲取socket信息,ss使用netlink與內核tcp_diag模塊通信獲取socket信息
選項:
-t: tcp協議相關
-u: udp協議相關
-w: 裸套接字相關
-x:unix sock相關
-l: listen狀態的連接
-a: 所有
-n: 數字格式
-p: 相關的程序及PID
-e: 擴展的信息
-m:內存用量
-o:計時器信息

ss命令
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
TCP的常見狀態:
tcp finite state machine:
LISTEN: 監聽
ESTABLISHED:已建立的連接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
EXPRESSION:
dport =
sport =
示例:’( dport = :ssh or sport = :ssh )’
常用組合:
-tan, -tanl, -tanlp, -uan

常見用法
ss -l 顯示本地打開的所有端口
ss -pl 顯示每個進程具體打開的socket
ss -t -a 顯示所有tcp socket
ss -u -a 顯示所有的UDP Socekt
ss -o state established '( dport = :ssh or sport = :ssh )' 顯示所有已建立的ssh連接
ss -o state established '( dport = :http or sport = :http )' 顯示所有已建立的HTTP連接
ss -s 列出當前socket詳細信息

網絡配置文件
ONBOOT:在系統引導時是否激活此設備
TYPE:接口類型;常見有的Ethernet, Bridge
UUID:設備的惟一標識
IPADDR:指明IP地址
NETMASK:子網掩碼
GATEWAY: 默認網關
DNS1:第一個DNS服務器指向
DNS2:第二個DNS服務器指向
USERCTL:普通用戶是否可控制此設備
PEERDNS:如果BOOTPROTO的值爲“dhcp”,YES將允許dhcp server分配的dns服務器信息直接覆蓋至/etc/resolv.conf文件,NO不允許修改resolv.conf

網絡配置文件
設備配置被保存在文本文件中
•/etc/sysconfig/network-scripts/ifcfg-<name>
•幫助文檔列出完整選項列表:/usr/share/doc/initcripts-*/sysconfig.txt

主機名和本地解析器
配置當前主機的主機名:
hostname [HOSTNAME]
/etc/sysconfig/network
HOSTNAME=
解析器執行正向和逆向查詢
/etc/hosts
•本地主機名數據庫和IP地址的映像
•對小型獨立網絡有用
•通常,在使用DNS前檢查
•getent hosts 查看/etc/hosts 內容

dns名字解析
/etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
search magedu.com
/etc/nsswitch.conf
與/etc/hosts相比優先於DNS
正向解析:FQDN-->IP
dig -t A FQDN
host -t A FQDN
反向解析:IP-->FQDN
dig -x IP
host -t PTR IP

網絡配置文件
/etc/sysconfig/network-scripts/route-IFACE
•注意:需service network restart生效
•兩種風格:
(1) TARGET via GW
如:10.0.0.0/8 via 172.16.0.1
(2) 每三行定義一條路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW

網卡別名
對虛擬主機有用
將多個IP地址綁定到一個NIC上
eth0:1 、eth0:2、eth0:3
ifconfig命令:
ifconfig eth0:0 192.168.1.100/24 up
ifconfig eth0:0 down
ip命令:
ip addr add 172.16.1.2/16 dev eth0
ip addr add 172.16.1.1/16 dev eth0 label eth0:0
ip addr add 172.16.1.2/16 dev eth0 label eth0:0
ip addr del 172.16.1.1/16 dev eth0 label eth0:0
ip addr flush dev eth0 label eth0:0

設備別名
爲每個設備別名生成獨立的接口配置文件
•關閉NetworkManager服務
•ifcfg-ethX:xxx
•必須使用靜態聯網
DEVICE=eth0:0
IPADDR=10.10.10.10
NETMASK=255.0.0.0
ONPARENT=yes
注意:service network restart 生效
參考:/usr/share/doc/initscripts-*/sysconfig.txt

網絡接口配置-bonding
Bonding
將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。直接給兩塊網卡設置同一IP地址是不可以的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改爲相同的MAC地址

Bonding工作模式
Mode 0 (balance-rr)
輪轉(Round-robin)策略:從頭到尾順序的在每一個slave 接口上面發送數據包。本模式提供負載均衡和容錯的能力
Mode 1 (active-backup)
活動-備份(主備)策略:只有一個slave被激活,當且僅當活動的slave接口失敗時纔會激活其他slave.爲了避免交換機發生混亂此時綁定的MAC地址只有一個外部端口上可見
Mode 3 (broadcast)
廣播策略:在所有的slave接口上傳送所有的報文,提供容錯能力
active-backup、balance-tlb 和 balance-alb 模式不需要交換機的任何特殊配置。其他綁定模式需要配置交換機以便整合鏈接。如:Cisco 交換機需要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和 EtherChannel

Bonding配置
創建bonding設備的配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS= “miimon=100 mode=0”
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
查看bond0狀態:/proc/net/bonding/bond0

Bonding配置
miimon 是用來進行鏈路監測的。如果miimon=100,那麼系統每100ms 監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路
刪除bond0
ifconfig bond0 down
rmmod bonding
詳細幫助:
/usr/share/doc/kernel-doc- version/Documentation/networking/bonding.txt
https://www.kernel.org/doc/Documentation/networking/bonding.txt

採用傳統命名方式
使用傳統命名方式:
(1) 編輯/etc/default/grub配置文件
GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
或:修改/boot/grub2/grub.cfg
(2) 爲grub2生成其配置文件
grub2-mkconfig -o /etc/grub2.cfg
(3) 重啓系統

CentOS 7網絡配置工具
CentOS7主機名
配置文件:/etc/hostname ,默認沒有此文件,通過DNS反向解析獲取主機名,主機名默認爲:localhost.localdomain
顯示主機名信息
hostname
hostnamectl status
設置主機名
hostnamectl set-hostname centos7.magedu.com
刪除文件/etc/hostname,恢復主機名localhost.localdomain
CentOS 7網絡配置工具
圖形工具:nm-connection-editor
字符配置tui工具:nmtui
命令行工具:nmcli

nmcli命令
地址配置工具:nmcli
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device - show and manage network interfaces
nmcli device help
connection - start, stop, and manage network connections
nmcli connection help
修改IP地址等屬性:
nmcli connection modify IFACE [+|-]setting.property value
setting.property:
ipv4.addresses ipv4.gateway
ipv4.dns1 ipv4.method manual | auto
修改配置文件執行生效:systemctl restart network
nmcli con reload
nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0

使用nmcli配置網絡

NeworkManager是管理和監控網絡設置的守護進程
設備即網絡接口,連接是對網絡接口的配置,一個網絡接口可有多個連接配置,但同時只有一個連接配置生效
顯示所有包括不活動連接
nmcli con show
顯示所有活動連接
nmcli con show --active
顯示網絡連接配置
nmcli con show "System eth0“
顯示設備狀態
nmcli dev status
使用nmcli配置網絡

使用nmcli配置網絡
顯示網絡接口屬性
nmcli dev show eth0
創建新連接default,IP自動通過dhcp獲取
nmcli con add con-name default type Ethernet ifname eth0
刪除連接
nmcli con del default
創建新連接static ,指定靜態IP,不自動連接
nmcti con add con-name static ifname eth0 autoconnect no type Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254

nmcli實現bonding
添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
添加從屬接口
nmcli con add type bond-slave ifname ens7 master bond0
nmcli con add type bond-slave ifname ens3 master bond0
注:如無爲從屬接口提供連接名,則該名稱是接口名稱加類型構成
要啓動綁定,則必須首先啓動從屬接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
啓動綁定
nmcli con up mybond0

管理網絡組配置文件
/etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.16.0.100
PREFIX0=24
NAME=team0
ONBOOT=yes

管理網絡組配置文件

/etc/sysconfig/network-scripts/ifcfg-team0-eth1
DEVICE=eth1
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth1
ONBOOT=yes

刪除網絡組
nmcli connection down team0
teamdctl team0 state
nmcli connection show
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
nmcli connection show

Ubuntu網絡配置
官網文檔:
https://help.ubuntu.com/lts/serverguide/network-configuration.html.zh-CN
配置自動獲取IP
cat /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: yes
修改網卡配置文件後需執行命令生效:netplan apply

Ubuntu網絡配置
配置靜態IP:
cat /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:

  • 192.168.6.10/24
  • 10.10.10.10/24
    gateway4: 192.168.6.1
    nameservers:
    search: [mydomain, otherdomain]
    addresses: [223.5.5.5, 8.8.8.8, 1.1.1.1]

Ubuntu網絡配置
查看ip和gateway
ip addr
route -n
查看DNS
ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Dec 12 11:36 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
systemd-resolve –status
修改主機名
hostnamectl set-hostname ubuntu1804

查看進程進程ps
ps [OPTION]...
支持三種選項:
UNIX選項 如-A -e
BSD選項 如a
GNU選項 如--help
•選項:默認顯示當前終端中的進程
•a 選項包括所有終端中的進程
•x 選項包括不鏈接終端的進程
•u 選項顯示進程所有者的信息
•f 選項顯示進程樹,相當於 --forest
•k|--sort 屬性 對屬性排序,屬性前加- 表示倒序
•o 屬性… 選項顯示定製的信息 pid、cmd、%cpu、%mem
•L 顯示支持的屬性列表

ps常見選項
-C cmdlist 指定命令,多個命令用,分隔
-L 顯示線程
-e: 顯示所有進程,相當於-A
-f: 顯示完整格式程序信息
-F: 顯示更完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
-u userlist 指定有效的用戶ID或名稱
-U userlist 指定真正的用戶ID或名稱
-g gid或groupname 指定有效的gid或組名稱
-G gid或groupname 指定真正的gid或組名稱
-p pid 顯示指pid的進程
--ppid pid 顯示屬於pid的子進程
-M 顯示SELinux信息,相當於Z

ps 輸出屬性
VSZ: Virtual memory SiZe,虛擬內存集,線性內存
RSS: ReSident Size, 常駐內存集
STAT:進程狀態
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前臺進程
l: 多線程進程
L:內存分頁並帶鎖
N:低優先級進程
<: 高優先級進程
s: session leader,會話(子進程)發起者

ps
ni: nice值
pri: priority 優先級
psr: processor CPU編號
rtprio: 實時優先級
示例:
ps axo pid,cmd,psr,ni,pri,rtprio
常用組合:
aux
-ef
-eFH
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

ps示例
查詢你擁有的所有進程
ps -x
顯示指定用戶名(RUID)或用戶ID的進程
ps -fU apache
ps -fU 48
顯示指定用戶名(EUID)或用戶ID的進程
ps -fu wang
ps -fu 1000
查看以root用戶權限(實際和有效ID)運行的每個進程
ps -U root -u root
列出某個組擁有的所有進程(實際組ID:RGID或名稱)
ps -fG nginx

ps示例
列出有效組名稱(或會話)所擁有的所有進程
ps -fg mysql
ps -fg 27
顯示指定的進程ID對應的進程
ps -fp 1234
以父進程ID來顯示其下所有的進程,如顯示父進程爲1234的所有進程
ps -f --ppid 1234
顯示指定PID的多個進程
ps -fp 1204,1239,1263
要按tty顯示所屬進程
ps -ft pts/0

ps示例
以進程樹顯示系統中的進程如何相互鏈接
ps -e --forest
以進程樹顯示指定的進程
ps -f --forest -C sshd
ps -ef --forest | grep -v grep | grep sshd
要顯示一個進程的所有線程,將顯示LWP(輕量級進程)以及NLWP(輕量級進程數)列
ps -fL -C nginx
要列出所有格式說明符
ps L
查看進程的PID,PPID,用戶名和命令
ps -eo pid,ppid,user,cmd

ps示例
自定義格式顯示文件系統組,ni值開始時間和進程的時間
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
使用其PID查找進程名稱:
ps -p 1244 -o comm=
要以其名稱選擇特定進程,顯示其所有子進程
ps -C sshd,bash
查找指定進程名所有的所屬PID,在編寫需要從std輸出或文件讀取PID的腳本時這個參數很有用
ps -C httpd,sshd -o pid=
檢查一個進程的執行時間
ps -eo comm,etime,user | grep nginx

ps示例
查找佔用最多內存和CPU的進程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
顯示安全信息
ps -eM
ps --context
使用以下命令以用戶定義的格式顯示安全信息
ps -eo euser,ruser,suser,fuser,f,comm,label
使用watch實用程序執行重複的輸出以實現對就程進行實時的監視,如下面的命令顯示每秒鐘的監視
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'

進程優先級
進程優先級調整
靜態優先級:100-139
進程默認啓動時的nice值爲0,優先級爲120
只有根用戶才能降低nice值(提高優先性)
nice命令
nice [OPTION] [COMMAND [ARG]...]
renice命令
renice [-n] priority pid...
查看
ps axo pid,comm,ni

搜索進程
最靈活:ps 選項 | 其它命令
按預定義的模式:pgrep
pgrep [options] pattern
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
按確切的程序名稱:/sbin/pidof
pidof bash

進程管理工具
top:有許多內置命令
排序:
P:以佔據的CPU百分比,%CPU
M:佔據內存百分比,%MEM
T:累積佔據CPU時長,TIME+
首部信息顯示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分別顯示:1 (數字)
memory信息:m命令
退出命令:q
修改刷新時間間隔:s
終止指定進程:k
保存文件:W

top命令
欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閒
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機偷走的時間

進程管理工具
選項:
-d # 指定刷新時間間隔,默認爲3秒
-b 全部顯示所有進程
-n # 刷新多少次後退出
-H 線程模式,示例:top -H -p pidof mysqld
htop命令:EPEL源
選項:
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程
-s COLUME: 以指定字段進行排序
子命令:
s:跟蹤選定進程的系統調用
l:顯示選定進程打開的文件列表
a:將選定的進程綁定至某指定CPU核心
t:顯示進程樹

內存空間
內存空間使用狀態:
free [OPTION]
-b 以字節爲單位
-m 以MB爲單位
-g 以GB爲單位
-h 易讀格式
-o 不顯示-/+buffers/cache行
-t 顯示RAM + swap的總和
-s n 刷新間隔爲n秒
-c n 刷新n次後即退出

內存工具
vmstat命令:虛擬內存信息
vmstat [options] [delay [count]]
vmstat 2 5
procs:
r:可運行(正運行或等待運行)進程的個數,和核心數有關
b:處於不可中斷睡眠態的進程個數(被阻塞的隊列的長度)
memory:
swpd: 交換內存的使用總量
free:空閒物理內存總量
buffer:用於buffer的內存總量
cache:用於cache的內存總量
swap:
si:從磁盤交換進內存的數據速率(kb/s)
so:從內存交換至磁盤的數據速率(kb/s)

內存工具
io:
bi:從塊設備讀入數據到系統的速率(kb/s)
bo: 保存數據至塊設備的速率
system:
in: interrupts 中斷速率,包括時鐘
cs: context switch 進程切換速率
cpu:
us:Time spent running non-kernel code
sy: Time spent running kernel code
id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
wa: Time spent waiting for IO. 2.5.41前,包括in idle.
st: Time stolen from a virtual machine. 2.6.11前, unknown.
選項:
-s: 顯示內存的統計數據

系統監控工具
iostat:統計CPU和設備IO信息
示例:iostat 1 10
iftop:顯示帶寬使用情況,EPEL源
示例:iftop -n -i eth1
pmap命令:進程對應的內存映射
pmap [options] pid [...]
-x: 顯示詳細格式的信息
示例:pmap 1
另外一種實現
cat /proc/PID/maps

系統監控工具
glances命令:EPEL源
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
內建命令:
a Sort processes automatically l Show/hide logs
c Sort processes by CPU% b Bytes or bits for network I/O
m Sort processes by MEM% w Delete warning logs
p Sort processes by name x Delete warning and critical logs
i Sort processes by I/O rate 1 Global CPU or per-CPU stats
d Show/hide disk I/O stats h Show/hide this help screen
f Show/hide file system stats t View network I/O as combination
n Show/hide network stats u View cumulative network I/O
s Show/hide sensors stats q Quit (Esc and Ctrl-C also work)
y Show/hide hddtemp stats

系統監控工具
常用選項:
-b: 以Byte爲單位顯示網卡數據速率
-d: 關閉磁盤I/O模塊
-f /path/to/somefile: 設定輸入文件位置
-o {HTML|CSV}:輸出格式
-m: 禁用mount模塊
-n: 禁用網絡模塊
-t #: 延遲時間間隔
-1:每個CPU的相關數據單獨顯示

系統監控工具
C/S模式下運行glances命令
服務器模式:
glances -s -B IPADDR
IPADDR: 指明監聽的本機哪個地址
客戶端模式:
glances -c IPADDR
IPADDR:要連入的服務器端地址

系統監控工具
dstat命令:系統資源統計,代替vmstat,iostat
dstat [-afv] [options..] [delay [count]]
-c 顯示cpu相關信息
-C #,#,...,total
-d 顯示disk相關信息
-D total,sda,sdb,...
-g 顯示page相關統計數據
-m 顯示memory相關統計數據
-n 顯示network相關統計數據
-p 顯示process相關統計數據
-r 顯示io請求相關的統計數據
-s 顯示swapped相關的統計數據

系統監控工具
--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu:顯示最佔用CPU的進程
--top-io: 顯示最佔用io的進程
--top-mem: 顯示最佔用內存的進程
--top-latency: 顯示延遲最大的進程

iotop
iotop命令是一個用來監視磁盤I/O使用狀況的top類工具iotop具有與top相似的UI,其中包括PID、用戶、I/O、進程等相關信息,可查看每個進程是如何使用IO
iotop輸出
第一行:Read和Write速率總計
第二行:實際的Read和Write速率
第三行:參數如下:
線程ID(按p切換爲進程ID)
優先級
用戶
磁盤讀速率
磁盤寫速率
swap交換百分比
IO等待所佔的百分比
線程/進程命令

iotop常用參數
-o, --only只顯示正在產生I/O的進程或線程,除了傳參,可以在運行過程中按o生效
-b, --batch非交互模式,一般用來記錄日誌
-n NUM, --iter=NUM設置監測的次數,默認無限。在非交互模式下很有用
-d SEC, --delay=SEC設置每次監測的間隔,默認1秒,接受非×××數據例如1.1
-p PID, --pid=PID指定監測的進程/線程
-u USER, --user=USER指定監測某個用戶產生的I/O
-P, --processes僅顯示進程,默認iotop顯示所有線程
-a, --accumulated顯示累積的I/O,而不是帶寬
-k, --kilobytes使用kB單位,而不是對人友好的單位。在非交互模式下,腳本編程有用

iotop常用參數和快捷鍵
-t, --time 加上時間戳,非交互非模式
-q, --quiet 禁止頭幾行,非交互模式,有三種指定方式
-q 只在第一次監測時顯示列名
-qq 永遠不顯示列名
-qqq 永遠不顯示I/O彙總
交互按鍵
left和right方向鍵:改變排序
r:反向排序
o:切換至選項--only
p:切換至--processes選項
a:切換至--accumulated選項
q:退出
i:改變線程的優先級

nload 查看網絡實時吞吐量
nload是一個實時監控網絡流量和帶寬使用情況,以數值和動態圖展示進出的流量情況
安裝:yum -y install nload (EPEL源)
界面操作
上下方向鍵、左右方向鍵、enter鍵或者tab鍵都就可以切換查看多個網卡的流量情況
按 F2 顯示選項窗口
按 q 或者 Ctrl+C 退出 nload
示例:
nload:默認只查看第一個網絡的流量進出情況
nload eth0 eth1:在nload後面指定網卡,可以指定多個
設置刷新間隔:默認刷新間隔是100毫秒,可通過 -t命令設置刷新時間(單位是毫秒)
nload -t 500 eth0
設置單位:顯示兩種單位一種是顯示Bit/s、一種是顯示Byte/s,默認是以Bit/s,也可不顯示/s
-u h|b|k|m|g|H|B|K|M|G 表示的含義: h: auto, b: Bit/s, k: kBit/s, m: MBit/s, H: auto, B: Byte/s, K: kByte/s, M: MByte/s
nload -u M eth0

lsof
lsof:list open files查看當前系統文件的工具。在linux環境下,一切皆文件,用戶通過文件不僅可以訪問常規數據,還可以訪問網絡連接和硬件如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP)套接字等,系統在後臺都爲該應用程序分配了一個文件描述符
命令參數
-a:列出打開文件存在的進程
-c<進程名>:列出指定進程所打開的文件
-g:列出GID號進程詳情
-d<文件號>:列出佔用該文件號的進程
+d<目錄>:列出目錄下被打開的文件
+D<目錄>:遞歸列出目錄下被打開的文件

lsof
命令參數
-n<目錄>:列出使用NFS的文件
-i<條件>:列出符合條件的進程(4、6、協議、:端口、 @ip )
-p<進程號>:列出指定進程號所打開的文件
-u:列出UID號進程詳情
-h:顯示幫助信息
-v:顯示版本信息。
-n: 不反向解析網絡名字

lsof示例
進程管理
查看由登陸用戶啓動而非系統啓動的進程
lsof /dev/pts/1
指定進程號,可以查看該進程打開的文件
lsof -p 9527
文件管理
查看指定程序打開的文件
lsof -c httpd
查看指定用戶打開的文件
lsof -u root | more
查看指定目錄下被打開的文件
lsof +D /var/log/
lsof +d /var/log/
參數+D爲遞歸列出目錄下被打開的文件,參數+d爲列出目錄下被打開的文件

lsof示例
查看所有網絡連接
lsof -i –n
lsof [email protected]
通過參數-i查看網絡連接的情況,包括連接的ip、端口等以及一些服務的連接情況,例如:sshd等。也可以通過指定ip查看該ip的網絡連接情況
查看端口連接情況
lsof -i :80 -n
通過參數-i:端口可以查看端口的佔用情況,-i參數還有查看協議,ip的連接情況等
查看指定進程打開的網絡連接
lsof -i –n -a -p 9527
參數-i、-a、-p等,-i查看網絡連接情況,-a查看存在的進程,-p指定進程
查看指定狀態的網絡連接
lsof -n -P -i TCP -s TCP:ESTABLISHED
-n:no host names, -P:no port names,-i TCP指定協議,-s指定協議狀態通過多個協議狀態通過多個參數可以清晰的查看網絡連接情況、協議連接情況等

lsof示例
恢復刪除文件
lsof |grep /var/log/messages
rm -f /var/log/messages
lsof |grep /var/log/messages
cat /proc/653/fd/6
cat /proc/653/fd/6 > /var/log/messages

進程管理工具
kill命令:向進程發送控制信號,以實現對進程管理,每個信號對應一個數字,信號名稱以SIG開頭(可省略),不區分大小寫
顯示當前系統可用信號: kill –l 或者 trap -l
常用信號:man 7 signal
1) SIGHUP 無須關閉進程而讓其重讀配置文件
2) SIGINT 中止正在運行的進程;相當於Ctrl+c
3) SIGQUIT 相當於ctrl+\
9) SIGKILL 強制殺死正在運行的進程
15) SIGTERM 終止正在運行的進程
18) SIGCONT 繼續運行
19) SIGSTOP 後臺休眠
指定信號的方法 : (1) 信號的數字標識:1, 2, 9
(2) 信號完整名稱:SIGHUP
(3) 信號的簡寫名稱:HUP

進程管理工具
按PID:kill [-SIGNAL] pid …
kill –n SIGNAL pid
kill –s SIGNAL pid
按名稱:killall [-SIGNAL] comm…
按模式:pkill [options] pattern
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名(pgrep可用)
-a: 顯示完整格式的進程名(pgrep可用)
-P pid: 顯示指定進程的子進程

作業管理
Linux的作業控制
前臺作業:通過終端啓動,且啓動後一直佔據終端
後臺作業:可通過終端啓動,但啓動後即轉入後臺運行(釋放終端)
讓作業運行於後臺
(1) 運行中的作業: Ctrl+z
(2) 尚未啓動的作業: COMMAND &
後臺作業雖然被送往後臺運行,但其依然與終端相關;退出終端,將關閉後臺作業。如果希望送往後臺後,剝離與終端的關係
nohup COMMAND &>/dev/null &
screen;COMMAND
查看當前終端所有作業:jobs
作業控制:
fg [[%]JOB_NUM]:把指定的後臺作業調回前臺
bg [[%]JOB_NUM]:讓送往後臺的作業在後臺繼續運行
kill [%JOB_NUM]: 終止指定的作業

並行運行
同時運行多個進程,提高效率
方法1
vi all.sh
f1.sh&
f2.sh&
f3.sh&
方法2
(f1.sh&);(f2.sh&);(f3.sh&)
方法3
{ f1.sh& f2.sh& f3.sh& }

任務計劃
Linux任務計劃、週期性任務執行
•未來的某時間點執行一次任務
at 指定時間點,執行一次性任務
batch 系統自行選擇空閒時間去執行此處指定的任務
•週期性運行某任務
cron

at任務
包:at
at 命令:at [option] TIME
常用選項:
-V 顯示版本信息
-t time 時間格式 [[CC]YY]MMDDhhmm[.ss]
-l 列出指定隊列中等待運行的作業;相當於atq
-d 刪除指定的作業;相當於atrm
-c 查看具體作業任務
-f /path/file 指定的文件中讀取任務
-m 當任務被完成之後,將給用戶發送郵件,即使沒有標準輸出
注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶

at任務
TIME:定義出什麼時候進行 at 這項任務的時間
HH:MM [YYYY-mm-dd]
noon, midnight, teatime(4pm)
tomorrow
now+#{minutes,hours,days, OR weeks}

at時間格式
HH:MM 02:00
在今日的 HH:MM 進行,若該時刻已過,則明天此時執行任務
HH:MM YYYY-MM-DD 02:00 2016-09-20
規定在某年某月的某一天的特殊時刻進行該項任務
HH:MM[am|pm] [Month] [Date]
04pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
在某個時間點再加幾個時間後才進行該項任務
now + 5 min
02pm + 3 days

at任務
執行方式:
1)交互式 2)輸入重定向 3)at –f 文件
依賴與atd服務,需要啓動才能實現at任務
at隊列存放在/var/spool/at目錄中
/etc/at.{allow,deny}控制用戶是否能執行at任務
白名單:/etc/at.allow 默認不存在,只有該文件中的用戶才能執行at命令
黑名單:/etc/at.deny 默認存在,拒絕該文件中用戶執行at命令,而沒有在at.deny 文件中的使用者則可執行
如果兩個文件都不存在,只有 root 可以執行 at 命令

週期性任務計劃cron
週期性任務計劃:cron
相關的程序包:
cronie:主程序包,提供crond守護進程及相關輔助工具
cronie-anacron:cronie的補充程序,用於監控cronie任務執行狀況,如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨後啓動一次此任務
crontabs:包含CentOS提供系統維護任務

計劃任務
確保crond守護處於運行狀態:
CentOS 7:
systemctl status crond
CentOS 6:
service crond status
計劃週期性執行的任務提交給crond,到指定時間會自動運行
系統cron任務:系統維護作業
/etc/crontab
用戶cron任務:
crontab命令
日誌:/var/log/cron

計劃任務
系統cron任務:/etc/crontab
註釋行以 # 開頭
詳情參見 man 5 crontab

Example of job definition:

.---------------- minute (0 - 59)

| .------------- hour (0 - 23)

| | .---------- day of month (1 - 31)

| | | .------- month (1 - 12) OR jan,feb,mar,apr ...

| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

| | | | |

* user-name command to be executed

例如:晚上9點10分運行echo命令
10 21 * wang /bin/echo "Howdy!"

計劃任務
時間表示法:
•(1) 特定值
給定時間點有效取值範圍內的值
•(2) *
給定時間點上有效取值範圍內的所有值
表示“每...”
•(3) 離散取值
#,#,#
•(4) 連續取值
#-#
•(5) 在指定時間範圍上,定義步長
/#: #即爲步長

時間格式
@reboot Run once after reboot
@yearly 0 0 1 1
@annually 0 0 1 1

@monthly 0 0 1
@weekly 0 0 0
@daily 0 0
@hourly 0

示例:每3小時echo和wall命令
0
/3 * centos /bin/echo “howdy”; wall “welcome to Magedu!”

計劃任務
•系統的計劃任務:
/etc/crontab 配置文件
/etc/cron.d/ 配置文件
/etc/cron.hourly/ 腳本
/etc/cron.daily/ 腳本
/etc/cron.weekly/ 腳本
/etc/cron.monthly/ 腳本

用戶計劃任務
crontab命令定義
每個用戶都有專用的cron任務文件:/var/spool/cron/USERNAME
crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-l 列出所有任務
-e 編輯任務
-r 移除所有任務
-i 同-r一同使用,以交互式模式移除指定任務
-u user 僅root可運行,指定用戶管理cron任務
控制用戶執行計劃任務:
/etc/cron.{allow,deny}

at和crontab
一次性作業使用 at
重複性作業使用crontab
Create at time crontab -e
List at -l crontab -l
Details at -c jobnum crontab -l
Remove at -d jobnum crontab -r
Edit N/A crontab -e
沒有被重定向的輸出會被郵寄給用戶
root能夠修改其它用戶的作業

計劃任務
注意:運行結果的標準輸出和錯誤以郵件通知給相關用戶
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
對於cron任務來講,%有特殊用途;如果在命令中要使用%,則需要轉義,將%放置於單引號中,則可不用轉義

計劃任務
思考:
(1) 如何在秒級別運行任務?

          • for min in 0 1 2; do echo "hi"; sleep 20; done
            (2) 如何實現每7分鐘運行一次任務?
            sleep命令:
            sleep NUMBER[SUFFIX]...
            SUFFIX:
            s: 秒, 默認
            m: 分
            h: 小時
            d: 天
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章