Linux
系統資訊存放在檔案裡,檔案與普通的公務檔案類似。每個檔案都有自己的名字、内容、存放位址及其它一些管理資訊,如檔案的使用者、檔案的大小等。檔案可以是
一封信、一個通訊錄,或者是程式的源語句、程式的資料,甚至可以包括可執行的程式和其它非正文内容。
Linux檔案系統具有良好的結構,系統提供了很多檔案處理程式。這裡主要介紹常用的檔案處理指令。
file
1.作用 件内容判斷檔案類型,使用權限是所有使用者。
2.格式
file通過探測文
file [options] 檔案名
3.[options]主要參數
-v:在标準輸出後顯示版本資訊,并且退出。
-z:探測壓縮過的檔案類型。
-L:允許符合連接配接。
-f name:從檔案namefile中讀取要分析的檔案名清單。
4.簡單說明
使用file指令可以知道某個檔案究竟是二進制(ELF格式)的可執行檔案, 還是Shell Script檔案,或者是其它的什麼格式。file能識别的檔案類型有目錄、Shell腳本、英文文本、二進制可執行檔案、C語言源檔案、文本檔案、DOS的可執行檔案。
5.應用執行個體
如果我們看到一個沒有字尾的檔案grap,可以使用下面指令:
$ file grap
grap: English text
此時系統顯示這是一個英文文本檔案。需要說明的是,file指令不能探測包括圖形、音頻、視訊等多媒體檔案類型。
mkdir
1.作用
mkdir指令的作用是建立名稱為dirname的子目錄,與MS DOS下的md指令類似,它的使用權限是所有使用者。
2.格式
mkdir [options] 目錄名
3.[options]主要參數
-m, --mode=模式:設定權限,與chmod類似。
-p, --parents:需要時建立上層目錄;如果目錄早已存在,則不當作錯誤。
-v, --verbose:每次建立新目錄都顯示資訊。
--version:顯示版本資訊後離開。
4.應用執行個體
在進行目錄建立時可以設定目錄的權限,此時使用的參數是“-m”。假設要建立的目錄名是“tsk”,讓所有使用者都有rwx(即讀、寫、執行的權限),那麼可以使用以下指令:
$ mkdir -m 777 tsk
grep
grep指令可以指定檔案中搜尋特定的内容,并将含有這些内容的行标準輸出。grep全稱是Global Regular Expression Print,表示全局正規表達式版本,它的使用權限是所有使用者。
grep [options]
3.主要參數
[options]主要參數:
-c:隻輸出比對行的計數。
-I:不區分大小寫(隻适用于單字元)。
-h:查詢多檔案時不顯示檔案名。
-l:查詢多檔案時隻輸出包含比對字元的檔案名。
-n:顯示比對行及行号。
-s:不顯示不存在或無比對文本的錯誤資訊。
-v:顯示不包含比對文本的所有行。
pattern正規表達式主要參數:
\:忽略正規表達式中特殊字元的原有含義。
^:比對正規表達式的開始行。
$: 比對正規表達式的結束行。
\:到比對正規表達式的行結束。
[ ]:單個字元,如[A]即A符合要求 。
[ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的單個字元。
* :有字元,長度可以為0。
正
則表達式是Linux/Unix系統中非常重要的概念。正規表達式(也稱為“regex”或“regexp”)是一個可以描述一類字元串的模式
(Pattern)。如果一個字元串可以用某個正規表達式來描述,我們就說這個字元和該正規表達式比對(Match)。這和DOS中使用者可以使用通配符
“*”代表任意字元類似。在Linux系統上,正規表達式通常被用來查找文本的模式,以及對文本執行“搜尋-替換”操作和其它功能。
查
詢DNS服務是日常工作之一,這意味着要維護覆寫不同網絡的大量IP位址。有時IP位址會超過2000個。如果要檢視nnn.nnn網絡位址,但是卻忘了
第二部分中的其餘部分,隻知到有兩個句點,例如nnn nn..。要抽取其中所有nnn.nnn IP位址,使用[0-9 ]\{3
\}\.[0-0\{3\}\。含義是任意數字出現3次,後跟句點,接着是任意數字出現3次,後跟句點。
$grep '[0-9 ]\{3 \}\.[0-0\{3\}\' ipfile
補充說明,grep家族還包括fgrep和egrep。fgrep是fix grep,允許查找字元串而不是一個模式;egrep是擴充grep,支援基本及擴充的正規表達式,但不支援\q模式範圍的應用及與之相對應的一些更加規範的模式。
dd
dd指令用來複制檔案,并根據參數将資料轉換和格式化。
dd [options]
3.[opitions]主要參數
bs=位元組:強迫 ibs=及obs=。
cbs=位元組:每次轉換指定的。
conv=關鍵字:根據以逗号分隔的關鍵字表示的方式來轉換檔案。
count=塊數目:隻複制指定的輸入資料。
ibs=位元組:每次讀取指定的。
if=檔案:讀取内容,而非标準輸入的資料。
obs=位元組:每次寫入指定的。
of=檔案:将資料寫入,而不在标準輸出顯示。
seek=塊數目:先略過以obs為機關的指定的輸出資料。
skip=塊數目:先略過以ibs為機關的指定的輸入資料。
dd指令常常用來制作Linux啟動盤。先找一個可引導核心,令它的根裝置指向正确的根分區,然後使用dd指令将其寫入軟碟:
$ rdev vmlinuz /dev/hda
$dd if=vmlinuz of=/dev/fd0
上面代碼說明,使用rdev指令将可引導核心vmlinuz中的根裝置指向/dev/hda,請把“hda”換成自己的根分區,接下來用dd指令将該核心寫入軟碟。
find
find指令的作用是在目錄中搜尋檔案,它的使用權限是所有使用者。
find [path][options][expression]
path指定目錄路徑,系統從這裡開始沿着目錄樹向下查找檔案。它是一個路徑清單,互相用空格分離,如果不寫path,那麼預設為目前目錄。
[options]參數:
-depth:使用深度級别的查找過程方式,在某層指定目錄中優先查找檔案内容。
-maxdepth levels:表示至多查找到開始目錄的第level層子目錄。level是一個非負數,如果level是0的話表示僅在目前目錄中查找。
-mindepth levels:表示至少查找到開始目錄的第level層子目錄。
-mount:不在其它檔案系統(如Msdos、Vfat等)的目錄和檔案中查找。
-version:列印版本。
[expression]是比對表達式,是find指令接受的表達式,find指令的所有操作都是針對表達式的。它的參數非常多,這裡隻介紹一些常用的參數。
—name:支援統配符*和?。
-atime n:搜尋在過去n天讀取過的檔案。
-ctime n:搜尋在過去n天修改過的檔案。
-group grpoupname:搜尋所有組為grpoupname的檔案。
-user 使用者名:搜尋所有檔案屬主為使用者名(ID或名稱)的檔案。
-size n:搜尋檔案大小是n個block的檔案。
-print:輸出搜尋結果,并且列印。
4.應用技巧
find指令查找檔案的幾種方法:
(1)根據檔案名查找
例如,我們想要查找一個檔案名是lilo.conf的檔案,可以使用如下指令:
find / -name lilo.conf
find指令後的“/”表示搜尋整個硬碟。
(2)快速查找檔案
根
據檔案名查找檔案會遇到一個實際問題,就是要花費相當長的一段時間,特别是大型Linux檔案系統和大容量硬碟檔案放在很深的子目錄中時。如果我們知道了
這個檔案存放在某個目錄中,那麼隻要在這個目錄中往下尋找就能節省很多時間。比如smb.conf檔案,從它的檔案字尾“.conf”可以判斷這是一個配
置檔案,那麼它應該在/etc目錄内,此時可以使用下面指令:
find /etc -name smb.conf
這樣,使用“快速查找檔案”方式可以縮短時間。
(3)根據部分檔案名查找方法
有時我們知道隻某個檔案包含有abvd這4個字,那麼要查找系統中所有包含有這4個字元的檔案可以輸入下面指令:
find / -name '*abvd*'
輸入這個指令以後,Linux系統會将在/目錄中查找所有的包含有abvd這4個字元的檔案(其中*是通配符),比如abvdrmyz等符合條件的檔案都能顯示出來。
(4) 使用混合查找方式查找檔案
find指令可以使用混合查找的方法,例如,我們想在/etc目錄中查找大于500000位元組,并且在24小時内修改的某個檔案,則可以使用-and (與)把兩個查找參數連結起來組合成一個混合的查找方式。
find /etc -size +500000c -and -mtime +1
grep的14種用法
所有的類linu所有的類linux系統都會提供一個名為grep(globalregular expression print,全局正規表達式輸出)的搜尋工具。grep指令在對一個或多個檔案的内容進行基于模式的搜尋的情況下是非常有用的。模式可以是單個字元、多個字元、單個單詞、或者是一個句子。
當指令比對到執行指令時指定的模式時,grep會将包含模式的一行輸出,但是并不對原檔案内容進行修改。
在本文中,我們将會讨論到14個grep指令的例子。
例1 在檔案中查找模式(單詞)
在/etc/passwd檔案中查找單詞“qiegao”
grep “qiegao” /etc/passwd
例2 在多個檔案中查找模式。
grep “qiegao” /etc/passwd /etc/shadow/etc/gshadow
例3 使用-l參數列出包含指定模式的檔案的檔案名。
grep -l qiegao /etc/passwd /etc/shadow/etc/fstab
例4 使用-n參數,在檔案中查找指定模式并顯示比對行的行号
grep –n “qiegao”/etc/passwd
例5 使用-v參數輸出不包含指定模式的行
輸出/etc/passwd檔案中所有不含單詞“qiegao”的行
grep –v “qiegao” /etc/passwd
例6 使用 ^ 符号輸出所有以某指定模式開頭的行
Bash腳本将 ^ 符号視作特殊字元,用于指定一行或者一個單詞的開始。例如輸出/etc/passes檔案中所有以“root”開頭的行
grep “^root” /etc/passwd
例7 使用 $ 符号輸出所有以指定模式結尾的行。
輸出/etc/passwd檔案中所有以“bash”結尾的行。
grep “bash$” /etc/passwd
Bash腳本将美元($)符号視作特殊字元,用于指定一行或者一個單詞的結尾。
例8 使用 -r 參數遞歸地查找特定模式
grep –r “qiegao”/etc
上面的指令将會遞歸的在/etc目錄中查找“qiegao”單詞
例9 使用 grep 查找檔案中所有的空行
grep “^$” /etc/shadow
由于/etc/shadow檔案中沒有空行,是以沒有任何輸出
例10 使用 -i 參數查找模式
grep指令的-i參數在查找時忽略字元的大小寫。
我們來看一個例子,在paswd檔案中查找“Qiegao”單詞。
grep –i “qiegao” /etc/passwd
例11 使用 -e 參數查找多個模式
例如,我想在一條grep指令中查找‘qiegao’和‘root’單詞,使用-e參數,我們可以查找多個模式。
grep -e "qiegao" -e"root" /etc/passwd
例12 使用 -f 用檔案指定待查找的模式
首先,在目前目錄中建立一個搜尋模式檔案“grep_pattern”,我想檔案中輸入的如下内容。
cat grep_m
^qiegao
root
false$
現在,試試使用grep_pattern檔案進行搜尋
grep -f grep_m /etc/passwd
例13 使用 -c 參數計算模式比對到的數量
繼續上面例子,我們在grep指令中使用-c指令計算比對指定模式的數量
grep -c -f grep_m /etc/passwd
例14 輸出比對指定模式行的前或者後面N行
a)使用-B參數輸出比對行的前4行
grep -B 4 "qiegao" /etc/passwd
b)使用-A參數輸出比對行的後4行
grep -A 4 "qiegao" /etc/passwd
c)使用-C參數輸出比對行的前後各4行
grep -C 4 "qiegao" /etc/passwd