linux系統日常管理
第十五章 linux系統日常管理
筆者在前面介紹的內容都為linux系統基礎類的,如果你現在把前面的內容全部很好的掌握了,那最好了。不過筆者要說的是,即使你完全掌握了,你現在還是不能作為一名合格的linux系統管理員的,畢竟系統管理員要會做的事情太多了。本章以及後面章節筆者會陸續教給你作為linux系統管理員所必備的知識。只要你熟練掌握那絕對可以勝任一個最初級的管理員職位,不過只是初級的,因為你還需要在日常的管理工作中獲得成長。
【監控系統的狀態】
1. w 檢視當前系統的負載
相信所有的linux管理員最常用的命令就是這個’w’了,該命令顯示的資訊還是蠻豐富的。第一行從左面開始顯示的資訊依次為:時間,系統執行時間,登入使用者數,平均負載
第一個數值表示1分鐘內系統的平均負載值;第二個數值表示5分鐘內系統的平均負載值;第三個數值表示15分鐘系統的平均負載值。這個值的意義是,單位時間段內CPU活動程序數。當然這個值越大就說明你的伺服器壓力越大。一般情況下這個值只要不超過你服務器的cpu數量就沒有關係,如果你的伺服器cpu數量為8,那麼這個值若小於8,就說明你的伺服器沒有壓力,否則就要關注一下了。到這裡你肯定會問,如何檢視伺服器有幾個
就是用這個命令了。’/proc/cpuinfo’這個檔案記錄了cpu的詳細資訊。目前市面上的伺服器通常都是2顆4核cpu,在linux看來,它就是8個cpu。檢視這個檔案時則會顯示8段類似的資訊,而最後一段資訊中processor : 後面跟的是’7’。所以檢視當前系統有幾個cpu,你可以使用這個命令:’ grep -c 'processor' /proc/cpuinfo’ 。
2. vmstat 監控系統的狀態
上面講的w檢視的是系統整體上的負載,通過看那個數值可以知道當前系統有沒有壓力,但是具體是哪裡(CPU,記憶體,磁碟等)有壓力就無法判斷了。通過vmstat
1)procs顯示程序相關資訊
r:表示執行和等待cpu時間片的程序數,如果長期大於伺服器cpu的個數,則說明cpu不夠用了;
b:表示等待資源的程序數,比如等待I/O,記憶體等,這列的值如果長時間大於1,則需要你關注一下了;
2)memory記憶體相關資訊
swpd :表示切換到交換分割槽中的記憶體數量;
free :當前空閒的記憶體數量;
buff :緩衝大小,(即將寫入磁碟的);
cache :快取大小,(從磁碟中讀取的);
3)swap記憶體交換情況
si :由記憶體進入交換區的數量;
so:由交換區進入記憶體的數量;
4)io磁碟使用情況
bi :從塊裝置讀取資料的量(讀磁碟);
bo:從塊裝置寫入資料的量(寫磁碟);
5)system顯示採集間隔內發生的中斷次數
in :表示在某一時間間隔中觀測到的每秒裝置中斷數;
cs :表示每秒產生的上下文切換次數;
6)CPU顯示cpu的使用狀態
us :顯示了使用者下所花費 cpu 時間的百分比;
sy :顯示系統花費cpu時間百分比;
id :表示cpu處於空閒狀態的時間百分比;
wa:表示I/O等待所佔用cpu時間百分比;
st :表示被偷走的cpu所佔百分比(一般都為0,不用關注);
以上所介紹的各個引數中,筆者經常會關注r列,b列,和wa列,三列代表的含義在上邊說得已經很清楚。IO部分的bi以及bo也是我要經常參考的物件。如果磁碟io壓力很大時,這兩列的數值會比較高。另外當si, so兩列的數值比較高,並且在不斷變化時,說明記憶體不夠了,記憶體中的資料頻繁交換到交換分割槽中,這往往對系統性能影響極大。
筆者用vmstat時,經常用這樣的形式,’vmstat 1 5’ 表示每隔1秒鐘列印一次系統狀態,連續列印5次。當然你也可以 ‘vmstat 1 ‘ 表示每隔1秒鐘列印一次系統狀態,一直列印,除非你按ctrl + c強制結束。
3. top 顯示程序所佔系統資源
這個命令用於動態監控程序所佔系統資源,每隔3秒變一次。這個命令的特點是把佔用系統資源(CPU,記憶體,磁碟IO等)最高的程序放到最前面。top命令打印出了很多資訊,包括系統負載(load average)、程序數(Tasks)、cpu使用情況、記憶體使用情況以及交換分割槽使用情況。其實上面這些內容可以通過其他命令來檢視,所以用top重點檢視的還是下面的程序使用系統資源詳細狀況。這部分東西反映的東西還是比較多的,不過需要你關注的也就是幾項:%CPU, %MEM, COMMAND 這些專案所代表的意義,不用筆者介紹相信你也能看懂吧。
另外筆者使用top命令時還常常使用-bn1這個組合選項,它表示非動態列印系統資源使用情況,可以用在指令碼中,你不妨記一下,以後也許你會用得到。
4. sar 監控系統狀態
sar 命令很強大,它可以監控系統所有資源狀態,比如平均負載、網絡卡流量、磁碟狀態、記憶體使用等等。它不同於其他系統狀態監控工具的地方在於,它可以列印歷史資訊,可以顯示當天從零點開始到當前時刻的系統狀態資訊。如果你係統沒有安裝這個命令,請使用”yum install -y sysstat”命令安裝。初次使用sar命令會報錯,那是因為sar工具還沒有生成相應的資料庫檔案(時時監控就不會了,因為不用去查詢那個庫檔案)。它的資料庫檔案在” /var/log/sa/”目錄下,預設儲存9天。因為這個命令太過複雜,所以筆者只介紹幾個。
1)檢視網絡卡流量 ‘sar -n DEV ‘
IFACE這列表示裝置名稱,rxpck/s表示每秒進入收取的包的數量,txpck/s表示每秒傳送出去的包的數量,rxbyt/s表示每秒收取的資料量(單位Byte),txbyt/s表示每秒傳送的資料量。後面幾列不需要關注。如果有一天你所管理的伺服器丟包非常嚴重,那麼你就應該看一看這個網絡卡流量是否異常了,如果rxpck/s那一列的數值大於4000,或者rxbyt/s那列大於5,000,000則很有可能是被攻擊了,正常的伺服器網絡卡流量不會高於這麼多,除非是你自己在拷貝資料。上面的命令是檢視網絡卡流量歷史的,如何時時檢視網絡卡流量呢?
另外也可以檢視某一天的網絡卡流量歷史,使用-f選項,後面跟檔名,如果你的系統格式Redhat或者CentOS那麼sar的庫檔案一定是在/var/log/sa/目錄下的。
2)檢視歷史負載 ‘sar -q’
這個命令有助於我們檢視伺服器在過去的某個時間的負載狀況。
關於sar的介紹筆者不願寫太多,畢竟介紹太多會給你帶來更多的壓力,其實筆者介紹這個命令的目的只是讓你學會檢視網絡卡流量(這是非常有用的)。如果你很感興趣那就man一下吧,它的用法太多了。
5. free檢視記憶體使用狀況
只要你敲一個free然後回車就可以當前系統的總記憶體大小以及使用記憶體的情況。從上圖中可看到當前系統記憶體總大小為235128(單位是k)已經使用120368,剩餘94760。其實真正剩餘並不是這個94760,而是第二行的213388,真正使用的也是第二行的21740。這是因為系統初始化時,就已經分配出很大一部分記憶體給快取,這部分快取用來隨時提供給程式使用,如果程式不用,那這部分記憶體就空閒。所以,檢視記憶體使用多少,剩餘多少請看第二行的資料。另外你還可以加-m或者-g選項分別以M或G為單位列印記憶體使用狀況。
6. ps 檢視系統程序
作為系統管理員,一定要知道你所管理的系統都有那些程序在執行,在windows下只要開啟工作管理員即可檢視。在linux下呢?其實在上面介紹的top命令就可以,但是不夠專業,當然還有專門顯示系統程序的命令。
對了,就是這個’ps aux’。筆者也經常看到有的人喜歡用’ps -elf’ 大同小異,顯示的資訊基本上是一樣的。 ps命令還有更多的用法,筆者不再做介紹,因為你只要會用這個命令就足夠了,請man一下。下面介紹上圖上出現的幾個引數的意義。
PID:程序的id,這個id很有用,在linux中核心管理程序就得靠pid來識別和管理某一個程,比如我想終止某一個程序,則用 ‘kill 程序的pid’,有時並不能殺掉,則需要加一個-9選項了’kill -9 程序pid’
STAT :表示程序的狀態,程序狀態分為以下幾種(不要求記住,但要了解)
D 不能中斷的程序(通常為IO)
R 正在執行中的程序
S 已經中斷的程序,通常情況下,系統中大部分程序都是這個狀態
T 已經停止或者暫停的程序,如果我們正在執行一個命令,比如說sleep 10,如果我們按一下ctrl -z讓他暫停,那麼我們用ps檢視就會顯示T這個狀態
W 這個好像是說,從核心2.6xx以後,表示為沒有足夠的記憶體頁分配
X 已經死掉的程序(這個好像從來不會出現)
Z 殭屍程序,殺不掉,打不死的垃圾程序,佔系統一小點資源,不過沒有關係。如果太多,就有問題了。一般不會出現。
< 高優先順序程序
N 低優先順序程序
L 在記憶體中被鎖了記憶體分頁
s 主程序
l 多執行緒程序
+ 代表在前臺執行的程序
這個ps命令是筆者在工作中用的非常多的命令之一,所以請記住它吧。關於ps命令的使用,筆者經常會連同管道符一起使用,用來檢視某個程序或者它的數量。
上面的6不對,需要減掉1,因為使用grep命令時,grep命令本身也算作了一個。
7. netstat 檢視網路狀況
netstat命令用來列印網路連線狀況、系統所開放埠、路由表等資訊。筆者最常用的關於netstat的命令就是這個netstat -lnp(列印當前系統啟動哪些埠)以及netstat -an(列印網路連線狀況)這兩個命令非常有用,請一定要記住。
如果你所管理的伺服器是一臺提供web服務(80埠)的伺服器,那麼你就可以使用netstat -an |grep 80開檢視當前連線web服務的有哪些IP了。
8. 抓包工具tcpdump
有時候,也許你會有這樣的需求,想看一下某個網絡卡上都有哪些資料包,尤其是當你初步判定你的伺服器上有流量攻擊。這時,使用抓包工具來抓一下資料包,就可以知道有哪些IP在攻擊你了。
如果你沒有tcpdump這個命令,需要用’yum install -y tcpdump ’命令去安裝一下。上圖中第三列和第四列顯示的資訊為哪一個IP+port在連線哪一個IP+port,後面的資訊是該資料包的相關資訊,如果不懂也沒有關係,畢竟你不是專門搞網路的,而這裡需要你關注的只是第三列以及第四列。-i選項後面跟裝置名稱,如果你想抓eth1網絡卡的包,後面則要跟eth1.至於-nn選項的作用是讓第三列和第四列顯示成IP+埠號的形式,如果不加-nn則顯示的是主機名+服務名稱。
【linux網路相關】
1. ifconfig 檢視網絡卡IP
ifconfig類似與windows的ipconfig,不加任何選項和引數只打印當前網絡卡的IP相關資訊(子網掩碼、閘道器等)
當然ifconfig後面可以跟裝置名,只打印指定裝置的IP資訊。
在windows下設定IP非常簡單,然而在命令視窗下如何設定?這就需要去修改配置檔案/etc/sysconfig/network-scripts/ifcfg-eth0了,如果是eth1那麼配置檔案是/etc/sysconfig/network-scripts/ifcfg-eth1.
如果想修改IP的話,則只需要修改IPADDR , NETMASK以及GATEWAY即可。如果你的linux是通過dhcp伺服器自動獲得的IP,那麼配置檔案肯定和上圖中的不一樣,BOOTPROTO那裡會是’dhcp’,如果你要配置成靜態IP的話,這裡就需要寫成’none’。關於如何設定IP以及子網掩碼的這些知識屬於網路相關的基礎知識了,如果你對這方面比較陌生的話,建議你去看看網路相關的資料。當修改完IP後需要重啟網路服務新IP才能生效,重啟命令為’ service network restart’
另外如果你有多個網絡卡的情況時,只想重啟某一個網絡卡的話,還可以使用這個命令。
ifdown 即停掉網絡卡,ifup即啟動網絡卡。有一點要提醒你的是,如果你遠端登入你的伺服器,當你使用ifdown eth0這個命令的時候,很有可能後面的命令ifup eth0不會被執行,這樣導致你斷網而無法連線伺服器,所以請儘量使用service network restart 這個命令來重啟網絡卡。
2. 給一個網絡卡設定多個IP
在linux系統中,網絡卡是可以設定多重IP的,筆者曾經管理的一臺伺服器的eth1就設定了5個IP,實在是夠變態的。
把ifcfg-eth0複製成ifcfg-eth0:1然後編輯ifcfg-eth0:1修改DEVICE以及IPADDR儲存後重啟網絡卡。
再次檢視eth0上就有兩個IP了。這裡你要注意一下,檔名(ifcft-eth0:1)寫成什麼都無所謂,但是檔案內的DEVICE=eth0:1一定要按照這樣的格式寫,否則你啟動不起來網絡卡。
3. 檢視網絡卡連線狀態
mii-tool這個命令用來檢視網絡卡是否連線,如圖顯示link ok等字樣說明連線正常,否則會顯示’no link’字樣,下圖是筆者所管理的一臺伺服器,eth1網絡卡沒有連線。
如果你的機器是虛擬機器,那麼你使用該命令時應該顯示成如下:
這是因為使用的是虛擬網絡卡,不支援這個工具檢視。不用多關注此,你記住這個