筆者在前面介紹的內容都爲linux系統基礎類的,若是你如今把前面的內容所有很好的掌握了,那最好了。不過筆者要說的是,即便你徹底掌握了,你如今仍是不能做爲一名合格的linux系統管理員的,畢竟系統管理員要會作的事情太多了。本章以及後面章節筆者會陸續教給你做爲linux系統管理員所必備的知識。只要你熟練掌握那絕對能夠勝任一個最初級的管理員職位,不過只是初級的,由於你還須要在平常的管理工做中得到成長。php
【監控系統的狀態】mysql
1. w 查看當前系統的負載linux
相信全部的linux管理員最經常使用的命令就是這個’w’ 了,該命令顯示的信息仍是蠻豐富的。第一行從左面開始顯示的信息依次爲:時間,系統運行時間,登陸用戶數,平均負載。第二行開始以及下面全部的行,告訴咱們的信息是,當前登陸的都有哪些用戶,以及他們是從哪裏登陸的等等。其實,在這些信息當中,筆者認爲咱們最應該關注的應該是第一行中的’load average:’後面的三個數值。web
第一個數值表示1分鐘內系統的平均負載值;第二個數值表示5分鐘內系統的平均負載值;第三個數值表示15分鐘系統的平均負載值。這個值的意義是,單位時間段內CPU活動進程數。固然這個值越大就說明你的服務器壓力越大。通常狀況下這個值只要不超過你服務器的cpu數量就沒有關係,若是你的服務器cpu數量爲8,那麼這個值若小於8,就說明你的服務器沒有壓力,不然就要關注一下了。到這裏你確定會問,如何查看服務器有幾個cpu?sql
就是用這個命令了。’/proc/cpuinfo’這個文件記錄了cpu的詳細信息。目前市面上的服務器一般都是2顆4核cpu,在linux看來,它就是8個cpu。查看這個文件時則會顯示8段相似的信息,而最後一段信息中processor : 後面跟的是’7’。因此查看當前系統有幾個cpu,你可使用這個命令:’ grep -c 'processor' /proc/cpuinfo’ 。shell
2. vmstat 監控系統的狀態數據庫
上面講的w查看的是系統總體上的負載,經過看那個數值能夠知道當前系統有沒有壓力,可是具體是哪裏(CPU, 內存,磁盤等)有壓力就沒法判斷了。經過vmstat就能夠知道具體是哪裏有壓力。vmstat命令打印的結果共分爲6部分:procs, memory, swap, io, system, cpu.請重點關注一下紅色標出的項。apache
1)procs 顯示進程相關信息vim
r :表示運行和等待cpu時間片的進程數,若是長期大於服務器cpu的個數,則說明cpu不夠用了;windows
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網卡沒有鏈接。
若是你的機器是虛擬機,那麼你使用該命令時應該顯示成以下:
這是由於使用的是虛擬網卡,不支持這個工具查看。不用多關注此,你記住這個mii-tool命令便可,它但是會常常用到的。
4. 更改主機名
當裝完系統後,默認主機名爲localhost,使用hostname就能夠知道你的linux的主機名是什麼。
一樣使用hostname能夠更改你的主機名。
下次登陸時就會把命令提示符中的’localhost’更改爲’Aming’。不過這樣修改只是保存在內存中,下次重啓還會變成未改以前的主機名,因此須要你還要去更改相關的配置文件’/etc/sysconfig/network’。
把HOSTNAME=localhost.localdomain 修改爲你想要的主機名,這樣再重啓就會讀取這個配置文件中的HOSTNAME.
5. 設置DNS
DNS是用來解析域名用的,平時咱們訪問網站都是直接輸入一個網址,而dns把這個網址解析到一個IP。關於dns的概念,若是你很陌生的話,那就去網上查一下吧。在linux下面設置dns很是簡單,只要把dns地址寫到一個配置文件中便可。這個配置文件就是/etc/resolv.conf
resolv.conf有它固有的格式,必定要寫成’nameserver IP’的格式,上面那行以’;’爲開頭的行是一行註釋,沒有實際意義,建議寫兩個或多個namserver ,默認會用第一個namserver去解析域名,當第一個解析不到時會使用第二個。在linux下面有一個特殊的文件/etc/hosts也能解析域名,不過是須要咱們手動在裏面添加IP+域名這些內容,它的做用是臨時解析某個域名,很是有用。
它的格式如上圖,每一行做爲一條記錄,分紅兩部分,第一部分是IP,第二部分是域名。關於hosts文件,有幾點須要你注意:
1)一個IP後面能夠跟多個域名,能夠是幾十個甚至上百個;
2)每行只能有一個IP,也就是說一個域名不能對應多個IP;
3)若是有多行中出現相同的域名(前面IP不同),會按最前面出現的記錄來解析。
【linux的防火牆】
1. selinux
Selinux是Redhat/CentOS系統特有的安全機制。不過由於這個東西限制太多,配置也特別繁瑣因此幾乎沒有人去真正應用它。因此裝完系統,咱們通常都要把selinux關閉,以避免引發沒必要要的麻煩。關閉selinux的方法爲:
把’SELINUX=enforcing’改爲’SELINUX=disabled’,而後重啓機器。臨時關閉selinux的命令爲
getenforce命令能夠獲得selinux的狀態,其中有兩種(Enforcing|Permissive),前者表示開放,後者表示關閉,可是會發出警告。setenforce用來設置selinux的狀態,後面跟0則設置成Permissive後面跟1設置成Enforcing。關閉selinux的命令爲setenforce 0,可是這只是臨時關閉,重啓後恢復,想要永久生效,請更改配置文件/etc/selinux/config。
2. iptables
Iptables是linux上特有的防火牆機制,其功能很是強大,然而筆者在平常的管理工做中僅僅用到了一兩個應用,這並不表明iptables不重要。做爲一個網絡管理員,iptables是必要要熟練掌握的。可是做爲系統管理員,咱們也應該會最基本的iptables操做,認識iptables的基本規則。
1)iptalbes的三個表
filter :這個表主要用於過濾包的,是系統預設的表,這個表也是筆者用的最多的。內建三個鏈INPUT、OUTPUT以及FORWARD。INPUT做用於進入本機的包;OUTPUT做用於本機送出的包;FORWARD做用於那些跟本機無關的包。
nat :主要用處是網絡地址轉換,也有三個鏈。PREROUTING 鏈的做用是在包剛剛到達防火牆時改變它的目的地址,若是須要的話。OUTPUT鏈改變本地產生的包的目的地址。POSTROUTING鏈在包就要離開防火牆以前改變其源地址。該表筆者用的很少,但有時候會用到。
mangle :這個表主要是用於給數據包打標記,而後根據標記去操做哪些包。這個表幾乎不怎麼用。除非你想成爲一個高級網絡工程師,不然你就沒有必要花費不少心思在它上面。
2)iptables 基本語法
A. 查看規則以及清除規則
如上圖,-t 後面跟表名,-nvL 即查看該表的規則,其中-n表示不針對IP反解析主機名;-L表示列出的意思;而-v表示列出的信息更加詳細。若是不加-t ,則打印filter表的相關信息。
這個和-t filter 打印的信息是同樣的。
關於清除規則的命令中,筆者用的最多就是
不加-t默認是針對表filter來操做的,-F 表示把全部規則所有刪除;-Z表示把包以及流量計數器置零(這個筆者認爲頗有用)。
B. 增長/刪除一條規則
這就是增長了一條規則,省略-t因此針對的是filter表。-A 表示增長一條規則,另外還有-I 表示插入一條規則,-D刪除一條規則;後面的INPUT即鏈名稱,還能夠是OUTPUT或者FORWORD;-s 後跟源地址;-p 協議(tcp, udp, icmp); --sport/--dport 後跟源端口/目標端口;-d 後跟目的IP(主要針對內網或者外網);-j 後跟動做(DROP即把包丟掉,REJECT即包拒絕;ACCEPT即容許包)。這樣講可能很亂,那筆者多舉幾個例子來幫你理解:
上例表示:插入一條規則,把來自10.0.2.36的全部數據包丟掉。
刪除剛剛插入的規則。注意要刪除一條規則時,必須和插入的規則一致,也就是說,兩條iptables命令,除了-I 和-D不同外,其餘地方都同樣。
上例表示把來自10.0.2.36 而且是tcp協議到本機的80端口的數據包丟掉。這裏要說的是,--dport/--sport 必需要和-p選項一塊兒使用,不然會出錯。
把發送到10.0.2.34的22端口的數據包丟掉。下面作一個小試驗:
一開始用本機ping 10.0.2.34是通的,而後使用iptables增長一條規則,使到10.0.2.34的icmp包丟掉,再ping 10.0.2.34則不通了。此時用’iptables –nvL’查看iptalbes規則。
會有一條這樣的記錄,看pkts那列顯示4個數據包,由於咱們ping 的時候給10.0.2.34發送了4個數據包,第二列表示這4個數據包一共有多大(336bytes)。此時使用’iptables -Z' 清零。
如今你明白’iptables -Z’的意義了吧。至於FORWORD鏈的應用筆者幾乎沒有用到過,因此再也不舉例。再總結一下各個選項的做用:
-A/-D :增長刪除一條規則;
-I :插入一條規則,其實跟-A的效果同樣;
-p :指定協議,能夠是tcp,udp或者icmp;
--dport :跟-p一塊兒使用,指定目標端口;
--sport :跟-p一塊兒使用,指定源端口;
-s :指定源IP(能夠是一個ip段);
-d :指定目的IP(能夠是一個ip段);
-j :後跟動做,其中ACCEPT表示容許包,DROP表示丟掉包,REJECT表示拒絕包;
-i :指定網卡(不經常使用,但有時候能用到);
上例中表示,把來自10.0.2.0/24這個網段的而且做用在eth0上的包放行。有時候你的服務器上iptables過多了,想刪除某一條規則時,又不容易掌握當時建立時的規則。其實有一種比較簡單的方法:
查看結果以下:
刪除某一個規則的方法是:
-D 後跟鏈名,而後是規則num,這個num就是查看iptables規則時第一列的值。
iptables還有一個選項常常用到,-P(大寫)選項,表示預設策略。用法以下:
-P後面跟鏈名,策略內容或者爲DROP或者爲ACCEPT,默認是ACCEPT。注意:若是你在鏈接遠程服務器,千萬不要隨便敲這個命令,由於一旦你敲完回車你就會斷掉。
看到上圖中紅框標出的部分了吧,如今全部進來的數據包所有DROP了。這個策略一旦設定後,只能使用iptables -P ACCEPT才能恢復成原始狀態,而不能使用-F參數。下面筆者針對一個小需求講述一下這個iptables規則如何設定。
需求:只針對filter表,預設策略INPUT鏈DROP,其餘兩個鏈ACCEPT,而後針對10.0.2.0/24開通22端口,對全部網段開放80端口,對全部網段開放21端口。
這個需求不算複雜,可是由於有多條規則,因此最好寫成腳本的形式。
完成腳本的編寫後,直接運行 ‘sh /usr/local/sbin/iptables.sh ’ 便可。若是想開機啓動時初始化防火牆規則,則須要在/etc/rc.d/rc.local 中添加一行 ‘sh /usr/local/sbin/iptables.sh’ 。
關於icmp的包有一個比較常見的應用。
--icmp-type 這個選項是要跟-p icmp 一塊兒使用的,後面指定類型編號。這個8指的是能在本機ping通其餘機器,而其餘機器不能ping通本機。這個有必要記一下。
C. nat表的應用
其實,linux的iptables功能是十分強大的,筆者曾經的一個老師這樣形容linux的網絡功能:只有想不到沒有作不到!也就是說只要你可以想到的關於網絡的應用,linux都能幫你實現。在平常生活中相信你接觸過路由器吧,它的功能就是分享上網。原本一根網線過來(其實只有一個公網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互通)?
其實就是這樣簡單的兩個命令就能實現上面的需求。第一個命令涉及到了內核參數相關的配置文件,它的目的是爲了打開路由轉發功能,不然沒法實現咱們的應用。第二個命令則是iptables對nat表作了一個IP轉發的操做,-o 選項後跟設備名,表示出口的網卡,MASQUERADE表示假裝的意思。
關於nat表,筆者不想講太多內容,你只要學會這個路由轉發便可。其餘的東西交給網絡工程師去學習吧,畢竟你未來但是要作linux系統工程師的。
D. 保存以及備份iptalbes規則
也許你不知道,我們設定的防火牆規則只是保存在內存中,並無保存到某一個文件中,也就說當系統重啓後之前設定的規則就沒有了,因此設定好規則後要先保存一下。
它會提示你把規則保存在了/etc/sysconfig/iptables文件內。其實,這個文件就是iptables的配置文件了,你不妨查看一下它。
紅線部分就是我們剛纔設定那條規則!有時可能由於咱們設置防火牆規則有誤致使服務器出問題,這時候不妨先備份一下這個配置文件,而後中止防火牆服務。
這樣防火牆就失效了,可是一旦你從新設定規則後(哪怕只有一條),防火牆又開始工做了。
我還可使用iptables-save >filename 這條命令來保存一個防火牆規則,這樣就能夠起到備份的做用了。要想恢復這個規則使用下面這個命令便可。
【linux系統的任務計劃】
這部份內容過重要了,其實大部分系統管理工做都是經過按期自動執行某一個腳原本完成的,那麼如何按期執行某一個腳本呢?這就要藉助linux的cron功能了。
關於cron任務計劃功能的操做都是經過crontab這個命令來完成的。其中經常使用的選項有:
-u :指定某個用戶,不加-u選項則爲當前用戶;
-e :制定計劃任務;
-l :列出計劃任務;
-r :刪除計劃任務。
使用crontab -e 來制定計劃任務,上面的例子表示在05月26日(這天必須是週四)的10點01分執行’ echo "ok" >/root/cron.log’這樣的任務。
Cron的格式是這樣的,每一行表明一個任務計劃,總共分紅兩部分,前面部分爲時間,後面部分要執行的命令。後面的命令不用多講,至於前面的時間是有講究的,這個時間共分爲5段,用空格隔開(能夠是多個空格),第一段表示分鐘(0-59),第二段表示小時(0-23),第三段表示日(1-31),第四段表示月(1-12),第五段表示周(0-7,0或者7均可以表示爲週日)。從左至右依次是:分,時,日,月,周(必定要牢記)!
crontab -e 其實是打開了/var/spool/cron/username (若是是root則打開的是/var/spool/cron/root)這個文件。使用的是vim編輯器,因此要保存的話則在命令模式下輸入:wq便可。可是,你千萬不要直接去編輯那個文件,由於可能會出錯,因此必定要使用crontab -e來編輯。查看已經設定的任務計劃使用crontab -l
刪除計劃任務要用crontab -r
下面筆者給你出一些練習題,幫助你熟悉這個cron的應用。
1. 天天凌晨1點20分清除/var/log/slow.log這個文件;
2. 每週日3點執行’/bin/sh /usr/local/sbin/backup.sh’;
3. 每個月14號4點10分執行’/bin/sh /usr/local/sbin/backup_month.sh’;
4. 每隔8小時執行’ntpdate time.windows.com’;
5. 天天的1點,12點,18點執行’/bin/sh /usr/local/sbin/test.sh’;
6. 天天的9點到18點執行’/bin/sh /usr/local/sbin/test2.sh’;
答案:
1. 20 1 * * * echo 「」>/var/log/slow.log
2. 0 30 * * 0 /bin/sh /usr/local/sbin/backup.sh
3. 10 04 14 * * /bin/sh /usr/local/sbin/backup_month.sh
4. 0 */8 * * * ntpdate time.windows.com
5. 0 1,12,18 * * /bin/sh /usr/local/sbin/test.sh
6. 0 9-18 * * * /bin/sh /usr/local/sbin/test2.sh
Cron的這部份內容並不難,你只要會了這6道練習題,你就算掌握它了。這裏要簡單說一下,每隔8小時,就是用所有小時(0-23)去除以8,你仔細想一下結果,其實算出來應該是0,8,16三個數。當遇到多個數(分鐘、小時、月、周)例如第5題,則須要用逗號隔開。而時間段是能夠用’-‘的方式表示的。等設置好了全部的計劃任務後須要查看一下crond服務是否啓動,若是沒有啓動,須要啓動它。
如何啓動稍後會作介紹。除了用戶自定義的計劃任務外,其實系統自己也有計劃任務的。
系統會安裝這個配置文件中的計劃去執行內定的任務。
【linux的系統服務管理】
若是你對windows很是熟悉的話,相信你確定配置過開機啓動的服務,有些服務咱們平常用不到則要把它停掉,一來能夠節省資源,二來能夠減小安全隱患。在linux上一樣也有相關的工具來管理系統的服務。
1. ntsysv
用來配置哪些服務開啓或者關閉,有點想圖形界面,不過是使用鍵盤來控制的。若是沒有這個命令請使用 yum install -y ntsysv 安裝它。
敲完這個命令後則顯示出如上圖中的畫面。在屏幕的最上面有’Red Hat’等字樣,這是在告訴咱們這個工具是由Red Hat公司開發的。按鍵盤的上下方向鍵能夠調節紅色光標,按空格能夠選擇開啓或者不開啓,若是前面的中括號內顯示有’*’ 則表示開啓不然不開啓。經過這個工具也能夠看到目前系統中全部的服務。建議除’crond, iptables, network, sshd, syslog, irqbalance, sendmail, microcode_ctl’ 外其餘服務所有停掉。選擇好後,按’tab’鍵選擇ok而後回車。須要重啓機器才能生效。
2. chkconfig
Linux系統全部的預設服務能夠查看/etc/init.d/目錄獲得
其實這就是系統全部的預設服務了。爲何這樣講,由於系統預設服務都是能夠經過這樣的命令實現 ‘service 服務名 start|stop|restart’ ,這裏的服務名就是/etc/init.d/目錄下的這些文件了。除了可使用’service crond start ‘啓動crond外,還可使用/etc/init.d/crond start 來啓動。
如上圖,這兩個命令出來的結果是同樣的。
再看看這個chkconfig命令,它不只能夠列出來全部的服務,還能夠詳細到每一個級別。這裏的級別(0,1,2,3,4,5,6)就是inittab裏面介紹的那幾個啓動級別了。
這樣還能夠查看某一個服務的啓動狀況。
用--level 指定級別,後面是服務名,而後是off或者on,--level後還能夠跟多個級別。
另外還能夠省略級別,默認是針對2,3,4,5級別操做。
另外這個chkconfig 還有一個功能就是能夠把某個服務加入到系統服務,便可以使用service 服務名 start 這樣的形式,而且能夠在chkconfig --list 中查找到。固然也能刪除掉。
這個功能經常使用在把自定義的啓動腳本加入到系統服務當中。關於系統服務就講這些內容,其實還有不少內容筆者沒有介紹,道理很簡單,一來說多了你不能消化二來說多了你也用不上。
【linux中的數據備份】
數據備份,不用說太多吧,毫無疑問很重要。筆者就曾經有過一次很是痛苦的經歷,備份策略沒有作好,結果磁盤壞掉數據丟失,簡直是撕心裂肺的痛呀。還好數據重要性不是特別高,即便是不高也是丟失了數據,這是做爲系統管理員最不該該出現的事故。因此,在你之後的系統維護工做中,必定要把數據備份當回事,認真對待。在linux上做爲數據備份的工具不少,但筆者就只用一種那就是rsync 從字面上的意思你能夠理解爲remote sync (遠程同步)這樣可讓你理解的更深入一些。Rsync不只能夠遠程同步數據(相似於scp),固然還能夠本地同步數據(相似於cp),但不一樣於cp或scp的一點是,rsync不像cp/scp同樣會覆蓋之前的數據(若是數據已經存在),它會先判斷已經存在的數據和新數據有什麼不一樣,只有不一樣時纔會把不一樣的部分覆蓋掉。若是你的linux上下面看例子吧。(若是沒有rsync命令請使用yum install -y rsync安裝)
上面例子表示把當前目錄下的123同步到/tmp/目錄下,而且一樣也命名爲123。若是是遠程拷貝的話就是這樣的形式了 IP:path (如:10.0.2.34:/root/)
當創建鏈接後,是須要輸入密碼的。若是手動去執行這些操做還好,可是若是是寫在腳本中怎麼辦?這就涉及到添加信任關係了,該部份內容稍後會詳細介紹。
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
筆者在一開始舉的兩個例子,第一個例子即爲第一種格式,第二個例子即爲第二種格式,但不一樣的是,筆者並無加user@host 若是不加默認指的是root 。第三種格式是從遠程目錄同步數據到本地。第四種以及第五種格式使用了兩個冒號,這種方式和前面的方式的不一樣在於驗證方式不一樣,稍後詳細介紹。
2. 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)
-u :加上這個選項後將會把DST中比SRC還新的文件排除掉,不會覆蓋
下面筆者將會針對這些選項作一些列小實驗:
1) 創建目錄以及文件
筆者創建這些文件的目的就是爲作試驗作一些準備工做。
2)使用-a選項
這裏有一個問題,就是原本想把test1目錄直接拷貝成test2目錄,可結果rsync卻新建了test2目錄而後把test1放到test2當中。爲了不這樣的狀況發生,能夠這樣作:
加一個斜槓就行了,因此筆者建議你在使用rsync備份目錄時要養成加斜槓的習慣。在上面講了-a選項等同於- rlptgoD,並且-a還能夠和--no-OPTION一併使用。
筆者加上-v選項來得到更多的信息,上例中由於沒有使用-r選項致使只能拷貝目錄但不能拷貝目錄下面的內容(英文翻譯過來就是「忽略了目錄test1/.」,其中test1/.指的就是test1目錄內部的全部文件),因此雖然建立了test2目錄,可是test2目錄爲空。下面再看看那個-l選項的做用。
使用-v選項看來就是方便呀,上例告訴咱們跳過了非普通文件1.sh,其實1.sh是一個軟鏈接文件,若是不使用-l選項則不會理會軟鏈接文件的。
果然test2目錄當中沒有那個1.sh的影子。固然加上-l選項則會把軟鏈接文件給拷貝過去,可是軟鏈接的目標文件卻沒有拷貝過去,有時候我們指向拷貝軟鏈接文件所指向的目標文件,那這時候該怎麼辦呢?
3)使用-L選項
一個-L就能夠把SRC中軟鏈接的目標文件給拷貝到DST
4) 使用-u選項
首先查看一下test1/1 和 test2/1的訪問時間(確定是同樣的),而後使用touch修改一下test2/1的訪問時間(此時test2/1要比test1/1的訪問時間晚了一些),若是不加-u選項的話,會把test2/1的訪問時間變成和test1/1的訪問時間同樣。這樣講也許你會迷糊,不妨看一看。
看到了吧,原本test2/1的訪問時間已經不一樣於test1/1的訪問時間了,可是同步後訪問時間又一致了。
如今你明白-u選項的妙用了吧。
5)使用--delete選項
若是不使用--delete選項當SRC有文件刪除時,DST是不會刪除的,只有加上--delete選項後才能刪除掉。還有一種狀況就是若是在DST增長文件了,而SRC當中沒有這些文件,同步時加上--delete選項後一樣會刪除新增的文件。
6)使用--exclude 選項
另外還可使用萬用字符*匹配
最後簡單總結一下,平時你使用rsync同步數據的時候,使用-a選項基本上就能夠達到咱們想要的效果了,只是有時候會有個別的需求,會用到-a --no-OPTION, -u, -L, --delete, --exclude這些選項,可是筆者要求你把上面這些所有掌握,畢竟這才幾個而已,大部分選項筆者都沒有介紹。若是在之後的工做中遇到特殊需求了,就去查一下rsync的man文檔吧。
3. rsync 應用實例
1)經過ssh的方式
最上面介紹的5種方式當中,第2、第三(1個冒號)就屬於經過ssh的方式,這種方式其實就是讓用戶去登陸到遠程機器,而後執行rsync的任務。
這種方式就是前面介紹的第二種方式了,是經過ssh拷貝的數據,是要輸入10.0.2.69那臺機器root的密碼的。
這個則爲第三種方式。這兩種方式若是寫到腳本里,備份起來就有麻煩了,由於要輸入密碼,腳本原本就是自動的,不可能作到的。可是不表明沒有解決辦法。那就是經過密鑰驗證,密鑰不設立密碼就ok了。還記得在前面筆者曾經介紹過經過密鑰登陸遠程主機嗎,下面要講的內容就是那些東西了。
先提早說一下基本的主機信息: 10.0.2.68 (主機名Aming-1)和10.0.2.69(主機名Aming)須要從Aming-1上拷貝數據到Aming上。
A. 首先確認一下Aming-1上是否有這個文件 /root/.ssh/id_rsa.pub
若是沒有安裝如下的方法生成:
在這個過程當中會有一些交互的過程,由於筆者的/root/.ssh/id_rsa已經存在,因此會問是否覆蓋,筆者選擇覆蓋,而後會提示要輸入這個密鑰的密碼,出於安全考慮應該定義個密碼,可是咱們的目的就是爲了自動化同步數據,因此這裏不輸入任何密碼,直接按回車,即密碼爲空。最後則生成了私鑰(/root/.ssh/id_rsa)和公鑰文件(/root/.ssh/id_rsa.pub)
B. 把公鑰文件的內容拷貝到目標機器上
複製主機Aming-1的/root/.ssh/id_rsa.pub文件內容,並粘貼到主機Aming的/root/.ssh/authorized_keys中
在這一步也許你會遇到/root/.ssh目錄不存在的問題,能夠手動建立,並修改目錄權限爲700也能夠執行ssh-keygen命令生成這個目錄。保存/root/.ssh/authorized_keys文件後,再到主機Aming-1上執行
你會發現,如今不用輸入密碼也能夠登陸主機Aming了。下面再從主機Aming-1上執行一下rsync命令試試吧。
2)經過後臺服務的方式
這種方式能夠理解成這樣,在遠程主機上創建一個rsync的服務器,在服務器上配置好rsync的各類應用,而後本機做爲rsync的一個客戶端去鏈接遠程的rsync服務器。下面筆者就介紹一下,如何去配置一臺rsync服務器。
A. 創建並配置rsync的配置文件 /etc/rsyncd.conf
其中配置文件分爲兩部分所有配置部分和模塊配置部分,全局部分就是幾個參數而已,就像筆者的rsyncd.conf中port, log file, pid file, address這些都屬於全局配置,而[test] 如下部分就是模塊配置部分了。一個配置文件中能夠有多個模塊,模塊名自定義,格式就像筆者的rsyncd.conf中的這樣。其實模塊中的一些參數例如use chroot, max connections, udi, gid, auth users, secrets file以及hosts allow均可以配置成全局的參數。固然筆者給出的參數並非全部的,你能夠經過man rsyncd.conf 得到更多信息。
下面就簡單解釋一下這些參數的意義:
port :指定在哪一個端口啓動rsyncd服務,默認是873
log file :指定日誌文件
pid file :指定pid文件,這個文件的做用涉及到服務的啓動以及中止等進程管理操做
address :指定啓動rsyncd服務的IP,假如你的機器有多個IP,就能夠指定其中一個啓動rsyncd服務,默認是在所有IP上啓動
[test] :指定模塊名,自定義
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 :指定密碼文件,該參數連同上面的參數若是不指定則不使用密碼驗證
hosts allow :指定被容許鏈接該模塊的主機,能夠是IP或者網段,若是是多個,之間用空格隔開
B. 編輯secrets file,保存後要賦予600權限
C. 啓動rsyncd服務
啓動後查看日誌,看看是否有錯誤信息,而後再看下端口是否啓動。
若是想開機啓動,請把」rsync –daemon –confg=/etc/rsyncd.conf」 寫入到/etc/rc.d/rc.local文件。
D. 到另外一臺機器上測試
記得那個use chroot參數嗎,若是設置爲true,則/root/test4/1.sh不會被拷貝過來。
修改rsyncd.conf文件,把use chroot改爲true,不用重啓服務便可生效。
從上例中的詳細信息中也能夠看到,不能拷貝軟鏈接的。因此請記住,若是涉及到軟鏈接,請設置use chroot=false 。另外這種方式也是能夠不用手動輸入密碼的,兩種實現方式。
第一種:指定密碼文件
先編輯一個密碼文件,並修改600權限。
在同步時,指定密碼文件便可(--password-file=/etc/rsyncd.passwd)
第二種:在rsync服務器端不指定用戶
把相關的參數都用’#’註釋掉。而後再到客戶端上測試。
注意,這裏不用再加test@這個用戶了,默認是以root的身份拷貝的,如今已經不須要輸入密碼了。
【linux系統日誌】
日誌重要嗎?必須的,沒有日誌你怎麼知道你的系統情況?沒有日誌你如何排查一個trouble?日誌記錄了系統天天發生的各類各樣的事情,你能夠經過他來檢查錯誤發生的緣由,或者受到攻擊時攻擊者留下的痕跡。日誌主要的功能有:審計和監測。他還能夠實時的監測系統狀態,監測和追蹤侵入者等等。
筆者常查看的日誌文件爲/var/log/message. 它是核心系統日誌文件,包含了系統啓動時的引導消息,以及系統運行時的其餘狀態消息。IO 錯誤、網絡錯誤和其餘系統錯誤都會記錄到這個文件中。另外其餘信息,好比某我的的身份切換爲 root以及用戶自定義安裝的軟件(apache)的日誌也會在這裏列出。一般,/var/log/messages 是在作故障診斷時首先要查看的文件。那你確定會說了,這麼多日誌都記錄到這個文件中,那若是服務器上有不少服務豈不是這個文件很快就會寫的很大,沒有錯,可是系統有一個日誌輪詢的機制,每星期切換一個日誌,變成message.1, message.2,…messages.4 連同message一共有5個這樣的日誌文件。這是經過logrotate工具的控制來實現的,它的配置文件是/etc/logrotate.conf. 若是沒有特殊需求請不要修改這個配置文件。
/var/log/message是由syslogd這個守護進程產生的,若是停掉這個服務則系統不會產生/var/log/message,因此這個服務不要停。Syslogd服務的配置文件爲/etc/syslog.conf這個文件定義了日誌的級別,具體詳細的東西筆者再也不闡述,由於若沒有特殊需求是不須要修改這個配置文件的,請使用」man syslog.conf」 得到更多關於它的信息。
除了關注/var/log/message外,你還應該多關注一下’dmesg’這個命令,它能夠顯示系統的啓動信息,若是你的某個硬件有問題(好比說網卡)用這個命令也是能夠看到的。
這一小節就介紹這麼多,在結束以前,筆者給你一個小小的建議。之後在你平常的管理工總中要養成多看日誌的習慣,尤爲是一些應用軟件的日誌,好比apache, mysql, php等經常使用的軟件,看它們的日誌(錯誤日誌)能夠幫助你排查問題以及監控它們的運行情況是否良好。
【xargs與-exec】
1. xargs
在前面的例子中筆者曾經使用過這個命令,你是否有印象呢?如今就詳細介紹一下它,平時筆者使用xargs仍是比較多的,很方便。
查看xargs的man文檔,解釋是這樣的:build and execute command lines from standard input. 至於翻譯成中文理解着有點困難。不妨筆者舉個例子說明它的做用。
它的做用就是把管道符前面的輸出做爲xargs 後面的命令的輸入。它的好處在於能夠把原本兩步或者多步才能完成的任務簡單一步就能完成。xargs經常和find命令一塊兒使用,好比,查找當前目錄建立時間大於10天的文件,而後再刪除。
這種應用是最爲常見的,xargs後面的rm 也能夠更選項,當是目錄時,就須要-r選項了。在筆者看來xargs的這個功能不叫什麼,它的另外一個功能才叫神奇。如今我有一個這樣的需求,查找當前目錄下全部.txt的文件,而後把這些.txt的文件變成.txt_bak 。正常狀況下,咱們不得不寫腳本去實現,可是使用xargs就一步。
xargs -n1 –i{} 相似for循環,-n1意思是一個一個對象的去處理,-i{} 把前面的對象使用{}取代,mv {} {}_bak 至關於 mv 1.txt 1.txt_bak。你剛開始接觸這個命令時也許有點難以理解,多練習一下你就會熟悉了,筆者建議你記住這個應用,很實用。
2. -exec
使用find命令時,常用一個選項就是這個-exec了,能夠達到和xargs一樣的效果。好比,查找當前目錄建立時間大於10天的文件並刪除。
這個命令中也是把{}做爲前面find出來的文件的替代符,後面的」\」爲」;」的脫意符,否則shell會把分號做爲該行命令的結尾。這個-exec有時候也挺實用的。
用-exec一樣能夠實現前面那個複雜的需求。
【screen工具介紹】
有時候,也許你會有這樣的需求,須要執行一個命令或者腳本,可是須要幾個小時甚至幾天。這就要考慮一個問題,就是中途斷網或出現其餘意外狀況,執行的任務中斷了怎麼辦?你能夠把命令或者腳本丟到後臺運行,不過也不保險。筆者下面就介紹兩種方法來避免這樣的問題發生。
1. 使用nohup
直接加一個’&’雖然丟到後臺了,可是當退出該終端時頗有可能這個腳本也會退出的,而在前面加上’nohup’就沒有問題了。nohup的做用就是不掛斷地運行命令。
2. screen工具的使用
簡單來講,screen是一個能夠在多個進程之間多路複用一個物理終端的窗口管理器。screen中有會話的概念,用戶能夠在一個screen會話中建立多個screen窗口,在每個screen窗口中就像操做一個真實的SSH鏈接窗口那樣。下面筆者介紹screen的一個簡單應用。
1) 打開一個會話,直接輸入screen命令而後回車,進入screen會話窗口。若是你沒有screen命令,請用’yum install -y screen’安裝。
2)screen -ls 查看已經打開的screen會話
3)Ctrl +a 再按d退出該screen會話,只是退出,並無結束。結束的話輸入Ctrl +d 或者輸入exit
4)退出後還想再次登陸某個screen會話,使用screen -r [screen 編號],這個編號就是上圖中那個2082. 當只有一個screen會話時,後面的編號是能夠省略的。
當你有某個須要長時間運行的命令或者腳本時就打開一個screen會話,而後運行該任務。按ctrl +a 再按d退出會話,不影響終端窗口上的任何操做。
【linux下同步時間服務器】
時間的準確性在服務器上很是重 要,因此要與標準時間保持同步,畢竟服務器的時鐘並不必定精準,因此須要咱們每隔一段時間去同步一下時間。筆者所管理的服務器每隔6小時就會同步一下時 間。如何同步呢?這就要用到ntpdate 這個指令。若是你的服務器上沒有這個指令,請使用'yum install -y ntpdate'安裝,或者下載源碼包安裝。同步時間的命令爲:'ntpdate timeserver' 這裏的timeserver爲時間服務器的IP或者hostname,經常使用的timeserver有210.72.145.44, time.windows.com(windows的時間服務器)。若是你想每隔6小時同步一次那麼請指定一個計劃任務。00 */6 * * * /usr/sbin/ntpdate 210.72.145.44 >/dev/null之因此在後面加一個重定向,是由於這個同步的過程是有內容輸出的,由於咱們的計劃任務是在後臺執行的,輸出的內容會以郵件的形式發送給用戶,因此爲了不郵件太多請輸出到/dev/null (在linux下這個設備是虛擬的存在,你能夠理解爲空洞)