天天看點

Linux系統管理技巧(上)

一.監控系統的狀态

1.使用w指令檢視目前系統的負載

第一行顯示的資訊從左到右依次是:時間,系統運作時間,登入使用者數,平均負載

第二行顯示的是登入的使用者名及其登入的位址等

第一行load average後面的三個數值為:①表示1分鐘内系統的平均負載值。②表示5分鐘内系統的平均負載值。③表示15分鐘内系統的平均負載值。我們着重看第一個值,它表示機關時間段内使用CPU的活動程序數,值越大說明伺服器壓力越大。一般情況下,這個值隻要不超過伺服器的CPU數量就沒有關系。

2.用vmstat指令監控系統的狀态

指令w檢視的是系統整體上的負載,通過看那個數值就可以知道目前系統有沒有壓力。但它無法判斷具體是哪裡的(CPU、記憶體、磁盤等)壓力,這就用到了vmstat。 vmstat指令列印結果共分為6部分:

procs顯示程序的相關資訊。

r (run):表示運作或等待CPU時間片的程序數。不要誤認為等待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壓力很大,io部分的bi和bo數值會比較高。另外,當si和so兩列數值比較高并且不斷變化時,說明記憶體不夠了,記憶體中的資料頻繁交換到交換分區中,這往往對系統性能影響極大。 我們使用vmstat檢視系統狀态時,通常都是使用如下形式:

3.用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 -bnl.它表示非動态列印系統資源的使用情況,可以用在shell腳本中。和top指令唯一的差別就是,它一次性輸出所有資訊而非動态顯示。

4.用sar指令監控系統狀态

sar指令很強大,它可以監控系統幾乎所有資源的狀态,比如平均負載、網卡流量、磁盤狀态、記憶體使用等。與其他系統狀态監控工具不同,它可以列印曆史資訊,可以顯示當天從零點開始到目前時刻的系統狀态資訊。 如果你的系統沒有安裝這個指令,請使用指令yum install -y sysstat安裝。 # yum install -y sysstat  初次使用sar指令會報錯,那是因為sar工具還沒有生成相應的資料庫檔案(無需實時監控,因為不用去查詢那個庫檔案)。它的資料庫檔案在/var/log/sa/目錄下。

1)檢視網卡流量 sar -n DEV

這個指令會把當天記錄的網卡資訊列印出來,每隔10分鐘記錄一次。 IFACE這一清單示裝置名稱,rxpck/s這一清單示每秒進入收取的包的數量,txpck/s這一清單示每秒發送出去的包的數量,rxkB/s這一清單示每秒收取的資料量(機關為KB), txkB/s這一清單示每 秒發送的資料量(後面幾列不需要關注)。如果有一天伺服器丢包非常嚴重,那麼你就應該查一下網卡流量是否異常了。如果txpck/s那一列的數值大于4000,或者rxkB/s那一列的數值大于5000000,很有可能是被攻擊了。正常的伺服器網卡流 量不會這麼高,除非是你自己在複制資料。上例中的指令是檢視網卡流量曆史的,如果你想實時檢視網卡流量,方法如下:

另外==也可以使用-f選擇項檢視某一天的網卡流量曆史,後面跟檔案名。==在Red Hat或者CentOS發行版中,sar的庫檔案一定在/var/log/sa/目錄下,如下所示:

2)檢視曆史負載  sar -q

5.用nload指令檢視網卡流量

yum install -y epel-release; yum install -y nload

6.用free指令檢視記憶體使用情況

free指令可以檢視目前系統的總記憶體大小以及使用記憶體情況

total:記憶體總大小

Used:真正使用的實際記憶體大小

Free剩餘實體記憶體大小(沒有被配置設定,純剩餘)

Shared共享記憶體大小,不用關注他

