Linux系統日常管理

一.查看系統負載命令

     查看當前系統的負載:w 或者 uptime

wKiom1XUMb6wFbCkAAE3Nsqshjs654.jpg

     這裏我們可以看出w給我們展示出來的信息。

     第一行(從左至右):時間系統運行時間登陸用戶的數目,平均負載

     第二行開始以及下面所有的行:當前登錄的都有哪些用戶,以及他們是從哪裏登錄的等等;

 

     這些信息當中最重要的信息是load average後面的3個數字,那麼這三個數字分別是什麼意思?

 

     第一個數值:表示1分鐘內系統的平均負載值;

     第二個數值:表示5分鐘內系統的平均負載值;

     第三個數值:表示15分鐘系統的平均負載值。


     看到這裏,有人會問我這個平均負載值是什麼鬼?

 

     其實呢,這個平均負載值表示:單位時間段內CPU活動進程數。

 

     我們需要注意的是這個值越大就說明您的服務器壓力越大。

     一般情況下這個值只要不超過服務器的cpu數量就沒有關係。舉個例子來說如果服務器cpu數量爲10,那麼這個值若小於10,就說明當前服務器沒有壓力,否則我們就應該要注意一下了。


     看到這裏您肯定又會問,如何查看服務器有幾個cpu呢?(煩不煩,天天就知道問問問j_0013.gif

     這裏我們就要用到一個命令:cat/proc/cpuinfo

wKiom1XUPCXynOpGAAKLsjv4ltQ422.jpg

     這樣我們就知道cpu的詳細信息就儲存在/proc/cpuinfo當中。

     查看當前系統有幾個cpu:grep -c 'processor' /proc/cpuinfo

wKiom1XUQYzRG7akAACtA6uiyAo303.jpg

     (不要問我爲什麼是2,因爲我的虛擬機設定的cpu就是2j_0007.gif



二.vmstat監控系統的狀態

     上面我們說的w是用來查看整個系統的負載,通過一些數值可以知道當前系統是否有壓力,但是具體是哪裏(CPU, 內存,磁盤等)有壓力就無法判斷了。

     所以我們通過 vmstat 就能知道具體是哪裏有壓力了。

wKiom1XUUaujqjnyAAFDSlKk9bM489.jpg

    上圖中我們可以看出vmstat的結果分爲6部分:proce  memory  swap  io  system  cpu

    

    那麼這6個部分是什麼意思呢?請重點關注一下r b si so bi bo幾列。

     1.procs:顯示進程相關的信息;

                    rrun):表示有多少個進程正在使用或者等待使用cpu;

                                :若長期大於cpu的個數,說明cpu不夠用了)

                    b(block):被阻塞的任務的個數,比如等待I/O, 內存等;

                                (:這個數值如果長時間大於1,則需要關注一下了)

     2.memory:顯示內存相關的信息;

                    swpd:表示切換到交換分區中的內存數量 ;

                    free:表示當前空閒的內存數量;

                    buff:緩衝大小(即將寫入磁盤的);

                    cache:緩衝大小(從磁盤中讀取的);

     3.swap:內存交換的情況;

                    si(swap in):由交換區寫入到內存的數據量;

                    so(swap out):由內存寫入到交換區的數據量;

     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兩列的數值比較高,並且在不斷變化時,說明內存不夠了,內存中的數據頻繁交換到交換分區中,這往往對系統性能影響極大。

 


三.top動態查看負載 wKiom1XVlISBlUCCAAShSWJLu58704.jpg

    top這個命令用於動態監控進程所佔系統資源,每隔3秒變化一次。

    這個命令的特點是把佔用系統資源(CPU,內存,磁盤IO等)最高的進程放到最前面。

    top命令打印出了很多信息,包括系統負載(loadaverage)、進程數(Tasks)、cpu使用情況、內存使用情況以及交換分區使用情況。

    需要您關注的也就是幾項:%CPU, %MEM, COMMAND 這些項目所代表的意義。


    那麼我們來詳細介紹下這些內容:

    PID:進程的ID號;

    (注:這些ID號都能在proc下面找到:ls /proc/    這些東西不用太刻意關注j_0012.gif

    USER:運行後面進程的用戶。

    PRNI:進程的優先級。

    (注:PR和NI的和爲20,PR取值範圍0-39,NI的取值範圍-20-19,PR,NI值越小,優先級越高,優先級越高的排在隊列的最前面)

    VIRT:虛擬內存

    RES:物理內存,真正的內存大小

    SHR:共享內存

    S:進程的狀態

    %CPU:使用cpu百分比

    %MEM:內存佔用的百分比

    TIME+:使用cpu有多久

    COMMAND:進程


    top -bn1 :表示非動態打印系統資源使用情況,可以用在shell腳本中;

    top -d 1:一般每隔3秒變化一次,這樣就變成了1秒鐘使用一次;

    top -c :更加詳細的展示COMMAND


四.sar監控系統狀態

    sar 命令用來監控系統所有資源狀態,比如平均負載、網卡流量、磁盤狀態、內存使用等等。

    它不同於其他系統狀態監控工具的地方在於,它可以打印歷史信息,可以顯示當天從零點開始到當前時刻的系統狀態信息。

    如果您系統沒有安裝這個命令,請使用yum install -y sysstat命令安裝。

    安裝完成後初次使用sar命令會報錯。會出現這種情況:

wKioL1XW4xLhCG4JAANBnLbFljA702.jpg  

    解決方案:

    1.等待10分鐘系統自動生成數據文件;

    2.用“sar -o 14”命令創建該文件或該目錄即可。


    它的數據庫文件在 “/var/log/sa/” 目錄下,默認保存一個月。

    

    查看網卡流量:sar -n DEV

wKioL1XW5OKCX5FKAAHS8uibRA4068.jpg

    

    第一次看見這圖的時候我是拒絕的,因爲我根本看不懂,經過一番搜索後,我終於明白什麼意思了。    

    IFACE這列表示設備名稱;

    rxpck/s 表示每秒進入收取的包的數量;

    txpck/s 表示每秒發送出去的包的數量;

    rxbyt/s 表示每秒收取的數據量(單位Byte);

    txbyt/s表示每秒發送的數據量;

    rxcmp/s表示每秒接收的壓縮數據包;

    txcmp/s表示每秒發送的壓縮數據包;    (救命啊綠色的背景怎麼解決)

    rxmcst/s表示每秒鐘接收的多播數據包;

    lo、etho表示網卡;(etho表示外網網卡)

    

    不加粗的部分不重要了,不需要關注。


    我們着重關注rxbyt/s和txbyt/s這兩項!!j_0013.gif

    1bit=8bit

    10m帶寬,理論下載速度只有1.25m(漲姿勢)

    

    如果有天你發現你所管理的服務器丟包非常嚴重,那麼你就應該看一看這個網卡流量是否異常了。

    如果rxpck/s 那一列的數值大於4000,或者rxbyt/s那列大於5,000,000則很有可能是被***了,正常的服務器網卡流量不會高於這麼多,除非是您自己在拷貝數據。

    

    上面的命令是查看網卡流量歷史的,如何時時查看網卡流量呢?

    語法:sar -n DEV n m(每隔n秒顯示一次,一共顯示m次)

wKiom1XW6MHBNv0JAASHnPrBd7o713.jpg    

    如果你想查看某一天的網卡流量歷史,使用-f選項,後面跟文件名。

    語法:sar -n DEV -f 、var/log/sa/sann爲天數)

    如果你的系統格式Redhat或者CentOS那麼sar的庫文件一定是在/var/log/sa/目錄下的。wKiom1XW6qixrLOaAAJ3xjpu3e4058.jpg    

    查看歷史負載

    語法:sar -q

    這個命令有助於我們查看服務器在過去的某個時間的負載狀況。    wKiom1XW6xyACVvgAAGxeo-kcjA024.jpg

 查看當前的磁盤io狀態

    語法:sar -b n m(每隔n秒顯示一次,一共顯示m次)


    查看cpu的使用情況

    語法:sar -p n m(每隔n秒顯示一次,一共顯示m次)


