linux發展史+安裝+注意事項php
Unix的發展html
1965年,美國麻省理工學院(MIT)、 通用電氣公司(GE)及AT&T的貝爾實驗室聯合 開發Multics工程計劃,其目標是開發一種交互式的具備多道程序處理能爲的分時操做系統,但因 Multics追求的目標過於龐大複雜,項目進度遠遠 落後於計劃,最後貝爾實驗室宣佈退出。node
1969年,美國貝爾實驗室的肯•湯普森 在DEC PDP-7機器上開發出了UNIX系統。mysql
a) AIX系統:由IBM公司在Unix的內核上開發出來的系統linux
b) HP-UX:由HP戴爾公司在Unix的內核上開發出來的系統ios
c) Solaris(蛇牢瑞死):由SUN微軟公司在Unix的內核上開發出來的系統c++
Linux的版本分類web
a) Redhat 6.x 2.6.x (瑞的漢的)正則表達式
b) Redhat7.x 3.10.x算法
a) Redhat系列
b) Debian系列
Linux:主要發行版本
c) Redhat (瑞的漢的)系列
d) Debian (爹餅)系列
常見開源軟件:
e) Apache:web服務器
f) Nginx(Ng克死):web服務器
g) Mysql:數據庫
h) PHP:腳本語言
i) Samba(傷八):Linux跟Windows之間的內網文件服務器
j) Python:腳本語言
k) Ruby(如比):腳本語言(日本開發)
l) Sphinx(斯分克絲):中文分詞
m) MongoDB(NO誰庫):NOSQL數據庫
n) Redis(瑞地死):Linux中的輔助數據庫
注意:Redis是用來輔助Mysql數據庫的,用來優化SQL性能
GPT:開源軟件規範(擁有法律效率)
查看服務器排名網址:www.netcraft.com
Windows格式化續
Linux系統文件格式
p) EXT2
q) EXT3
r) EXT4
s) XFS
Linux分區表類別
a) MBR分區表:主引導記錄分區表,最大隻支持2.1T硬盤,最多支持4個分區。
b) GPT分區表:全局惟一標示分區表,支持9.4ZB硬盤,(1ZB=1024PB,1PB=1024EB,1EB=1024TB)理論上GPT支持無限制分區。
a) 主分區:最多隻能有4個
b) 擴展分區:最多隻能有1個,主分區加擴展分區最多有4個,不能寫入數據,只能包含邏輯分區
c) 邏輯分區:在擴展分區能多支持多個邏輯分區,至少10個以上,能夠寫入數據。
注意:Linux跟windows的二個分區表一樣的
Linux分區步驟
t) 分區
u) 格式化
v) 設備文件名:給分區寫入設備文件名,有了設備文件名才能夠給掛載點
w) 掛載點:使用已經創建的空目錄做爲掛載點(任何目錄均可以,除了/bin/ /etc/ /lib/)
注意:Linux下一切皆爲文件
swap(死我撲)
分區設備名
x) 設備文件名:
注意:/是Linux的根目錄,叫根,是Linux的最高一級目錄
Linux是樹型結構,根目錄下放一級目錄,一級目錄下放二級目錄等。
Windows也是樹型結構,不過他是先分 我的電腦—磁盤—目錄等。
dex是專門用來放硬件設備的目錄,因此裏面放的內容大可能是硬件特殊設備的
hda1跟sda1,中的a字母是表明你當前是第幾塊硬盤,要是2塊硬盤a字母就會變成b字母
hda1跟sda1,中的1數字是表明你當前是第幾個分區,要是第二分區1數字就會變成2數字
1-4數據的標誌必定是給主分區跟擴展分區的,不管邏輯分區怎麼分,都會從5數字開始
Linux分區
y) 必須分區:不分不能裝系統
z) 推薦分區
注意:若是有單獨的分區,他會有單獨的存儲空間,能夠往裏面寫入數據,是不會寫在根目錄裏的,是寫在本身的空間裏的。也就是說從系統上來看,他們是從屬關係,根是最高目錄。若是從硬盤來看,要單獨分區,他就會有單獨的存儲空間。因此才叫單獨分區
Linux安裝
Desktop 圖形界面
Minimal Desktop (祕你樓) 圖形界面
Minimal 最小化安裝
Basic server(貝思客) 基本服務
Database server(達特備四) 集成MySQL數據庫
Web server 集成Apache web服務
Virtual host (個人有豪斯特) 集成虛擬化主機
Software deveiopment workstation集成軟件開發環境
centOS的版本分類
aa) Desktop:圖形界面
ab) Minimal Desktop:圖形界面
ac) Minimal(咪呢NO):最小化安裝
ad) Basic server(A誰庫誰我):基本服務
ae) Database server(爹可唄死誰我)數據中心服務,會裝Mysql
af) Web server:裏面會裝Apache
ag) Virtual Host(我濤好死)濤說本地話:裝虛擬機主鍵
ah) Software Developmaent Workstation:裝開發環境
遠程登陸管理工具
Linux IP地址配置
一點注意事項
Linux中硬盤和光盤
Linux不靠擴展名區分文件類型
注意:建議要是有以上的文件在,必定要加擴展名,由於Linux系統不止你一我的在維護,這個也會好分類,容易分得清楚
Linux的存儲設備掛載
a) Windows下的存儲設備全自動分配盤符,可是全都要手動彈出設備 (盤符=掛載點)
b) Linux中只有硬盤是自動掛載的,其它的存儲設備全須要手動掛載,可是全都要手動彈出設備。
注意:在Linux系統中能夠設置自動掛載存儲設備,可是一旦設置了自動掛載,要是開機的話,系統沒有檢測到存儲設備,那系統會調動全都的運算能力來分析爲什麼沒有,於是死機
服務器注意事項
CentOS 6.* 安裝流程 & 遠程登陸 請看附件
*************************************
linux經常使用命令
Linux 文件的命名規則
Linux命令的格式(ls)
a) 選項:是用於調整命令的功能的,不加權限只能執行,加了權限就能夠執行更復雜的功能
b) 參數:是命令的操做對象,省略參數的緣由是默認參數
c) 當有多個選項時,能夠寫在一塊兒
d) 兩個特殊的目錄 . 和 .. ,分別表明當前目錄和當前目錄的父目錄
e) 個別命令不遵循此格式
ls (選項)(參數)
默認別名:(ll:顯示目錄下全部文件的配套信息)
經常使用:
ls :顯示目錄文件 路徑:/bin/ls/ 權限:全部用戶。
ls –a /目錄/ :顯示全部文件
ls –color=nerern /目錄/ :不顯示顏色顯示目錄下內容
ls –lh :顯示文件大小單位
ls –l :顯示目錄下全部文件的配套信息
能夠用(ll命令)做用同樣
ls –ld :只顯示當前輸入的目錄信息,不顯示該目錄下的子目錄
ls –i :顯示文件的inode號i節點
man ls :查看ls下的短選項跟長選項
選項:
-a :顯示全部檔案及目錄(ls內定將檔案名或目錄名稱爲「.」的視爲影藏,不會列出);
-A:顯示除影藏文件「.」和「..」之外的全部文件列表;
-C:多列顯示輸出結果。這是默認選項;
-l:與「-C」選項功能相反,全部輸出信息用單列格式輸出,不輸出爲多列;
-F:在每一個輸出項後追加文件的類型標識符,具體含義:「*」表示具備可執行權限的普通文件,「/」表示目錄,「@」表示符號連接,「|」表示命令管道FIFO,「=」表示sockets套接字。當文件爲普通文件時,不輸出任何標識符;
-b:將文件中的不可輸出的字符以反斜線「」加字符編碼的方式輸出;
-c:與「-lt」選項連用時,按照文件狀態時間排序輸出目錄內容,排序的依據是文件的索引節點中的ctime字段。與「-l」選項連用時,則排序的一句是文件的狀態改變時間;
-d:僅顯示目錄名,而不顯示目錄下的內容列表。顯示符號連接文件自己,而不顯示其所指向的目錄列表;
-f:此參數的效果和同時指定「aU」參數相同,並關閉「lst」參數的效果;
-i:顯示文件索引節點號(inode)。一個索引節點表明一個文件;
--file-type:與「-F」選項的功能相同,可是不顯示「*」;
-k:以KB(千字節)爲單位顯示文件大小;
-l:以長格式顯示目錄下的內容列表。輸出的信息從左到右依次包括文件名,文件類型、權限模式、硬鏈接數、全部者、組、文件大小和文件的最後修改時間等;
-m:用「,」號區隔每一個文件和目錄的名稱;
-n:以用戶識別碼和羣組識別碼替代其名稱;
-r:以文件名反序排列並輸出目錄內容列表;
-s:顯示文件和目錄的大小,以區塊爲單位;
-t:用文件和目錄的更改時間排序;
-L:若是遇到性質爲符號連接的文件或目錄,直接列出該連接所指向的原始文件或目錄;
-R:遞歸處理,將指定目錄下的全部文件及子目錄一併處理;
--full-time:列出完整的日期與時間;
--color[=WHEN]:使用不一樣的顏色高亮顯示不一樣類型的。
參數:
目錄:指定要顯示列表的目錄,也能夠是具體的文件。
文件格式的意思
a) 引用計數分類
目錄操做命令(cd,pwd,mkdin,rmdir,rm,tree)
a) cd :切換目錄,路徑:shell內置命令,權限:全部用戶
b) cd ~ :進入家目錄,或用cd直接進入
c) cd – :進入上次目錄
d) cd . :進入當前目錄
e) cd .. : 進入上級目錄
a) mkdir :創建目錄,路徑:/bin/mkdir/,權限:全部用戶
b) mkdir –p :遞歸創建目錄,一級過一級的創建
a) rm :刪除文件,路徑:/bin/rm/,權限:全部用戶
b) rm –rf :刪除文件跟目錄
c) -r :遞歸,刪除目錄
d) -f :強制
相對路徑跟絕對路徑
1. 相對路徑:參照當前所在的目錄,進行查找,必定要確實當前全部的目錄,從當前位置開始查找打開。
2. 絕對路徑:從根目錄開始指定,一級一級遞歸查找。在任何目錄下,都能進入指定位置,從根目錄開始查找打開。
文件操做命令(touch,rm,cat,more,less,head,tail,echo)
拓展:
echo 「hello」 > 文件名
> 會覆蓋源文件的內容
>> 追加內容到源文件中
touch {5..10}.txt
a) rm :刪除文件,路徑:/bin/rm/,權限:全部用戶
b) rm –rf :刪除文件跟目錄
c) -r :遞歸,刪除目錄
d) -f :強制
拓展:
-n 列出行號
cat 顯示多個文件的內容
cat 將多個文件合併(按照文件前後順序)
操做方式:
空格鍵向下翻頁,b鍵向上翻頁?,q鍵退出,,Enter鍵換行
拓展:
head -n 顯示文件前n行
tail -n 顯示文件最後n行
tail -f 實時監控文件尾部變化
a) head :默認顯示文件頭10行。路徑:/bin/head/。權限:全部用戶,
b) head -n 20 文件名 :顯示文件頭20行
a) tail :默認顯示文件尾10行。路徑:/bin/tail/。權限:全部用戶,
b) tail -n 20 文件名 :顯示文件尾20行
c) tail –f 文件名:監聽文件尾,不退出,適合監聽實時文件
文件和目錄都能操做的命令(rm,cp,mv,shell,type,ln)
a) rm :刪除文件,路徑:/bin/rm/,權限:全部用戶
b) rm –rf :刪除文件跟目錄
c) -r :遞歸,刪除目錄
d) -f :強制
a) cp 源文件 目標位置:複製。路徑:/bin/cp/。權限:全部用戶
b) cp -a 源文件 目標位置:至關有-r -p -d 這三個的功能
c) cp –r 源文件 目標位置:複製目錄
d) cp -p 源文件 目標位置:連帶文件屬性複製,包括時間等
e) cp -d 源文件 目標位置:若源文件是連接文件則複製連接屬性
f) cp 源文件 /目標目錄/:原名複製
g) cp 源文件 /目標目錄/新文件名:更名複製
a) mv 文件 /目標目錄/:剪切
b) mv 文件 .新文件名:更名,用「.」來表明當前目錄
a) 內部命令:shell自帶的。沒有明確的可執行文件
b) 外部命令:後期開發。有可執行文件
a) ln 源文件 目標文件:硬連接
b) ln –s 源文件 目標文件:軟連接,文件名都必需要寫絕對路徑
軟連接跟硬連接的分類
a) 相似windows快捷方式
b) 軟連接擁有本身的I節點和Block塊,可是數據塊中只保存原文件的文件名和I節點,並沒有實際的文件數據
c) 軟連接的權限爲1rwxrwxrwx。爲系統中最高權限
d) 修改任何一個文件,另外一個都改變
e) 刪除連接文件,源文件不愛影響。刪除原文件,軟連接沒法訪問
f) 軟連接能夠鏈接文件,也能夠鏈接目錄,能夠跨分區
g) ln 源文件 目標文件:硬連接
a) 擁有相同的I節點和存儲Block塊,能夠看作是同一個文件
b) 修改任何一個文件,另外一個都改變
c) 刪除任何一個文件,另一個都能訪問
d) 硬連接文件和原文件的Inode號一致,只有這個標記表明硬連接,很不容易找到
e) 不能連接目錄,不能跨分區
f) 刪除源文件,快捷方式文件還能夠訪問,這就是跟軟連接的區別
g) ln –s 源文件 目標文件:軟連接,文件名都必需要寫絕對路徑
alias:別名
alias(a裏兒死) :別名(照顧管理員的使用習慣)
alias :查詢系統現有別名
alias ser(別名)=「命令」 :給命令起個別名,方便使用
注意事項
命令行臨時生效,永久生效須要寫入對應的系統文件
別名的優先級高於系統命令,除非必要時不能和命令名重疊
權限位
權限位爲10位
a) - :普通文件
b) d :目錄文件
c) l :連接文件
d) b :塊設備文件
e) c :字符設備文件
f) s :套接字
g) p :管道
注意:經常使用是前三個文件類型,後四個是特殊文件類型
a) 後九位分類
b) 三位權限分類
修改權限(chmod)
a) chmod 權限 文件名:修改權限
b) chmod 755 abc
c) chmod 644 abc
chmod u+x aa 給aa文件的全部者添加x權限
chmod g+w,o+w aa 給aa文件的所屬組和其餘人添加w權限
chmod u=rwx aa 給aa文件的全部者賦予rwx權限
chmod 644 aa 修改aa文件的權限爲755,對應爲rw-r--r--
常見權限
a) 文件:執行權限
b) 目錄:標準權限
權限的意義(讀寫執行基本權限)
a) r :讀取文件內容(cat,more.head,tail)
b) w :編輯,新增,修改文件內容,可是不包含刪除文件,要是要刪除文件,須要在文件的當前目錄中刪除文件(vi,echo)
c) x :文件可執行
注意:要想刪除文件須要擁有w目錄的權限,由於刪除文件是在目錄中刪的
a) r :能夠查詢目錄下文件名
b) w :具備修改目錄結構的權限。如新建文件和目錄,刪除此目錄下文件和目錄,重命名此目錄下文件和目錄,剪切(tovch,rm,mv,cp)
c) x :能夠進入目錄(cd)
對文件有寫權限,只表明能夠修改這個文件的內容;要想刪除文件,須要對文件所在目錄有寫權限
只要對目錄有寫權限,目錄中的文件,就算是root建立的,普通用戶同樣能刪除
目錄通常都同時有r-x權限,若是一個目錄只有r卻沒有x,你能用ls查看,卻不能cd 進去!(用普通用戶測試)
權限命令
a) chown 用戶名 文件名 :改變文件屬主者/全部者。 (例:chown user1 aa )user1必須存在
b) chown :用戶名 文件名:修改屬組者(例:chown :user1 aa)
c) chown 用戶名:用戶名 文件名 :改變屬主/全部者同時改變屬組,(例:chown user1:user1 aa)
例:
chown user1 aa :將aa文件的全部者修改成user1用戶
chown user1:user1 aa :將aa文件的全部者修改成user1用戶而且所屬組修改成user1組
chown :user1 aa:將aa文件的所屬組修改成user1組
例:
chgrp adm file1:改變文件file1的所屬組爲adm
用戶的創建
退出遠程管理:logout (落狗兒刺)
權限的注意事項
a) 文件最大權限:x權限
b) 目錄最大權限:w權限
a) 0:最小權限
b) 5:基本權限,可進入,可查看。
c) 7:完整權限
系統文件目錄默認權限
a) 文件:
b) 目錄:
總結:Linux的安全機制,不給新建文件x權限。
幫助命令(help,lnfo,man)
a) help 內部命令 :查看內部命令幫助
b) 命令 --help :查看命令的常見選項
a) 回車:進入子幫助頁面(帶有*號標記)
b) u :進入上層頁面
c) n :進入下一個幫助小節
d) p :進入上一個幫助小節
e) q :退出
a) man 命令 :查看命令幫助
b) man 級別 命令 :查看命令在級別分類中的命令
c) whatis 命令 :查看命令擁有那些特別的幫助
查找命令
a) updatedb(O破強) :強制更新數據庫
b) /var/lib/mlocate :命令所搜索的後臺數據庫
c) /etc/updated.conf :配置文件,用於定義locate命令
d) PRUNE_BIND_MOUNTS=」yes」:開啓搜索限制
e) PRUNEFS= :搜索時,不搜索的文件系統
f) PRUNENAMES= :搜索時,不搜索的文件類型
g) PRUNEPATHS= :搜索時,不搜索的路徑
注意:有些系統文件打開後出現的是亂碼,這是爲了保護系統安全
find 搜索命令
a) find(返的) 查找位置 –name 文件名 :按照文件名查找(例:find / -name aabbcc)
a) –ctime :按照文件狀態修改時間(天)change
b) –mtime :按照文件數據修改時間 modify
c) –atime :按照訪問時間 acces
注意:-4指的是前三天
+4指的是前五天
d) 例:find / -ctime +4
按天 :ctime atime mtime
按分鐘 :cmin amin mmin
c change #表示屬性被修改過:全部者、所屬組、權限
a access #被訪問過(被查看過)
m modify #表示內容被修改過
例:
find /etc -mmin -120 :120分鐘內內容被修改過的
find /etc -ctime +7 :七天以前屬性被修改過的文件
a) –uid 數字 :按照用戶屬主ID查找文件
b) –gid 數字 :按照屬組組ID查找文件
c) –user 用戶名 :按照屬主用戶名查找文件
例
find /home -user lisi
在/home中,查找全部lisi用戶的文件
注意,在系統中須要存在此用戶,不然報錯
d) –group 組名 :按照屬組組名查找文件
e) –nouser :找沒有屬主的文件(經常使用)
f) 例:find / -nouser
a) –name :按照文件名
b) –size :按照文件大小,不能加小數點,(單位:k(小寫),M(大寫))(+50k:大於50k。-50k:小於50k。50k:等於50k。)(例:find / -size +50k )
單位是數據塊 一塊是512字節
1M -> 1024k -> 2048塊 (1塊是0.5k 也就是512字節)
100M -> 102400k -> 204800塊
例:
find /etc -size -10k 查找小於10k的文件
find /etc -size +2M 查找大於2M的文件
注意+-號,若是沒有,是精確這麼大,一般都會帶上+或-號,表示一個範圍
c) –type 類型 :按文件類型查找,(f:普通。d:目錄。l:連接)
d) –perm 755: 按照權限查找(例:find . –perm 644) (-400:只要比這個權限大,包含在內的就會列出全部來) (+400:只要有一個包含你寫的權限就會顯現出來)
e) –inum :按照i節點查詢 (例:find . inum 節點數)
f) –iname :按照文件名查找,不區分大小寫
通配符跟正則表達式
a) * :用於匹配任意內容
b) ?:用於匹配任意一個內容,必須有一個,否則是出不來的
c) [] :用於匹配中括號內任意一個內容:[a-z]任意一個小寫字母,[A-Za-z] 任意一個字母,[0-9]任意一個數字
a) * :前一個字符重複任意屢次
b) ?:前一個字符重複1次或0次
c) [] :匹配中括號中任意一個內容:[a-z]任意一個小寫字母,[A-Za-z] 任意一個字母,[0-9]任意一個數字
Linux沒有全部者的正常文件
注意:要是不在這2行內的文件,要很注意。有可能是入侵文件
-exec命令的疊加查詢
-exec :find 目錄 –perm(第一種命令) -444 -exec ls(第二種命令) –l {} \ ;
命令一的執行結果做爲命令二的操做對象
例:find . –size +5k -exec ls -lh {}\;
find ... -exec 命令 {} \;
{}表示find查詢的結果集
\是轉義符,不使用命令別名,直接使用命令自己
;分號是表示語句的結束
注意:固定格式,只能這樣寫。注意中間的空格。
邏輯跟運算
find . –type f -a -size +2k 注意(-a=AMD)
邏輯與運算,兩個條件都成立才成立
find . –type f -o -size +2k 注意(-o=OR)
邏輯或運算,兩個條件成立一個,就成立
邏輯鏈接符:
-a (and 邏輯與)
-o (or 邏輯或)
例:find /etc -size +1k -a -size -10k
在etc目錄下查找大於1k而且小於10k的文件
find跟grep的意義
grep
注意事項:
儘可能不要在根目錄/中查找,查找得慢,會佔用太多服務器資源
若是須要在服務器中全盤查找,能夠寫一條計劃任務在凌晨執行(計劃任務後面講)
查找範圍越小越好,匹配條件,越精準越好
轉義符的做用是什麼?
在linux中有一個別名機制,如rm刪除文件,執行的倒是rm -i(用which rm 能夠查看命令別名),使用rm刪除文件前會提示,就是由於rm -i這個參數。若是想使用命令原意,能夠在加\轉義,
如:\rm test.txt 則不會提示,直接刪除
管道符
cat install.log | grep lib
在顯示文件的結果中,grep搜索含有lib的行
命令1 | 命令2 命令1的結果,做爲命令2的操做對象
管道符例子
把第一個命令的結果放在一個臨時文件裏,第二個命令處理這臨時文件,這臨時文件原本是不存在的
第二個命令從第一個命令的臨時文件中搜索包含「yum」這個的文件名
如何按關鍵字查詢端口
第一命令查詢系統網絡狀態,第二命令用第一命令的查詢結果來查詢關鍵字,第三個命令用第二命令的結果來統計數量
判斷服務器正在鏈接的有多少統計
netstat查看系統網絡鏈接狀態
a) –t:查看tcp協議端口
b) –u:查看udp
c) –l:監聽
d) –n:以ip和端口號顯示,而不是主機名和協議名
e) -a 顯示全部socket,包括正在監聽的。
f) -c 每隔1秒就從新顯示一遍,直到用戶中斷它。
g) -i 顯示全部網絡接口的信息,格式同「ifconfig -e」。
h) -r 顯示核心路由表,格式同「route -e」。
i) -v 顯示正在進行的工做。
ps aux :查看進程
a) 20 21 :ftp服務,文件共享
b) 22 :SSH服務,安全運維網絡管理
c) 23 :telnet服務
d) 25 :smtp:簡單郵件傳輸協議,發信
e) 110 :pop3:郵局協議,收信
f) 80 :www:網頁服務
g) 3306 :Mysql端口
h) 3389 :windows終端服務
i) 53 : DNS端口
a) 端口數量:
a) ctrl+] ------------ quit 退出方式
a) –t tcp -u udp -l 監聽 -n 以IP和端口號顯示
壓縮和解壓縮
「.zip」 「.gz」 「.bz2」 Linux能夠識別的壓縮格式
常見壓縮格式:
.zip .gz .bz2 linux能夠識別的常見壓縮格式
.tar.gz .tar.bz2 常見的壓縮和打包格式
a) zip :是爲了跟windows通用的一種格式,用的很少
b) zip 壓縮文件名 壓縮文件 :壓縮,不刪除原文件
c) zip -r 壓縮目錄名 壓縮目錄 :壓縮目錄 (例:zip -r test.zip /test ) -r:壓縮目錄
d) unzip 壓縮包 :解壓縮。路徑:/usr/bin/unzip
a) 「.gz」格式 :不會打包,要是強制打包,只會打包目錄下的全部文件
b) gzip 源文件名 :壓縮,不會保存源文件。
c) gzip -c 源文件名 > 壓縮文件 :強制保留源文件。(例:gzip -c cangls > cangls.gz)
d) gzip -r 源目錄 :不能壓縮目錄,壓縮目錄下全部內容
e) gzip -d 壓縮包 :解壓縮
a) 「.bz2」格式:不能壓縮目錄。
b) bzip2 源文件 :壓縮 (例bzip2 aa)
c) bzip2 -k 源文件 :壓縮以後保留源文件
d) bzip2 -d 壓縮文件 :解壓,(例:bzip2 -d aa.bz2) -k保留壓縮文件。
a) 不壓縮,只打包
b) 壓縮同時打包「tar.gz」/」.gz」格式
c) 壓縮同時打包「tar.bz2」/」.bz2」格式
d) 查看不解包
e) 指定解壓縮文件位置
注意:按上面例子,壓縮包 –C之間只能有一個空格,多個空格報錯。
經常使用網絡命令
a) 登陸終端
a) 例:write root tty1 :寫內容給tty1登陸的root,
b) 按ctrl+d,保存,發送
a) 按ctrl+d,保存,發送
a) ping -c 次數 ip :探測網絡通暢
b) ping -s 65536 ip :指定探測數據包的大小
c) ctrl+c :強制終止
d) 虛擬機不一樣:
a) ifconfig eth0 192.168.140.252.netmask 255.255.255.0 臨時生效。 eth0,eth0:0第一塊網卡和第一模擬網卡
ifconfig eth0 192.168.1.1 netmask 255.255.255.0
ifconfig eth0 192.168.1.1/24
ifconfig eth0:0 192.168.1.2 設置網卡子端口
ifconfig (參數)
add<地址>:設置網絡設備IPv6的ip地址;
del<地址>:刪除網絡設備IPv6的IP地址;
down:關閉指定的網絡設備;
<hw<網絡設備類型><硬件地址>:設置網絡設備的類型與硬件地址;
io_addr<I/O地址>:設置網絡設備的I/O地址;
irq<IRQ地址>:設置網絡設備的IRQ;
media<網絡媒介類型>:設置網絡設備的媒介類型;
mem_start<內存地址>:設置網絡設備在主內存所佔用的起始地址;
metric<數目>:指定在計算數據包的轉送次數時,所要加上的數目;
mtu<字節>:設置網絡設備的MTU;
netmask<子網掩碼>:設置網絡設備的子網掩碼;
tunnel<地址>:創建IPv4與IPv6之間的隧道通訊地址;
up:啓動指定的網絡設備;
-broadcast<地址>:將要送往指定地址的數據包當成廣播數據包來處理;
-pointopoint<地址>:與指定地址的網絡設備創建直接連線,此模式具備保密功能;
-promisc:關閉或啓動指定網絡設備的promiscuous模式;
IP地址:指定網絡設備的IP地址;
網絡設備:指定網絡設備的名稱。
ifconfig eth0 up
ifconfig eth0 down
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #爲網卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64 #爲網卡eth0刪除IPv6地址
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
[root@localhost ~]# ifconfig eth0 192.168.2.10
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
ifconfig eth0 arp #開啓網卡eth0 的arp協議
ifconfig eth0 -arp #關閉網卡eth0 的arp協議
ifconfig eth0 mtu 1500 #設置能經過的最大數據包大小爲 1500 bytes
a) mail :收信
b) 郵件保存位置:/var/spool/mail/root/
c) mail 用戶名 :發信
shell中的發信
直接調用mail命令發送郵件
echo "mail test" |mail -s "tsest a" destination@csair.com
發送帶附件的郵件, -a 參數
echo "jboss log of yesterday as attachment" |mail -s "jboss server logs" -a $logDir.tar.gz destination@csair.com
模擬網卡
關機-重啓命令
a) sync :數據同步,把內存中數據強制保存進硬盤,建議關機前使用
b) shutdown -h now :關機命令,建議使用。路徑:/sbin/ shutdown/,權限:root
c) init 0 :關機
d) halt :關機
e) poweroff :關機
a) shutdown -r now :重啓命令
b) reboot :重啓命令,路徑/sbin/reboot/,權限:root
c) init 6 :重啓命令
掛載命令
Linux全部存儲設備都必須掛載使用,包括硬盤
常見的存儲設備:
/dev/sda1 第一個scsi硬盤的第一分區
/dev/cdrom 光盤
/dev/sr0 光盤 centos 6.x
經常使用掛載點:
/mnt
/media
/cdrom
掛載格式:
mount [-t 文件系統類型] [-o 特殊選項] 設備文件名 掛載點
選項:
-t :文件系統:加入文件系統類型來指定掛載的類型,能夠ext3、ext4、iso9660 等文件系統。
-o :特殊選項:能夠指定掛載的額外選項,好比讀寫權限、同步異步等,若是不指定則默認值生效。
-o loop :掛載光盤文件
a) mount -o remount,noexec /boot :從新掛載/boot分區目錄,並使用noexec禁止使用執行文件權限
b) mount -o remount,exec /boot :從新掛載/boot分區目錄,並使用exec恢復使用執行文件權限
光盤掛載
a) Redhat5.x 之前 /dev/hdc
b) Redhat6.x 之後 /dev/sr0
U盤掛載
注意:Linux默認不識別windows的NTFS文件格式,若是要使用必須從新編譯內核
卸載:
umount 設備名稱或者是掛載點
#全部的掛載的設備卸載方式都同樣
掛載注意事項
Shell使用小技巧:
a) 補齊功能容許用戶輸入命令名或文件名起始的若干個字母后,按Tab鍵補齊命令名或文件名。
a) 命令歷史容許用戶瀏覽先前輸入的命令並從新調用它們,用history命令能夠顯示命令列表,按方向鍵↑和↓可查找之前執行過的命令。!命令前綴
a) 範例:
Linux的驅動
注意事項
a) 安裝中文字體和編碼
b) 終端或傳輸協議須要支持的‘
配置文件:
a) /etc/fstab :自動掛載配置文件
b) /var/lib/mlocate/mlocate.db
c) /etc/updated.confl
服務器管理規範:
越是安全等級要求高的服務器,越是嚴格限制用戶等級,不能全部人都是root,遠程服務器不能關機+重啓。
服務器不容許在負載高峯執行高負載命令。例如殺毒、大數據壓縮解壓縮,複製,全盤搜索
*************************************
VIM編輯器
Vim編輯器簡介
Linux圖形化界面下的文本編輯器
gedit 、 libre office 、 evince PDF閱讀器
①gedit是一個GNOME桌面環境下兼容UTF-8的文本編輯器。它使用GTK+編寫而成,所以它十分的簡單易用,有良好的語法高亮,對中文支持很好,支持包括gb2312、gbk在內的多種字符編碼。gedit是一個自由軟件。
②LibreOffice是OpenOffice.org 辦公套件衍生版, 一樣免費開源,以Mozilla Public License V2.0許可證分發源代碼,但相比OpenOffice增長了不少特點功能。LibreOffice擁有強大的數據導入和導出功能,能直接導入PDF文檔、微軟Works、LotusWord,支持主要的OpenXML格式。軟件自己並不侷限於Debian和Ubuntu平臺,OpenXML格式Windows、Mac、PRM packageLinux等多個系統平臺。
③Evince是一套文件閱讀工具,能夠用來閱讀許多種格式的資料,像是Postscript、PDF 或是其餘格式的文件
文本編輯器的做用:
建立或者修改文本文件
維護Linux系統中的各類配置文件
經常使用版本
a) vi :類Unix系統中默認的文本編輯器
b) vim :vi編輯器的加強版本,習慣上也稱爲vi
c) vim 全屏幕純文本編輯器
d) vim 是vi的升級版
vim的使用
命令模式、輸入模式、末行模式
三種模式之間的互相切換方式
插入命令
e) a :在光標全部字符後插入,(追加)
f) A :在光標全部行尾插入
g) i :在光標全部字符前插入,(插入)
h) I :在光標全部行行首插入
i) o :在光標下插入新行,打開新行
j) O :在光標上插入新行
命令模式操做
k) 移動光標
l) 把光標移動到文件頭或文件尾
m) 把光標移動到行首或行尾
n) :n :移動到第幾行 (例: :30 :移動到第30行)
p) 刪除整行,剪切,(刪除至關剪切)
q) 複製(用p/P粘貼)
r) 撤銷
s) 替換
t) 顯示行號
u) 顏色開頭
v) 查找,掌握
w) 批量替換
注意:g 的範圍內全部old換爲new
x) 批量註釋
vim 使用技巧
y) 在vim中導入其餘文件內容或命令結果
vim 多文件模式
z) vim -o 文件1 文件2 :同時打開二個文件(列表模式)。按ctrl + w + 向下鍵 切換
aa) vim -o 文件1 文件2 :同時打開二個文件(對列模式)。按ctrl + w + 向右鍵 切換
配置文件
ab) ~/.vimrc :vim的配置文件,注意:剛開始的話,些文件是不存在的,是新創建的
ac) ~/.bashrc :環境變量配置文件:別名
快捷鍵
ad) :map 快捷鍵 快捷鍵執行的命令 :設定快捷鍵執行的命令
例:
注意:臨時生效,要永久生效,須要寫入 ~/.vimrc 文件裏
例1:
:map ^P I#<esc>
當輸入ctrl+p快捷鍵時,執行在首行添加#註釋
^P 不能手動輸入,須要執行ctrl+V+P 來定義。或者ctrl+V,而後ctrl+P
例2:
:map ^B ^x
當輸入ctrl+B快捷鍵時,光標會移動到行首,而後刪除一個字符
例3:
:ab mymail liuchuan@itxdl.cn
注:若是想讓這些快捷鍵永久生效,能夠寫入vim的配置文件。
替換
ae) :ab 源字符 替換字符 :替換,按空格鍵或回車鍵替換
af) :ab mymail shenchao@lampbrother.net
ag) 輸入mymail 時按回車鍵就會變成shenchao@lampbrother.net
注意:臨時生效,要永久生效,須要寫入 ~/.vimrc 文件裏
*************************************
軟件安裝
軟件包分類
軟件包類型
a) rpm軟件包 擴展名爲「.rpm」
b) dpkg軟件包 擴展名爲「.deb」
a) 通常爲「.tar.gz」、「.tar.bz2」等格式的壓縮包,包含程序的原始代碼
a) 在壓縮包內提供install.sh、setup等腳本安裝程序
b) 綠色免安裝軟件包
c) 在壓縮包內提供已編譯好的執行程序,解壓到指定位置便可直接使用
源碼包的特色
二進制包的分類
a) DPKG包
DPGK是Debian Packager的簡寫,Debian提供的一種軟件包管理系統,用於安裝、卸載、升級等操做,以*.deb做爲軟件包的後綴名。
b) RPM包
RPM是Red Hat Package Manager的縮寫,Red Hat提供的一種軟件包管理系統,用於安裝、卸載、升級等操做,以*.rpm做爲軟件包的後綴名。
RPM優缺點
c) 優勢
d) 缺點
二進制軟件包的特色
專門的工具進行安裝、卸載、升級和管理軟件
安裝簡潔、速度快
通過封裝,沒法直接獲取源代碼
功能選擇性差,功能定製不靈活
軟件包的選擇
Linux軟件包的命名
Linux軟件包的命名也有必定的規律,通常遵循:名稱-版本-修正版-類型
tree-1.2.3-4.x86_64.tar.gz
tree-1.2.3-4.el6.x86.rpm
軟件名:tree
版本號:1.2.3
修訂次數:4
適用系統:el5 el6 el7
應用平臺:i386 i686 x86 x86_64 amd64 noarch不區分平臺
軟件類型:.rpm .deb .tar.gz 等
二進制軟件包安裝位置
/etc/ 配置文件保存位置
/usr/bin/ 軟件命令保存位置
/usr/lib/ 函數文件保存位置
/usr/share/doc/ 使用手冊保存位置
/usr/share/man/ 幫助文檔保存位置
RPM包的依賴
a) 模塊依賴:是安裝包安裝的時候指定的一個安裝包,須要人們去官方網站:www.rpmfing.net 中查找
包名和包全名的區別
rpm包的命名含義
rpm包的默認安裝位置
rpm包安裝命令
a) –i :install安裝(install)
b) –v :顯示理詳細的信息(verbose)
c) -h :打包#顯示安裝進度(hash)
d) --test :測試安裝,只是檢測一下依賴性,不會實際安裝
e) --force :強制安裝。無論是否已經安裝,都從新安裝。就是--replacefi/es 和 –replacepkgs的綜合,注意:用來要是系統中軟件中的一個文件丟失可用--force修復,--force是只替換軟件中沒有的文件,其它文件的配置等都會保留
如下的能夠做爲參考,不建議使用
RPM包服務啓動
a) service httpd start :啓動服務
b) /etc/rc.d/init.d/httpd start :Linux各個版本通用的服務啓動方法
c) 網頁目錄:/var/www/html/.index.html
d) 配置目錄:/etc/httpd/conf/httpd.conf
e) 日誌文件:/var/log/httgp/
注意:服務的標準啓動方式:/目錄/啓動文件 restart
RPM包升級
升級命令:
格式:
rpm –Uvh 軟件包全名
-U 升級安裝,若沒安裝,則直接安裝,若安裝有舊版本,則升級安裝
-F 升級安裝,若沒安裝,則不安裝,必須有舊版本,才進行升級安裝
RPM包的卸載
a) --nodeps :不檢查依賴性,不能使用
RPM包的查詢
a) rpm -q 包名 :查詢包是否安裝 (-q query)
b) rpm -qa 包名 :列出系統全部以安裝包 (-a all)
c) rpm -qa | wc -l :查詢一共多少包
d) rpm -qa | grep httpd :顯示全部安裝包
a) rpm -qi 包名 :查詢以安裝包的信息
b) Rpm -qip 包全名 :查詢沒有安裝包的信息
a) rpm -ql 包名 :查詢以安裝包中間件的安裝位置(-l list)
b) rpm -qlp 包全名 :查詢未安裝包打算安裝到那位置的信息
a) rpm -qf 系統文件名 :查詢系統文件屬於那個包 (-f file)
a) rpm -qR 包名 :查詢已安裝包的依賴包 (-R:requires)
b) rpm -qRp 包全名 :查詢未安裝包依賴包
RPM的驗證
1. rpm -V 已安裝的包名 :檢驗指定RPM包中的文件(v: verify)
指定軟件安裝後的完整性,及文件的元數據是否發生變化
2. rpm -Va :檢驗本機已經安裝的全部軟件包
3. rpm -Vf 系統文件名 :檢驗某個文件是否被修改
校驗例證:
[root@lchuan ~]rpm -V httpd
.......T. c /etc/httpd/conf/httpd.conf
打印到屏幕上的信息共分爲3部分:
第一部分爲驗證結果;第二部分爲文件類型;第三部分爲文件位置。
對稱加密跟非對稱加密
a) 本身把本身的文件加密,別人想要看這個文件,就須要跟全部者就是加密這個文件的人,索取密碼
b) 至關於跟人共用一個密碼,安全級別較低,安全係數在128-512之間
a) A跟B都有本身的公鑰和私鑰跟密碼,公鑰表明鎖,私鑰表明鑰匙,密碼錶明密碼鎖。
b) A持有B的公鑰,A給B發文件時用B的公鑰加密,B就能夠用本身的私鑰和密碼打開,由於是用B的公鑰加密,因此這個加密文件就只有B才能打開
c) A持有B的公鑰,A給B發文件時同時A跟B的公鑰加密,這樣A跟B都能夠單獨的打開加密文件。
d) 個人擁有密碼,不怕外露
e) 加密等級較高,安全係數是1024左右
f) 驗證公鑰時須要安裝CA數字證書,全部的公鑰都是經過CA認證的才能擁有CA數字證書
g) 由第三方CA認證來保障公鑰的可信度和安全度
數字證書
數字證書
剛剛的校驗方法只能對已經安裝的RPM包中的文件進行校驗,但若是RPM包自己就被動過手腳,那校驗就不能解決問題了,咱們就必須使用數字證書驗證。
數字證書的使用:
² 首先必須找到原廠的公鑰文件,而後進行安裝
² 而後安裝RPM包時,會去提取RPM包中的證書信息,而後和本機安裝的原廠證書進行驗證
² 若是驗證經過,則容許安裝;若是驗證不經過,則不容許安裝並警告
RPM包中文件的提取
a) rpm2cpio :將rpm包轉換爲cpio格式的命令
b) cpio ß:是一個標準工具,它用於建立軟件檔案文件和從檔案文件中提取文件
c) –idv :還原
d) .文件絕對路徑:必定要有「.」 要是沒有「.」就會覆蓋系統路徑,「.」是表明當前目錄
注意:要是命令中有2,就表明從2前的格式轉換成2後的格式(例:rpm2cpio rpm格式 轉換 cpio格式)
cpio命令主要是用來創建或者還原備份的工具,cpio命令能夠複製文件到歸檔包中(壓縮),或者從歸檔包中導出文件(解壓縮)。
cpio的三種模式:
備份
格式:cpio –ovcB > [文件|設備]
-o:進入copy-out模式(壓縮)
-v:顯示過程
-c:使用portable format存儲方式
-B:設定輸入輸出塊爲512bytes
例子:
cpio備份:
find /etc -print | cpio –ocvB > /root/etc.cpio
#利用find 找出/etc 而後備份到/root下
還原:
格式:cpio –idvcu < [cpio文件]
-i:進入copy-in模式(解壓)
-d:恢復到指定位置(視壓縮方式恢復)
-v:顯示過程
-c:使用portable format存儲方式
-u:替換全部文件,無提示
例子:
cpio還原
cpio –idvcu < /root/etc.cpio
注:因爲備份時備份的路徑使用的是絕對路徑,全部恢復時會按照絕對路徑恢復回去,因此不會在/root下生成文件。
例子2:
備份:
cd /etc #切換到/etc下
find . –print | cpio -ocvB > /root/etc.cpio
#以相對路徑方式進行備份
恢復:
cd /root #切換到/root
mkdir test #建立恢復目錄
cd test #進入恢復目錄
cpio -idvcu < /root/etc.cpio
#恢復以相對路徑備份的etc.cpio文件,內容會被恢復到/root/test/目錄下。
10)rpm2cpio 提取RPM軟件包中的文件
格式:rpm2cpio 包全名 | cpio –idv ./命令絕對路徑
# ./ 是當前目錄 + 命令的絕對路徑是which查詢出的絕對路徑(必須)
例子:
假設不當心把系統下的/bin/ls 命令刪除了,使用時報錯了,須要恢復。
方案:
A、從新安裝ls命令,使用--force選項強制執行
B、從相對應的軟件包內提取ls 命令
步驟:
² 先肯定ls 命令屬於哪個軟件包
² 先模擬出ls命令被刪除的樣子
² 提取RPM包中的ls命令,並恢復到/bin 目錄下(站到/目錄下進行恢復)
yum經常使用命令
yum組管理命令
a) yum grouplist :列出全部可用的軟件組列表
a) yum groupinfo 軟件組名 :列出軟件組中包含的軟件 (例:yum groupinfo "Web Server" :查詢軟件組"Web Server"中包含的軟件)
a) yum groupinstall 軟件組名 :安裝指定軟件組 (例:yum groupinstall " Web Server " :安裝網頁服務軟件組)
a) yum groupremove 軟件組名 :卸載指定軟件組
yum搭建方式:
² 本地光盤源
² 局域網yum源
² 互聯網yum源
搭建光盤yum源
注意:通常須要禁止的系統執行文件,基本都用更名來處理
a) 解釋下yum源文件
a) baseurl=file:///mnt/cdrom/ :將第一行修改成光盤路徑,要是有剩行就一一註釋
注意:///:前//是表明協議,後/是表明根目錄
b) enabled=1 :設置yum源文件生效
源碼包安裝問題
a) 答案:能夠的,由於安裝的路徑位置不一樣
a) 答案:不會,由於系統只能啓動一個
a) 若是服務是給大量客戶端訪問的,不建議修改端口,如Apache
b) 若是服務只是給內部用戶訪問,建議修改端口,如ssh
a) 答案:建議源碼包
RPM包跟源碼包的配置文件
a) 配置文件 :/etc/httpd/conf/httpd.conf
b) 啓動腳本 :/etc/rc.d/init.d/httpd
c) 網頁 :/var/www/html/
d) 日誌 :/var/log/httpd/
e) 啓動方式 :
f) RPM包的僞用戶:daemon
a) 配置文件 :/usr/local/apache2/conf/httpd.conf
b) 啓動腳本 :/usr/local/apache2/bin/apachectl
c) 網頁 :/usr/local/apache2/htdocs/
d) 日誌 :/usr/local/apache2/logs/
e) 啓動方式 :
f) 源碼包的僞用戶:apache
源代碼軟件包特色:
最新的軟件版本
根據用戶須要,靈活定製軟件功能
應用場合舉例:
安裝較新版本的應用程序時
當二進制軟件沒法知足須要時
編譯安裝可由用戶自行修改、定製功能
須要爲應用程序添加新的功能時
make命令是GNU的工程化編譯工具,用於編譯衆多相互關聯的源代碼問價,以實現工程化的管理,提升開發效率。
注意:使用前要先安裝gcc(c語言編譯包)
make (選項) (參數)
選項:
-f:指定「makefile」文件;
-i:忽略命令執行返回的出錯信息;
-s:沉默模式,在執行以前不輸出相應的命令行信息;
-r:禁止使用build-in規則;
-n:非執行模式,輸出全部執行命令,但並不執行;
-t:更新目標文件;
-q:make操做將根據目標文件是否已經更新返回"0"或非"0"的狀態信息;
-p:輸出全部宏定義和目標文件描述;
-d:Debug模式,輸出有關文件和檢測時間的詳細信息。
源碼包安裝
注意:必定要指定安裝位置(除非指定安裝位置會報錯)
安裝源碼包前必須先安裝gcc,gcc是c語言編譯器
安裝方式:yum -y install gcc
a) winscp :綠化版工具,目前主流
b) xshell自帶的文件傳輸工具:
a) 解壓
b) cd 解壓目錄
c) 查看安裝文檔
a) ./configure --prefix=/usr/local/apache2/
b) –prefix :指定安裝位置
c) 檢查系統環境是否符合安裝要求
d) 自定義功能,最後生成Makefile文件
a) 安裝必須中止
b) 是否出現error,warning,no等關鍵字
a) 若是安裝報錯,就必須先用make clean命令,才能從新安裝
a) 若是安裝報錯,不止要用make clean命令,還要刪除安裝位置注意error warning等錯誤報警
a) 如何啓動能夠在安裝文檔中查詢
b) 啓動時有報錯不用理
源碼包安裝舉例
準備環境:
yum 倉庫
確認源代碼編譯環境
需安裝支持 C/C++程序語言的 編譯器
gcc-4.1.1-52.el5、gcc-c++-4.1.1-52.el5
make-3.81-1.1.i386 ……
安裝步驟:
補丁
a) diff 選項 old new :比較 old 和 new 文件的不一樣
b) 選項:
a) 分別建立old 和 new 兩個文本文件,有相同的內容,也有不一樣的內容,造成對比。、
b) #建立兩個文件,內容要有差異
c) diff -Naur /test/old.txt /test/new.txt > ./txt.patch
d) 打開生成的txt.patch,會發現new 比 old 多出來的兩行被單獨標記出來(用+號)
e) 比較下兩個文件的不一樣,並生成補丁文件
a) patch –pn < 補丁文件:按照補丁文件進行更新(例:patch -p3 < txt.patch patching file old.txt)
b) 選項:
c) –p3 :用來刪除補丁文件裏面的目錄,如/tmp/texe,刪除:根,tmp,texe,三個目錄,因此就是-p3
d) 「-pn」很差理解,咱們說明下。補丁文件是要打入舊文件的,可是你當前所在的目錄和補丁文件中的記錄的目錄是不必定匹配的,因此就須要「-pn」來同步兩個目錄。好比我當前是在「/root/test」目錄中(我要打補丁的舊文件就在當前目錄下),補丁文件中記錄的文件目錄爲「/root/test/old.txt」,這時若是寫入「-p1」(在補丁文件目錄中取消一級目錄)那麼補丁文件就會打入「/root/test/root/test/old.txt」文件中,這顯然是不對的。那若是寫入的是「-p2」(在補丁文件目錄中取消二級目錄)那麼補丁文件打入的就是「/root/test/test/old.txt」,這顯然也不對。若是寫入的是「-p3」(在補丁文件目錄中取消三級目錄)那麼補丁文件就是打入的「/root/test/old.txt」,咱們的 old.txt 文件就在這個目錄下,因此就應該是「-p3」
實驗:
patch -p2 < txt.patch
#按照補丁文件對old.txt 進行更新
腳本安裝程序
a) webmin:是經過網頁來管理Linux系統
b) ./setup.sh
a) 安裝位置
b) 日誌位置
c) Perl安裝位置
d) 端口
e) 管理員名
f) 管理員密碼
g) 是否開啓:自動啓動
h) ssl:不啓動
函數庫管理
a) 靜態函數庫
b) 動態函數庫
a) 查詢
函數庫通常能夠直接在網上下載到,那麼應該如何安裝呢?
通常狀況下函數庫文件的存放位置是在/usr/lib/ 或 /lib 下;而後會在/etc/ld.so.conf 配置文件中記錄 這兩個目錄或者新增長的目錄,這個配置文件中只記錄函數庫存放目錄,不記錄實際函數庫名稱
b) 安裝
因爲/usr/lib/已經被/etc/ld.so.conf配置文件記錄因此不須要重寫
3. 假有新的目錄須要改寫到/etc/ld.so.conf配置文件中,寫完後須要刷新下緩存
ldconfig 刷新函數庫配置文件緩存
-p 列出緩存中識別的全部的函數庫
補充
a) date :查看系統時間
b) date –s 日期/時間 :修改系統日期,時間要另外在修改
c) date -s 時間/日期 :修改系統時間,日期要另外在修改
a) du -h 目錄名 :查看目錄下文件的大小,並統計目錄的大小(統計文件大小,要是和df的結果不同,建議重啓系統)
b) du -sh 目錄名 :只查看目錄大小(統計文件大小,要是和df的結果不同,建議重啓系統)
a) df :統計佔用的空間大小,統計剩餘空間是準確的
b) du :統計文件大小。統計的文件大小是準確的
*************************************
用戶管理
Linux是基於用戶身份對系統的資源進行管理的操做系統
用戶和組的類型
用戶賬號:UID(User Identity,用戶標識號)
超級用戶 UID:0 UID:0
系統用戶 UID:1-499 UID:1-999
普通用戶 UID:500-65535 UID:1000-65535
組賬號:GID(Group Identify,組標識號)
初始組(私有組)
附加組(公共組)
用戶的六個信息文件
用戶信息文件:/etc/passwd
a) 用戶 ID :0 超級用戶 UID。若是用戶 UID 爲 0,表明這個帳號是管理員帳號。 那 Linux 中如何把普通用戶升級成爲管理員呢?就是把其餘用戶的 UID 修改成 0 就能夠了,這點和 Windows 是不一樣的。不過不建議建 立多個管理員帳號。
b) 用戶 ID :1-499 系統用戶(僞用戶)UID。這些UID帳號是系統保留給系統用戶的UID,也就是說 UID 是 1-499 範圍內的用戶是不能登陸系統的,而是用來運行系統或服務的。其中 1-99 是系統保留的帳號,系統自動建立。100-499 是預留給用戶建立系統帳號的。
c) 用戶 ID :500-65535 普通用戶 UID。創建的普通用戶 UID 從 500 開始,最大到 65535。這些用戶足夠使用了,可是若是不夠也不用懼怕,2.6.x 內核之後的Linux 系統用戶 UID 已經能夠支持 232 這麼多了。
添加用戶時,若是不指定用戶的初始組,則會自動建立和用戶名相同的組。
如何把普通用戶變成超級用戶:把用戶 UID 改成 0
/bin/bash 能登陸系統;/sbin/nologin 不能登陸系統
影子文件 :/etc/shadow
a) 咱們也能夠在密碼前人爲的加入「!」或「*」改變加密值讓密碼暫時失效,使這個用戶沒法登錄,達到暫時禁止用戶登陸的效果。
b) 注意全部僞用戶的密碼都是「!!」或「*」,表明沒有密碼是不能登陸的。
c) 固然我新建立的用戶若是不設定密碼,它的密碼項也是「!!」,表明這個用戶沒有密碼,不能登陸
a) 時間戳轉日期
b) 日期轉時間戳
a) 這裏一樣要寫時間戳,也就是用 1970 年 1 月 1 日進行時間換算。若是超過了失效時間,就算密碼沒有過時,用戶也就失效沒法使用了
組信息文件 :/etc/group
a) 初始組:每一個用戶初始組只能有一個,初始組只能有一個,通常都是和用戶名相同的組做爲初始組
b) 附加組:每一個用戶能夠屬於多個附加組。要把用戶加入組,都是加入附加組
組密碼文件:/etc/gshadow
用戶的家目錄
用戶郵箱目錄
用戶模板目錄
添加用戶:useradd 命令
a) 選項:
6-d 目錄 手工指定家目錄,目錄不須要事先創建
b) 例:useradd -u 550 -g lamp1 -G root -d /home/lamp1 -c "test user" -s /bin/bash lamp1 :(創建用戶 lamp1 的同時指定了 UID(550),初始組(lamp1),附加組(root),家目錄(/home/lamp1),用戶說明(test user)和用戶登陸 shell(/bin/bash))
useradd 默認值文件
/etc/default/useradd
a) GROUP=100 :這個選項是創建用戶的默認組,也就是說添加每一個用戶時,用戶的初始組就是 GID 爲100 的這個用戶組。目前咱們採用的機制私有用戶組機制。
b) HOME=/home :這個選項是用戶的家目錄的默認位置,因此全部的新建用戶的家目錄默認都在/home/下。
c) INACTIVE=-1 :
d) EXPIRE= :
e) SHELL=/bin/bash :
f) SKEL=/etc/skel :這個選項就是定義用戶的模板目錄的位置,/etc/skel/目錄中的文件都會複製到新建用戶的家目錄當中。
g) CREATE_MAIL_SPOOL=yes :
/etc/login.defs
h) MAIL_DIR /var/spool/mail :
i) PASS_MAX_DAYS 99999 :
j) PASS_MIN_DAYS 0 :
k) PASS_MIN_LEN 5 :
l) PASS_WARN_AGE 7 :
m) UID_MIN 500
n) UID_MAX 60000
p) GID_MAX 60000
q) CREATE_HOME yes :
r) UMASK 077 :
s) USERGROUPS_ENAB yes :
t) ENCRYPT_METHOD SHA512 :
設定密碼
a) 選項:
第一次對用戶使用時是爲此用戶建立密碼,第二次使用時是修改密碼。
root身份執行passwd
1、能夠給任何用戶設置或修改密碼
2、在進行密碼修改時不須要提供原始密碼
普通用戶執行passwd
1、默認只能給本身修改密碼
2、給本身修改密碼時須要提供用戶的當前密碼
非交互式密碼設置:
echo 「123123」 | passwd --stdin user1
用戶信息修改
a) 選項:
-d 目錄 #結合 -m 選項直接對源家目錄進行更名實現修改家目錄
usermod –m –d /home/u4 user4 (用戶user的原家目錄是/home/user4)
刪除用戶
1. userdel -r 用戶名 :刪除用戶
-r :連帶家目錄一塊兒刪除
添加刪除組
把已經存在的用戶加入組
用戶相關命令
a) 「-「 連帶環境變量一塊兒切換
改變有效組的命令
用戶權限賦予
補上
其餘相關命令
一、id 用戶名
#顯示用戶的UID、初始組、附加組列表
二、su 用戶名
#切換用戶身份
su - 用戶名
#連帶環境變量一塊兒切換
三、newgrp 組名
#修改用戶的有效組,切換到普通用戶以後,執行命令
有效組定義:用戶建立文件或目錄時使用哪一個組做爲文件的所屬組,就是有效組。
注:
初始組、附加組:是用戶和組之間的關係
有效組:用戶和文件之間的關係
*************************************
權限管理
ACL權限
ACL 概述
ACL(Access Control Lists),爲單一的用戶或者組設置對文件或者目錄的獨立rwx權限,對於有些特殊需求很是有幫助。
a) dumpe2fs -h 分區文件 :查詢指定分區詳細文件系統信息
ACL基本命令
查詢
b) getfacl
創建
注意:若是給目錄賦予 acl 權限,兩條命令都要輸入
-R 遞歸·
-m u:用戶名:權限 :只對已經存在的文件生效
-m d:u:用戶名:權限 :只對將來要新建的文件生效
刪除
手工開啓ACL 權限
a) mount -o remount,acl / :從新掛載根分區,並掛載加入 acl 權限 (臨時生效)
Sudo受權權限
sudo簡介和原則
a) 命令越詳細,獲得的權限就越小
b) 命令越粗略,獲得的權限就越大
root 身份 visudo命令
a) root ALL=(ALL) ALL
b) 用戶名 被管理主機的地址=(可以使用的身份) 受權命令(絕對路徑)
c) %wheel ALL=(ALL) ALL
d) %組名 被管理主機的地址=(可以使用的身份) 受權命令(絕對路徑)
舉例
a) visudo :打開配置文件
b) 用戶名 ALL= /sbin/shutdown –r now
c) sudo -l :查看當前用戶可用的受權
a) 首先要分析受權用戶管理 Apache 至少要實現哪些基本受權:
b) 第一種方法
c) 第二種方法
注意:以上兩種 sudo 的設置,要特別注意,不少朋友使用 sudo 會犯兩個錯誤:第一,受權命令沒有細化到選項和參數;第二,認爲只能受權管理員執行的命令
d) 條件三則比較簡單,假設網頁存放目錄爲/var/www/html ,則只須要受權 lamp 對此目錄具備寫權限或者索性更改目錄全部者爲 lamp 便可。若是須要,還能夠設置 lamp 能夠經過 FTP等文件共享服務更新網頁
a) visudo
b) aa ALL=/usr/sbin/useradd :賦予 aa 添加用戶權限.命令必須寫入絕對路徑
a) visudo
b) aa ALL=/usr/bin/passwd :賦予改密碼權限
c) aa ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root :賦予改密碼權限並取消對 root 的密碼修改
a) sudo /usr/sbin/useradd ee :普通用戶使用 sudo 命令執行超級用戶命令
三大文件特殊權限
分類
設定文件特殊權限
a) 4 :表明 SUID
b) 2 :表明 SGID
c) 1 :表明 SBIT
SetUID
SetUID是什麼,功能
a) 只有能夠執行的二進制程序才能設定 SUID 權限
b) 命令執行者要對該程序擁有 x(執行)權限
c) 命令執行者在執行該程序時得到該程序文件屬主的身份(在執行程序的過程當中靈魂附體爲文件的屬主)
d) SetUID 權限只在該程序執行過程當中有效,也就是說身份改變只在程序執行過程當中有效
SetUID的做用介紹
注意:若是取消 SetUID 權限,則普通用戶就不能修改本身的密碼了
SetUID的命令
a) 例:chmod u+s /usr/bin/vim
SetUID的幾點建議
檢測SetUID 的腳本???
SetGID
SetGID的做用
a) SGID 的含義以下:
b) 當普通用戶 lamp 執行 locate 命令時,會發生以下事情:
a) 若是 SGID 針對目錄設置,含義以下:
b) 舉例
SetGID命令
文件特殊權限之Sticky BIT
Sticky BIT的做用
a) 粘着位目前只對目錄有效
b) 普通用戶對該目錄擁有 w 和 x 權限,即普通用戶能夠在此目錄擁有寫入權限
c) 若是沒有粘着位,由於普通用戶擁有 w 權限,因此能夠刪除此目錄下全部文件,包括其餘用戶創建的文件。一但賦予了粘着位,除了 root 能夠刪除全部文件,普通用戶就算擁有 w 權限,也只能刪除本身創建的文件,可是不能刪除其餘用戶創建的文件
文件系統屬性 chattr 權限
命令格式
a) [+-=]
b) [選項]
查看文件系統屬性 lsattr
a) 選項
舉例
a) 給文件賦予 i 屬性
b) #給目錄賦予 i 屬性
a) mkdir -p /back/log :創建備份目錄
b) chattr +a /back/log/ :賦予 a 屬性
c) cp /var/log/messages /back/log/ :能夠複製文件和新建文件到指定目錄
d) rm -rf /back/log/messages :可是不容許刪除
*************************************
文件系統管理
*************************************
文件系統管理-初級
硬盤結構
a) 硬盤的邏輯結構分二種
b) 硬盤的大小是使用「磁頭數×柱面數×扇區數×每一個扇區的大小」這樣的公式來計算的。其中磁頭數(Heads)表示硬盤總共有幾個磁頭,也能夠理解成爲硬盤有幾個盤面,而後乘以二;柱面數(Cylinders)表示硬盤每一面盤片有幾條磁道;扇區數(Sectors)表示每條磁道上有幾個扇區;每一個扇區的大小通常是 512Byte。
a) 機械硬盤
b) 固態硬盤
文件系統
a) 記錄整個文件系統的信息,包括 block 與 inode 的總量,已經使用的 inode 和 block 的數量,未使用的 inode 和 block 的數量,block與 inode 的大小,文件系統的掛載時間,最近一次的寫入時間,最近一次的磁盤檢驗時間等。
a) 用來實際保存數據的(櫃子的隔斷),block的大小(1KB、2KB 或 4KB)和數量在格式化後就已經決定,不能改變,除非從新格式化(製做櫃子的時候,隔斷大小就已經決定,不能更改,除非從新制做櫃子)。
b) 每一個 blcok 只能保存一個文件的數據,要是文件數據小於一個 block 塊,那麼這個block 的剩餘空間不能被其餘文件是要;要是文件數據大於一個 block 塊,則佔用多個 block 塊。
c) Windows 中磁盤碎片整理工具的原理就是把一個文件佔用的多個block 塊儘可能整理到一塊兒,這樣能夠加快讀寫速度。
a) 用來記錄文件的權限(r、w、x),文件的全部者和屬組,文件的大小,文件的狀態改變時間(ctime),文件的最近一次讀取時間(atime),文件的最近一次修改時間(mtime),文件的數據真正保存的 block 編號。每一個文件須要佔用一個 inode
經常使用的硬盤管理命令
df跟du命令和區別
a) df –ahT
a) du [選項] [目錄或文件名]
du 與 df 的區別:
lsof | grep deleted :查看被刪除的文件,而後一個進程一個進程的手工 kill 也是能夠的
這些文件在必要的狀況下,能夠謹慎的選擇無用文件刪除,要是全都的文件被刪除,系統就會崩潰、
在非必要狀況下重啓就能夠解決垃圾文件的問題,就不必去手工刪除。手工刪除危險性高。
fsck 文件系統修復命令
b) fsck –y /dev/sdb1 :無需手工啓動,這命令系統啓動時會自動啓動。若是開機啓動修復失敗了,那手工啓動修復也沒用
顯示磁盤狀態dumpe2fs
c) dumpe2fs /dev/sda3
查看文件的詳細時間
d) stat 文件名 : 查看文件的詳細時間
a) Access: 2011-10-29 22:27:45.000000000 +0800 :訪問時間
b) Modify: 2011-09-14 18:02:00.000000000 +0800 :數據修改時間
c) Change: 2011-10-25 22:21:44.000000000 +0800 :狀態修改時間
判斷文件類型
e) file 文件名 判斷文件類型
f) type 命令名 判斷命令類型
fdisk 命令手工分區
fdisk磁盤分區模式
安裝步驟
a) 新建主分區
b) 新建擴展分區
c) 新建擴展分區
注意:要是出現以上二個圖片中的內容
若是新建分區後沒有重啓系統的狀況下在新建分區就會出錯,出錯信息:有多是由於系統的分區表正在被佔用,須要重啓系統後才能生效,
partprobe
d) 強制重讀全部分區文件,從新掛載分區文件內全部分區。這不是分區必須命令,
e) 若是沒有提示重啓,能夠不執行,也能夠重啓系統( Warning: Unable to open /dev/hdc read-write (Read-only file system)./dev/hdc has been opened read-only.光盤只讀掛載,不是錯誤,不用緊張)
f) 若是這個命令不存在請安裝 parted-2.1-18.el6.i686 這個軟件包
注意:目前partprobe被淘汰了,6.8之後沒有效果
格式化
a) mkfs 命令很是簡單易用,不過是不能調整分區的默認參數的(好比塊大小是 4096),這些默認參數除非特殊狀況,不然不須要調整,若是想要調整就須要使用 mke2fs 命令進行從新格式化
a) 選項:
創建掛載點
g) mkdir 掛載目錄 :創建掛載目錄
掛載
h) mount 分區設備文件名 掛載目錄 :掛載目錄
i) mount :查詢當前系統以掛載的設備
自動掛載
j) 修改分區自動掛載文件
k) vi /etc/fstab 注意:此文件直接參與系統啓動,若是修改錯誤,系統啓動報錯
l) 第一列:設備文件名
m) 第二列: 掛載點
n) 第三列: 文件系統
p) 第五列: 1 是否能夠被備份 0不備份 1天天備份 2不按期備份
q) 第六列: 2是否檢測磁盤 fsck 0 不檢測 1 啓動時檢測 2 啓動後檢測
r) dumpe2fs 分區設備文件名 :能夠查看UUID
重啓
s) 要是全都作好沒問題的話
t) 重啓測試 或 mount -a 從新掛載全部內容,用它進行測試
/etc/fstab/文件修復
a) mount -o remount,rw / :從新掛載,並讀寫分區
b) 修改/etc/fstab 文件,把它改回來就能夠正常啓動了
parted 命令分區
分區表
parted 交互模式
查看分區
修改爲 GPT 分區表
注意:必定要把/etc/fstab 文件中和原有分區的內容刪除掉,才能重啓動。要不繫統啓動就必定會報錯的
創建分區
創建文件系統
調整分區大小
注意:若是不是ext2模式的不能夠調整分區大小
刪除分區
注意:還有件事要注意,parted 中全部的操做都是當即生效,沒有保存生效的概念。這點和fdisk 交互命令明顯不一樣,因此所作的全部操做你們要倍加當心
swap 分區
分區
a) fdisk /dev/sdb :進行磁盤分區
修改swap分區ID
b) t :修改分區ID,在硬盤分區模式中使用
c) 只有一個分區,因此不用選擇分區了
d) 82 :改成 swap 的 ID
格式化
e) mkswap /dev/sdb1 :swqp分區專屬的格式命令
查看內存信息
f) free :查看內存信息
swap分區掛載
g) swapon 分區設備文件名 :掛載,swap分區的專用掛載
swap 分區自動掛載
h) vi /etc/fstab :配置自動掛載數據
*************************************
文件系統管理-高級
磁盤配額的概念
因爲Linux是一個多用戶管理的操做系統,而Linux默認狀況下並不限制每一個用戶使用磁盤空間的大小,假如某個用戶疏忽或者惡意佔滿磁盤空間,將致使系統磁盤沒法寫入甚至崩潰;爲了保證系統磁盤的有足夠的剩餘空間,咱們須要對用戶和組進行磁盤空間使用限制。
磁盤配額限制類型:
1. 限制用戶和組對磁盤空間的使用量
2. 限制用戶和組在磁盤內建立文件的個數
磁盤配額限制級別:
注:磁盤配額是針對分區進行設置的,沒法實現「某用戶在系統中共計只能使用50MB磁盤空間」只能設置某用戶在/home分區能使用30M這樣的限制。切記:磁盤配額是針對分區的!
磁盤配額開啓條件
內核是否支持磁盤配額?
#grep "CONFIG_QUOTA" /boot/config-2.6.32-431.el6.x86_64
磁盤配額相關命令是否安裝?
#rpm -q quota
磁盤配額實驗規劃
ü 準備足夠大小的分區,要遠大於實驗的需求空間
ü 建立實驗用戶和組
用戶:cj、bd、xz、
組:thot
ü 磁盤配額規劃
thot:硬:500M 軟:450M 文件數不限制
cj: 硬:50M 軟:40M 硬:10個 軟:8個
bd: 硬:250M 軟:200M 文件數不限制
xz: 硬:250M 軟:200M 文件數不限制
ü 寬限天數修改成8天
磁盤配額實驗流程
環境準備
操做系統,額外的磁盤,內核是否支持
查看系統是否支持磁盤配額
#grep "CONFIG_QUOTA" /boot/config-2.6.32-431.el6.x86_64
查看分區的掛載屬性是否知足
dumpe2fs –h /dev/sdb1 | grep "Default mount options"
注:沒法查看分區是否支持用戶和組的磁盤配額,須要使用mount 查看
查看結果中是否包含usrquota、grpquota兩個掛載屬性?
若是沒有兩個掛載屬性,則須要從新掛載並添加兩個屬性,並寫入自動掛載
建立分區、用戶、用戶組
分區大小要遠大於實驗要求大小,避免影響實驗結果
用戶:cj、bd、xz
組:thot
注:建立用戶時,指定thot爲初始組
SELinux 必須關閉才能進行下面的實驗!
保證用戶建立的文件能消耗組額度
Useradd –g thot cj
quotacheck :生成用戶和組的配置文件
quotacheck 選項
-a 掃描/etc/mtab文件中全部啓用磁盤配額功能的分區。若是加入此參數,命令後面就不須要加入分區名了
-u 創建用戶配額的配置文件,即生成aquota.user
-g 創建組配額的配置文件,即aquota.group
-v 顯示掃描過程
-c 清除原有的配置文件,從新創建新的配置文件
quotacheck -avug
注:若報錯沒有權限生成文件,則須要關閉SELinux
編輯配置文件、設置指定限制大小
edquota 選項 用戶名或組名
-u 用戶名
-g 組名
-t 設定寬限時間
-p 複製磁盤配額規則,不須要每個用戶或者組都手動設置一遍
# edquota -p 模板用戶 -u 目標用戶
注:配置文件中所寫大小默認單位KB
啓動和關閉磁盤配額
啓動:
quotaon 選項
-a 根據/etc/mtab文件啓動全部分區的磁盤配額(不寫分區名)
-u 啓動用戶的磁盤配額
-g 啓動組的磁盤配額
-v 顯示啓動過程信息
quotaon -avug
關閉:
quotaoff 選項 分區名
-a 根據/etc/mtab文件關閉全部分區的磁盤配額(不寫分區名)
-u 關閉用戶的磁盤配額
-g 關閉組的磁盤配額
-v 顯示啓動過程信息
quotaoff -avug
查看磁盤配額的信息
查詢指定用戶和組的配額:
quota 選項 用戶或組名
-u 用戶名
-g 組名
-v 顯示詳細信息
-s 以常見單位顯示大小
quota -uvs 用戶名
quota -gvs 組名
查詢指定分區的磁盤配額:
repquota 選項 分區名
-u 查詢用戶配額
-g 查詢組配額
-v 顯示詳情
-s 以常見單位顯示
repquota -uvs 查詢用戶配額
repquota -gvs 查詢組配額
驗證磁盤配額是否生效
切換到執行用戶,以預設用戶身份進行文件建立(su)
測試工具:
dd 生成指定大小的文件(dd命令詳解見下面或附件)
dd if=/dev/zero of=/分區名/testfile bs=1M count=60
注意:用戶的測試須要切換到指定用戶身份,而組磁盤配額的驗證須要?
非交互設置磁盤配額
setquota -u 用戶名 軟(容) 硬(容) 軟(數) 硬(數) 分區名
注:一樣,這樣的非交互式的命令更適合寫入腳本,並且,假若有不少用戶的磁盤配額配置相同也能夠用複製來實現。
磁盤配額關鍵屬性
usrquota
grpquota
SELinux關閉
在用redhat linux操做系統下怎樣關閉SElinux呢?因爲在默認狀況下,SElinux是默認開啓的,即SElinux的狀態爲enable。對於實驗環境下,有時候SElinux的存在很讓人頭疼。
1.怎樣查看iptables和SElinux狀態:
#service iptables status
#getenforce
2、關閉iptables和SElinux:
#service iptables stop #臨時關閉防火牆
#chkconfig iptables off #永久關閉防火牆,開機不自啓動,想自啓動改爲on
#setenforce 0 #臨時關閉SElinux,臨時打開SElinux狀態命令:setenforce 1
3、永久關閉SElinux
#vim /etc/selinux/config,而後將改成SELINUX=disabled,這樣即便重啓操做系統SElinux也是關閉狀態。
查看SElinux狀態:
#/usr/sbin/sestatus -v
臨時關閉:setenforce 0
僞設備文件
/dev/zero :產生無限個0
用來測試
dd if=/dev/zero of=/分區名/testfile bs=1M count=60
/dev/null :位桶(垃圾桶)
能夠讓不想顯示打印在界面的,能夠用 >> /dev/null 來吞掉
/dev/zero,是一個輸入設備,你可你用它來初始化文件。該設備無窮盡地提供0,能夠使用任何你須要的數目——設備提供的要多的多。他能夠用於向設備或文件寫入字符串0。
/dev/null——它是空設備,也稱爲位桶(bit bucket)。任何寫入它的輸出都會被拋棄。若是不想讓消息以標準輸出顯示或寫入文件,那麼能夠將消息重定向到位桶。外號叫無底洞,你能夠向它輸出任何數據,它通吃,而且不會撐着!
LVM邏輯卷管理
LVM(Logical Volume Manager)邏輯卷管理,它是Linux環境下對磁盤分區進行管理的一種機制。
普通的磁盤分區管理方式在分區劃分好以後就沒法改變其大小,當一個邏輯分區存放不下某個文件時,解決的方法一般是使用符號連接,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。
簡單來講LVM就是將物理磁盤融合成一個或幾個大的虛擬磁盤存儲池,按照咱們的需求去存儲池劃分空間來使用,因爲是虛擬的存儲池,因此劃分空間時能夠自由的調整大小,以下圖:
LVM的組成部分
ü 物理卷(PV,Physical Volume):由磁盤或分區轉化而成
ü 卷組(VG,Volume Group):將多個物理卷組合在一塊兒組成了卷組,組成同一個卷組的能夠是同一個硬盤的不一樣分區,也能夠是不一樣硬盤上的不一樣分區,咱們一般把卷組理解爲一塊硬盤。
ü 邏輯卷(LV,Logical Volume):把卷組理解爲硬盤的話,那麼咱們的邏輯卷則是硬盤上的分區,邏輯卷能夠進行格式化,存儲數據。
ü 物理擴展(PE,Physical Extend):PE卷組的最小存儲單元,PE所在的位置是VG卷組,即硬盤上,那麼咱們能夠把PE理解爲硬盤上的扇區,默認是4MB,可自由配置。
建立LVM
ü 將物理磁盤分區,或整塊磁盤分紅一個區
ü 將物理磁盤上的分區創建成物理卷(PV)
ü 將建立好的物理卷組合成卷組(VG),經過添加或者刪除一塊物理卷,來實現卷組大小的調整。
ü 最後將卷組劃分紅邏輯卷(LV),邏輯卷也是能夠隨意調整大小的,邏輯卷至關於真正的分區,那麼要使用必須進行格式化和掛載。
物理卷管理
卷組管理
建立卷組vgcreate
格式:vgcreate 選項 卷組名 物理卷名(能夠寫多個,空格分開)
-s 大小:指定VG的PE大小
查看卷組
vgscan :查看簡單信息
vgdisplay :查看詳細信息
增長卷組容量vgextend
格式:vgextend 卷組名 物理卷名
減少卷組容量--vgreduce
格式:vgreduce 卷組名 物理卷名
vgreduce –a 卷組
#刪除指定卷組內全部空的物理卷
刪除卷組
vgremove
邏輯卷管理
建立邏輯卷--lvcreate
格式:lvcreate 選項 -n 邏輯卷名 卷組名
-L 容量:指定建立的邏輯卷大小,單位:MB,GB,TB等
-l(小) 個數:按照PE個數來指定邏輯卷大小
-n 邏輯卷名:指定邏輯卷叫什麼名
注:由於邏輯卷至關因而分區,因此須要進行格式化和掛載才能使用,及自啓動
查看邏輯卷
lvscan :查看簡單信息
lvdisplay :查看詳細信息
增長邏輯卷容量--lvextend
注:修改lv及文件系統的大小,必須先將lv及文件系統卸載(umount)
eg.
lvextend -L +10G /dev/testvg/testlv #先增長lv的大小
resize2fs -f /dev/testvg/testlv 30G #再修改文件系統的大小
減少邏輯卷容量—lvreduce
注:減小lv空間的操做是有風險的,操做以前必定要作好備份,以避免數據丟失。
eg.
e2fsck -f /dev/vg/lv #檢查文件系統
resize2fs /dev/vg/lv newsize #減小後文件系統大小
lvreduce -L newsize /dev/vg/lv #減小後lv大小
RAID磁盤陣列
定義:獨立磁盤構成的具備冗餘能力的陣列
磁盤陣列分類:
一是外接式磁盤陣列櫃、
二是內接式磁盤陣列卡,
三是利用軟件來仿真
1.經過把多個磁盤組織在一塊兒做爲一個邏輯卷提供磁盤跨越功能
2.經過把數據分紅多個數據塊(Block)並行寫入/讀出多個磁盤以提升訪問磁盤的速度
3.經過鏡像或校驗操做提供容錯能力
RAID磁盤陣列主要爲了保證硬件損壞的狀況下業務不會終止,沒法防止誤操做
硬-軟raid
硬raid :獨立的管理系統
軟raid :藉助系統來管理
RAID磁盤陣列簡介
RAID 0:沒有奇偶校驗的條帶卷
RAID 0提升存儲性能的原理是把連續的數據分散到多個磁盤上存取,這樣,系統有數據請求就能夠被多個磁盤並行的執行,每一個磁盤執行屬於它本身的那部分數據請求
RAID 1:獨立磁盤冗餘陣列(鏡像卷)
RAID 1經過磁盤數據鏡像實現數據冗餘,在成對的獨立磁盤上產生互爲備份的數據。當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,所以RAID 1能夠提升讀取性能。
RAID 10:鏡象陣列條帶
Raid 10是一個Raid 1與Raid0的組合體,它是利用奇偶校驗實現條帶集鏡像,因此它繼承了Raid0的快速和Raid1的安全。
先建raid1 在建raid0
損壞一塊磁盤時的損壞率:0% (raid01 :0%)
損壞二塊磁盤時的損壞率:三分之一 (raid01 :三分之二)
損壞三塊磁盤時的損壞率:百分百 (raid01 :百分百)
RAID5:分佈式奇偶校驗的獨立磁盤結構
RAID 5 是一種存儲性能、數據安全和存儲成本兼顧的存儲解決方案。 RAID 5能夠理解爲是RAID 0和RAID 1的折中方案。
等分成幾分之一,用來存儲備份。
Raid 5 陣列搭建流程
準備物理磁盤
建立raid5陣列
mdadm -Cv 陣列名稱(md*) -l5 -n3 磁盤 -x1 磁盤
-C:create
-v:顯示詳細信息
eg.
mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb1 /dev/sdb2 /dev/sdb3 -x1 /dev/sdb5
記得要格式化並掛載才能使用,還有自動掛載
查看raid5陣列信息
mdadm –D 設備名
生成raid5陣列配置文件
模擬raid5陣列磁盤損壞
mdadm /dev/md0 –f /dev/sdb3
#標記陣列中某磁盤損壞,並查看磁盤狀態
移除故障磁盤,添加新磁盤
mdadm /dev/md0 --remove /dev/sdb3
#移除故障磁盤
mdadm /dev/md0 --add /dev/sdb6
#添加新的磁盤,恢復正常熱備
if=文件名:輸入文件名,缺省爲標準輸入。即指定源文件。< if=input file >
of=文件名:輸出文件名,缺省爲標準輸出。即指定目的文件。< of=output file >
bs=bytes:同時設置讀入/輸出的塊大小爲bytes個字節。
count=blocks:僅拷貝blocks個塊,塊大小等於ibs指定的字節數。
1.將本地的/dev/hdb整盤備份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
2.將/dev/hdb全盤數據備份到指定路徑的image文件
dd if=/dev/hdb of=/root/image
3.將備份文件恢復到指定盤
dd if=/root/image of=/dev/hdb
4.備份/dev/hdb全盤數據,並利用gzip工具進行壓縮,保存到指定路徑
dd if=/dev/hdb | gzip > /root/image.gz
5.將壓縮的備份文件恢復到指定盤
gzip -dc /root/image.gz | dd of=/dev/hdb
6.備份與恢復MBR
a.備份磁盤開始的512個字節大小的MBR信息到指定文件:
dd if=/dev/hda of=/root/image count=1 bs=512
count=1指僅拷貝一個塊;bs=512指塊大小爲512個字節。
b.恢復:
dd if=/root/image of=/dev/had
將備份的MBR信息寫到磁盤開始部分
7.拷貝內存內容到硬盤
dd if=/dev/mem of=/root/mem.bin bs=1024 (指定塊大小爲1k)
8.拷貝光盤內容到指定文件夾,並保存爲cd.iso文件
dd if=/dev/cdrom(sr0) of=/root/cd.iso
9.增長swap分區文件大小
第一步:建立一個大小爲256M的文件:
dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把這個文件變成swap文件:
mkswap /swapfile
第三步:啓用這個swap文件:
swapon /swapfile
第四步:編輯/etc/fstab文件,使在每次開機時自動加載swap文件:
/swapfile swap swap default 0 0
10.銷燬磁盤數據
dd if=/dev/urandom of=/dev/hda1
注意:利用隨機的數據填充硬盤,在某些必要的場合能夠用來銷燬數據。
11.測試硬盤的讀寫速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
經過以上兩個命令輸出的命令執行時間,能夠計算出硬盤的讀、寫速度。
12.肯定硬盤的最佳塊大小:
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
經過比較以上命令輸出中所顯示的命令執行時間,便可肯定系統最佳的塊大小。
/dev/zero,是一個輸入設備,你可你用它來初始化文件。該設備無窮盡地提供0,能夠使用任何你須要的數目——設備提供的要多的多。他能夠用於向設備或文件寫入字符串0。
/dev/null——它是空設備,也稱爲位桶(bit bucket)。任何寫入它的輸出都會被拋棄。若是不想讓消息以標準輸出顯示或寫入文件,那麼能夠將消息重定向到位桶。外號叫無底洞,你能夠向它輸出任何數據,它通吃,而且不會撐着!
*************************************
Shell腳本
*************************************
shell基礎
Shell 概念
Shell 的分類
查詢Linux中支持的shell類型
a) cat /etc/shells :查詢Linux中支持的shell類型
Shell的執行方式
解析器解析
相對路徑和絕對路徑的「執行方式」
source
shell 腳本
a) 添加x 執行權限(相對或絕對路徑執行)
b) 用bash命令,調用腳本文件
Bash歷史命令的基本功能
Bash_history:查看歷史命令緩存記錄文件
記錄用戶使用命令的文件,須要用戶正常退出的狀況下才會記錄到文件裏面,這文件在家目錄下的bash_history
歷史命令
歷史命令的查看
命令:history [選項]
-c 清空歷史命令
-w 把緩存中的歷史命令保存到歷史命令配置文件
歷史命令的調用
調用以前使用過的歷史命令有如下幾種辦法:
ü 使用上、下光標鍵調用
ü 使用「!n」,重複執行第n條歷史命令
ü 使用「!!」,重複執行上一條命令
ü 使用「!字符」,重複執行最近一條以此字符開頭的命令
命令與文件名的補全
Bash放在/bin/bash中,它有許多特點,能夠提供如命令補全、命令編輯和命令歷史表等功能
命令別名
命令:alias 別名=’原命令 [選項]’
兩個配置文件:
單個用戶:~/.bashrc
全部用戶:/etc/bashrc
注:別名命令的優先級更高
注意:配置文件修改後須要從新加載,讓新添加的內容馬上生效
source /etc/bashrc
source . /etc/bashrc(這個點不是當前路徑的意思)
kernel 2.6.32 前:
alias grep='grep --color=auto'
須要人爲添加到配置文件
kernel 3.10 後
配置文件中默認包含
快捷方式的幾個方法
由於apachectl 在/usr/local/bin/在環境變量目錄下,因此能夠在執行就能夠了
alias sto=’/usr/local/apache2/bin/apachectl stop’
注意事項:不要使用已經存在的命令,要是別名的作做用跟命令的同樣,就能夠用命令做爲別名的名稱,例((alias grep='grep --color=auto'))
命令執行的順序:
NO.1 用絕對路徑或相對的方式執行命令
NO.2 別名命令
NO.3 bash 內置命令
NO.4 根據環境變量定義的目錄查詢找到的命令
Bash 經常使用快捷鍵
輸入輸出重定向
bash的標準輸入輸出
設備 |
設備文件名 |
文件描述符 |
類型 |
鍵盤 |
/dev/stdin |
0 |
標準輸入 |
顯示器 |
/dev/stdout |
1 |
標準正確輸出 |
顯示器 |
/dev/stderr |
2 |
標準錯誤輸出 |
a) 標準輸出:(/dev/stdout)
b) 重定向輸出
c) 輸出類型:
d) 輸入
輸出重定向
輸入重定向
命令:wc [選項] [文件名]
-c 統計字數(字符)
-w 統計單詞數(字符串)
-l 統計行數
多命令順序執行
echo命令: 用於字符串的輸出
用於字符串的輸出
1. echo [選項] [輸出內容]
-e 支持反斜線控制的字符轉換
-n 取消輸出後行尾的換行符號
echo –e :支持反斜線支持的控制轉換
經常使用控制字符
顯示顏色
「\e[1」表明顏色輸入開始;「\e[0m」 表明顏色輸入結束;固定格式!
特殊的控制顯示
a) \e[0m 關閉全部屬性
b) \e[1m 設置高亮度
c) \e[4m 下劃線
d) \e[5m 閃爍
e) \e[7m 反顯
f) \e[8m 消隱
grep命令
命令:grep [選項] 「關鍵詞」 文件名 #行提取命令
-A 數字:列出符合條件的行,並將連續列出後續n行
-B 數字:列出符合條件的行,並將連續列出前面n行
-c :統計包含字符串的行一共幾行!
-i :忽略大小寫
-n :輸出行號
-v :反向查找(取反)
--color=auto:搜索出的關鍵詞高亮顯示
find 和 grep 的區別
find 是在系統中查找符合條件的文件名,是徹底匹配,若是須要模糊查找使用通配符。
#搜索時,只有徹底匹配的纔會被查找出來。
grep 是在文件中查找符合條件的字符串,是包含匹配,若是須要精確查詢,須要使用正則表達式
#查詢關鍵詞時,只要包含關鍵詞的行都被顯示
管道符
格式:命令1 | 命令2
將命令1的標準輸出做爲命令2的標準輸入
ls –l /etc | more
/etc 目錄下內容較多,長格式顯示後一頁顯示不全,用more分頁顯示下
Xargs命令
xargs是實現「將標準輸出做爲命令的參數」
eg:
echo "--help" | cat
echo 「--help」 | xargs cat
echo "--help" |xargs cat --help:當作了命令的選項
若是在特殊狀況下xargs是用命令1的關鍵字作爲命令2的選項
正常狀況下,是用於fing命令的
fing:這一類輸出結果一條條的命令,不能直接使用「|」管道符進行內容傳遞,須要使用xargs
find ./ -name "*.sh" -exec ls -l {} \;
find ./ -name "*.sh" |xargs ls –l
以上二條命令輸出的結果相同
通配符
?:匹配一個任意字符,如a?匹配的結果都是以a開頭及a後面緊跟一個字符的
* :匹配0個或任意多個任意字符,也就是說能夠匹配任何內容,
如a*,匹配的結果是,只要開頭是a都匹配
[] :匹配括號內的任意一個字符(除了-外,不能使用分割符號)
[0-9] :0-9 任意一個
[a-z] :小寫24個字母任意一個
[A-Z] :大寫24個字母任意一個
[a-Z] 和 [a-zA-Z] :結果相同,大小寫24個字母任意一個
若有n在[]中,n會被做爲匹配對象
實驗
Bash 中其餘特殊符號
'':全部在單引號中出現的,都以原格式輸出,特殊符號沒有做用
字符串總體,全部字符串都沒有特殊含義,echo ‘$PATH’
"" :幾乎全部的在雙引號中出現的,都以原格式輸出,除了( $ \ `` )
字符串總體,大部分在「」中無特殊含義 除了$ \ `` echo「$PARH」
``:寫入到反引號中的命令,會被反引號調用出命令的結果
反引號:將命令的結果賦給某變量(a=`date`)
$() a=`date` == a=$(date) :跟``功能同樣
():在小括號中執行的命令(是在新的子shell中執行的,結果不影響當前shell中的內容)
做用:變量測試+替換
()中最後一個命令可不用」;」結尾
{}:在大括號中執行的,和不加大括號結果同樣,沒有區別,只是大括號的使用(特殊)格式:{ name=zs;echo $name;}
~/.bash_profile --> ~/.bashrc --> /etc/bashrc
[ -f /etc/bashrc ] && . /etc/bashrc ]
做用:變量測試+替換
[]:用於變量的測試
[ == ]:判斷符號兩側,括號兩側必須有空格[ "$a" == "$b" ]
[ != ]:注意:> < >= <= 不能直接套用以上格式。
[ "$a" == "$b" ] && echo "yes" || echo "no"]
單引號&雙引號 :
單引號當中的特殊符號沒有特殊含義,雙引號裏面的特殊符號也沒有特殊含義,可是 $ 和 ` 和 \ 是例外!
反引號 :
小括號、中括號、大括號
bash是能夠手動開啓的,每bash一下就是開啓一個shell ,相應的就會有父shell 和 子 shell
bash 前
bash後:
注:最明顯的感受就是當你新開啓一個shell後,你剛纔執行的歷史命令調用不出來。
大括號{ } 和 小括號( )
區別:
² ()執行一串命令時,須要從新開一個子shell進行執行
² {}執行一串命令時,是在當前shell執行
² ()和{}都是把一串的命令放在括號裏面,而且命令之間用;號隔開
² ()最後一個命令能夠不用分號
² {}最後一個命令要用分號
² {}的第一個命令和左括號之間必需要有一個空格
² ()裏的各命令沒必要和括號有空格
實驗:
² () 中執行命令時,新開啓shell 進行
² { } 執行命令時,就在本shell中進行
註釋
腳本註釋: # // ;
編程器註釋:/* $$$ */ <!-- $$$ -->
Bash的變量和運算符
變量是計算機語言中能儲存計算結果或能表示值抽象概念,變量能夠經過變量名訪問,在指令式語言中,變量一般是可變的.
賦值符號:=
兩側不能有空格
值:
若值當中有空格,則須要將整個值用引號(單、雙、反)做爲一個總體
a='123'
b="echo $x"
c=`date`
查看:
set 全部生效了的變量
定義變量的規範:
² 變量名稱能夠由字母、數字和下劃線組成,可是不能以數字開頭,變量中間不能有空格。若是變量名是「2name」則是錯誤的。
² 若是當中有空格,則須要將整個值用引號做爲一個總體 (單,雙,反)
² 在Bash中,變量的默認類型都是字符串型,若是要進行數值運算,則必修指定變量類型爲數值型。
² 變量用等號鏈接值,等號左右兩側不能有空格。
² 變量的值若是有空格,須要使用單引號或雙引號包括。如:「test="hello world!"」。其中雙引號括起來的內容「$」、「\」和反引號都擁有特殊含義,而單引號括起來的內容都是普通字符。
² 雙引號「 」括起來的 $ \ `` 都有特殊含:
² 單引號括起來的都是普通字符
在變量的值中,能夠使用「\」轉義符。
² 若是須要增長變量的值,那麼能夠進行變量值的疊加。不過變量須要用雙引號包含 "$變量名" 或用 ${變量名} 包含變量名。
² 若是是把命令的結果做爲變量值賦予變量,則須要使用反引號或$()包含命令。
² 環境變量名建議大寫,易於區分
set:查看變量 / 自定義變量 / 取消變量:
包含env環境變量
遵循設置規範:變量的設置規範(數字、字母、下劃線)
set 變量 :查看變量
set :
set -u +u
/etc/bashrc
/etc/profile
set-u :設置後,若是調用沒有聲明的變量或沒有的變量就會報錯,如rm刪除等,臨時設置,要永久須要更改/etc/bashrc,,/ect/prfile,中的文件,二選一
set -x +x
在輸出命令結果以前,將命令自己輸出一次,輔助功能
unset :取消變量,只能取消臨時變量
環境變量
² 環境變量設置
export AGE=18
export 聲明的是環境變量
² 環境變量查詢和刪除
env命令:查看環境變量
env命令和set命令的區別是,set命令能夠查看全部變量,而env命令只能查看環境變量。
ü 系統默認的環境變量
env 現實全部環境變量
env命令能夠查詢到全部的環境變量,但是還有一些變量雖然不是環境變量,倒是和Bash操做接口相關的變量,這些變量也對咱們的Bash操做終端起到了重要的做用。這些變量就只能用set命令來查看了。
PATH變量
保存全部存放命令路徑的變量,(變量疊加)
ü PATH變量:系統查找命令的路徑
PATH變量的值是用「:」分割的路徑,這些路徑就是系統查找命令的路徑。也就是說當咱們輸入了一個程序名,若是沒有寫入路徑,系統就會到PATH變量定義的路徑中去尋找,是否有能夠執行的程序。若是找到則執行,不然會報「命令沒有發現」的錯誤。
咱們能夠考慮把本身寫的腳本放入這些目錄,實現直接調用(當命令使用)
或者:
咱們修改PATH變量的值,而不是把程序腳本複製到/bin/目錄中,之後全部寫入這個目錄的腳本均可以直接執行。
上邊寫的這些變量的定義啊,疊加啊,修改啊,什麼的都是臨時的。
PS1變量 (使用單引號)
ü PS1變量:命令提示符設置
PS1是用來定義命令行的提示符的,能夠安裝咱們本身的需求來定義本身 喜歡的提示符。PS1能夠支持如下這些選項:
u \d:顯示日期,格式爲「星期月日」Ø
u \H:顯示完整的主機名。如默認主機名「localhost.localdomain」
u \h:顯示簡寫主機名。如默認主機名「localhost」
u \t:顯示24小時制時間,格式爲「HH:MM:SS」
u \T:顯示12小時制時間,格式爲「HH:MM:SS」
u \A:顯示24小時制時間,格式爲「HH:MM」
u \@:顯示12小時制時間,格式爲「HH:MM am/pm」
u \u:顯示當前用戶名
u \v:顯示Bash的版本信息
u \w:顯示當前所在目錄的完整名稱
u \W:顯示當前所在目錄的最後一個目錄
u \#:執行的第幾個命令
u \$:提示符。若是是root提示符爲「#」,若是是普通用戶提示符爲「$」
想要使用這些必須先知道定義的規範,來看下官方的PS1:
定義ps1的值時須要注意單引號,不然不生效
隨便玩,玩壞了記得改回來!
LANG語系變量
echo LANG :查看當前系統語系
LANG定義的是Linux 的主語系環境變量:
這是由於咱們Linux安裝時,選擇的是中文安裝,因此默認的主語系變量是「zh_CN.UTF-8」。那麼Linux中到底支持多少語系呢?咱們能夠使用如下命令查詢:
或者 用 wc –l 統計下一共支持多少!
咱們當前是什麼語系能夠用locale 直接查詢!
配置文件也能查詢到咱們的默認語系:
這又是當前系統語系,又是默認語系,有沒有快暈倒的感受。解釋下吧,咱們能夠這樣理解,默認語系是下次重啓以後系統所使用的語系,而當前系統語系是當前系統使用的語系。若是系統重啓,會從默認語系配置文件/etc/sysconfig/i18n中讀出語系,而後賦予變量LANG讓這個語系生效。也就是說,LANG定義的語系只對當前系統生效,要想永久生效就要修改/etc/sysconfig/i18n文件了。
說到這裏,咱們須要解釋下Linux中文支持的問題。是否是咱們只要定義了語係爲中文語系,如zh_CN.UTF-8就能夠正確顯示中文了呢?這要分狀況,若是咱們是在圖形界面中,或者是使用遠程鏈接工具(如SecureCRT),只要正確設置了語系,那麼是能夠正確顯示中文的。固然遠程鏈接工具也要配置正確的語系環境,具體配置方式能夠參考Linux系統安裝章節。
那麼若是是純字符界面(本地終端tty1 -tty6)是不能顯示中文的,由於Linux的純字符界面時不能顯示中文這麼複雜的編碼的。若是咱們非要在純字符界面顯示中文,那麼只能安裝中文插件,如zhcon等。
遠程鏈接的顯示:
字符終端的顯示:
安裝有圖形界面的Linux,因此,那些亂碼就是個人中文目錄。
位置參數變量
$@ $* 都是接收除了命令自己之外的全部參數,接收方式不一樣:
$*: 將全部參數當成一個總體(一個值)進行接收
$@: 將每個參數分別接收到本身的變量中
腳本1:
·
腳本2:
v $*顯示全部參數(做爲總體接收)
v $@顯示全部參數(分開接收)
v $#顯示參數個數
預約義變量
$? 根據返回值判斷上一條命令的執行結果
$$ 獲取當前bash解析器的PID
$! 獲取當前終端最後一條正在後臺執行的進行PID號
v $? 錯誤數值是非0 的,正確的是0
v $$ 當前進程的PID
$! 最後一個後臺執行的命令的進程
read接收鍵盤輸入
read [選項] [變量名]
-p 「提示信息」:在read等待時輸入的信息
-t 秒數 :read等待的秒數
-n 字符數:read最多能接收的字符數(達標即執行)
-s :隱藏輸入信息
假如由於特殊選項不換行,用echo 來實現換行。
變量名定義:
ü 變量名能夠自定義,若是不指定變量名,會把輸入保存入默認變量REPLY
ü 若是隻提供了一個變量名,則整個輸入行賦予該變量
ü 若是提供了一個以上的變量名,則輸入行分爲若干字,一個接一 個地賦予各個變量,而命令行上的最後一個變量取得剩餘的全部值
declare聲明變量類型
命令:declare [+/-] [選項] 變量
- : 給變量設定類型
+ : 取消變量的類型
-a : 將變量聲明成數組型
-i : 將變量聲明成整數型
-r : 將變量聲明成只讀(變量值不能修改,也不能刪除,更不能取消只讀選項)
-x : 將變量聲明成環境變量
-p : 顯示指定變量的類型及內容
數組型
數組,實際上是多個相同類型的元素組成的集合,用於解決複雜的數據統計和計算,咱們在shell中基本不會涉及到太多的算法和計算,因此數組瞭解下就能夠了。數組的名字即變量的名字是同一個變量名,咱們在變量名後面加上編號來區分單個變量,數組變量又稱下標變量。
注:數組的下標從0開始,調用數組的元素時要使用${數組[下標]}的格式
咱們剛纔貌似沒有使用declare 聲明
當咱們使用「變量名[下標]」 這樣的格式定義變量時,自動識別成數組
整數型
以前咱們曾經寫過讓兩個數字相加的腳本,可是貌似結果不盡人意,那麼咱們如今將咱們的變量聲明成整數型再來試試。。。
shell種若是想進行數值運算,暫時只能先這樣了。
環境變量
咱們能夠用declare 將變量聲明成環境變量,和咱們的export是一樣的效果。
declare –x 變量名 (環境變量的名字儘可能大寫)
寫完後能夠使用env命令查看下!
只讀變量
只要對變量設置了只讀屬性,這個變量只能進行調用,不能進行修改和刪除,甚至不能進行取消只讀選項。坑爹啊。。。
這個流氓,怎麼辦?。。。
查詢變量和取消變量屬性
變量屬性查詢能夠使用-p,會列出變量設置時使用的參數;變量屬性的取消使用 + 來實現。
使用expr 或 let 數值運算個工具
這兩個是直接聲明運算是數值運算,而不是經過聲明變量的方式,因此相對簡單,可是要注意格式:
expr 使用時須要注意的是,在運算符兩邊要有空格,不然不會正常運算。,
let 則相對簡單易用,原理相同,格式略微變化:
let 還能進行自增增減,或者指定增長減小多少 !
自增&自減
指定增減量
無論是expr 仍是 let 都能實現數值運算,看我的使用習慣。
ü 使用「$((運算式))」或「$[運算式]」格式進行運算
一樣兩種格式都能實現數值運算,看我的喜歡,習慣。
以上三種數值運算方式選擇哪種均可以,在腳本中常見的是$((運算式))。
shell 經常使用運算符
運算符的優先級,就是當有多個運算符同時存在時,誰先進行數值計算, 可是有時也是有特殊狀況的好比:
加減乘除
、
按照表格的優先級是乘除優先於加減,可是因爲加減被()調用,因此,括號的優 先級高於乘除。
取模運算
取模運算和取餘運算絕大部分是重疊的,可是一個是計算機術語,一個是數學概念, 區別在於取模運算對負數處理不太同樣。
邏輯與
變量的測試與內容置換(做爲了解便可)
例1:x=${y-新值}
當沒有:時,y不存在時x=新值,y爲空時x=空,y有值時x=$y
當有:時,y不存在時x=新值,y爲空時x=新值,y有值時x=$y
注:x=${y+新值} 與 x=${y-新值} 相反!
環境變量的配置
source命令
刷新修改過的配置文件使其生效
環境變量配置文件
登陸系統時生效的環境變量配置文件
² /etc/profile
² /etc/profile.d/*.sh
² ~/.bash_profile
² ~/.bashrc
² /etc/bashrc
文件的調用順序是:
在用戶登陸過程先調用/etc/profile文件在這個環境變量配置文件中會定義這些默認環境變量:
² USER變量:根據登陸的用戶,給這個變量賦值(就是讓USER變量的值是當前用戶)。
² LOGNAME變量:根據USER變量的值,給這個變量賦值。
² MAIL變量:根據登陸的用戶,定義用戶的郵箱爲/var/spool/mail/用戶名。
² PATH變量:根據登陸用戶的UID是否爲0,判斷PATH變量是否包含/sbin、/usr/sbin和/usr/local/sbin這三個系統命令目錄。
² HOSTNAME變量:更改主機名,給這個變量賦值。
² HISTSIZE變量:定義歷史命令的保存條數。
² umask:定義umask默認權限掩碼。注意/etc/profile文件中的umask權限是在「有用戶登陸過程(也就是輸入了用戶名和密碼)」時纔會生效。
² 調用/etc/profile.d/*.sh文件,也就是調用/etc/profile.d/目錄下全部以.sh結尾的文件。
由/etc/profile文件調用/etc/profile.d/*.sh文件
² 這個目錄中全部以.sh結尾的文件都會被/etc/profile文件調用,這裏最經常使用的就是lang.sh文件,而這個文件又會調用/etc/sysconfig/i18n文件。/etc/sysconfig/i18n這個文件眼熟嗎?就是咱們前面講過的默認語系配置文件。
由/etc/profile文件調用~/.bash_profile文件。 ~/.bash_profile文件就沒有 那麼複雜了,這個文件主要實現了兩個功能:
² 調用了~/.bashrc文件。
² 在PATH變量後面加入了「:$HOME/bin」這個目錄。那也就是說,若是咱們在本身的家目錄中創建bin目錄,而後把本身的腳本放入「~/bin」目錄,就能夠直接執行腳本,而不用經過目錄執行了。
由~/.bash_profile文件調用~/.bashrc文件
在~/.bashrc文件中主要實現了:
² 定義默認別名,因此咱們把本身定義的別名也放入了這個文件。
² 調用/etc/bashrc
由~/.bashrc調用了/etc/bashrc文件在/etc/bashrc文件中主要定 義了這些內容:
² PS1變量:也就是用戶的提示符,若是咱們想要永久修改提示符,就要在這個文件中修改
² umask:定義umask默認權限。這個文件中定義的umask是針對「沒有登陸過程(也就是不須要輸入用戶名和密碼時,好比從一個終端切換到另外一個終端,或進入子Shell)」時生效的。若是是「有用戶登陸過程」,則是/etc/profile文件中的umask生效。
² PATH變量:會給PATH變量追加值,固然也是在「沒有登陸過程」時才生效。
² 調用/etc/profile.d/*.sh文件,這也是在「沒有用戶登陸過程」是才調用。在「有用戶登陸過程」時,/etc/profile.d/*.sh文件已經被/etc/profile文件調用過了。
這樣這五個環境變量配置文件會被依次調用,那麼若是是咱們本身定義的環境變量應該放入哪一個文件呢?若是你的修改是打算對全部用戶生效的,那麼能夠放入/etc/profile環境變量配置文件;若是你的修改只是給本身使用的,那麼能夠放入~/.bash_profile或~/.bashrc這兩個配置文件中的任一個。
但是若是咱們誤刪除了這些環境變量,好比刪除了/etc/bashrc文件,或刪除了~/.bashrc文件,那麼這些文件中配置就會失效(~/.bashrc文件會調用/etc/bashrc文件)。那麼咱們的提示符就會變成:
註銷時生效的環境變量配置文件
在用戶退出登陸時,只會調用一個環境變量配置文件,就是~/.bash_logout。這個文件默認沒有寫入任何內容,但是若是咱們但願再退出登陸時執行一些操做,好比清除歷史命令,備份某些數據,就能夠把命令寫入這個文件。
其餘配置文件
還有一些環節變量配置文件,最多見的就是~/.bash_history文件,也就是歷史命令保存文件。這個文件已經講過了,這裏咱們只是把它納入環境變量配置文件小節而已。
shell登陸信息
/etc/issue
咱們在登陸tty1 -tty6這六個本地終端時,會有幾行的歡迎界面。這些歡迎信息是保存在哪裏的?能夠修改嗎?固然能夠修改,這些歡迎信息是保存在/etc/issue文件中,咱們查看下這個文件:
\r \m 等是支持的轉義符,查詢可用man agetty
\d :顯示當前系統時間
\s :顯示操做系統名稱
\l :顯示登陸的終端號
\m :顯示硬件體系結構,如i38六、i686等
\n :顯示主機名
\o :顯示域名
\r :顯示內核版本
\t :顯示當前系統時間
\u :顯示當前登陸用戶的序列號
/etc/issue.net
etc/issue是在本地終端登陸是顯示歡迎信息的,若是是遠程登陸(如ssh 遠程登陸,或telnet遠程登陸)須要顯示歡迎信息,則須要配置 /etc/issue.net這個文件了。使用這個文件時由兩點須要注意:
若是咱們須要ssh遠程登陸能夠查看/etc/issue.net的歡迎信息,那麼首先須要修改ssh的配置文件/etc/ssh/sshd_config,加入以下內容:
而後定義/etc/issue.net 後就能顯示歡迎信息了。
/etc/motd
/etc/motd文件中也是顯示歡迎信息的,這個文件和/etc/issue及 /etc/issue.net文件的區別是:/etc/issue及/etc/issue.net是在用戶登陸以前顯示歡迎信息,而/etc/motd是在用戶輸入用戶名和密碼,正確登陸以後顯示歡迎信息。在/etc/motd文件中的歡迎信息,不管是本地登 錄,仍是遠程登陸均可以顯示。
定義bash快捷鍵
查看全部已存在的快捷鍵
修改快捷鍵
stty 關鍵詞 快捷鍵
*************************************
shell高級
正則表達式
概述
在上一章說過正則表達式和通配符的區別(正則表達式用來在文件中匹配符合條件的字符串,通配符用來匹配符合條件的文件名)嗎?其實這種區別只在Shell當中適用,由於用來在文件當中搜索字符串的命令,如grep、awk、sed等命令能夠支持正則表達式,而在系統當中搜索文件的命令,如ls、find、cp這些命令不支持正則表達式,因此只能使用shell本身的通配符來進行匹配了。
基礎正則表達式(grep命令)
v 匹配練習
* :前一個字符匹配0次或任意屢次(連續)
若是正則表達式寫成「aa*」 表明匹配至少包含有一個a的行
. :匹配換行符之外的任意一個字符
正則表達式「.」只能匹配一個字符,能夠是任意字符
^ :匹配行首,
$ :匹配行尾
用「^$」匹配空白行
[ ] :會匹配中括號中指定任意一個字符,注意只能匹配一個字符。好比[ao]要不匹配一個a字符,要不匹配一個o字符
[0-9] [a-z] [A-Z] 相似這樣的均可以,指定匹配的範圍
[^0-9]匹配除了數字之外的任意一個字符
^[^a-zA-Z]這個表明啥呢??
\ :轉義符
將特殊符號轉義成普通符號,好比咱們的 .
\{n\} 表示前面的字符剛好出現n次
\{n,\} 表示其前面的字符出現不小於n次
\{n,m\} 匹配其前面的字符出現不小於n次,最多出現m次
擴展正則表達式(egrep命令或grep -E)
熟悉正則表達式的童鞋應該很疑惑,在正則表達式中應該還能夠支持一些元字符,好比「+」「 ? 」「|」「( )」。 其 實Linux是支持這些元字符的,只是grep命令默認不支持而已。若是要想支持這些元字符,必須使•命令或grep -E選項,因此咱們又把這些元字符稱做擴展元字符。
若是查詢grep的幫助,對egrep的說明就是和grep -E選項同樣的命令,因此咱們能夠把兩個命令當作別名來對待。經過下面表格來看看Shell中支持的擴展元字符:
使用egrep或grep –E 時,不須要轉義符
cut列提取命令
cut [選項] 文件名
-f 列號:提取第幾列
-d 分隔符:按照指定的分割符進行分割
-c 字符範圍:不依賴分割符來分割,而是經過字符範圍進行字段提取(「-m」表示從第一個字符提取到第m個,「n-m」表示從第n提取到第m個字符,「n-」表示從第n個字符開始提取到結尾。)
注意:空格被默認爲字符,全部不支持,只能使用(Tab鍵)
手動建立文本,添加內容列之間用製表符分割
#假如用空格隔開,那麼可能會別認定爲是同一列。
咱們能夠使用-d 指定分割符號,好比/etc/passwd
#經過指定分割符的方式來肯定如何額進行分割,咱們把/etc/passwd按照:分割,截取第一個第七字段,就能統計哪些用戶能登陸系統,哪些不能登陸。
cut 能夠按照字符數進行截取,按照咱們上面的格式寫就OK了
now,咱們來截取下df –h 命令的結果!
cut 命令默認的分割符是製表符,即tab鍵,對於空格的支持比較差
printf 格式化輸出
print 和 printf 的主要區別在有 printf 是標準的格式化輸出,必須手動指定換行和tab。
輸出格式類型:
printf 和 print 的區別
#查看df 的真實分區的使用狀況,不看光盤和虛擬磁盤
使用printf輸出下咱們的表格文件
printf輸出下
printf ‘ %s ’ $(cat bg.sh)
printf命令,若是不指定輸出格式,則會把全部輸出內容連在一塊兒輸出。其實文本的輸出自己就是這樣的,cat等文本輸出命令之因此能夠按照格式漂亮的輸出,那是由於cat命令已經設定了輸出格式。那麼爲了用printf輸出合理的格式,應該這樣作:
printf ‘%s\t%s\t%s\t%s\t\n‘ $(cat bg.sh)
咱們要按照整數型和浮點型輸出,則須要修改成:
printf ‘%i\t%s\t%8.2f\t%s\t\n‘ $(cat bg.sh | grep –v ID)
awk命令
awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據能夠來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。
awk基本使用
awk ‘條件1{動做1} 條件2{動做2} ……’ 文件名
條件:通常使用關係表達式做爲條件
x>10 判斷x變量是否大於10
x==y 判斷變量x是否等於變量y
A ~ B 判斷字符串A中是否包含能匹配B表達式的字符串
A!~ B 判斷字符串A中是否不包含能匹配B表達式的字符串
動做:格式化輸出
顯示bg.sh 中的第二和第三列信息
還記的cut 來截取df –h 的結果嗎?用咱們的awk試試吧!
awk的條件
BEGIN:處理文件以前執行
BEGIN是awk的保留字,是一種特殊的條件類型。BEGIN的執行時機是「在awk程序一開始時,還沒有讀取任何數據以前執行」。一旦BEGIN後的動做執行一次,當awk開始從文件中讀入數據,BEGIN的條件就再也不成立,因此BEGIN定義的動做只能被執行一次。例如:
整個動做定義了兩個動做,先打印「this is a transcript」,而後輸出過濾後的2和4列
END:處理文件以後執行
END也是awk保留字,不過恰好和BEGIN相反。END是在awk程序處理完全部數據,即將結束時執行。END後的動做只在程序結束時執行一次。例如
其實就是和BEGIN正好相反!
關係運算符
設定條件,符合條件的纔會進行相應動做,不知足不運行
設定條件爲>=30歲的列出。
u awk是列提取命令,第一步的動做倒是先讀入第一行,整個執行步驟:
Ø 若是有BEGIN條件,則先執行BEGIN定義動做
Ø 若是沒有BEGIN條件,則先讀入第一行,把第一行的數據依次賦成$0 $1 $2 $3 …等變量,$0 表明整行數據,$1 則爲第一個字段,依次類推。
Ø 讀入下一行,重複賦值變量
正則表達式、剛纔看到了,咱們識別字符串用的是// 這是awk 的正則
awk內置變量
注意:
#BEGIN的做用,不寫的時候直接輸出$0 即第一行。
#將上述命令中的grep 「/bin/bash」去掉,sshd是僞用戶。
awk流程控制
先準備好操做文檔,以下
在awk中定義和調用變量
在awk編程中,由於命令語句很是長,輸入格式時須要注意如下內容:
² 多個條件{動做}能夠用空格分割,也能夠用回車分割。
² 在一個動做中,若是須要執行多個命令,須要用「;」分割,或用回車分割。
² 在awk中,變量的賦值與調用都不須要加入「$」符。
² 條件中判斷兩個值是否相同,請使用「==」,以便和變量賦值進行區分。
假如年齡小於25歲,則輸出 $2 is young man
、
按照成績來過濾,並顯示相應信息。
awk函數
awk在編程時容許使用函數,函數定義方法:
function 函數名 (參數列表){
函數體
}
經過定義的函數格式,去匹配並傳遞參數。
awk中調用腳本
對於小的單行程序來講,將腳本做爲命令行自變量傳遞給awk是很是簡單的,而對於多行程序就比較難處理。當程序是多行的時候,使用外部腳本是很適合的。首先在外部文件中寫好腳本,而後能夠使用awk的-f選項,使其讀入腳本而且執
awk –f pass.awk /etc/passwd
例
有BEGIN,先指定BEGIN對應的動做,再讀取指定文本進行處
當讀取要處理的數據時,按照一行一行的方式進行順序讀取,根據默認的或指定的分割符進行 分割賦值
根據條件進行判斷,將符合條件的對象按照 指定格式輸出 (printf)
全部數據都處理完成後,最終執行END對用的動做,結束
第一個 sort 的目的是從新排序,爲uniq -c 作準備,sort -rn 的目的是按訪問量從大到小進行排序
sed命令
sed主要是來進行數據選取,替換,刪除,新增的命令
非交互式文本處理器
Sed會把全部輸出默認定向到屏幕
用-i才能保存文件
選項:
u -n:通常sed命令會把全部數據都輸出到屏幕,若是加入此選擇,則只會把通過sed命令處理的行輸出到屏幕。
u -e:容許對輸入數據應用多條sed命令編輯。
u -f 腳本文件名:從sed腳本中讀入sed操做。和awk命令的-f很是相似。
u -r:在sed中支持擴展正則表達式。
通常使用在進行匹配是 要求使用正則表達式時 加入
基礎正則表達式能夠直接使用,不加 -r
擴展正則表達式,則必須使用 -r 選項聲明才能調用
u -i:用sed的修改結果直接修改讀取數據的文件,而不是由屏幕輸出
動做:
u p:打印,輸出指定的行。
u a \:追加,在當前行後添加一行或多行。添加多行時,除最後一行外,每行末尾須要用「\」表明數據未完結。
u i \:插入,在當期行前插入一行或多行。插入多行時,除最後一行外,每行末尾須要用「\」表明數據未完結。
u c \:整行替換,用c後面的字符串替換原數據行,替換多行時,除最後一行外,每行末尾需用「\」表明數據未完結。
u d:刪除,刪除指定的行。
u s:字串替換,用一個字符串替換另一個字符串。格式爲「行範圍s/ 舊字串/新字串/g」( 和vim中的替換格式相似)
對sed命令咱們要知道的是,它全部的修改都不會直接修改文件的內容,而是在內存中進行處理而後打印到屏幕上,使用 -i 選項纔會保存到文本中。
實例:
行數據操做
顯示某行的信息
sed ‘2p’文件
-n 顯示時只顯示指定的行進行顯示
刪除數據
sed ‘2,4d’文件
用sed 刪除掉的文件內容並無真的修改文件
追加、插入數據
sed ‘2[ a | i ]’ 文件名
a 在指定行後面追加,i 在指定行前面插入
假如要追加多行,則須要用 \ 做爲一行的結束,最後一行不須要。
-n 的做用是隻顯示追加部分!
整行替換數據
sed ‘2c No such person’
上面咱們作了不少操做,可是全部的操做都沒有保存到源文件中,假如你肯定你就是要修改此文檔,請在sed 後面跟上-i 選項,但請必定要當心,(最好是先不帶i 預先設置看下結果,而後再加上i選項)
字符串替換
c 進行整行替換,假如想進行關鍵詞替換(一行中的一部分),咱們須要用s 來進行替換,格式:
sed ‘ns/old/new/g’ 文件名 #n表明第幾行
順便把sc 的成績註銷掉,讓他補考去吧!
將指定內容替換成空
sed 要進行多行操做時,只能經過-e 寫多條操做語句,用;或回車分隔。
sort字符處理命令
sort 排序命令
sort 選項 文件名
-f 忽略大小寫
-b 忽略每行前的空白部分
-n 以數值型進行排序,默認使用字符串類型排序
-r 反向排序
按照關鍵詞前的統計結果進行排序(-n 用數值型排序)
-u 刪除重複行(=下面的uniq)
-t 指定分隔符,默認分割符是製表符
-k n[,m] 按照指定字段範圍排序,從n字段開始到m字段結束。
sort 將每一行當作一個總體,多行之間進行對比,對比方式:逐個字符比較,按照ASCII編碼升序進行 排列
若要按照標準的英語ASCII編碼進行排序,須要取消掉當前的語系類型(unset LANG;sort -f /test/b >> a.txt)
例
sort b.txt | uniq -c | sort -rn
sort 爲了將重複行排列到一塊兒
uniq -c 統計重複行出現的次數
sort 命令默認使用每行開頭第一個字符進行排序
假如 要進行反向排序則須要加-r 選項
按照指定的排序字段進行排序,使用-t 指定分割符 , 而且使用-k 指定段號
#有問題!排序並非0 1 2 3 。。。
oh,好了,看來以前的排序方式是字符排序,而加上-n 以後成爲了數值排序。
指定範圍時咱們能夠寫 –k 3,5 也能夠寫3,3 ==
uniq取消重複行
必先sort在uniq,因重複行不連續時uniq不處理!!!
uniq用來取消重複行,與sort –u 是同樣的,格式:
uniq 選項 文件名
- i 忽略大小寫
- c 顯示輸出中,在每行行首加上本行在文件中出現的次數。它可取代- u和- d選項。
統計連續的重複行出現次數(將統計結果標記在關鍵詞 前)
- d 只顯示重複行。
- u 只顯示文件中不重複的各行。
- n 前n個字段與每一個字段前的空白一塊兒被忽略。一個字段是一個非空格、非製表符的字符串,彼此由製表符和空格隔開(字段從0開始編號)。
+n 前n個字符被忽略,以前的字符被跳過(字符從0開始編號)。
- f n 與- n相同,這裏n是字段數。
- s n 與+n相同,這裏n是字符數。
須要注意的是,當重複行不連續時,uniq是不生效的,須要先排序,再執行
統計命令WC
wc [選項] 文件
c 統計字節數。
-l 統計行數。
-m 統計字符數。這個標誌不能與 -c 標誌一塊兒使用。
-w 統計字數。一個字被定義爲由空白、跳格或換行字符分隔的字符串。
-L 打印最長行的長度。
-help 顯示幫助信息
--version 顯示版本信息
統計指定文件中的字節數、字數、行數,並將統計結果顯示輸出。該命令統計指定文件中的字節數、字數、行數。若是沒有給出文件名,則從標準輸入讀取。wc同時也給出所指定文件的總統計數
sleep 1 :睡眠1秒
sleep 1s :睡眠1秒
sleep 1m : 睡眠1分
sleep 1h :睡眠1小時
#!/bin/bash
b=' '
for ((i=0;$i<=100;i++))
do
printf "Progress:[%-100s]%d%%\r" $b $i
sleep 0.1s
b=#$b
done
按照文件類型進行判斷
使用 [ ] 括號來進行判斷,利用 $? 來檢測判斷結果
#注意 [ ] 中內容和括號之間有空格
#咱們能夠結合以前所學的&& 和 || 實現
按照文件權限進行判斷
測試:
兩個文件之間進行比較
判斷下咱們的硬連接
兩個整數之間進行比較
測試
字符串的判斷
上面是判斷字符串,若是要判斷變量,就要加雙引號
判斷變量是否爲空要用雙引號「」,
測試
#字符爲空和沒有賦值都爲空
多重條件判斷
測試:邏輯與
邏輯非
-n 變量不爲空,則爲真
! 加入後,判斷取反,因此變量爲空纔是真
if條件判斷
單分支if條件語句
單分支條件語句比較簡單,只須要一個判斷條件,符合則執行,不符合則直接退出。
格式:
if [ 條件判斷式 ];then
程序
fi
注意事項:
if [ 條件判斷式 ]
then
程序
fi
統計根分區使用率?
雙分支if條件語句
格式:
if [條件判斷式]
then
條件成立,執行的程序
else
條件不成立,執行的程序
fi
多分支if分支語句
格式:
if [條件判斷式1]
then
條件判斷式1成立,執行程序1
elif [條件判斷式2]
then
條件判斷式2成立,執行程序2
更多………
else
都不成立,則執行此程序
fi
練習:判斷文件是什麼類型的文件的腳本!
case分支語句
case語句和if...elif...else語句同樣都是多分支條件語句,不過和if多分支條件語句不一樣的是,case語句只能判斷一種條件關係,而if語句能夠判斷多種條件關係。
case語句語法以下:
case $變量名 in
「值1」)
變量的值等於值1,則執行程序1
;;
「值2」)
變量的值等於2,則執行程序2
;;
省略多個分支…………
*)
變量的值都不匹配上面的值,則執行此程序
;;
esac
注意事項:
練習:寫一個源碼apache的啓動管理腳本
for循環
for循環是固定循環,循環次數是有限的次數,也叫計數循環。
語法一:
for 變量 in 值1 值2 值3 ……
do
程序
done
注:這種語法中for循環的次數,取決於in後面值的個數(空格分隔),有幾個值就循環幾回,而且每次循環都把值賦予變量。也就是說,假設in後面有三個值,for會循環三次,第一次循環會把值1賦予變量,第二次循環會把值2賦予變量,依次類推。
練習:計算1+2+3+..+10的結果?
語法二:
for ((初始值;循環控制條件;變量變化))
do
程序
done
注:
練習:計算1+2+3+..+100的值?
while循環
只要條件判斷式成立,循環就會一直繼續,直到條件判斷式不成立,循環纔會中止。
語法:
while [ 條件判斷式 ]
do
程序
done
練習:仍是1+2+3+..+100=?
until循環
until循環和while循環相反,只要條件判斷式不成立,則一直循環,何時成立,何時結束循環
語法:
until [ 條件判斷式 ]
do
程序
done
函數
語法:
function 函數名 () {
程序
}
練習:將1+2+3+..+n寫成函數!
注意:function在shell中能夠不用輸
特殊流程控制語句
exit退出腳本
系統中的exit是退出當前登陸 , 可是在shell中則只是退出腳本,後續再也不進行執行。
exit [ 值 ]
exit 退出時若是定義好了返回值,那麼咱們能夠經過「$?」來查看
break退出循環
當程序執行到break 語句時,會結束當前的循環,直接退出。
continue跳出循環
continue只會結束當前的單次循環,將本次跳出繼續下次循環。
true跟false
true:什麼都不作,只設置退出碼爲0
false:什麼都不作,只設置退出碼爲1
在Linux底下,每一個程序執行完畢都會返回一個退出碼給調用者,通常狀況下0表示成功,其餘值代表有問題
引導裝載程序設備
a) 雖然系統安裝到了硬盤,但引導文件還在u盤上,拔走u盤後開機還會顯示沒法加載,需引導
head –3 /etc/passwd|awk -F ":" '{printf $(NF=5)"\n"}'
head –n 3 /etc/passwd|awk -F ":" '{printf $(NF=5)"\n"}'
或
head –3 /etc/passwd|awk -F ":" '{printf $(NF-2)"\n"}'
head –n 3 /etc/passwd|awk -F ":" '{printf $(NF-2)"\n"}'
或
awk –F : ‘{printf $wf-2 「\n」}’ /etc/passwd
echo `seq 1 10`
取1-10範圍內的整數(可直接應用於for的循環結構中)
echo ‘seq 1 10’
可把1-10輸出至一行
seq 10 -0.5 -5
也能夠實現
seq -f 「3g」 1 10
3g:指定數字的位數爲3
seq -f 「03g」 1 10
03g:指定數字位數爲3,不足用0補
seq -w 5 10
指定輸出寬度一致,與最大數位數保持一致,不足用0補
不能與-f同時用
seq -f 「s*r9003g」 5 10
90前制定字符串,輸出:
s*005
s*006--- s*010
seq -s 「 」 5 10
指定分隔符與空格默認爲換行
echo能夠把\n設爲空格,須要外加\t
c=$(echo "5.01-4*2.0"|bc)
echo $c
-2.99
c=$(awk 'BEGIN{print 7.01*5-4.01 }')
echo $c
31.04
BEGIN必須要用,否則會等待輸入文件名
declare -a abc :無關緊要
abc[0]=1 , abc[1]=2
unset abc :刪除整個數組全部信息
unset abc[1] :只刪除單個數據,其它數據下標不變
a、abc=(1 2 3)47
b、a="1 2 3"
abc=($a)
echo ${abc[*]}
echo ${abc[@]}
相等
$(#abc{@}) 等同於 ${#abc[*]}
echo ${abc[1]} | wc -L
echo -n ${abc[1]} | wc -L
#去掉換行符再統計
abc=(1 2 3)
a=0
for i in ${abc[@]}
do
echo "第$a個元素的值爲:$(i)"
let a++
done
abc=(1 2 3)
abc[3]=10
abc=(1 2 3)
bcd=(${abc}[*] 4)
echo $(bcd[*])
abc=(1 2 3 4 5 6 7)
${abc[@]} 等於 ${abc[*]}
${abc[@]:1}
#從下標爲1的位置開啓取值,直到結尾
而且哪怕開了「set -u」,使用下標超界也不會報錯
關鍵沒有任何提示 !!!危險
${abc[@]::3}
#從下標爲0的位置連續取3個值
${abc[@]:2:3}
#從下標爲2的位置連續取3個值
${abc[@]:(-2):2}
#從倒數第二個下標位連續取2個值
只顯示2個值,因第3值不存在,但無任何報錯!!!
bcd=(${abc[@]:(-2):2})
#將以前的處理結果賦值給新的數組變量
切片後賦值新數組
abc=(zhangsan lisi laowang laosong)
${abc[0]}
##取第一個元素的全部字符
${abc[0]:1}
#從第一個元素的下標爲1位置開始,取剩餘全部字符
${abc[0]::3}
#從第一個元素的下標爲0位置開始,連續取三個字符串
${abc[0]:2:3}
#從第一個元素的下標爲2位置開始,連續取三個字符串
abc=(one two three four)
${abc[@]/e/E}
#每一個被匹配元素只替換一次
每一個元素中只替換匹配到的第一個字符「e」換爲「E」
${abc[@]//e/E}
#每一個被匹配元素替換屢次
每一個元素中替換全部匹配到的「e」換爲「E」
${abc[@]/e/}
#每一個被匹配元素只刪除一個字符
每一個元素中刪除第一個匹配到的字符「e」
${abc[@]/e/}
#每一個被匹配元素刪除多個字符
每一個元素中刪除全部匹配到的字符「e」
abc=(zhangsan lisi laowang laosong)
${abc[0]/#z/Z}
#將數組內第一個元素的首字符z替換成Z
${abc[0]/%n/N}
#將數組內第一個元素的尾字符n替換成N
#若想實現每個都智能替換,要使用很複雜的循環,暫不建議如今編寫
a=`echo 2018-04-28_12:15:30_ABC.log |awk -F "." '{printf $1}'| sed -r 's/[-_:]/ /g' | tr -d "[a-zA-Z]"`
abc=(${a})
for i in ${abc[@]}
do
echo $i
done
echo 2018-04-28_12:15:30_ABC.log | sed -r 's/[-_:]/ /g' | grep -v 「[a-Z]」
echo 2018-04-28_12:15:30_ABC.log | sed 「[a-Z]//g」 | sed -r 's/[-_:]/ /g'
a=(34 78 3 95 62 59 100)
max=${a[0]}
len=${#a[@]}
for ((i=1;i<$len;i++))
do
if [[ ${a[i]} -gt ${max} ]]
then
max=${a[i]}
fi
done
echo "數組中最大值爲:$max"
1. 單中括號的test(?)命令纔會對變量進行單詞分離
a=」a b」 [ $a = 「a b」 ] && echo yes (需用」$a」)
2. 雙中括號的test(?)命令不會對變量進行單詞分離
a=」a b」 [[ $a = 「a b」 ]] && echo yes
*************************************
shell注意事項
*************************************
Linux啓動管理
啓動流程自解
若是電腦不支持虛擬器,重啓本機電腦,打開BIOS,把物理CPU是否支持虛擬化的開頭(打開)
加電自檢
引導程序加載(boot loader)
加載內核(kernel)
全部硬件設備的驅動
系統所需的功能模塊(*.ko)
確認系統啓動的默認級別(/etc/inittab)
守護進程(內核啓動只會加載守護進程)
系統的守護進程(init)
內核啓動只加載守護進程
內核3.*前:init
大多自動啓動受init管理
內核3.*和3.*之後:systemd
幾乎全部的手動或自動啓動都受到systemd管理
加載須要開機自啓的服務
依靠系統的守護進程init啓動各種服務進程
根據系統啓動級別確認哪些軟件開機自啓(/etc/rc.d/rcN.d)(k開頭不自啓;s開頭開機自啓)
啓動流程詳細
按下電源鍵
插電後第一個設備通電的就是主板BIOS
BIOS自檢
BIOS程序加載(從內存里加載)
第一階段:POST(Power-on-self test),主要檢測主機硬件設備如:CPU、內存、硬盤、顯卡等是否正常;
在第一階段完成後會按BIOS中設置的系統啓動順序來搜索可啓動的磁盤設備。如:光盤、硬盤、U盤等;搜到第一個可啓動的設備後就讀取該設備的第一個扇區的內容並執行。到此爲止BIOS的任務就完成了。
檢查全部硬件是否正常工做
經過BIOS程序能夠調整硬件的工做模式
若是主板有二個頻率不一致的CPU,默認是按低頻率的CPU
系統引導
MBR(Master Boot Record):硬盤的0柱面、0磁頭、1扇區稱爲主引導扇區。它由三個部分組成,主引導程序(Bootloader)、硬盤分區表DPT(Disk Partition table)和硬盤有效標誌(55AA)
加載引導菜單,提供選擇操做的系統的選項
選擇進入操做系統時,進入模式(7種)也是啓動級別
看下面的登陸系統
Linux內核啓動。
Bootloader爲引導加載程序,它的主要功能爲:
一、 提供菜單,容許用戶選擇要啓動的系統或不一樣的內核版本;
二、 加載選定的內核到內存中,解壓、展開,然後把系統的控制權交給內核;目前Linux中最經常使用的Bootloader 爲GRUB;
GRUB引導
主要有三個階段:
stage1:做用很簡單就是把第一個扇區讀取到內存中,但注意stage1是沒有識別文件系統的能力的。
stage1.5:做爲stage1和stage2的中間橋樑,stage1.5是有識別文件系統的能力的,此後grub才能去訪問/boot/grub目錄下的stage2文件,並將stage2載入內存中執行。
stage2:被載入內存執行時,它首先會去解析grub的配置文件/boot/grub/grub.conf,而後加載內核鏡像到內存中,並將控制權轉交給內核。而內核會當即初始化系統中各設備並作相關的配置工做,其中包括CPU、I/O、存儲設備等。
初始化系統
內核被加載到內存中而且取得了系統的控制權,在取得控制權後內核會當即初始化系統中的設備,包括CPU、I/O、存儲等;
守護進程
關於Linux的設備驅動程序的加載,可能會須要initrd(ramdisk)。由於有一部分驅動程序會被直接編譯進內核文件中,另外一部分會被以模塊的形式放在initrd中;在初始化硬件及加載各硬件驅動程序後,內核會以只讀的方式掛載根文件系統,而且運行第一個程序/sbin/init。此後系統的控制權就交給了/sbin/init進程了。
內核3.*前:init
大多自動啓動受init管理
內核3.*和3.*之後:systemd
幾乎全部的手動或自動啓動都受到systemd管理
登陸系統
/sbin/init進程是系統第一個啓動的程序,它是其餘全部進程的父進程。當它接管了系統的控制權先以後,它首先會去讀取/etc/inittab文件來執行相應的腳本進行系統初始化,如設置鍵盤、字體,裝載模塊,設置網絡等。
在niittab中有一個很重要的設置選項runlevel。根據runlevel的不一樣啓動不一樣的服務,讓Linux的使用環境不一樣。
基本上runlevel分爲0-6 ,7個等級:
0:關機,shutdown
1:單用戶模式(sigle user),root用戶,無須認證;維護模式;。
2:多用戶模式(multi user),會啓動網絡功能,但不會啓動NFS;維護模式;
3:多用戶模式(multi user),徹底功能模式;文本字符界面;
4:預留級別:目前無特別使用目的,但習慣同3級別使用;
5:多用戶模式(multi user),徹底功能模式,圖形界面;
6:重啓模式,
系統啓動腳本配置文件
系統初始化的過程主要是執行一些腳本配置文件來完成的:
一、執行系統初始化腳本(/etc/rc.d/rc.sysinit),對系統進行基本的配置,以讀寫方式 掛載 根文件系統及其它文件系統,到此係統算是基本運行起來了,後面須要進行運行級別的肯定及相應服務的啓動。
二、執行/etc/rc.d/rc腳本。該文件定義了服務啓動的順序是先K後S,而具體的每一個運行級別的服務狀態是放在/etc/rc.d/rc*.d(*=0~6)目錄下,全部的文件均是指向/etc/init.d下相應文件的符號連接。rc.sysinit經過分析/etc/inittab文件來肯定系統的啓動級別,而後纔去執行/etc/rc.d/rc*.d下的文件。
三、執行用戶自定義引導程序/etc/rc.d/rc.local完成了系統全部的啓動任務後,linux會啓動終端或X-Window來等待用戶登陸。
最後一步輸入用戶名及密碼就能夠登入系統了。
若是看不清楚 請看附件
配置文件
grub.conf
grub.conf是grub的主配置文件,經過這個配置文件,grub才能找到kernel,系統才能正常啓動。
default
default:定義默認啓動的操做系統
timeout
timeout:定義選擇操做系統菜單的等待時間
splashimage
splashimage:指定咱們選擇kernel或操做系統菜單後面那張圖片。若是定義,這張圖片須要用linux自帶的軟件xmp製做,在圖形界面能夠打開。圖片的特色爲:
1,必須是xpm的格式
2,必須用gzip壓縮
3,最多使用14位的顏色位數
4,分辨率640*480
hiddenmenu
hiddenmenu:表示隱藏選擇k操做系統的菜單,只有出現等待界面後按下enter鍵纔會出現。若是沒有這個字段,則每次系統啓動都會出現這個選擇菜單。
title identify:指定一個操做系統,linux中能夠有多個title;identify是這個操做系統的識別符,能夠隨意寫。
root:用於指定grub所能識別的根,而不是根文件系統。
kernel:用於指定系統的內核文件的位置
initrd:幫助kernel完成系統的啓動,例如加載根文件系統所在分區的驅動等。若是kernel自己有相應強大的功能,則不須要initrd
password
password:設定密碼。放在title外表示進入操做系統等待菜單的編輯模式須要密碼,而放在title內表示啓動對應的操做系統須要密碼,密碼能夠是明文或是用MD5進行加密過的。能夠防止其餘人進入編輯kernel菜單進入單用戶模式啓動咱們的系統
實驗:
背景圖片的位置:
splashimage=(hd0,0)/grub/splash.xpm.gz
grub是以hd來識別磁盤的,第一磁盤爲hd0,第二個磁盤爲hd1...,
而hd0,0表示第一個磁盤的第一個分區,hd0,1表示第一個磁盤的第二個分區...,而且grub是直接讀分區來找到對應的文件;
而個人系統上只有一塊硬盤,而且/boot是一個單獨的分區,而且爲系統的第一個分區,grub等文件在這個分區上。(若是你的系統上/是一個獨立分區,而且boot,grub和其中的文件都在/這個分區中,則這段應該是: splashimage=(hd0,0)/boot/grub/splash.xpm.gz)因此它的意思是:grub在第一個分區中找到grub這個目錄,再找到這個圖片文件做爲背景.
修改背景圖片:
生成所需的xpm格式的圖片文件
使用ImageMagick命令將普通的.jpg.bmp等生成xpm文件
grub 加密:
password --md5 $1$UrprW0$UzN7ozenwICzcPCQgiFts1
表示要想進入kernel的編輯菜單,須要輸入密碼。這個密碼能夠經過命令grub-md5-crypt生成。
密碼添加在title前面
將密碼放在這個位置時,在選擇grub菜單時就須要輸入密碼了。
密碼添加在title後面
密碼在這個位置時,選擇完操做系統後,在進入系統引導時才須要輸入密碼。
root密碼找回
手動安裝grub
通常在grub被覆蓋的狀況下咱們須要進行手動的安裝grub到咱們的MBR中,那如今的問題是grub已經損壞了,咱們沒有一個能夠交互寫命令的地方了,應該怎麼設置呢?so…咱們要藉助光盤上的拯救模式。
根據提示加載光盤上的虛擬系統後,咱們須要手動安裝下grub
a. chroot /mnt/sysimage
因爲是光盤啓動的救援模式,so….它的根目錄是虛擬的,咱們須要用chroot命令將真根目錄掛載回來
b. 執行grub 進入交互界面
root (hd0,0) #設置grub的主目錄
setup (hd0) #直接將grub安裝到MBR中,不須要指定分區(硬盤開頭)
quit
c. 重啓
內核模塊
模塊位置:
/lib/modules/2.6******/kernel/
模塊保存文件:
/lib/modules/2.6******/modules.dep
depmod:模塊同步到modules.dep中
depmod
-a 掃描全部,並寫入*.dep
-A 掃描新模塊,並寫入*.dep
-n 顯示到屏幕,不寫入*.dep
查看內核模塊
lsmod 查詢全部模塊的信息
modinfo 查詢某模塊的簡單信息
添加刪除內核模塊
modprobe [選項] 模塊
a. 下載到相應的模塊
b. 複製到指定位置,通常/ib/modules/2.6******/kernel/
c. 用depmod進行掃描,將新模塊寫入modules.dep文件中
d. 用modprobe進行安裝
*************************************
Linux服務管理
服務分類
二進制包
1. 快速安裝、卸載、升級和管理軟件
2. 安裝簡潔、速度快
3. 通過封裝,沒法直接獲取源代碼
4. 功能選擇性差,功能定製不靈活
源碼包
1. 得到最新的軟件版本,及時修復bug
2. 根據用戶須要,靈活定製軟件功能
RPM包的服務管理
RPM包所安裝的軟件有特定的管理命令,管理方式分爲兩種:
獨立服務:
所謂的獨立啓動,就是能夠自行管理啓動,和其餘的軟件的啓動與否沒有關係,不依賴其餘軟件的啓動,此類軟件當被調用時會直接響應,處理請求的速度快。目前Linux中絕大多數服務爲獨立服務。
手動啓動:
/etc/init.d/httpd start
2. service服務管理工具
service httpd start | stop | restart
service 服務名 start|stop|restart|reload|......
/etc/init.d/腳本名 start|stop|restart|reload|......
注:服務名=腳本名
自動啓動:
1. 使用chkconfig服務自啓動工具管理
查看軟件的自啓動:
chkconfig –list | grep 服務名
chkconfig --list 服務名
設置某服務的自啓動:
chkconfig [--level 級別] [獨立服務名] [on | off]
chkconfig --list | 2345 服務名 on-off
2. 使用ntsysv工具設置自啓動軟件
netsysv --level 級別
設置某級別下軟件是否自啓動
F1 :顯示服務的說明信息
在腳本中添加兩行信息:
chkconfig:2345 45 55
description: httpd server.
注:兩個數字不得大於99
chkconfig --add 腳本名 將腳本添加到自啓動管理序列中
chkconfig --del 腳本名 將腳本刪除到自啓動管理序列中
基於xinetd的服務:
此類服務沒法獨立啓動,必須依賴某一管理服務來啓動或者關閉,這個管理服務就是咱們xinetd服務了,此服務是Linux的超級守護進程,專門用來管理那些沒法自行啓動的服務,當客戶端請求服務啓動時,請求會先被xinetd服務接受,而後xinetd去喚醒對應的服務,打到啓動某服務的目的。這類服務不會一直處於開啓狀態,只有在xinetd服務接受到請求的時候纔會喚醒對應服務,處理完後服務關閉,這樣大大節省了服務器的資源,可是對應的軟件的反應速度沒有獨立服務反應快。
基於xinetd服務的—telnet
rpm 中集中管理模式
一個大服務:管理多個小服務
此處咱們用telnet服務來舉栗子!telnet是遠程管理命令,但因爲傳輸過程是明文,so… 咱們不選用他,咱們使用更安全的ssh,telnet的端口是23,咱們藉助xinetd來啓動下咱們的telnet。
手動啓動xinetd中的某服務
vim /etc/xinetd.d/telnet
此處咱們只須要將disable = yes 修改爲 no 便可!
而後從新啓動xinetd服務(注意咱們如今是藉助xinetd來管理的telnet)
設置xinetd內的服務自啓動
一樣藉助chkconfig 和 ntsysv 來實現自啓動,可是這個地方咱們須要注意的是,咱們不是設置某個具體服務的自啓動,而是設置的xinetd的自啓動。
telnet
服務端包裝包名:telnet-server
客戶端包裝包名:telnet
源碼包的服務管理
手動啓動源碼包服務—指定路徑啓動
eg. /usr/local/apache2/bin/apachectl start | stop | restart …………
絕對路徑:
/usr/local/apache2/bin/apachectl start | stop .......
自動啓動源碼包服務
藉助/etc/rc.d/rc.local 或者 /etc/rc.local 實現開機自啓
寫入手動啓動命令便可
藉助/etc/rc.local,實現開機自啓
vim /etc/rc.local
/usr/local/apache2/bin/apachectl start &
本身編寫管理腳本
/etc/init.d/
service + chkconfig
讓系統識別源碼包
對照剛纔看的RPM包安裝的httpd的啓動腳本文件咱們本身寫一個讓系統識別咱們的源碼軟件。
注意:腳本中有兩句話必須存在!做用讓chkconfig識別此腳本,並能執行。
tcpdump命令
tcpdump命令是一款sniffer工具,它能夠打印全部通過網絡接口的數據包的頭信息,也能夠使用-w選項將數據包保存到文件中,方便之後分析
tcpdump(選項)
-a:嘗試將網絡和廣播地址轉換成名稱;
-c<數據包數目>:收到指定的數據包數目後,就中止進行傾倒操做;
-d:把編譯過的數據包編碼轉換成可閱讀的格式,並傾倒到標準輸出;
-dd:把編譯過的數據包編碼轉換成C語言的格式,並傾倒到標準輸出;
-ddd:把編譯過的數據包編碼轉換成十進制數字的格式,並傾倒到標準輸出;
-e:在每列傾倒資料上顯示鏈接層級的文件頭;
-f:用數字顯示網際網絡地址;
-F<表達文件>:指定內含表達方式的文件;
-i<網絡界面>:使用指定的網絡截面送出數據包;
-l:使用標準輸出列的緩衝區;
-n:不把主機的網絡地址轉換成名字;
-N:不列出域名;
-O:不將數據包編碼最佳化;
-p:不讓網絡界面進入混雜模式;
-q :快速輸出,僅列出少數的傳輸協議信息;
-r<數據包文件>:從指定的文件讀取數據包數據;
-s<數據包大小>:設置每一個數據包的大小;
-S:用絕對而非相對數值列出TCP關聯數;
-t:在每列傾倒資料上不顯示時間戳記;
-tt: 在每列傾倒資料上顯示未經格式化的時間戳記;
-T<數據包類型>:強制將表達方式所指定的數據包轉譯成設置的數據包類型;
-v:詳細顯示指令執行過程;
-vv:更詳細顯示指令執行過程;
-x:用十六進制字碼列出數據包資料;
-w<數據包文件>:把數據包數據寫入指定的文件。
實例
直接啓動tcpdump將監視第一個網絡接口上全部流過的數據包
tcpdump
監視指定網絡接口的數據包
tcpdump -i eth1
若是不指定網卡,默認tcpdump只會監視第一個網絡接口,通常是eth0,下面的例子都沒有指定網絡接口。
監視指定主機的數據包
打印全部進入或離開sundown的數據包。
tcpdump host sundown
也能夠指定ip,例如截獲全部210.27.48.1 的主機收到的和發出的全部的數據包
tcpdump host 210.27.48.1
打印helios 與 hot 或者與 ace 之間通訊的數據包
tcpdump host helios and \( hot or ace \)
截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通訊
tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
打印ace與任何其餘主機之間通訊的IP 數據包, 但不包括與helios之間的數據包.
tcpdump ip host ace and not helios
若是想要獲取主機210.27.48.1除了和主機210.27.48.2以外全部主機通訊的ip包,使用命令:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
截獲主機hostname發送的全部數據
tcpdump -i eth0 src host hostname
監視全部送到主機hostname的數據包
tcpdump -i eth0 dst host hostname
監視指定主機和端口的數據包
若是想要獲取主機210.27.48.1接收或發出的telnet包,使用以下命令
tcpdump tcp port 23 host 210.27.48.1
對本機的udp 123 端口進行監視 123 爲ntp的服務端口
tcpdump udp port 123
監視指定網絡的數據包
打印本地主機與Berkeley網絡上的主機之間的全部通訊數據包
tcpdump net ucb-ether
ucb-ether此處可理解爲「Berkeley網絡」的網絡地址,此表達式最原始的含義可表達爲:打印網絡地址爲ucb-ether的全部數據包
打印全部經過網關snup的ftp數據包
tcpdump 'gateway snup and (port ftp or ftp-data)'
注意:表達式被單引號括起來了,這能夠防止shell對其中的括號進行錯誤解析
打印全部源地址或目標地址是本地主機的IP數據包
tcpdump ip and not net localne
tcpdump –i eth0 –nn –X –vv tcp port 21 and ip host 來源ip
Linux系統管理
進程管理
什麼是程序?
代替人管理操做系統,完成特定任務,解決特定問題的一段代碼集合。
一個看獲得,摸得着的代碼集合體
什麼是進程?
進程(Process)是計算機中的程序關於某數據集合上的一次運行活動。
進程由程序打開後產生的載體
什麼是線程?
線程是進程中的一個實體,被稱爲輕量級進程,是程序執行流的最小單元。
一個線程只能處理一個請求,多個線程能夠同時處理多個請求
進程是載體,線程纔是負責幹活的
進程的做用
進程的查看
ps命令(aux跟-le)查看當前一瞬間的進程的狀態信息
ps 命令(aux,-le)
靜態查看系統中的進程,查詢的是命令執行一瞬間的進程的狀態。
aux 以BSD操做系統的格式輸出
-le 以Linux標準格式輸出
選項詳解:
a 顯示一個終端的全部進程
u 顯示進程的歸屬用戶及內存的使用狀況
x 顯示沒有控制終端的進程
l 長格式顯示,更加詳細的信息
e 顯示全部進程 與a的做用一致
ps aux:結果分析
USER:該進程的運行用戶,或者理解爲產生進程的用戶
PID: 進程的PID號
%CPU:進程佔用的cpu的百分比
%MEM:進程佔用物理內存的百分比
VSZ: 佔用的虛擬內存的大小(KB)
RSS: 佔用物理內存的大小(KB)
tty:登陸終端(Alt+F1-F6)
STAT:
D 沒法中斷的休眠狀態(一般 IO 的進程)
R 正在運行的進程
S 處於休眠狀態
T 中止或被追蹤
W 進入內存交換(從內核2.6開始無效)
X 死掉的進程(基本不多見 )
Z 殭屍進程
< 優先級高的進程
N 優先級較低的進程
L 被鎖進內存的進程
s 進程的領導者(在它之下有子進程)
l 多進程的
+ 位於後臺的進程組
START:進程啓動時間
TIME:進程運行的時間(總時間),非系統時間
COMMAND:產生此進程的命令
ps-le結果分析
F:進程標誌,說明進程有那些權限
1:進程能夠複製
4:進程使用超級用戶權限
S:進程狀態
PPID:進程的父進程ID號
C:cpu佔比 %
PRI:進程優先級,數字越小優先級越高,越快被調用執行
NI:進程優先級,數字越小越先被調用
ADDR:進程存在內存的位置
SZ: 進程佔用的內存大小
WCHAN:進程是否運行(-表明正在運行)
top 命令 默認每隔二秒刷新一次
top 命令
選項:
-d 秒數:指定刷新頻率
-b :使用批處理模式,和-n結合將top的結果重定
向到文本
-n 次數:指定top 次數,和-b結合
-p :指定查看某的PID的進程
-s :使top在安全模式下運行,避免在交互模式下
出現錯誤
-u 用戶名:只查看(監聽)某一個用戶的進程
在交互模式下使用的命令:
?或h:幫助信息
P:按照CPU使用率排序
M:按照內存使用率排序
N:按照PID號排序
T:按照cpu運算時間排序
k:按照PID號給予某一個進程信發送指令,可用於殺
死進程
r:按照PID給某個進程重設優先級(Nice)值
q:退出交互模式
top 結果分析
第一行信息:
第二行信息:
第三行信息:
第四行信息:
第五行信息:
剩下的選項基本和咱們的PS是相同的。
htop
須要安裝命令,命令總體跟top差很少,比top智能
拓展:pstree進程樹
-p 顯示PID
-u 顯示運行用戶
進程處理命令:
Kill
1. kill 進程號
kill -l #查看kill 所支持的信號
經常使用的信號:
HUP(1): 復位,從新加載配置
INT (2): 中斷(同 Ctrl + C)
TERM(15): 終止(正常退出)
KILL(9): 強制終止
CONT(18):繼續(與STOP相反)
STOP(19): 暫停(同 Ctrl + Z)
ps aux | grep 「vi」 | grep -v「grep」
service httpd reload
kill -1 25606
從新加載配置文件,但不重啓進程(保證進程號不改變,保證進程持續工做)軟重啓 平滑重啓
killall
2. killall 進程名
killall -i #交互式,詢問是否殺死
killall -I(大) #忽略大小寫
經常使用的信號:
HUP(1): 復位,從新加載配置
INT (2): 中斷(同 Ctrl + C)
TERM(15): 終止(正常退出)
KILL(9): 強制終止
CONT(18):繼續(與STOP相反)
STOP(19): 暫停(同 Ctrl + Z)
pkill
3. pkill 終端號
pkill -9 -t 終端號 #強制殺死某登陸終端
經常使用的信號:
HUP(1): 復位,從新加載配置
INT (2): 中斷(同 Ctrl + C)
TERM(15): 終止(正常退出)
KILL(9): 強制終止
CONT(18):繼續(與STOP相反)
STOP(19): 暫停(同 Ctrl + Z)
進程優先級(ps–le)
ps –le 能夠查看到進程的優先級
PRI表明的是Priority,NI表明nice 兩個都是優先級,可是PRI不能修改,由於這是內核內定義的,沒法人爲修改,可是咱們能修改NI 。
公式:
PRI(最終值)=PRI(初始值)+NI值
76=80+(-4)
咱們能夠經過這樣的方式改變優先級,可是NI也有限制。
NI值總範圍
NI值總範圍:-20 到 19
普通用戶的NI值 : 0 到 19,普通用戶只能調高NI值,不能下降;root能夠隨意調整,包含其餘用戶的進程
nice跟renice用於修改NI值的命令
nice 命令
nice 命令(只能在啓動或重啓時)
nice –n -5 service httpd start
ps –le | grep 「httpd」 | grep –v 「grep」
renice
renice 命令(修改啓動狀態進程的NI值)
renice -10 PID
工做管理
工做類型:
前臺:當前終端正在進行標準輸出到顯示器上的工做
當前終端的工做只能當前終端管理,其它終端不能管理
後臺:不用將命令執行過程標準輸出到顯示器的工做
放入後臺的工做必須是能持續運行的,不然程序會被暫停。
bg 恢復到後臺運行
fg 恢復到前臺運行
詳細請看下面的:後臺工做的管理
如何將工做放到後臺
1. 命令 & :將工做到到後臺,並持續執行
2. ctrl + z :將工做放到後臺,並暫停執行
後臺工做的管理:
查看:jobs
-l :顯示工做進程PID
將後臺暫停的工做恢復到前臺繼續執行
fg %工做號:%可省略,主要是卻別PID的
將後臺暫停的工做恢復到後臺繼續執行
bg %工做號
讓後臺的工做脫離終端進行運行
a. /etc/rc.local 文件
b. 定時計劃任務(下邊)
系統資源查看
vmstat:監控系統資源
vmstat:監控系統資源
結果分析:
Procs(進程):
r:運行隊列中進程數量
b: 阻塞的進程
Memory(內存):
swpd: 虛擬內存已使用的大小
free: 空閒的物理內存的大小
buff: 用做緩衝的內存大小(系統)
cache: 用做緩存的內存大小(被調用資源)
Swap:
si: 每秒從磁盤讀入虛擬 內存的大小
so: 每秒虛擬內存寫入磁盤的大小
注:若是這個值大於0,表示物理內存不夠用
IO:(如今的Linux版本塊的大小爲1024bytes)
bi: 每秒讀取的塊數
bo: 每秒寫入的塊數
系統:
in: 每秒CPU中斷數,包括時鐘中斷。
cs: 每秒上下文切換數(資源調用的次數,如:函
數)。
CPU(以百分比表示):
us: 用戶進程執行消耗cpu時間(user time)
sy: 系統進程消耗cpu時間(system time)
id: 空閒時間(包括IO等待時間)
wa: 等待IO時間
st: 虛擬機偷取時間(不爲0則表明cpu被其餘虛擬
機所調用)
dmesg:內核的檢測信息
dmesg:內核的檢測信息
查看開始是內核的檢測信息(/var/log/dmesg)
free:查看內存使用狀況
free 查看內存使用狀況
-b 以字節爲單位顯示
-k 以KB爲單位(默認)
-m 以MB爲單位
-g 以GB爲單位
顯示信息解釋:
第一行:
total: 總計物理內存的大小
used: 已使用內存大小
free: 空閒內存大小
shared: 共享內存,通常系統不會用到
Buffers/cached:未使用的緩存大小
第二行:(-/+ buffers/cached)
(-buffers/cache)used內存數:
第一部分Mem行中的 used – buffers – cached
(+buffers/cache)free內存數:
第一部分Mem行中的 free + buffers + cached
注:可見-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是空閒的內存總數。
第三行:swap的前面有!
虛擬內存:就是把一些硬盤空間轉化爲虛擬內存空間
查看cpu信息
查看cpu信息
邏輯CPU個數
cat /proc/cpuinfo | grep "processor" | wc –l
物理CPU個數:
cat /proc/cpuinfo | grep "physical id" | sort -u | wc –l
每一個物理CPU中Core的個數:
cat /proc/cpuinfo | grep "cpu cores" | uniq | awk -F: '{print $2}'
查看core id的數量,即爲全部物理CPU上的core的個數
cat /proc/cpuinfo | grep "core id" | uniq | wc –l
uptime:系統啓動時間和平均負載
uptime:系統啓動時間和平均負載
系統啓動時間和平均負載(通常用top)
uname查看系統與內核相關信息
uname : 查看系統與內核相關信息
-a 查看全部相關信息
-r 查看內核版本
-s 查看內核名稱
lsb_release-a查看當前發行版
lsb_release -a 查看當前發行版
lsof:列出進程打開或正在使用的文件信息
lsof:列出進程打開或正在使用的文件信息
lsof -p 進程號 :查看某進程運行所調用的資源
lsof -u :查看用戶運行的進程調用了哪些文件
系統定時任務
at:單次計劃任務命令
at:單次計劃任務命令
at命令的執行須要依託atd服務
service atd start
chkconfig atd on
限制用戶使用at命令
/etc/at.allow #白名單
/etc/at.deny #黑名單
白名單的優先級大於黑名單
假如黑白名單都不存在,只有root能使用at命令
at命令
at [選項] 時間
-m :執行結束髮送通知郵件(執行此命令的用戶)
atq :查看計劃任務
atrm :刪除計劃任務
-c 工做號 :查看對應工做號的詳細信息
at時間格式:
[HH:MM] [yyyy-mm-dd] (now + 2minutes)
寫完後用ctrl + d 結束並保存任務
crontab 循環計劃任務命令
crontab 循環計劃任務命令
按照預先設置好的時間週期,按期執行特殊動做(命令、腳本)
格式:
編輯:crontab -e :添加循環計劃任務
查看:crontab -l :查看已存在的計劃任務
刪除:crontab -r :刪除已存在的計劃任務
crontab時間格式:
* :表示該範圍內的任意時間
, :表示間隔的多個不連續時間點
- :表示一個連續的時間範圍
/ : 指定間隔的時間頻率
例子:
0 17 * * 1-5 :週一到週五天天17:00
30 8 * * 1,3,5 :每週1、3、五的8點30分
0 8-18/2 * * * :8點到18點之間每隔2小時
0 * */3 * * :每隔3天
Kdump:內核崩潰轉儲機制
kdump 是 Linux Kernel 崩潰時的轉儲機制,簡單理解就是在系統啓動過程當中若是 Kernel 由於某些緣由崩潰了,kdump 就會負責記錄日誌以便排查緣由。在 CentOS 6 等 Linux 發行版中,即使採用最小化安裝, kdump 也會做爲服務安裝到系統中
詳細請看:
https://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/
*************************************
Linux日誌管理
Linux系統內核和許多程序會產生各類錯誤信息、警告信息和其餘的提示信息,這些信息對管理員瞭解系統的運行狀態是很是有用的,因此應該把它們寫到日誌文件中去。完成這個過程的程序就是syslog。syslog能夠根據日誌的類別和優先級將日誌保存到不一樣的文件中。例如,爲了方便查閱,能夠把內核信息與其餘信息分開,單獨保存到一個獨立的日誌文件中。默認配置下,日誌文件一般都保存在「/var/log」目錄下。
日誌管理
管理哪些日誌:
目的:根據產生的日誌類型,進行分析,日誌類型,日誌等級
將指定的日誌類型和日誌等級根據rsyslog.conf配置文件記錄的方式位置保存
系統:
系統類型:登陸,安全,郵件(系統用戶訪問),開機過程內核檢查
/var/log/:被rsyslog所管理
rpm和源碼安裝的第三方服務
記錄用戶訪問:/var/log/httpd/access_log
記錄服務器運行錯誤:/var/log/httpd/error_log
根據服務的配置文件
/etc/httpd/conf/httpd.conf(本身管理本身的日誌)
以apache作好比
rpm:
/var/log/服務名/
源碼:
/PREFIX/logs/
如何收集到的日誌信息:
rsyslog的日誌管理服務(日子分析,分類存放)
/etc/rsyslog.conf(根據此配置文件的規則進行分類存放)
規則:
日誌的類型.等級 存放位置
日誌的類型.等級 存放位置
如何管理日誌
rsyslog
rsyslog.conf
客戶端:修改配置文件,修改日誌存放位置爲:@@192.168.88.20:514
服務端:修改配置文件,開啓TCP協議514端口,用於接收來自於客戶端的日誌
防止日誌文件過大
a) logro tate
b) logro tate.conf(規則配置文件)
a) 週期,保留的備份數量,建立新的日誌文件
b) 是否要壓縮,修改文件的後綴
a) 針對某些特定的日誌(wtm/btmp)
避免日誌文件過大:
輪替:
提早防止避免日誌文件過大
logrotate
/etc/logrotate.conf
weekly 每週對日誌進行依次輪替
rotate 保存日誌的數量
create 在輪替過程當中,自動建立新的文件
dateext 使用日期做爲日誌文件的後綴
compress 是否壓縮進行輪替的日誌
非系統服務:rpm | 源碼安裝的httpd
rotatelogs 的命令進行輪替
切割:
用於日誌文件過大時的解決方案
split
-b 按照指定大小切割
-l 按照指定行數切割
主機名修改
主機名修改:內核2.6.32前
臨時:hostname bj-xdl-y26(www.linuxlc.com)
永久:/etc/sysconfig/network
HOSTNAME=www.linuxlc.com
日誌相關服務
CentOS 6.X 之後日誌的管理服務從syslog 升級成爲了 rsyslog ,加強了部分功能。
基於TCP網絡協議傳輸日誌信息
更安全的網絡傳輸方式
有日誌消息的及時分析框架
後臺數據庫
配置文件能夠寫一些簡單的邏輯判斷
兼容syslog配置文件
常見的日誌文件
這些都是系統默認的日誌,以及存放位置,那麼除此以外咱們還有一些RPM或者源碼的軟件安裝產生的日誌。
那麼源碼的日誌則存放在了指定安裝的位置下。
rsyslog 服務
rsyslog 服務
日誌的格式:
只要是經過rsyslog記錄的日誌,格式是相同的,包含如下內容:
發生時間
服務器的主機名
服務名或者程序名
事件具體信息
rsyslog 配置文件:
/etc/rsyslog.conf
第一列爲日誌類型和日誌優先級的組合,每一個類型和優先級的組合稱爲一個選擇器;
後面一列爲保存日誌的文件、服務器,或輸出日誌的終端。syslog 進程根據選擇器決定如何操做日誌。
對配置文件的幾點說明:
u 日誌類型和優先級由點號(.)分開,例如 kern.debug 表示由內核產生的調試信息。
u kern.debug 的優先級大於 debug。
u 星號(*)表示全部,例如 *.debug 表示全部類型的調試信息, kern.*表示由內核產生的全部消息。
u 能夠使用逗號(,)分隔多個日誌類型,使用分號(;)分隔多個選擇器。
對日誌的操做包括:
u 將日誌輸出到文件,例如 /var/log/maillog 或 /dev/console。
u 將消息發送給用戶,多個用戶用逗號(,)分隔,例如 root, amrood。
u 經過管道將消息發送給用戶程序,注意程序要放在管道符(|)後面。
u 將消息發送給其餘主機上的 syslog 進程,這時 /etc/syslog.conf文件後面一列爲以@開頭的主機名(IP) 例:@192.168.88.30
rsyslog 識別的服務才能寫到配置文件中
鏈接符號:
日誌服務 [鏈接符號] 日誌等級 日誌記錄位置
「.」 :表明只要比後面的等級高的(包含該等級)日誌都記錄下來。好比:「cron.info」代 表cron服務產生的日誌,只要日誌等級大於等於info級別,就記錄
「.=」表明只記錄所需等級的日誌,其餘等級的都不記錄。好比:「*.=emerg」表明人和日誌服務產生的日誌,只要等級是emerg等級就記錄。這種用法及少見,瞭解就好
「.!」表明不等於,也就是除了該等級的日誌外,其餘等級的日誌都記錄。
日誌等級:
特殊等級:none 不記錄任何等級,至關於忽略該服務
日誌記錄位置:
日誌文件的絕對路徑。這是最多見的日誌保存方法,如「/var/log/secure」就是保存系統驗證和受權信息日誌的。
系統設備文件。如「/dev/lp0」表明第一臺打印機,若是日誌保存位置是打印機設備的話,當有日誌時就會在打印機打印(不太符合可持續發展戰略哦-_-!)。
轉發給遠程主機。由於能夠選擇使用TCP協議和UDP協議傳輸日誌信息,因此有兩種發送格式。如使用
「@192.168.0.210:514」,就會把日誌內容使用UDP協議發送到192.168.0.210的UDP 514端口上;若是使用
「@@192.168.0.210:514」就會把日誌內容使用TCP協議發送192.168.0.210的TCP 514端口上,其中514是日誌服務默認端口。固然只要192.168.0.210贊成接收此日誌,就能夠把日誌內容保存在日誌服務器上。
用戶名。如「root」,就會把日誌發送給root用戶,固然root要在在線,不然就收不到日誌信息了。發送日誌給用戶時,能夠使用「*」表明發送給全部在線用戶,如「mail.* *」就會把mail服務產生的全部級別的日誌發送給所
有在線用戶。若是須要把日誌發送給多個在線用戶,用戶名之間用「,」分隔。忽略或丟棄日誌。若是接受日誌的對象是「」,表明這個日誌不會記錄,而被直接丟棄。如「local3.* ~」表明忽略local3服務類型全部的日誌都不記錄。
自定義日誌記錄:
vi /etc/rsyslog.conf
*.crit /var/log/alert.log
將全部臨界點以上的錯誤都記錄到alert日誌中
修改完成,重啓rsyslog服務,檢查下有沒有生成文件。
日誌服務器搭建:
接收端:
配置文件:(有UDP和TCP)
取消後二行註釋,讓接受端口生效。
重啓服務,而後查看端口是否生成
發送端:
修改配置文件:
添加:
*.* @192.168.110.111:514
注意:能夠使用UDP 用一個@ ; 也能夠使用TCP 要用兩個@@
重啓服務,OK
測試:
在發送端,建立用戶,而後檢查接收端,查看日誌/var/log/secure
注意事項:都知道Linux不依靠主機名識別,可是日誌服務器須要根據主機 來識別,so。。。咱們若是一臺記錄多臺的日誌信息,須要修改主機名。
日誌輪替
主要目的防止單個日誌文件過大,按照咱們的規則對日誌進行相應處理
主要依賴/etc/logrotate.conf配置文件中的dateext參數實現日誌的處理。
主要參數解釋:
weekly 每週對日誌進行依次輪替
rotate 保存日誌的數量
create 在輪替過程當中,自動建立新的文件
dateext 使用日期做爲日誌文件的後綴
compress 是否壓縮進行輪替的日誌
系統自動按期進行日誌輪替的緣由:
/etc/cron.daily/ 有一個腳本,天天都會運行,查看是否有符合輪替的日誌,而後進行相應處理
咱們嘗試在rsyslog配置文件中添加本身的日誌記錄,而後而且強制執行輪替,看會不會產生輪替文件
1. 先在配置文件中寫入本身的日誌輪替規則(參照原文中的)
2. 強制執行日誌輪替(無論符不符合規定時間)
logrotate –vf /etc/logrotate.conf
*************************************
Linux備份管理
Linux中哪些數據須要備份?
1.Linux系統重要數據
v /root/目錄:/root目錄是管理員的家目錄,不少管理員會習慣於在這個目錄中保存一些相關數據,那麼當進行數據備份時,須要備份此目錄。
v /home/目錄:/home/目錄是普通用戶的家目錄,若是是生產服務器,這個目錄中也會保存大量的重要數據,應該備份。
v /var/spool/mail/目錄: 默認狀況下,全部的用戶未讀的郵件會保存在/var/spool/mail/目錄中和用戶名相同的郵箱文件中,已讀的郵件會保存在用戶家目錄中mbox文件中(mail命令默認是如此保存,不過若是使用了hold命令,那麼無論郵件是否已讀,都保存在/var/spool/mail/目錄中,能夠使用mbox命令恢復已讀郵件保存在「~/mbox」文件中)。通常狀況下,用戶的郵件也是須要備份的重要數據。
v /etc/目錄:系統重要的配置文件保存目錄,固然須要備份。
v 其餘目錄:更具你的系統的具體狀況,備份本身認爲的重要目錄。好比咱們的系統中有重要的日誌,或者安裝了RPM包的mysql服務器(RPM包安裝的mysql,數據庫保存在/var/lib/mysql/目錄中),那麼/var/目錄就須要備份。若是咱們服務器中安裝了多個操做系統,或編譯過新的內核,那麼/boot/目錄就須要備份。
2.安裝服務和軟件的數據
apache須要備份以下內容:
網頁存放路徑
v 配置文件。RPM包安裝的apache,須要備份/etc/httpd/conf/httpd.conf;源碼包安裝的apache則備份/usr/local/apache2/conf/httpd.conf。
v 網頁主目錄。RPM包安裝的apache,須要備份/var/www/html/目錄中全部數據;源碼包安裝的apache須要備份/usr/local/apache2/htdocs/目錄中全部數據。
v 日誌文件。RPM包安裝的apache,須要備份/var/log/httpd/目錄中全部日誌;源碼包安裝的apache須要備份/usr/local/apache2/logs/目錄中全部日誌。
mysql服務須要備份以下內容:
數據庫文件的保存位置
v mysql須要備份的內容就沒有apache多了,主要須要備份的就是數據庫內容。
v 源碼包安裝的mysql,數據庫安裝/usr/local/mysql/data/目錄中,只要備份此目錄便可
v RPM包安裝的mysql,數據庫默認安裝到了/var/lib/mysql/目錄中,若是須要備份則須要備份這個目錄。
ftp:服務
ftp: 用戶上傳文件的目錄
常見備份策略
完整備份
徹底備份就是指把全部須要備份的數據所有備份,固然徹底備份能夠備份整塊硬盤,整個分區或某個具體的目錄。徹底備份的好處是數據恢復方便,由於全部的數據都在同一個備份中,因此只要恢復徹底備份,全部的數據都會被恢復。若是徹底備份備份的是整塊硬盤,那麼甚至都不須要數據恢復,只要把備份硬盤安裝上,服務器就會恢復正常。但是徹底備份的缺點也很明顯,那就是須要備份的數據量較大,備份時間較長,佔用的空間較多,因此徹底備份不可能天天執行。
咱們通常會對關鍵服務器進行整盤徹底備份,若是出現問題,能夠很快的使用備份硬盤進行替換,從而減小損失。甚至會對關鍵服務器搭設一臺如出一轍的服務器,這樣只要遠程幾個命令(或使用shell腳本自動檢測,自動進行服務器替換),備份服務器就會接替本來的服務器,使咱們的故障響應時間縮短爲最短。
增量備份
徹底備份隨着數據量的加大,備份耗費的時間和佔用的空間會愈來愈多,因此徹底備份不會也不能天天進行。這時增量備份的做用就體現了出來。增量備份是指先進行一次徹底備份,服務器運行一段時間以後,比較當前系統和徹底備份的備份數據之間的差別,只備份有差別的數據而已。服務器繼續運行,再通過一段運行時間以後,進行第二次增量備份,第二次增量備份時,當前系統是和第一次增量備份的數據進行比較,也是隻備份有差別的數據。第三次增量備份是和第二次增量備份的數據
假設咱們第一天時,進行一次徹底備份。次日增量備份時,只會備份次日和第一天之間的差別數據,可是次日的總備份數據是徹底備份加第第一次增量備份的數據。第三天增量備份,只會備份第三天和次日之間的差別數據,第三天的總備份數據是徹底備份,加第一次增量備份的數據,再加第二次增量備份的數據。固然第四天增量備份時,只會備份第四天和第三天的差別數據,數據時徹底備份加第一次增量備份加第二次增量備份加第三次增量備份的數據。這種備份的好處是每次備份須要備份的數據較少,耗時較少,佔用的空間較少。壞處是數據恢復比較麻煩,若是是上圖的例子,那麼當數據恢復時,就要先恢復徹底備份的數據,再依次恢復第一次增量備份的數據,第二次增量備份的數據和第三次增量備份的數據,最終才能恢復全部的數據。
差別備份
差別備份相比較而言,既不要像徹底備份同樣把全部數據都進行備份,也不像增量備份數據恢復時那麼麻煩。只要先恢復徹底備份的數據,再恢復差別備份的數據便可。不過隨着時間的增長,和徹底備份相比,變更的數據愈來愈多,那麼差別備份也可能會變得數據龐大,備份緩慢,佔用空間較大。
備份策略:
地點:
同端備份:複製 恢復快、不安全
多端備份:移動硬盤、光盤、其餘機器 安全性較高
異地備份:不一樣地點(容災) 安全性很高
雲端備份:對象存儲空間 安全有隱患
時間:
時間交叉備份==高頻率備份
完整備份:服務器壓力較小的時間
備份類型:
冷備份:徹底中止數據的更新,進行備份
溫備份:保證數據的正常讀取,但沒法寫入,進行備份
熱備份:保證數據正常讀取的同時,進行數據備份
壓縮:
1.空間小
2.傳輸快
策略監控執行:
檢查備份策略是否執行
檢查備份的文件是否可用:
嘗試恢復備份
備份與恢復工具:dump 和 restore
dump(備份)
dump 支持0-9十個備份級別,0指完整備份,1-9指增量備份
咱們備份一個數據時,第一次備份應該使用0級別,會把全部數據徹底備份一次。第二次備份時就能夠使用1級別了,它會和0級別比較,把0級別備份以後變化的數據進行備份。第三次備份時,使用2級別,2級別是和1級別比較,把1級別備份以後變化的數據進行備份,以此類推。須要注意的是,只有備份整個分區或整塊硬盤時,才能支持1-9的增量備份級別。而若是隻是備份某個文件或不是分區的目錄,則只能使用0級別進行徹底備份。
dump [選項] 備份以後的文件名 源文件名
例:dump -0uj -f /root/boot.bak.bz2 /boot
級別:
0-9十個備份級別
0 完整備份
1-9 增量1到增量9
-f 文件名 :指定備份後的文件名(.dump)
-u :備份文件系統時(分區),把備份時間記錄在
/etc/dumpdates中
備份時,記錄備份時間
-v :顯示詳細信息
-j :調用bzlib庫壓縮備份文件,(.bz2)壓縮等級2
備份時,進行壓縮(bz2)
-W :查看備份的最近時間
注:備份目錄時,則不能寫-u選項,不然沒法正常備份
備份分區:
df –h 查詢當前能進行備份的分區信息
dump -0uj -f /root/boot.bak.bz2 /boot
#第一次先進行完整備份,而且壓縮寫入備份時間
cat /etc/dumpdates
#查看備份時間
修改/boot/分區內的信息,進行第二次備份
dump -1uj -f /root/boot.bak1.bz2 /boot/
#進行第二次備份,使用1級別,即增量備份
dump -W
查詢系統內進行過dump備份的分區,以及級別和時間。
注意:目錄的備份只能使用完整備份,沒法使用增量備份。
restore(恢復)
restore [模式選擇] [選項]
例: restore -r -f *.dump.bz2 #徹底恢復
restore -i -f *.dump.bz2 #交互式部分恢復
模式:
-C :比較備份數據和實際數據的變化。若是實際數據中的現有數據發生了變化,這個選項可以檢測這個變化。可是若是實際數據新增了數據,這個選項是不能檢測到變化的。
對比現實中的目錄是否比備份時的數據減小了,若減小,則提示哪一個文件丟失了,但現實中增長的數據不會被檢查到
-r :還原模式,還原數據
-i :交互模式,通常進行恢復時文件選擇
add 文件名 :標記
delete 文件名 :取消標記
extract 僅恢復標記的文件
1 確認恢復
n 不重設恢復文件的 所屬和權限
quit 退出
-t :查看模式,查看備份文檔中的內容
-f :指定備份文件的名稱
比較備份數據和實際數據的區別,根據剛纔咱們的備份,進行對比
首先建立新的文件
touch /boot/a.txt
進行數據的比對
restore -C -f /root/boot.bak.bz2
注意:這樣的比較沒法比較出新增的信息,只能比對出減小的和修改的。
查看模式:
restore –t –f /root/boot.bak.bz2
還原模式
首先建立恢復目錄,而後進行恢復
restore -r –f /root/boot.bak.bz2
第一次是恢復原始數據
restore -r –f /root/boot.bak1.bz2
第二次進行增量備份的恢復
eject :彈出光驅