Buff/cache配置設定給buffer和cache的記憶體總共有多大  buffer和cache都是一部分記憶體,記憶體的作用就是緩解CPU和IO的速度差距。資料經過CPU計算,即将要寫入磁盤,這時的記憶體為buffer;CPU要計算時,需要把資料從磁盤中讀出來,臨時先放到記憶體中,這部分記憶體就是cache

available:系統可使用記憶體有多大,它包含了free。Linux系統為了讓應用跑得更快,會預先配置設定一部分記憶體(buffer/cache )給某些應用使用,雖然這部分記憶體并沒有真正使用,但也已經配置設定岀去了。然而,當另外一個服務要使用更多記憶體時,是可以把這部分預先配置設定的記憶體拿來用的。是以還沒有被占用的這部分buffer和cache再加上free就是available。

這個free指令顯示的結果中,其實有一個隐藏的公式total=used+free+buff/cacheo另外, available是由free這部分記憶體和buff/cache還未被占用的那部分記憶體組成。used那部分記憶體和 buff/cache被占用的記憶體是沒有關系的。

 -m:(以MB為機關)列印記憶體的使用狀況;  

-g:(以GB為機關)列印記憶體的使用狀況。

7.用ps指令檢視系統程序

PID :表示程序的ID。在Linux中,核心管理程序就得靠pid來識别和管理某一個程序。

STAT:程序的狀态。程序狀态分為以下幾種:

D:正在運作中的程序,其中包括了等待CPU時間片的程序

R (run):正在運作中的程序,其中包括了等待CPU時間片的程序。 S (sleep):已經中斷的程序。通常情況下,系統的大部分程序都是這個狀态。

T:已經停止或者暫停的程序。如果我們正在運作一個指令,比如說sleep 10,我們按一下 Ctrl+Z暫停程序時,用ps指令檢視就會顯示T這個狀态。

W:(核心2.6xx以後不可用),沒有足夠的記憶體頁配置設定,

X:已經死掉的程序(這個好像從來不會出現)

Z:僵屍程序,即殺不掉、打不死的垃圾程序,占用系統一點資源,不過沒有關系。如果占用太多(一般不會出現),就需要重視了。

<:高優先級程序。

N:低優先級程序。

L:在記憶體中被鎖了記憶體分頁。

s:主程序,後面講到nginx或<php-fpm服務的時候,你就能更好地了解它了。

l:多線程程序。

 +:在前台運作的程序,比如在目前終端執行ps aux就是前台程序。

 ps指令是在工作中用得非常多的一個指令,經常會将ps連同管道符一起使用,用來檢視某個程序或者它的數量。示例指令如下:

8.用netstat指令檢視網絡狀況

顯示的結果中,上面那一部分是tcp/ip,下面一部分是監聽的socket ( unix開頭的行)。netstat指令用來列印網絡連接配接狀況、系統所開放端口、路由表等資訊。最常用的兩種用法是netstat -lnp (列印目前系統啟動哪些端口)和netstat -an(列印網絡連接配接狀況)

最右側為網絡連接配接的狀态。如果你管理是一台提供Web服務(80端口)的伺服器,那麼就可以使用指令netstat -an |grep 80 來檢視目前連接配接Web服務的有哪些IP 了。

二.抓包工具

有時也許想看一下某個網卡上都有哪些資料包,尤其是當你初步判定伺服器上有流量攻擊時,使用抓包工具來抓取資料包就可以知道有哪些ip在攻擊了。

  1. tcpdump工具

回車後會出現密密麻麻的一堆字元串,在按Ctrl+C之前,這些字元串一直在刷屏,刷屏越快說明網卡上的資料包越多。沒有tcpdump指令,使用yum install -y tcpdump安裝。上例中,我們隻需要關注第3列和第4列,它們顯示的資訊為哪一個IP+端口号在連接配接哪一個IP+端口号。後面的資訊是該資料包的相關資訊-i:選項後面跟裝置名稱,如果想抓取其他網卡的資料包,後面則要跟其他網卡的名字。  