五.查看內存使用情況

    命令:free

wKioL1Xax7-gjAWKAAFLP_BTEHg093.jpg

    free可以當前系統的總內存大小以及使用內存的情況。

    從上圖中可看到當前系統內存總大小爲1004352(單位是k)已經使用225020, 剩餘779332。

    但是真正剩餘並不是這個779332, 而是第二行的875820, 真正使用的也是第二行的128532。


    這是什麼鬼?爲什麼呢。。。

    這是因爲系統初始化時,就已經分配出很大一部分內存給緩存。

    這部分緩存用來隨時提供給程序使用,如果程序不用,那這部分內存就空閒。

    所以,查看內存使用多少,剩餘多少請看第二行的數據。

    buffers:是即將寫入到磁盤裏去的數據暫存的內存區域。

    cached:是從磁盤裏讀出來的數據暫存的內存區域。


    我們還可以加-m 或者-g選項分別以M或G爲單位打印內存使用狀況:

    命令:free -m

wKiom1Xax57i3qPtAAGpfiaMpj4884.jpg



六.ps 查看系統進程

    作爲系統管理員,一定要知道您所管理的系統都有那些進程在運行。

    在windows下只要打開任務管理器即可查看。

    在linux下呢?

    其實在上面介紹的top命令就可以,但是不容易看,當然還有專門顯示系統進程的命令:

    命令:ps aux

wKioL1XayxKj8en-AANlWgfIAc8551.jpg

    還可以使用另外一個命令: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這個狀態

    W 這個好像是說,從內核2.6xx 以後,表示爲沒有足夠的內存頁分配

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

    Z 殭屍進程,殺不掉,打不死的垃圾進程,佔系統一小點資源,不過沒有關係。如果太多,就有問題了。一般不會出現。

    < 高優先級進程

    N 低優先級進程

    L 在內存中被鎖了內存分頁

    s 主進程

    l 多線程進程

    + 代表在前臺運行的進程

    VES 虛擬內存

    RSS 物理內存

    TTY 從哪裏啓動的(有以下幾種情況)【以下只做瞭解】

    ? 從後臺啓動的

    ttyn 

    pts/0 運行的終端下

    

    這個ps命令是工作中用的非常多的命令之一,所以請記住它吧。

    關於ps命令的使用,經常會連同管道符一起使用,用來查看某個進程或者它的數量。

wKioL1XazyDxPHUkAAINl997ePM200.jpg

    

七.netstat 查看網絡狀況

   netstat命令用來打印網絡連接狀況、系統所開放端口、路由表等信息。

    最常用的關於netstat的命令就是這兩個:

    命令1:netstat -lnp (打印當前系統啓動哪些端口)

wKiom1Xaz5uQmCYeAAbOa7dkHg4257.jpg

    命令2:netstat  -an (打印網絡連接狀況)

wKioL1Xa0cbBd9A1AAg5-mHVeOM900.jpg

    這兩個命令非常有用,請一定要記住。

    如果您所管理的服務器是一臺提供web服務(80端口)的服務器。

    那麼您就可以使用 netstat -an | grep 80 查看當前連接web服務的有哪些IP了。


八.抓包工具tcpdump

    有時候,也許您會有這樣的需求。

    想看一下某個網卡上都有哪些數據包,尤其是當您初步判定您的服務器上有流量***。

    這時,使用抓包工具來抓一下數據包,就可以知道有哪些IP在***您了。

    命令:tcpdump -nn -i eth0

wKioL1Xa1YbgjkNTAAldentFaW8789.jpg    

    如果沒有tcpdump 這個命令,需要用 yum install -y tcpdump 命令去安裝一下。

    上例中第五列和第六列顯示的信息爲哪一個IP+port在連接哪一個IP+port。

    後面的信息是該數據包的相關信息。

    如果不懂也沒有關係,畢竟我們不是專門搞網絡的,而這裏需要關注的只是第五列以及第六列。

    -i 選項後面跟設備名稱,如果您想抓eth1網卡的包,後面則要跟eth1.至於-nn選項的作用是讓第三列和第四列顯示成IP+端口號的形式,如果不加-nn則顯示的是主機名+服務名稱。

    

    命令:tcpdump -nn -c n(抓n個數據包)

