1.1 監控系統的狀態
1.1.1 使用 w 命令查看當前系統的負載
具體用法如下:
該命令顯示的信息很豐富。第1行從左至右顯示的信息依次爲:時間、系統運行時間、登錄用戶數、平均負載。從第2行開始的所有行則是告訴我們:當前登錄的用戶名及其登錄地址等。
第1行的load average:後面的3個數值。第1個數值表示1分鐘內系統的平均負載值,第2個數值表示5分鐘內系統的平均負載值,第3個數值表示15分鐘內系統的平均負載值。第1個值,它表示單位時間段內使用CPU的活動進程數(在這裏其實就是1分鐘內),值越大就說明服務器壓力越大。一般情況下,這個值只要不超過服務器的CPU數量就是沒有關係。如果服務器的CPU數量爲8,那麼值小於8就說明當前服務器沒有壓力;否則就要關注一下。查看服務器有幾個CPU的方法如圖:
/proc/cpuinfo這個文件記錄了CPU的詳細信息。目前市面的服務器有很多是2顆多核CPU,在Linux看來,它就是2*n個CPU(這裏的n爲單顆物理CPU上有幾核)。所以查看當前系統有幾個CPU,我們可以使用命令 grep -c ’ processor ’ /proc/cpuinfo 。
1.1.2 用 vmstat 命令監控系統的狀態
具體用法如下:
命令 w 查看的是系統整體上的負載,通過看那個數值可以知道當前系統有沒有壓力。但無法判斷具體是哪裏(CPU、內存、磁盤等)有壓力,所以這就用到了vmstat。vmstat命令打印的結果共分爲6部分:procs、memory、swap、io、system和cpu。
-
procs顯示進程的相關信息。
-
r(run):表示運行或等待CPU時間片的進程數。某一時刻1個CPU只能有一個進程佔用,其他進程只能排着隊等着,此時這些排隊等待CPU資源的進程依然是運行狀態。該數值如果長期大於服務器CPU的個數,則說明CPU資源不夠用了。
-
b(block):表示等待資源的進程數,這個資源指的是I/O、內存等。當磁盤讀寫非常頻繁時,寫數據就會非常慢,此時CPU運算很快就結束了,但進程需要把計算的結果寫入磁盤,這樣進程的任務纔算完成,那此時這個進程只能慢慢地等待磁盤了,這樣這個進程就是這個b狀態。該數值如果長時間大於1,則需要關注一下了。
-
memory顯示內存的相關信息。
-
swpd:表示切換到交換分區中的內存數量,單位爲KB。
-
free:表示當前空閒的內存數量,單位爲KB。
-
buff:表示當前空閒的內存數量,單位爲KB。
-
cache:表示(從磁盤中讀取的)緩存大小,單位爲KB。
-
swap顯示內存的交換情況。
-
si:表示由交換區寫入內存的數據量,單位爲KB。
-
so:表示由內存寫入交換區的數據量,單位爲KB。
-
io顯示磁盤的使用情況。
-
bi:表示從塊設備讀取數據的量(讀磁盤),單位爲KB。
-
bo:表示從塊設備寫入數據的量(寫磁盤),單位爲KB。
-
system顯示採集間隔內發生的中斷次數。
-
in:表示在某一時間間隔內觀測到的每秒設備的中斷次數。
-
cs:表示每秒產生的上下文切換次數。
-
cpu顯示CPU的使用狀態。
-
us:顯示用戶下所花費CPU的時間百分比。
-
sy:顯示系統花費CPU的時間百分比。
-
id:表示CPU處於空閒狀態的時間百分比。
-
wa:表示I/O等待所佔用CPU的時間百分比。
-
st:表示被偷走的CPU所佔用百分比(一般都爲0)
如果磁盤io壓力很大,這兩列的數值會比較高。當si和so兩列的數值比較高並且不斷變化時,說明內存不夠了,內存中的數據頻繁交換到交換分區中,這往往對系統性能影響極大。
# vmstat 1 5
或者:
# vmstat 1
前一條命令表示每隔1秒輸出一次狀態,共輸出5次;後一條命令表示每隔1秒輸出一次狀態且一直輸出,除非按Ctrl + C鍵結束。
1.1.3 用 top 命令顯示進程所佔的系統資源
具體用法如下:
# top
top命令用於動態監控進程所佔的系統資源,每隔3秒變一次。它的特點是把佔用系統資源(CPU、內存、磁盤I/O等)最高的進程放到最前面。top命令打印出了很多信息,包括系統負載(load average)、進程數(Tasks)、CPU使用情況、內存使用情況以及交換分區使用情況。這些內容其實可以通過其他命令來查看,用top重點查看的還是下面的進程使用系統資源的詳細狀況,其中需要關注%CPU、%MEM和COMMAND這幾項所代表的意義。RES這一項爲進程所佔的內存大小,而%MEM這一項爲使用內存的百分比。在top狀態下,按Shift + m鍵可以按照內存使用大小排序。按數字1可以列出所有核CPU的使用狀態,按q鍵可以退出top。
用命令top -bn1,表示非動態打印系統資源的使用情況,可以用在shell腳本中,如圖。
和top命令唯一的區別就是,它一次性輸出所有信息而非動態顯示。
1.1.4 用 sar 命令監控系統狀態
sar命令很強大,可以監控系統幾乎所有資源的狀態,比如平均負載、網卡流量、磁盤狀態、內存使用等。與其他系統狀態監控工具不同,它可以打印歷史信息,可以顯示當天從零點開始到當前時刻的系統狀態信息。如果系統沒有安裝這個命令,使用命令yum install -y sysstat安裝。初次使用sar命令會報錯,那是因爲sar工具還沒有生成相應的數據庫文件(無需實時監控,因爲不用去查詢那個庫文件)。它的數據庫文件在/var/log/sa/目錄下。1.查看網卡流量 sar -n DEV
具體用法如下:
# sar -n DEV
這個命令會把當天記錄的網卡信息打印出來,每隔10分鐘記錄一次。IFACE這一列表示設備名稱,rxpck/s這一列表示每秒進入收取的包的數量,txpck/s這一列表示每秒發送出去的包的數量,rxkB/s這一列表示每秒收取的數據量(單位KB),txkB/s這一列表示每秒發送的數據量。
如果服務器丟包非常嚴重,查一下網卡流量是否異常。如果rxpck/s那一列數值大於4000,或者rxkB/s那一列數值大於5000000,有可能是被攻擊了。正常服務器網卡流量不會那麼高,除非自己在複製數據。實時查看網卡流量,方法如下:
# sar -n DEV 1 5
也可以使用-f選項查看某一天的網卡流量歷史,後面跟文件名。如下:(11號的網卡流量)
# sar -n DEV -f /var/log/sa/sa11
2.查看歷史負載 sar -q
具體用法如下:
# sar -q
這個命令可以查看服務器在過去某個時間的負載狀況。
1.1.5 用nload命令查看網卡流量
系統沒有默認安裝它,安裝方法如下:
# yum intsall -y epel-release; yum install -y nload
想要安裝nload,前提是先安裝epel-release包,nload包是在epel這個拓展源裏面的。安裝完之後,直接運行nload命令,然後回車就可。
1.1.6 用free命令查看內存使用狀況
具體用法如下:
free命令可以查看當前系統的總內存大小以及使用內存的情況。
- total:內存總大小。
- used:真正使用的實際內存大小。
- free:剩餘物理內存大小(沒有被分配,純剩餘)。
- shared:共享內存大小。
- buff/cache:數據經過CPU計算,即將要寫入磁盤,這時用的內存爲buffer;CPU要計算時,需要把數據從磁盤讀出來,臨時先放到內存中,這部分內存就是cache。
- available:系統爲了應用跑得更快,會預先分配一部分內存(buff/cache)給某些應用,雖然這部分內存並沒有真正使用,但也分配出去了。當另一個服務要使用更多內存時,是可以把這部分先分配的內存拿出來用的,還沒有被佔用這部分buffer和cache再加上free就是available。
free命令還可以加-m和-g選項(分別以MB或GB爲單位)打印內存的使用狀況,也支持-h選項,如圖。
1.1.7 用ps命令查看系統進程
專門顯示系統進程的命令,如圖(截了一部分)。
# ps aux
下面是幾個系統進程的參數。
- PID:表示進程的ID。
- STAT:進程的狀態。進程狀態分爲以下幾種。
- D:不能中斷的進程(通常爲IO)
- R(run):正在運行中的進程,其中包括了等待CPU時間片的進程。
- S(sleep):已經中斷的進程。
- T:已經停止或者暫停的進程。
- W:(內核2.6xx以後不可用),沒有足夠的內存頁分配。
- Z:殭屍進程,佔用系統一點資源。
- <:高優先級進程。
- N:低優先級進程。
- L:在內存中被鎖了內存分頁。
- s:主進程。
- l:多線程進程。
- +:在前臺運行的進程。
查看某個進程或者它的數量,如圖。
1.1.8 用netstat命令查看網絡狀況
具體用法如下:(截了一部分)
顯示的結果中,上面那一部分是tcp/ip,下面一部分是監聽的socket(unix開頭的行)。netstat命令用來打印網絡連接狀況、系統所開放端口、路由表等信息。netstat -lnp(打印當前系統啓動哪些端口)和netstat -an(打印網絡連接狀況),如圖。
1.2 抓包工具
1.2.1 tcpdump工具
具體用法如下:
回車後會出現密密麻麻的一堆字符串,可以按Ctrl+C結束,刷屏越快說明網卡上的數據包越多。如果沒有tcpdump命令,使用 yum install -y tcpdump 安裝。
-i選項後面跟設備名稱,-nn選項的作用是讓第3列和第4列顯示成 “IP+端口號” 的形式,如果不加-nn選項則顯示 “主機名+服務名稱”。
1.3 Linux網絡相關
1.3.1 用ifconfig命令查看網卡IP
如果系統沒有ifconfig命令,可以使用yum install -y net-tools安裝。
如果Linux上有多個網卡,而你只想重啓某一個網卡,可以使用如下命令:
# ifdown ens33; ifup ens33
ifdown即停用網卡,ifup即啓動網卡。如果使用遠程登錄,使用ifdown ens33命令時,很有可能後面的命令ifup ens33不會運行。這樣會導致我們斷網而無法連接服務器,所以儘量使用命令systemctl restart network來重啓網卡。
1.3.2 查看網卡連接狀態
如果沒有這個命令,輸入命令 rpm -qa |grep ethtool net-tools 看下有沒有這個包,沒有的話就裝一個。用的ISO是DVD的話,就:
# mount /dev/cdrom /mnt 掛載
# cd /mnt/Packages/
# rpm -ivh net-tool按下tab鍵補全
就可以了。裝完之後,示例命令如下:
這裏顯示link ok,說明網卡爲連接狀態。如果顯示no link,說明網卡壞了或者沒有連接網線。還有一個命令也可以查看網卡狀態,如下:
如果網卡沒有連接,最後一行Link detected顯示爲no。
1.3.3 更改主機名
安裝完系統後,主機名默認爲localhost.localdomain,使用hostname命令就可以查看Linux的主機名,如下:
下次登錄時,命令提示符裏主機名會出現變動。但是這樣修改只是保存在內存中。如果重啓,主機名還是會變成改動之前的名稱。所以更改主機名的同時還需要更改相關的配置文件/etc/hostname。以下方法也可以更改主機名:
# hostname set-hostname liao
# hostname
liao
# cat /etc/hostname
liao
1.4 Linux系統的任務計劃
1.4.1 命令crontab
Linux任務計劃功能的操作都是通過crontab命令來完成的,其常用的選項有以下幾個。
- -u:表示指定某個用戶,不加-u選項則爲當前用戶。
- -e:表示制定計劃任務。
- -l:表示列出計劃任務。
- -r:表示刪除計劃任務。
示例:
# crontab -e
no crontab for root - using an empty one
這裏使用crontab -e來編寫任務計劃,實際是vim打開了crontab的配置文件,寫下如下內容:
06 15 14 04 2 echo "ok" > /root/cron.log
從左到右依次爲:分、時、日、月、周和命令行。上例表示在4月14日(這一天必須是星期二)的15點06分執行命令:echo “ok” > /root/cron.log。
命令crontab -e實際上是打開了/var/spool/cron/username文件(如果用戶是root,則打開的是/var/spool/cron/root)。打開這個文件使用了vim編輯器,所以保存時在命令行模式下輸入:wq。但是不要直接去編輯那個文件,否則會出錯,所以一定要使用命令crontab -e來編輯。
查看已經設定的任務計劃使用crontab -l命令,如下:
# crontab -l
06 15 14 04 2 echo "ok" > /root/cron.log
刪除任務計劃要使用crontab -r命令,這個刪除選項還是少用,因爲會一下子把全部計劃都刪除掉。如果只想刪除一條計劃,可以使用-e選項進入crontab進行編輯。-r選項用法如下:
# crontab -r
# crontab -l
no crontab for root
1.5 Linux系統服務管理
1.5.1 chkconfig服務管理工具
可以使用命令chkconfig --list列出所有的服務及每個級別的開啓狀態,如下:
1.6 Linux下的數據備份工具 rsync
rsync,從字面意思上可以理解爲remote sync(遠程同步)。rsync不僅可以遠程同步數據(類似於scp),而且可以本地同步數據(類似於cp),但不同於cp或scp的一點是,它不會覆蓋以前的數據(如果數據已經存在),而是先判斷已經存在的數據和新數據的差異,只有數據不同纔會把不相同的部分覆蓋。如果沒有rsync命令,使用命令yum install -y rsync安裝。 ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200412172130845.jpg) 上例把/root/test1.txt同步到/tmp/目錄下。
1.6.1 rsync的目錄格式
rsync [OPTION] . . . SRC DEST
rsync [OPTION] . . . SRC [USER@]HOST : DEST
rsync [OPTION] . . . [USER@]HOST : SRC DEST
rsync [OPTION] . . . [USER@]HOST : : SRC DEST
rsync [OPTION] . . . SRC [USER@]HOST : : DEST
第一個例子爲第一個格式。第三中格式是從遠程目錄同步數據到本地。第四種和第五種格式使用了兩個冒號,這種格式和其他格式的驗證方式不同。
1.6.2 rsync常用選項
rsync命令各選項的含義如下:
- -a:這是歸檔模式,表示以遞歸方式傳輸文件,並保持所有屬性,它等同於-rlptgoD。
- -r:表示以遞歸模式處理子目錄。它主要針對目錄來說,如果單獨傳一個文件不需要加-r選項,但是傳輸目錄時必須加。
- -v:表示打印一些信息,比如文件列表等。
- -l:表示保留軟連接。
- -L:表示像對待常規文件一樣處理軟連接。
- -p:表示保持文件權限。
- -o:表示保持文件屬主信息。
- -g:表示保持文件屬組信息。
- -D:表示保持設備文件信息。
- -t:表示保持文件時間信息。
- --delete:表示刪除DST中SRC沒有的文件。
- --exclude=PATTERN:表示指定排除不需要傳輸的文件,等號後面跟文件名,可以是萬用字符模式(*.txt)。
- --progress:表示在同步的過程中可以看到同步的過程狀態,比如統計要同步的文件數量、同步的文件傳輸速度等。
- -u:表示把DST中比SRC還新的文件排除掉,不會覆蓋。
- -z:加上該選項,將會在傳輸過程中壓縮。
1.7 Linux系統日誌
日誌記錄了系統每天發生的各種各樣的事情,比如監測系統狀況、排查系統故障等。可以通過日誌來檢查錯誤發生的原因,或者收到攻擊時留下的痕跡。日誌的主要功能是審計和監測,還可以實時監測系統狀態,監測和追蹤侵入者等。
1.7.1 /var/log/messages
它是核心系統日誌文件,包含了系統啓動時的引導信息,以及系統運行時的其他狀態消息。
1.7.2 dmesg
它可以顯示系統的啓動信息。如果你的某個硬件有問題(比如網卡),用這個命令也可以看到:
1.7.3 安全日誌
last命令用來查看登錄Linux的歷史信息,具體用法如下:
上例中,從左至右依次爲賬戶名稱、登錄終端、登錄客戶端IP、登錄日期及時長。last命令輸出的信息實際上是讀取了二進制日誌文件/var/log/wtmp,只是這個文件不能直接使用cat、vim、head、tail等工具查看。
1.8 xargs與exec
1.8.1 xargs應用
# echo "aaabbb" > 123.txt
# ls 123.txt | xargs cat
aaabbb
上例表示把管道符前面的輸出作爲xargs後面的命令的輸入。它的好處在於可以把原本兩步或者多步才能完成的任務僅用一步完成。xargs常常和find命令一起使用,比如查找當前目錄創建時間大於10天的文件,然後再刪除,如下:
# find . -mtime +10 |xargs rm
1.8.2 exec應用
使用find命令時,使用-exec選項也可以達到xargs同樣的效果。比如查找當前目錄創建時間大於10天的文件並刪除,如下:
#find . -mtime +10 -exec rm -rf {} \;
這個命令中也是用{ }代替前面find出來的文件。後面的 \ 作爲 ; 的轉義符,否則shell會把分號作爲該行命令的結尾。