-nn:其作用是讓第3列和第4列顯示成“IP+端口号”的形式,如果不加-nn選項則顯示“主機名+服務名稱”。  

-c:指定抓包數量,抓夠了自動退出,不用人為取消。

2.wireshark工具

要執行的指令是tshark,虛拟機預設是沒有這個指令的:yum install -y wireshark

三.Linux網絡相關

  1. 用ifconfig指令檢視網卡ip

修改配置檔案vi /etc/sysconfig/network-scripts/ifcfg-xxx,xxx是網卡的名字,可以用ip addr檢視所有網卡,如果沒有ifconfig指令,則安裝: # yum install -y net-tools。如果Linux上有多個網卡,而你隻想重新開機某一個網卡的話,可以使用: # ifdown ens33;ifup ens33

ifdown即停用網卡,ifup即啟動網卡。如果我們遠端登入伺服器,當使用指令ifdown ens33時,很有可能後面的指令ifup ens33不會運作。這樣會導緻我們斷網而無法連接配接伺服器,是以請盡量使用指令# systemctl restart network來重新開機網卡。

2.給一個網卡設定多個ip

3.檢視網卡連接配接狀态

這裡顯示link ok,就說明網卡為連接配接狀态。如果顯示no link,說明網卡壞了或者沒有連接配接網線 還有一個指令也可以檢視網卡的狀态

如果網卡沒有連接配接,最後面一行Link detected顯示為no。

4.更改主機名

5.設定DNS

DNS是用來解析域名的。平時我們通路網站都是直接輸入一個網址,而DNS把這個網址解析到一個IP。在Linux下設定DNS非常簡單,隻要把DNS位址寫到配置檔案/etc/resolv.conf中即可。

第一行以#開頭的行沒有實際意義,僅僅是一個注釋,它的意思是,這個配置檔案中的DNS IP位址是由NetworkManager服務生成的。 NetworkManager是一個內建的Linux網絡管理器。我們在定義網卡配置檔案的時候,就有一行DNS1=8.8.8.8,其實就是因為這行配置,該配置檔案裡才有了 nameserver的IP位址。resolv.con有它固有的格式,一定要寫成nameserver IP的格式。建議你寫兩個或多個namserver,系統預設會用第一個namserver去解析域名,當第一個解析不成功時會使用第 二個。

在Linux下還有一個特殊檔案/etc/hosts也能解析域名,不過需要我們在裡面手動添加IP和域名這些 内容。它的作用是臨時解析某個域名,非常有用。該檔案的内容如下:

/etc/hosts的格式很簡單,每一行為一條記錄,分成兩部分,第一部分是IP,第二部分是域名。關 于hosts檔案,有以下幾點需要你注意:   

l 一個IP後面可以跟多個域名,可以是幾十個甚至上百個

l 每一行隻能有一個IP,也就是說一個域名不能對應多個IP

l 如果有多行中出現相同的域名(對應的IP不一樣),會按最前面出現的記錄來解析

四.Linux的防火牆

  1. SELinux

SELinux是Linux系統特有的安全機制。因為這種機制的限制太多,配置也特别煩瑣,是以幾乎沒 有人真正應用它。安裝完系統,我們一般都要把SELinux關閉,以免引起不必要的麻煩。臨時關閉 SELinux的方法為: #setenforce 0 但這僅僅是臨時的,要想永久關閉需要更改配置檔案/etc/selinux/config,需要把SELINUX= enforcing 改成SELINUX=disabled,更改後的内容如下所示

更改完該配置檔案後,重新開機系統方可生效。可以使用getenforce指令獲得目前SELinux的狀态

SELinux早就關閉了,預設會輸出enforcing□當使用setenforce 0這個指令後,再執行 getenforce 指令會輸出 permissive

2.Netfilter