wKiom1Xa5mGgzXQeAAS96lIIpk8012.jpg    

    命令:tcpdump -nn port n(只抓n端口的數據包)

wKiom1Xa5zOhbOgxAAViAGKfw3c541.jpg    

    命令:tcpdump -nn  tcp(抓指定協議的數據包)

wKiom1Xa6ELj5vKXAAjomdMBDU0432.jpg    

    命令:tcpdump -nn tcp and port n host ****(ip)-w [指定的文件]把抓的包記錄到文件裏去

wKioL1Xa7uji1WAAAAHBXjwFrao818.jpg

    這裏的1.cap無法用cat等文本工具查看,只能通過wireshark工具查看

    (注:想要抓到一個完整的數據包要加上-s0選項!!)


    這裏說一下另外一個抓包工具。

    命令:tshark -nn(既能在linux上使用,又可以在windows上使用)

    運行這個命令前,安裝一下:yum install -y wireshark

    (注:

    如果你不記得這個安裝包的名字,可以用這個命令來查看想要安裝的軟件的名稱

    rpm qf `which [想要安裝的壓縮包]`)

    

    接下來這個命令可以更加形象具體清楚的看清楚抓包過程:(務必牢記)

    命令: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"

wKiom1Xa8xDxGl1sAAX1cbOB-ok707.jpg    

    這個看上去是不是舒服了很多?

    能夠清楚的看清時間,來源ip,訪問目標的host,GET(POST),路徑(是查看圖片還是其他的)


九.Linux的防火牆

    命令1:selinux

    Selinux是Redhat/CentOS系統特有的安全機制。

    所以裝完系統,我們一般都要把selinux關閉,以免引起不必要的麻煩。

    關閉selinux的方法爲,使 “SELINUX=disabled”, 默認爲 enforcing

wKiom1Xb5_KTP1Q-AAIqnCddbtk761.jpg

    保存該配置文件後,重啓機器方可生效,臨時關閉selinux的命令爲:setenforce 0

    我們可以使用 getenforce 命令獲得當前selinux的狀態


    命令2:iptables

    Iptables是linux上特有的防火牆機制,其功能非常強大。

    作爲一個網絡管理員,iptables是必要要熟練掌握的。

    但是作爲系統管理員,我們也應該會最基本的iptables操作,認識iptables的基本規則。


    CentOS上默認是設有iptables規則的,這個規則雖然很安全,但是對於我們來說沒有用。

    反而會造成某些影響,所以建議您先清除規則,然後把清除後的規則保存一下:

    語法:

    iptables -nvL

    iptables -F; /etc/init.d/iptables save

wKioL1Xb7uGgCJfnAAItApd94Xg093.jpg

    

    iptalbes的三個表

    1.filter 這個表主要用於過濾包的,是系統預設的表,這個表也是用的最多的。

    內建三個鏈INPUT、OUTPUT以及FORWARD。

    INPUT作用於進入本機的包;

    OUTPUT作用於本機送出的包;

    FORWARD作用於那些跟本機無關的包。

    2.nat 主要用處是網絡地址轉換,也有三個鏈。

    PREROUTING 鏈的作用是在包剛剛到達防火牆時改變它的目的地址。

    OUTPUT鏈改變本地產生的包的目的地址。

    POSTROUTING鏈在包就要離開防火牆之前改變其源地址。

    3.mangle 這個表主要是用於給數據包打標記,然後根據標記去操作哪些包。

    

    iptables的基本語法

    1.查看規則。

    命令:iptables -t [表名] -nvL

wKiom1XcEEHCV26RAAHCPbNxRRo799.jpg

    如果沒有加上-t選項,則默認查看filter表的規則

wKioL1XcEsbzNEetAAHOeslxFhM792.jpg

    2.清除規則

    命令1:iptables -F

    命令2:iptables -Z

    不加-t默認是針對表filter來操作的。

    -F 表示把所有規則全部刪除;

    -Z 表示把包以及流量計數器置零。


    3.增加一條規則

    命令:iptables -A INPUT -s [ip] -p tcp --sport 1234 -d [ip] --dport 80 -j DROP

    -A:增加一條規則;

    -I:插入一條規則;

    -D:刪除一條規則;

    -s:後面跟源地址;

    -p:後面跟協議(tcp,udp,icmp);

    --sport/--dport:後面跟源端口和目標端口;

    -d:後面跟目的ip(主要針對內網或者外網);

    -j:後跟動作(DROP即把包丟掉,REJECT即包拒絕;ACCEPT即允許包);

    -i:指定網卡


    注:這裏我們要說下-A和-I的區別

    -A和-I的作用是一樣的,都是增加一條規則。

    它們的不同之處在於:

    -I 爲插入,新增加的規則會在規則列表的最上面出現;

    -A爲增加,新增加規則會在規則列表的最下面出現;

    而且, -I插入的規則比-A增加的規則優先生效。

wKioL1XcGg-S6VqdAAPIGRJriTo835.jpg

    那麼,我們來舉幾個例子更加形象的說明一下吧。

    命令1:iptables -I INPUT -s 1.1.1.1 -j DROP

    插入一條規則,把來自1.1.1.1的所有數據包丟掉。

    

    命令2:iptables -D INPUT -s 1.1.1.1 -j DROP

    刪除剛剛插入的規則。

    注意要刪除一條規則時,必須和插入的規則一致。

    也就是說,兩條iptables命令,除了-I 和-D不一樣外,其他地方都一樣。

    

    命令3:iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP

    把來自2.2.2.2 並且是tcp協議到本機的80端口的數據包丟掉。

    這裏要說的是,--dport/--sport 必須要和-p選項一起使用,否則會出錯。

    

    命令4:iptables -I OUTPUT -p tcp -d 10.0.2.34 -dport 22 -j DROP

    把發送到10.0.2.34的22端口的數據包丟掉


    命令5:iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

    上面這行命令把來自192.168.1.0/24這個網段的並且作用在eth0上的包放行。

    


    有時候您的服務器上iptables過多了,想刪除某一條規則時,又不容易掌握當時創建時的規則。

    其實有一種比較簡單的方法:

    命令6:iptables -nvL --line-numbers

