監控系統狀態 – w, vmstat
命令w, uptime
system load averages 單位時間段內活動的進程數
查看cpu的個數和核數
vmstat 1
vmstat 1 10
vmstat各指標含義:
r :表示運行和等待cpu時間片的進程數,如果長期大於服務器cpu的個數,則說明cpu不夠用了;
b :表示等待資源的進程數,比如等待I/O, 內存等,這列的值如果長時間大於1,則需要關注一下了
si :由交換區進入內存的數量;
so :由內存進入交換區的數量;
bi :從塊設備讀取數據的量(讀磁盤);
bo: 從塊設備寫入數據的量(寫磁盤);
in : 每秒的中斷次數,包含時鐘中斷;
cs : 每秒的上下文切換次數;
wa :表示I/O等待所佔用cpu時間百分比.
監控系統狀態 – top
用於動態監控進程所佔系統資源,每隔3秒變一次。
RES 這一項爲進程所佔內存大小,而 %MEM 爲使用內存百分比。在 top狀態下,按 “shift + m”, 可以按照內存使用大小排序。按數字 ‘1’ 可以列出各顆cpu的使用狀態。
top -bn1 它表示非動態打印系統資源使用情況,可以用在shell腳本中
top -c 最右側的命令可以顯示更詳細的信息
監控系統狀態 – sar
沒有這個命令,使用yum install -y sysstat
網卡流量 sar -n DEV, sar -n DEV 1 10
sar -n DEV -f /var/log/sa/sa24
查看歷史負載 sar -q
查看磁盤讀寫 sar -b
free查看系統內存使用情況
free以k爲單位顯示 -m以M爲單位 -g以G爲單位
mem(total):內存總數; mem(used):已經分配的內存; mem(free):未分配的內存; mem(buffers):系統分配但未被使用的buffers;mem(cached)系統分配但未被使用的cache
buffers/cache(used):實際使用的buffers與cache 總量,也是實際使用的內存; buffers/cache(free):未被使用的buffers與cache和未被分配的內存之和,這就是系統當前實際可用內存
buffers是即將要被寫入磁盤的,cache是被從磁盤中讀出來的
ps 查看系統進程
ps aux / ps -elf
PID :進程的id,這個id很有用,在linux中內核管理進程就得靠pid來識別和管理某一個程,比如我想終止某一個進程,則用 ‘kill 進程的pid’ 有時並不能殺掉,則需要加一個-9選項了 kill -9 進程pid
STAT :表示進程的狀態,進程狀態分爲以下幾種
D 不能中斷的進程(通常爲IO)
R 正在運行中的進程
S 已經中斷的進程,系統中大部分進程都是這個狀態
T 已經停止或者暫停的進程,如果我們正在運行一個命令,比如說 sleep 10 如果我們按一下ctrl -z 讓他暫停,那麼我們用ps查看就會顯示T這個狀態
X 已經死掉的進程(這個從來不會出現)
Z 殭屍進程,殺不掉,打不死的垃圾進程,佔系統一小點資源,不過沒有關係。如果太多,就有問題了。
< 高優先級進程
N 低優先級進程
L 在內存中被鎖了內存分頁
s 主進程
l 多線程進程
+ 在前臺的進程
pstree 樹形顯示所有進程
netstat 查看網絡狀況
netstat -lnp 查看當前系統開啓的端口以及socket
netstat -an 查看當前系統所有的連接
1. Linux抓包工具
tcpdump 系統自帶抓包工具
tcpdump -nn -i eth0 tcp and host 192.168.0.1 and port 80
tcpdump -nn -vs0 tcp and port not 22 -c 100 -w 1.cap
wireshark 在linux下也可以安裝 yum install -y wireshark
抓包分析http請求:tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
2. Selinux
配置文件 /etc/selinux/config 三種形式:enforcing, permissive, disabled SELINUX=disabled
setenforce 0/1 getenforce yum install -y libselinux-utils
3. netfilter -- iptables
兩張圖:
iptables -nvL 查看規則
iptables -F 清除當前的規則
iptables -Z 計數器清零
service iptables save 保存規則 保存的規則文件爲:/etc/sysconfig/iptables
service iptables stop 可以暫停防火牆,但是重啓後它會讀取/etc/sysconfig/iptables 從而啓動防火牆,另外即使我們停止防火牆,但一旦我們添加任何一條規則,它也會開啓。
iptables -t 指定表名,默認不加-t則是filter表
filter 這個表主要用於過濾包的,是系統預設的表,內建三個鏈INPUT、OUTPUT以及FORWARD。INPUT作用於進入本機的包;OUTPUT作用於本機送出的包;FORWARD作用於那些跟本機無關的包。
nat 主要用處是網絡地址轉換、端口映射,也有三個鏈。PREROUTING 鏈的作用是在包剛剛到達防火牆時改變它的目的地址,如果需要的話。OUTPUT鏈改變本地產生的包的目的地址。POSTROUTING鏈在包就要離開防火牆之前改變其源地址。
mangle 主要用於修改數據包的TOS(Type Of Service,服務類型)、TTL(Time ToLive,生存週期)值以及爲數據包設置Mark標記,以實現Qos (Quality of Service,服務質量)調整以及策略路由等應用,由於需要相應的路由設備支持,因此應用並不廣泛。 五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
raw 對報文設置一個標誌,決定數據包是否被狀態跟蹤機制處理 只有兩個鏈:OUTPUT、PREROUTING
iptables規則相關:
查看規則 iptables -t nat -nvL
清除規則 iptables -t nat -F
增加/刪除規則 iptables -A/-D INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP
插入規則 iptables -I INPUT -s 1.1.1.1 -j DROP/ACCEPT/REJECT
iptables -nvL --line-numbers 查看規則帶有id號
iptables -D INPUT 1 根據規則的id號刪除對應規則
iptables -P INPUT DROP 用來設定默認規則,默認是ACCEPT ,一旦設定爲DROP後,只能使用 iptables -P ACCEPT 才能恢復成原始狀態,而不能使用-F參數
實例:
針對filter表,預設策略INPUT鏈DROP,其他兩個鏈ACCEPT,然後針對192.168.0.0/24開通22端口,對所有網段開放80端口,對所有網段開放21端口。 腳本如下:
#! /bin/bash
ipt="/sbin/iptables"
$ipt -F; $ipt -P INPUT DROP;
$ipt -P OUTPUT ACCEPT; $ipt -P FORWARD ACCEPT;
$ipt -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
icmp的包有常見的應用,本機ping通外網,外網ping不通本機 iptables -I INPUT -p icmp --icmp-type 8 -j DROP
nat表應用:
路由器就是使用iptables的nat原理實現
假設您的機器上有兩塊網卡eth0和eth1,其中eth0的IP爲192.168.10.11,eth1的IP爲172.16.10.11 。eth0連接了intnet 但eth1沒有連接,現在有另一臺機器(172.16.10.12)和eth1是互通的,那麼如何設置也能夠讓連接eth1的這臺機器能夠連接intnet?
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE
規則備份與恢復:
service iptables save 這樣會保存到/etc/sysconfig/iptables
iptables-save > myipt.rule 可以把防火牆規則保存到指定文件中
iptables-restore < myipt.rule 這樣可以恢復指定的規則
4. Linux系統任務計劃
/etc/crontab cron的主配置文件,可以定義PATH
cron格式如下:
# .----------------分鐘 (0 - 59)
# | .------------- 小時 (0 - 23)
# | | .---------- 日 (1 - 31)
# | | | .------- 月 (1 - 12)
# | | | | .---- 周 (0 - 6) (週日=0 or 7)
# | | | | |
# * * * * * user-name command to be executed
cron 也是一個服務,所以需要先啓動服務才能生效:service crond start; service crond status
任務計劃練習題:
每天凌晨1點20分清除/var/log/slow.log這個文件
每週日3點執行 “/bin/sh /usr/local/sbin/backup.sh”
每月14號4點10分執行 “/bin/sh /usr/local/sbin/backup_month.sh”
每隔8小時執行 “ntpdate time.windows.com”
每天的1點,12點,18點執行 “/bin/sh /usr/local/sbin/test.sh”
每天的9點到18點執行 “/bin/sh /usr/local/sbin/test2.sh”