在之前的CentOS版本(比如5和6 )的防火牆為netfilter, CentOS7的防火牆為firewalld。很多朋友把Linux的防火牆叫作iptables,其實這樣叫并不太恰當,iptables僅僅是一個工具。 當然,即使是firewalld,同樣也支援之前版本的指令用法,也就是說它是向下相容的。

上例中,-nvL選項表示檢視規則,-F選項表示清除目前規則,但清除隻是臨時的,重新開機系統或者重新開機iptalbes服務後還會加載已經儲存的規則,是以需要使用service iptables save儲存一下規則。 通過上面的指令輸出,我們也可以看到,防火牆規則儲存在/etc/sysconfig/iptables中

1)netfilter的5個表

filter表主要用于過濾包,是系統預設的表,這個表也是用得最多的表。該表内建3個鍊: INPUT、OUTPUT以及FORWARD。INPUT鍊作用于進入本機的包,OUTPUT鍊作用于本機送出的包,FORWARD鍊作用于那些跟本機無關的包。  

nat表主要用于網絡位址轉換,它也有3個鍊。PREROUTINC鍊的作用是在包剛剛到達防火牆時改變它的目的位址(如果需要的話),OUTPUT鍊的作用是改變本地産生的包的目的位址,POSTROUTING鍊的作用是在包即将離開防火牆時改變其源位址。

mangle表主要用于給資料包做标記,然後根據标記去操作相應的包。  

raw表可以實作不追蹤某些資料包,預設系統的資料包都會被追蹤,但追蹤勢必消耗一定的資源,是以可以用raw表來指定某些端口的包不被追蹤。

security表在CentOS6中是沒有的,它用于強制通路控制(MAC)的網絡規則。

2)netfilter的5個鍊

5個鍊分别為PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

PREROUTINC:資料包進入路由表之前。  

INPUT:通過路由表後目的地為本機。  

FORWARDING:通過路由表後,目的地不為本機。  

OUTPUT:由本機産生,向外轉發。  

POSTROUTIONG:發送到網卡接口之前。

3)iptables基本文法

(1)檢視規則以及清除規則

-t選項後面跟表名,-nvL表示査看該表的規則,其中-n表示不針對IP反解析主機名,-L表示列出, -V表示列出的資訊更加詳細。如果不加-t選項,則列印filter表的相關資訊

上例和-t filter列印的資訊是一樣的。關于清除規則的指令中,用得最多就是下面兩個

iptables -F

iptables -Z

這裡-F表示把所有規則全部删除,如果不加-t指定表,預設隻清除filter表的規則。-Z表示把包以及流量計數器置零(這個很有用)。

(2)增加/删除一條規則

-A/-D:表示增加/删除一條規則。  

-I:表示插入一條規則,其實效果跟-A一樣。  

-p:表示指定協定,可以是tcp、udp或者icmp。  

-P:預設政策。(例如 # iptables -P INPUT DROP。-P後面跟鍊名,政策内容為DROP、ACCEPT,預設為ACCEPT。在遠端時不要随便執行,一旦回車就會斷開連接配接。政策一旦設定後,隻有使用# iptables -P INPUT ACCEPT才能恢複成原始狀态。)  

--dport:跟-p—起使用,表示指定目标端口。  

--sport:跟-p—起使用,表不指定源端口。  

-s:表示指定源IP (可以是一個IP段)。  

-d:表示指定目的IP (可以是一個IP段)。  

-j:後面跟動作,其中ACCEPT表示允許包,DROP表示丢掉包,REJECT表示拒絕包。  

-i:表示指定網卡(不常用,但偶爾能用到)

4)nat表的應用

路由器的功能其實就是由Linux的iptables實作 的,而iptables又是通過nat表作用而實作的

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ethO -j MASQUERADE這裡,第一個指令涉及核心參數相關的配置檔案,它的目的是打開路由轉發功能,否則無法實作我們的應用。第二個指令則是iptables對nat表做了一個IP轉發的操作。-O選項後面跟裝置名,表示出口的網卡;MASQUERADE表示僞裝。