wKioL1XcM_bx_x7qAAIA8H6mPPM923.jpg

    想要刪除某一條規則使用如下命令:

    命令:iptables -D INPUT 1

    -D 後跟鏈名,然後是規則num,這個num就是查看iptables規則時第一列的值。

    再次查看剛纔的規則,已經沒有了:

wKioL1XcNNrx2KvTAAMakRf331Q510.jpg

    

    iptables還有一個選項經常用到,-P(大寫)選項,表示預設策略。 

    命令: iptables -P INPUT DROP

    -P後面跟鏈名,策略內容或者爲DROP或者爲ACCEPT,默認是ACCEPT。

  注意:

  如果您在連接遠程服務器。

  千萬不要隨便敲這個命令。

  因爲一旦您敲完回車您就會斷掉。

    本人深受其害,弄得putty無法使用,如果你和我一樣運行了這條命令,不要着急,用下面這個命令:

    命令:iptables -P INPUT ACCEPT 

    這樣就能恢復成原始狀態(不能使用-F參數),這樣你就可以繼續使用遠程了


    下面針對一個小需求講述一下這個iptables規則如何設定。

    需求:

    只針對filter表,預設策略INPUT鏈DROP,其他兩個鏈ACCEPT。

    然後針對192.168.137.0/24開通22端口,對所有網段開放80端口,對所有網段開放21端口。

    這個需求不算複雜,但是因爲有多條規則,所以最好寫成腳本的形式。

    腳本內容如下:wKiom1XcPAnxqGCyAAK4Jj4VJ20038.jpg

    關於icmp的包有一個比較常見的應用:

    命令:iptables -I INPUT -p icmp --icmp-type 8 -j DROP

    --icmp-type 這個選項是要跟-p icmp 一起使用的,後面指定類型編號。

    這個8指的是能在本機ping通其他機器,而其他機器不能ping通本機。這個有必要記一下。


    以上的一些操作全部都是針對於filer表,接下來我們來說一說nat表

    那麼nat表下有哪幾個鏈呢?

    命令:iptables -t nat -nvL

wKioL1XdILiD0VicAAHKBHMyx4k465.jpg

    可以看出nat表有3個鏈,分別爲:PRERPUTING、POSTOUTING、OUTPUT

    那麼我們來解釋下這三個鏈的含義:

    PRERPUTING作用是在包剛剛到達防火牆時改變它的目的地址,如果需要的話。

    POSTOUTING在包就要離開防火牆之前改變其源地址。

    OUTPUT改變本地產生的包的目的地址。


    可能這麼說,不能明白什麼意思,舉個例子吧。

    在日常生活中相信您接觸過路由器吧,它的功能就是分享上網。

    本來一根網線過來(其實只有一個公網IP),通過路由器後,路由器分配了一個網段(私網IP)。

    這樣連接路由器的多臺pc都能連接intnet而遠端的設備認爲您的IP就是那個連接路由器的公網IP。

    這個路由器的功能其實就是由linux的iptables實現的。

    而iptables又是通過nat表作用而實現的這個功能。


    在這裏舉一個例子來說明iptables如何實現的這個功能。

    假設您的機器上有兩塊網卡eth0和eth1,其中eth0的IP爲10.0.2.68 ,eth1的IP爲192.168.1.1 。           eth0連接了intnet 但eth1沒有連接,現在有另一臺機器(192.168.1.2)和eth1是互通的。

    那麼如何設置也能夠讓連接eth1的這臺機器能夠連接intnet(即能和10.0.2.68互通)?


    命令1:echo "1" > /proc/sys/net/ipv4/ip_forward

    命令2:iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

    

    命令1的目的是爲了打開路由轉發功能,否則無法實現我們的應用。

    命令2則是iptables對nat表做了一個IP轉發的操作。

    -o 選項後跟設備名,表示出口的網卡,MASQUERADE表示僞裝的意思。 


    總上,iptables下的3個表的意思已經很明白了

    filter表:主要用來限制進入本機的包和出去的包

    nat表:主要用於網絡地址轉換,比如家用的小路由器就是用nat表實現的

    mangle表:主要用來給包打標記


    3.保存以及備份iptalbes規則

    咱們設定的防火牆規則只是保存在內存中,並沒有保存到某一個文件中,也就說當系統重啓後以前設定的規則就沒有了,所以設定好規則後要先保存一下。

    命令:service iptables save

wKiom1XdJ4-R1eOqAAIhg7q5PKA103.jpg

    提示防火牆規則保存在了/etc/sysconfig/iptables文件內,這個文件就是iptables的配置文件了。

    所以日後,如果您遇到備份防火牆規則的任務,其實就是要拷貝一份這個文件的副本。


    有時,我們會需要把防火牆所有規則都清除,使用 iptables -F 命令雖然可以。

    但是最好的辦法是把防火牆服務停止:

    命令:service iptables stop

    這命令我就不執行出來了。執行這命令後防火牆就失效了,但是一旦重新設定規則後(哪怕只有一條),防火牆服務會自動開啓。

    用來備份防火牆的命令:參考阿銘電子檔。


十.Linux的任務計劃

   這部分內容非常非常非常非常非常非常重要!!!!!!!!

    其實大部分系統管理工作都是通過定期自動執行某一個腳本來完成的。

    那麼如何定期執行某一個腳本呢?這就要藉助linux的cron功能了。

    命令:crontab [-uelr]

    -u:指定某個用戶,不加-u表示當前用戶;

    -e:制定計劃任務;

    -l:列出計劃任務;

    -r:刪除計劃任務。

    

    命令:crontab -e

