監控系統狀态 – 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”