5)儲存和備份iptables規則

自己設定的防火牆規則隻儲存在記憶體中,并沒有儲存到某個檔案中。重新開機之後一件設定的規則就沒有了。儲存:service iptables save 清除:service iptables stop備份防火牆規則:sh /usr/local/sbin/iptables.sh

                Iptables-save >myipt.rule

使用iptables -save儲存規則後,若想恢複這些規則,則: # iptables -restore < myipt.rule

3.firewalld

firewalld有兩個基礎概念,分别是zone和service,每一個zone裡面有不同的iptables規則,預設一共 有9個zone,而CentOS 7預設的zone為public。擷取系統所有的zone

9個zone

drop (丢棄):任何接收的網絡資料包都被丢棄,沒有任何回複。僅能有發送出去的網絡連接配接。  

block (限制):任何接M攵的網絡連接配接都被IPv4的icmp-host-prohibited資訊和IPv6的 icmp6-adm-prohibited 資訊所拒絕  

public (公共):在公共區域内使用,不能相信網絡内的其他計算機不會對你的計算機造成危害,隻能接收經過選取的連接配接。  

external (外部):特别是為路由器啟用了僞裝功能的外部網。你不能信任來自網絡的其他計算,不能相信它們不會對你的計算機造成危害,隻能接收經過選擇的連接配接。  

dmz (非軍事區):用于你的非軍事區内的計算機,此區域内可公開通路,可以有限地進入你 的内部網絡,僅僅接收經過選擇的連接配接。  

work(工作):用于工作區。你可以基本相信網絡内的其他計算機不會危害你的計算機。僅僅 接收經過選擇的連接配接。  

home(家庭):用于家庭網絡。你可以基本信任網絡内的其他計算機不會危害你的計算機。僅 僅接收經過選擇的連接配接。  

internal(内部):用于内部網絡。你可以基本上信任網絡内的其他計算機不會威脅你的計算 機。僅僅接受經過選擇的連接配接。  

trusted (信任):可接受所有的網絡連接配接

之是以有9種zone,是因為每一個zone裡面都使用了不同的service,而service就是針對一個服務(端口)做的iptables規則。

每個zone裡都有不同的service

給一個zone添加一個service:

檢視zone配置檔案:

在zone中添加,修改配置檔案

一旦更改了某個zone的配置檔案,則會在/etc/firewalld/zones/目錄下面生成對應zone的配置檔案 (.xml字尾的檔案),其實這個目錄下面的配置檔案才是真正的配置檔案。在上面介紹的目錄,可以說是所有zone的模闆配置檔案。

五.Linux系統的任務計劃

1.指令crontab

Linux任務計劃功能的操作都是通過crontab指令來完成的,其常用的選項有以下幾個。   

-u:表示指定某個使用者,不加-u選項則為目前使用者。  

-e:表示制定計劃任務。  

-1:表示列出計劃任務。  

-r:表示删除計劃任務。

這裡使用crontab -e來編寫任務計劃,這實際上是使用vim工具打開了crontab的配置檔案,我們 寫下如下内容: 01 10 05 06 3 echo "ok" > /root/cron.log 這裡每個字段的數字從左到右依次為:分、時、日、月、周和指令行。上例表示在6月5日(這一天必須是星期三)的10點01分執行指令:echo "ok” > /root/cron.log。   則打開的是 /var/spool/cron/root )打開這個檔案使用了vim編輯器,是以儲存時在指令行模式下輸入:wq即可。一定要使用指令crontab -e來編輯。 檢視已經設定的任務計劃使用crontab -l指令。删除任務計劃要使用crontab -r指令,它會一下子把全部計劃都删除掉。如果你想隻删除一條計劃,可以使用-e選項進入crontab進行編輯。

設定好所有任務後,檢視crond是否已經啟動  systemctl status cromd