wKioL1XdV6nhX0oxAADxX3tYIkA892.jpg

    使用 crontab -e 來進行編寫任務計劃,這實際上是使用vim工具打開了crontab的配置文件。

    我們寫下如下內容:

wKiom1XdV5_RPXH5AADhS5w_bcI842.jpg

    每個字段的數字分表表示什麼呢?

    從左到右,依次爲:分,時,日,月,周,命令行。而上面的例子的含義是:

    在8月26日(這一天必須是星期3)的14點10分執行命令 echo "welcome to BJ" > /root/cron.log


    命令crontab -e 實際上是打開了 “spacer.gifar/spool/cron/username”

     (如果是root則打開的是spacer.gifar/spool/cron/root)這個文件。

    使用的是vim編輯器,所以要保存的話則在命令模式下輸入:wq即可。

    但是,您千萬不要直接去編輯那個文件,因爲可能會出錯。

    所以一定要使用 crontab -e 來編輯。

    查看已經設定的任務計劃使用 crontab  -l 命令 。

wKioL1XdWXKgUQLcAAFNt6qUkHQ308.jpg

    刪除計劃任務就是:

    命令:crontab -r

wKioL1XdW2HRaVTGAAD-JpKBWlo253.jpg

    我們在以後執行任務的時候可能出現這些問題:

    1.每天執行一次;

    2.每隔幾個小時執行一次;

    3.每天幾點,幾點,幾點執行一次;

    4.每天幾點到幾點一直執行;


    1.用* **表示;

    2.每隔n小時,就是用全部小時(0-23)去除以n;

    3.當遇到多個數(分鐘、小時、月、周)例如第5題,則需要用逗號隔開。

    4.而時間段是可以用 n-m 的方式表示。

wKioL1XdYtjwuMJdAAGYo60GlXw506.jpg

    等設置好了所有的計劃任務後需要查看一下crond服務是否啓動:

    命令:service crond status

wKioL1XdY0Khhp9_AADxwRyYeqE216.jpg

    如果是停止狀態,則需要啓動它:

    命令:service crond start


十一.Linux的系統服務管理

    1.ntsysv服務配置工具

    用來配置哪些服務開啓或者關閉,有點類似圖形界面,不過是使用鍵盤來控制的。

    如果沒有這個命令請使用 yum  install  -y  ntsysv 安裝它。

wKiom1XddTyicCzUAALNdiHgohM788.jpg

    安裝好後,直接運行命令 ntsysv 回車後彈出一個配置界面:

wKiom1XddaeAAjDQAAHX-_lF2Ho853.jpg

    按鍵盤的上下方向鍵可以調節紅色光標,按空格可以選擇開啓或者不開啓。

    如果前面的中括號內顯示有 * 則表示開啓否則不開啓。

    通過這個工具也可以看到目前系統中所有的服務。

    建議除 “crond, iptables, network, sshd, syslog, irqbalance, sendmail, microcode_ctl” 外其他服務全部停掉。

    選擇好後,按 “tab” 鍵選擇 “確定”, 然後回車,需要重啓機器才能生效。


    2.chkconfig服務管理工具

    Linux系統所有的預設服務可以查看/etc/init.d/目錄得到:

wKioL1XdfsWzqEzNAAHfkBNnIdQ705.jpg

    這就是系統所有的預設服務了。

    系統預設服務都是可以通過這樣的命令實現 service [服務名] [start|stop|restart] 

    服務名就是/etc/init.d/目錄下的這些文件了。

    除了可以使用 service  crond start 啓動crond外,還可以使用 /etc/init.d/crond start 來啓動。


    我們可以使用 chkconfig --list 列出所有的服務以及每個級別是否開啓:

wKioL1Xdf5mQzoz-AATQCQG86DM351.jpg

    這裏的級別(0,1,2,3,4,5,6)就是 /etc/inittab 裏面的那幾個啓動級別了。

    0、1、6運行級別被系統保留:

    其中0作爲shutdown動作,1作爲重啓至單用戶模式,6爲重啓;

    在一般的Linux系統實現中,都使用了2、3、4、5幾個級別;

    在CentOS系統中。

    2 表示無NFS支持的多用戶模式;

    3 表示完全多用戶模式(也是最常用的級別);

    4 保留給用戶自定義;

    5 表示圖形登錄方式。

    

    我們可以使用grep命令把我們想要看的服務過濾出來:

    命令:chkconfig --list | grep 服務名

wKioL1XdgsCim0S0AAEVqFoWBio734.jpg

    這樣我們只是看到了各服務在每個級別下是否開啓,那麼如何去更改哪個級別下是否開啓呢?

    命令:chkconfig --level n [服務名] [on/off]

wKioL1XdhAWgitpZAAHidj_1r4M983.jpg

    --level後還可以跟多個級別

    命令:chkconfig --level n1n2n3 [服務名] [on/off]

wKiom1XdgqTibW2LAAE5QWws9TI841.jpg

    另外還可以省略級別,默認是針對2,3,4,5級別操作:

    命令:chkconfig [服務名] [on/off]


    chkconfig 還有一個功能就是可以把某個服務加入到系統服務。

    即可以使用 service [服務名] [start] 這樣的形式。

    並且可以在 chkconfig --list 中查找到。當然也能刪除掉。

wKiom1Xdg9TRLbz4AAF63Zec_hY849.jpg


十二.linux系統日誌

    我常查看的日誌文件爲spacer.gifar/log/message

    它是核心系統日誌文件,包含了系統啓動時的引導消息,以及系統運行時的其他狀態消息。

    IO錯誤、網絡錯誤和其他系統錯誤都會記錄到這個文件中。

    其他信息,比如某個人的身份切換爲root以及用戶自定義安裝的軟件(apache)的日誌也會在這裏列出。

    通常,spacer.gifar/log/messages是在做故障診斷時首先要查看的文件。

    那您肯定會說了,這麼多日誌都記錄到這個文件中,那如果服務器上有很多服務豈不是這個文件很快就會寫的很大,沒錯,但是系統有一個日誌輪詢的機制。

    每星期切換一個日誌,變成message.xxxxxxxx, message.xxxxxxxx, ... messages.xxxxxxxx 連同messages一共有5個這樣的日誌文件。這裏的xxxxxxxx就是按照日期的格式生成的文件。

    在CentOS5裏,這個後綴並不是日期而是數字1,2,3,4. 這是通過logrotate工具的控制來實現的,它的配置文件是/etc/logrotate.conf如果沒有特殊需求請不要修改這個配置文件。

wKiom1Xeql6R6KUBAAIsNWbr_j4366.jpg

    spacer.gifar/log/messages是由syslogd這個守護進程產生的。

    如果停掉這個服務則系統不會產生spacer.gifar/log/messages,所以這個服務不要停。

    Syslogd服務的配置文件爲/etc/syslog.conf這個文件定義了日誌的級別。


    除了關注spacer.gifar/log/messages外,你還應該多關注一下 dmesg 這個命令。

    它可以顯示系統的啓動信息,如果你的某個硬件有問題(比如說網卡)用這個命令也是可以看到的。

    命令:dmesg | less

wKioL1Xerv6gc5E_AAih99fMHoY536.jpg    命令:last

wKiom1Xer5jylElxAAJwGMwl7Zs377.jpg

    last命令用來查看登錄Linux歷史信息,從左至右依次爲賬戶名稱、登錄終端、登錄客戶端ip、登錄日期及時長。

    last命令輸出的信息實際上是讀取了二進制日誌文件spacer.gifar/log/wtmp, 只是這個文件不能直接使用cat, vim, head, tail等工具查看。


    另外一個和登陸信息有關的日誌文件爲spacer.gifar/logspacer.gifcure, 該日誌文件記錄驗證和授權等方面的信息。

    比如ssh登陸系統成功或者失敗,都會把相關信息記錄在這個日誌裏。


    介紹下平時需要查看的日誌。

    /var/log/messages:系統裏面大部分日誌都是在spacer.gifar/log/messages裏面,查問題時,這個日誌是不能忽略的,比如內核相關的問題,當你的機器訪問量特別大時,這個日誌裏面就會記錄一些內核異常的錯誤。

    /var/log/wtmp:查看用戶的登陸歷史(用last)

    /var/log/btmp:查看登陸歷史中沒有正確登陸的IP(用lastb)

    /var/log/maillog:當然是記錄郵件相關的日誌,當你發郵件不成功不正常的時候就查看這個日誌。

    /var/log/secure:是安全相關的日誌,該日誌文件記錄驗證和授權等方面的信息,比如:可以判斷linux機器有沒有被暴力破解root密碼,或者ftp不能正常登陸時,就看這個日誌。

    /var/log/dmesg:這個是系統開機時,記錄的一些硬件信息,很少看這個日誌。


十三.xargs與exec

   1. xargs應用

    舉個例子來說吧。

    xargs常常和find命令一起使用,比如,查找當前目錄創建時間大於10天的文件,然後再刪除。

    命令:find . -type f -mtine +10 | xargs rm -f 


    我們舉另外一個例子。

    查找當前目錄下所有.txt的文件,然後把這些.txt的文件變成.txt_bak。

    正常情況下,我們不得不寫腳本去實現,但是使用xargs就一步。

    命令:find ./ -type f -name "*.txt" | xargs -i mv {} {}_bak


    2.exec應用

    使用find命令時,經常使用一個選項就是這個-exec了。

    可以達到和xargs同樣的效果。

    舉個例子,查找當前目錄創建時間大於10天的文件並刪除:

    命令:find . -type f -mtime +10 -exec rm -rf {} \;


    這個命令中也是把{}作爲前面find出來的文件的替代符,後面的 \; 的脫意符。

    不然shell會把分號作爲該行命令的結尾


十四.screen工具介紹

    有時候,我們也許會有這樣的需求,要執行一個命令或者腳本,但是需要幾個小時甚至幾天。

    這就要考慮一個問題,就是中途斷網或出現其他意外情況,執行的任務中斷了怎麼辦?

    您可以把命令或者腳本丟到後臺運行,不過也不保險。

   

    那麼使用screen可以幫我們做什麼呢?

    1.把一個要執行很久的任務放到screen裏可以隨時查看該任務的進度

    2.screen不限時間和地域,何時何地都可以查看

    3.可以把一些無法丟到後臺執行的任務放到screen中執行


    下面就介紹兩種方法來避免這樣的問題發生。


    1.使用nohup

wKioL1Xe3OqCu5fzAAEwk03TtYo153.jpg

    直接加一個 ‘&’ 雖然丟到後臺了,但是當退出該終端時很有可能這個腳本也會退出的。

    而在前面加上 nohup 就沒有問題了,nohup的作用就是不掛斷地運行命令。


    2.screen工具的使用

    screen是一個可以在多個進程之間多路複用一個物理終端的窗口管理器。

    screen中有會話的概念,用戶可以在一個screen會話中創建多個screen窗口。

    在每一個screen窗口中就像操作一個真實的SSH連接窗口那樣。

   

    第一次使用這個命令的時候肯定是沒有安裝的,那麼就要安裝它:

    命令:yum install -y screen

wKioL1Xe3fzRZd3rAAKMBUmxz4I823.jpg

    (1)打開一個會話,直接輸入screen命令然後回車,進入screen會話窗口。

    命令:screen

wKioL1Xe3mbSIH2bAADQmVFDITk145.jpg

    然後將要執行的命令放入其中執行,就不用擔心中途斷電的一些意外了

    (2)按ctrl+a和d,退出screen,但僅僅是退出,並不結束screen。若要退出screen,按ctrl+d或者輸入exit即可

    (3)screen -ls 查看已經打開的screen會話

    命令:screen -ls

wKiom1Xe3Y2BNeD9AAGP8-oRd6I862.jpg

    (4)退出後還想再次登錄某個screen會話,使用sreen -r [screen 編號]。

    這個編號就是上例中那個1802/1826/1789。當只有一個screen會話時,後面的編號是可以省略的。

    命令:screen -r [screen編號]

    (5)可以在創建screen的時候,自定義screen的名字

    命令:screen -S [自定義的名字]

wKiom1Xe3_uTZAygAAKj1SjHuHM793.jpg

 

十五.curl命令

    curl可以實現wget的功能

    命令:curl [網址]

wKiom1XfvE3wIiJjAB0VbtKExwI545.jpg

    我們看到這麼多的信息(源代碼),把這些信息複製到一個文本文檔裏,然後用瀏覽器去訪問它。

    其實它就是一個html的文檔。


    因爲這些源代碼很多,看上去很繁瑣,我們不想看到它,那麼:

    命令:curl -I [網址]

wKioL1XfwEazdpV9AAP16VQ0slc266.jpg

    上面這些信息,我們只需要查看它的狀態:HTTP,這裏我們要注意後面這個200.

    我們叫這個200,叫做狀態碼。

    常用的狀態碼有:200 301 302 403 404 502 503等。

    但是,這些狀態碼當中只有200是正常的OK的

    

    如果出現了301或者302,那麼可能因爲在服務端設置了跳轉。

    這麼說可能不明白,舉個例子說明下吧!

wKioL1XfwmKgaXDhAAF_QLJovjg472.jpg

    當訪問www.lishiming.com的時候就跳轉到了liuliang.121.com下


    除了-I,還有其他的命令。比如-x,那麼-x什麼意思呢?

    -x的意思是代理的意思,IE瀏覽器裏面有個IE選項,有個連接可以設置代理服務器。

    這個代理就是-x的意思了

    有時候因爲一些網絡原因我們不能訪問某個站點,比如google,但是我們可以藉助代理實現。

    -x就是指定代理服務器ip的。但我經常把它用作臨時改域名指向。

wKioL1XfxeDAK44RAAEe-qcFMuA936.jpg

    我們可以通過代理去上網

    命令:curl -x***.***.***.***:** [網址]


    命令:curl -Iv [網址]

    看看curl的訪問過程

wKioL1XfyI-xCuvIAAOe1Tn4bzs622.jpg    

    有時候我們要去訪問一個有用戶名和密碼的站點

    命令:curl -u [用戶名]:[密碼] [站點/網址]


    如果我們要去下載一個東西的話,類似於wget

    命令:curl -O [要下載的地址]

wKioL1XfzCbAQwAVAAGc-IHJGM0332.jpg

    如果想要把下載下的東西重命名的話

    命令:curl -o [重命名後的名字] [要下載的地址]

wKioL1XfzvixFKRVAAKAODVAD2c684.jpg

    命令:curl -A [標識] www.[標識].com

    -A就是自定義瀏覽器標識。

    不要把-x的代理,和-A的代理搞混淆。

    -x後面纔是我們所謂的代理。

    而-A是user_agent,即瀏覽器標識,比如IE的,chrome的都有自己的標識。


十六.linux下的數據備份工具rsync

    數據備份,毫無疑問很重要,丟失數據這是作爲系統管理員最不應該出現的事故。

    所以,在您以後的系統維護工作中,一定要把數據備份當回事,認真對待。

    在linux系統下數據備份的工具很多,個人認爲rsync比較不錯。

     從字面上的意思您可以理解爲remote sync (遠程同步)這樣可以讓您理解的更深刻一些。

    Rsync不僅可以遠程同步數據(類似於scp ),當然還可以本地同步數據(類似於cp)。

    但不同於cp或scp的一點是,rsync不像cp/scp一樣會覆蓋以前的數據(如果數據已經存在)。

    它會先判斷已經存在的數據和新數據有什麼不同,只有不同時纔會把不同的部分覆蓋掉。

    如果您的linux沒有rsync命令請使用 yum install -y rsync 安裝。

    命令:yum install -y rsync


    命令1:rsync -av 123.txt 192.168.0.101:/data/

                將本地的123.txt備份到192.168.0.101服務端的/data/目錄下

    命令2:rsync -av 192.168.0.101:/data/ 123.txt /tmp/

                將192.168.0.101服務端的/data/目錄下的123.txt文件備份本本地的/tmp/目錄下

    命令3:rsync -av 192.168.0.101::test/data/123.txt /data/    

                將192.168.0.101服務端的test的塊設備的/data/目錄下的123.txt備份到本地的/data/目錄下

    命令4:rsync -av /data/123.txt 192.168.0.101::test/data/

                將本地的/data/目錄下的123.txt備份到服務端192.168.0.101的test塊設備的/data/目錄下


    1. rsync的命令格式

    '-a'  歸檔模式,表示以遞歸方式傳輸文件,並保持所有屬性,等同於-rlptgoD, -a選項後面可以跟一個 --no-OPTION 這個表示關閉-rlptgoD中的某一個例如 -a--no-l 等同於-rptgoD

    '-r ' 對子目錄以遞歸模式處理,主要是針對目錄來說的,如果單獨傳一個文件不需要加-r,但是傳輸的是目錄必須加-r選項

    '-v'  打印一些信息出來,比如速率,文件數量等

    '-l'  保留軟鏈結

    '-L'  向對待常規文件一樣處理軟鏈結,如果是SRC中有軟連接文件,則加上該選項後將會把軟連接指向的目標文件拷貝到DST

    '-p' 保持文件權限

    '-o' 保持文件屬主信息

    '-g' 保持文件屬組信息

    '-D' 保持設備文件信息

    '-t' 保持文件時間信息

    '--delete' 刪除那些DST中SRC沒有的文件

    '--exclude=PATTERN' 指定排除不需要傳輸的文件,等號後面跟文件名,可以是萬用字符模式(如*.txt)

    '--progress' 在同步的過程中可以看到同步的過程狀態,比如統計要同步的文件數量、同步的文件傳輸速度等等

    '-u' 加上這個選項後將會把DST中比SRC還新的文件排除掉,不會覆蓋

    選項確實有點多,不過不用擔心。

    '-P' 在同步的過程中可以看到同步的過程狀態,比如統計要同步的文件數量、同步的文件傳輸速度等等

    '-z' 傳輸的時候要把文件壓縮一下,這樣可以節省帶寬。

    常用的選項頁僅僅那麼幾個: (-a -v --delete --exclude )。


    下面我們舉幾個例子來看下

    命令:rsync -a test1 test2

wKioL1XjuTHgqHeJAAMZQlW7PNo613.jpg

    建議在使用rsync備份目錄時要養成加斜槓的習慣,如果不加上/,容易出現這種情況:

    test1被備份到test2目錄下,而不是備份一個完全相同的test2。


    3.rsync的實例應用

    登陸遠程機器,使用rsync操作,備份數據

    命令1:rsync -avL [用戶名]@[IP]:[備份文件的絕對路徑] [需要備份到的目的的絕對路徑]

    命令2:rsync -avL [備份文件的絕對路徑] [用戶名]@[IP]:[需要備份到的目的的絕對路徑]

    但是以上兩種方式如果寫到腳本里,備份起來就有麻煩了,因爲要輸入密碼,腳本本來就是自動的,不可能做到的。

    但是不代表沒有解決辦法。那就是通過密鑰驗證,密鑰不設立密碼就ok了。


    3.1.通過ssh的方式

    假設兩個主機,主機1和主機2,我們要把主機1上的數據備份到主機2上。

    首先在主機1上。

    1.命令:ssh-keygen

wKiom1Xj9ebhvWMxAAJ_EU5Zunw141.jpg

    2.在這個過程中會有一些交互的過程,它首先提示要輸入這個密鑰的密碼,出於安全考慮應該定義個密碼,但是我們的目的就是爲了自動化同步數據,所以這裏不輸入任何密碼,直接按回車,即密碼爲空。最後則生成了私鑰(/root/.ssh/id_rsa)和公鑰文件(/root/.ssh/id_rsa.pub)。

    3.把公鑰文件的內容拷貝到目標機器主機2上上。

    4.命令:cat .ssh/id_rsa.pub

wKioL1Xj-UHyNI-sAAKM2oty_aw598.jpg

    5.複製主機上/root/.ssh/id_rsa.pub文件內容。

    6.並粘貼到主機的/home/www/.ssh/authorized_keys中:

    7.命令:vim /home/www/.ssh/authorized_keys。

    8.在執行第7步的時候也許您會遇到/home/www/.ssh目錄不存在的問題,可以手動創建,並修改目錄權限爲700也可以執行ssh-keygen命令生成這個目錄。

    保存/home/www/.ssh/authorized_keys文件後。

    9.再到主機1上執行命令:ssh www@主機2的IP

    10.現在不用輸入密碼也能登陸主機2了。

    11.從主機2中退出來,在主機1上執行:

    命令:rsync -av [主機1要備份數據的絕對路徑] [用戶名]@主機2IP:[主機2要備份的地方]


    有時候會遇到對方機器的port並不是22端口,因爲ssh走的是22端口。

    那麼我們就要指定其他端口:

    命令1:rsync -avLz -e "ssh -p 端口"  [備份文件的絕對路徑] [用戶名]@[IP]:[需要備份到的目的的絕對路徑]

    命令2:rsync "--rsh=ssh -p xxx” [備份文件的絕對路徑] [用戶名]@[IP]:[需要備份到的目的的絕對路徑]

    如果本機上沒有對方機器需要的端口,那麼sshd服務配置文件中可以更改 /etc/ssh/sshd_config ,把#Port 22 改爲 Port 端口。


    3.2通過後臺服務的方式

    這種方式可以理解成這樣,在遠程主機上建立一個rsync的服務器。

    在服務器上配置好rsync的各種應用,然後本機作爲rsync的一個客戶端去連接遠程的rsync服務器。

    下面就介紹一下,如何去配置一臺rsync服務器。


    1.建立並配置rsync的配置文件 /etc/rsync.conf ;

wKiom1XkHnWAqC3aAAF3DHYEbyg238.jpg

    那麼詳細的說下這些內容:

    'port' 指定在哪個端口啓動rsyncd服務,默認是873;

    'log file' 指定日誌文件;

    'pid file' 指定pid文件,這個文件的作用涉及到服務的啓動以及停止等進程管理操作;

    'address' 指定啓動rsyncd服務的IP,假如你的機器有多個IP,就可以指定其中一個啓動rsyncd服務,默認是在全部IP上啓動;

    '[模塊名]' 自定義;

    'path' 指定數據存放的路徑

    'use chroot' true/false 默認true,意思是在傳輸文件以前首先chroot到path參數所指定的目錄下。

    這樣做的原因是實現額外的安全防護,但是缺點是需要以roots權限。

    並且不能備份指向外部的符號連接所指向的目錄文件。

    默認情況下chroot值爲true,如果你的數據當中有軟連接文件的話建議設置成false。

    'max connections' 指定最大的連接數,默認是0即沒有限制

    'read only' ture|false 如果爲true則不能上傳到該模塊指定的路徑下

    'list' 指定當用戶查詢該服務器上的可用模塊時,該模塊是否被列出,設定爲true則列出,false則隱藏

    'uid/gid' 指定傳輸文件時,以哪個用戶/組的身份傳輸

    'auth users' 指定傳輸時要使用的用戶名

    'secrets file' 指定密碼文件,該參數連同上面的參數如果不指定則不使用密碼驗證,注意該密碼文件的權限一定要是600

    'hosts allow' 指定被允許連接該模塊的主機,可以是IP或者網段,如果是多個,之間用空格隔開

   

    2.編輯secrets file,保存後要賦予600權限,最好是400權限,如果權限不對,不能完成同步;

    命令:vim /etc/rs.passwd

    密碼格式:用戶名:密碼


    3.啓動rsyncd服務;

    配置完文件後就要啓動。

    命令:rsync --daeman

    

    4.啓動後,查看一下日誌,並查看端口是否啓動;

    命令:cat /var/log/rsync.log

    命令:netstat -lnp |grep 873

    如果想開機啓動,請把 rsync --daemon --confg=/etc/rsyncd.conf 寫入到/etc/rc.d/rc.local文件

    

    5.到另一臺機器上測試;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章