1. 程式人生 > >Linux常用命令(二)——檔案處理命令(未拓展)

Linux常用命令(二)——檔案處理命令(未拓展)

1、file

①、作用:

根據檔案內容判斷檔案型別,使用許可權是所有使用者

②、格式:

file 通過探測文
file [options] 檔名

③、主要引數:

-v
在標準輸出後顯示版本資訊,並且推出
-z
探測壓縮過的檔案型別
-L
允許符合連線
-f name
從檔案namefile中讀取要分析的檔名列表

④、應用技巧:

使用file命令可以知道某個檔案究竟是二進位制(ELF格式)的可執行檔案, 還是Shell Script檔案,或者是其它的格式。file能識別的檔案型別有目錄、Shell指令碼、英文文字、二進位制可執行檔案、C語言原始檔、文字檔案、DOS的可執行檔案,file命令不能探測包括圖形、音訊、視訊等多媒體檔案型別。


2、mkdir

①、作用:

建立名稱為dirname的子目錄,與MS DOS下的md命令類似,使用許可權是所有使用者

②、格式:

mkdir [options] 目錄名

③、主要引數:

-m,--mode=模式
設定許可權<模式>,與chmod類似
-p,--parents
需要時建立上層目錄;如果目錄早已存在,則不當作錯誤
-v,--verbose
每次建立新目錄都顯示資訊
--version
顯示版本資訊後離開

④、應用技巧:

在進行目錄建立時設定目錄的許可權,使用的引數是"-m",假設要建立的目錄名是“/home/progrom”,讓所有使用者都有rwx(即讀、寫、執行的許可權),那麼可以使用以下命令:
mkdir -m 777 /home/progrom


3、grep

①、作用:

可以指定檔案中搜索特定的內容,並將含有這些內容的行標準輸出。grep全稱是Clobal Regular Expression Print,表示全域性正則表示式版本,使用許可權是所有使用者

②、格式:

grep [options]

③、主要引數:

-c
只輸出匹配行的計數
-i
不區分大小寫(只適用於單字元)
-h
查詢多檔案時不顯示檔名
-l
查詢多檔案時只輸出包含匹配字元的檔名
-n
顯示匹配行及行號
-s
不顯示不存在或無匹配文字的錯誤資訊
-v
顯示不包含匹配文字的所有行

④、應用技巧:

pattern正則表示式主要引數
\
忽略正則表示式中特殊字元的原有含義
^
匹配正則表示式的開始行
$
匹配正則表示式的結束行
\<
從匹配正則表示式的行開始
\>
到匹配正則表示式的行結束
[]
單個字元,如[A],即A符合要求
[-]
範圍,如[A-Z],即A、B、C一直到Z都符合要求
.
所有的單個字元
*
有字元,長度可以為0
$ grep 'test' d*
顯示所有以d開頭的檔案中包含test的行
$ grep 'test' aa bb cc
顯示在aa,bb,cc檔案中匹配test的行
$ grep '[a-z]\{5\}' aa
顯示所有包含每個字串至少有5個連續小寫字元的字串的行
$ grep 'w\(es\)t.*\1' aa
如果west被匹配,則es就被儲存到記憶體中,並標記為1,然後搜尋任意個字元(.*),這些字元後面緊跟著另外一個es(\1),找到就顯示該行。如果用egrep或grep -E,就不用"\"號進行轉義,直接寫成'w(es)t.*\1'就可以了


4、dd

①、作用:

用來複制檔案,並根據引數將資料轉換和格式化,使用許可權是所有使用者

②、格式:

dd [options]

③、主要引數:

bs=位元組
強迫ibs=<位元組>及obs=<位元組>
cbs=位元組
每次轉換指定的<位元組>
conv=關鍵字
根據以逗號分隔的關鍵字表示的方式來轉換檔案
count=塊數目
只複製指定<塊數目>的輸入資料
ibs=位元組
每次讀取指定的<位元組>
if=檔案
讀取<檔案>內容,而非標準輸入的資料
obs=位元組
每次寫入指定的<位元組>
of=檔案
將資料寫入<檔案>,而不在標準輸出顯示
seek=塊數目
先略過以obs為單位的指定<塊數目>的輸出資料
skip=塊數目
先略過以ibs為單位的指定<塊數目>的輸入資料

④、應用技巧:

dd命令常常用來製作Linux啟動盤,先找一個可引導核心,令它的根裝置指向正確的根分割槽,然後使用dd命令將其寫入軟盤


5、find

①、作用:

在目錄中搜索檔案,使用許可權是所有使用者

②、格式:

find [path][options][expression]
(path指定目錄路徑,系統從這裡開始沿著目錄樹向下查詢檔案,它是一個路徑列表,相互用空格分離,如果不寫path,那麼預設為當前目錄)

③、主要引數:

-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
輸出搜尋結果,並且列印

④、應用技巧:

(1)、根據檔名查詢:

例如想要查詢一個檔名是lilo.conf的檔案
find / -name lilo.conf
(find命令後的“/”表示搜尋整個硬碟)

(2)、快速查詢檔案:

根據檔名查詢檔案會遇到一個實際問題,就是要花費相當長的一段時間,特別是大型Linux檔案系統和大容量硬碟檔案放在很深的子目錄中時。如果知道這個檔案存放在某個目錄中,那麼只要在這個目錄中往下尋找就能節省很多時間。比如smb.conf檔案,從它的檔案字尾".conf"可以判斷這是一個配置檔案,那麼它應該在/etc目錄內
find /etc -name smb.conf

(3)、根據部分檔名查詢方法:

只知道某個檔案包含有abcd這4個字,那麼要查詢系統中所有包含有這4個字元的檔案
find / -name '*abcd*'

(4)、使用混合查詢方式查詢檔案:

例如想在/etc目錄中查詢大於500000位元組,並且在24小時內修改過的某個檔案,則可以使用-and(與)把兩個查詢引數連結起來組合成一個混合的查詢方式
find /etc -size +500000c -and -mtime +1


6、mv

①、作用:

為檔案或目錄改名,或者將檔案由一個目錄移入另一個目錄中,使用許可權是所有使用者,該命令類似DOS命令中的ren和move的組合

②、格式:

mv [options] 原始檔或目錄 目標檔案或目錄

③、主要引數:

-i
互動方式操作,如果mv操作將導致對已存在的目標檔案的覆蓋,此時系統詢問是否重寫,要求使用者回答“y”或“n”,這樣可以避免誤覆蓋檔案
-f
禁止互動操作,mv操作要覆蓋某個已有的目標檔案時不給任何指示,指定此引數後i引數將不再起作用

④、應用技巧:

(1)、將/usr/cbu中的所有檔案移到當前目錄(用“.”表示)中

mv /usr/cbu/ * .

(2)、將檔案cjh.txt重新命名為wjz.txt

mv cjh.txt wjz.txt


7、ls

①、作用:

顯示目錄內容,類似DOS下的dir命令,使用許可權是所有使用者

②、格式:

ls [options][filename]

③、主要引數:

-a,--all
不隱藏任何以“.”字元開始的專案
-A,--almost-all
列出除了" . "及".. "以外的任何專案
--author
印出每個檔案作者
-b,--escape
以八進位制溢位序列表示不可列印的字元
--block-size=大小
塊以指定<大小>的位元組為單位
-B,--ignore-backups
不列出任何以 ~ 字元結束的專案
-f
不進行排序,-aU引數生效,-lst引數失效
-F,--classify
加上檔案型別的指示符號 (*/[email protected]| 其中一個)
-i,--inode
列出每個檔案的inode號
-I,--ignore=樣式
不印出任何符合Shell萬用字元<樣式>的專案
-k
即--block-size=1K
-l
使用較長格式列出資訊
-L,--dereference
當顯示符號連結的檔案資訊時,顯示符號連結所指示的物件,而並非符號連結本身的資訊
-m
所有專案以逗號分隔,並填滿整行行寬
-n,--numeric-uid-gid
類似-l,但列出UID及GID號
-N,--literal
列出未經處理的專案名稱,例如不特別處理控制字元
-p,--file-type
加上檔案型別的指示符號 (/[email protected]| 其中一個)
-Q,--quote-name
將專案名稱括上雙引號
-r,--reverse
依相反次序排列
-R,--recursive
同時列出所有子目錄層
-s,--size
以塊大小為序

④、應用技巧:

ls命令是Linux系統使用頻率最多的命令,它的引數也是Linux命令中最多的,使用ls命令時會有幾種不同的顏色,其中藍色表示是目錄,綠色表示是可執行檔案,紅色表示是壓縮檔案,淺藍色表示是連結檔案,加粗的黑色表示符號連結,灰色表示是其它格式檔案。檔案型別開頭是由10個字元構成的字串,其中第一個字元表示檔案型別,它可以是下述型別之一:-(普通檔案)、d(目錄)、l(符號連結)、 b(塊裝置檔案)、c(字元裝置檔案),後面的9個字元表示檔案的訪問許可權,分為3組,每組3位。第一組表示檔案屬主的許可權,第二組表示同組使用者的許可權,第三組表示其他使用者的許可權,每一組的三個字元分別表示對檔案的讀(r)、寫(w)和執行許可權(x),對於目錄,表示進入許可權,s表示當檔案被執行時,把該檔案的UID或GID賦予執行程序的UID(使用者ID)或GID(組ID),t表示設定標誌位(留在記憶體,不被換出)。如果該檔案是目錄,那麼在該目錄中的檔案只能被超級使用者、目錄擁有者或檔案屬主刪除。如果它是可執行檔案,那麼在該檔案執行後,指向其正文段的指標仍留在記憶體。這樣再次執行它時,系統就能更快地裝入該檔案,接著顯示的是檔案大小、生成時間、檔案或命令名稱。


8、diff

①、作用:

用於兩個檔案之間的比較,並指出兩者的不同,使用許可權是所有使用者

②、格式:

diff [options] 原始檔 目標檔案

③、主要引數:

-a
將所有檔案當作文字檔案來處理
-b
忽略空格造成的不同
-B
忽略空行造成的不同
-c
使用綱要輸出格式
-H
利用試探法加速對大檔案的搜尋
-I
忽略大小寫的變化
-n --rcs
輸出RCS格式


9、cmp

①、作用:

"compare"的縮寫,用來簡要指出兩個檔案是否存在差異,使用許可權是所有使用者

②、格式:

cmp[options] 檔名

③、主要引數:

-l:
將位元組以十進位制的方式輸出,並方便將兩個檔案中不同的以八進位制的方式輸出


10、cat

①、作用:

"concatenate"的縮寫,用於連線並顯示指定的一個和多個檔案的有關資訊,使用許可權是所有使用者

②、格式:

cat [options] 檔案1 檔案2……

③、主要引數:

-n
由第一行開始對所有輸出的行數編號
-b
和-n相似,只不過對於空白行不編號
-s
當遇到有連續兩行以上的空白行時,就代換為一行的空白行

④、應用技巧:

(1)、cat命令一個最簡單的用處是顯示文字檔案的內容

cat README 

(2)、有時需要將幾個檔案處理成一個檔案,並將這種處理的結果儲存到一個單獨的輸出檔案。把README和INSTALL的檔案內容加上行號(空白行不加)之後,將內容附加到一個新文字檔案File1中:

cat README INSTALL File1

(3)、cat還有一個重要的功能就是可以對行進行編號,這種功能對於程式文件的編制很方便,列印在左邊的行號使得參考文件的某一部分變得容易,使用cat命令對/etc/named.conf檔案進行編號

cat -b /etc/named.conf



11、ln

①、作用:

用來在檔案之間建立連結,使用許可權是所有使用者

②、格式:

ln [options] 原始檔 [連結名]

③、主要引數:

-f
鏈結時先將原始檔刪除
-d
允許系統管理者硬鏈結自己的目錄
-s
進行軟鏈結(Symbolic Link)
-b
將在鏈結時會被覆蓋或刪除的檔案進行備份
(連結有兩種,一種被稱為硬連結(Hard Link),另一種被稱為符號連結(Symbolic Link)。預設情況下,ln命令產生硬連結。硬連線指通過索引節點來進行的連線。在Linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配一個編號,稱為索引節點號 (Inode Index)。在Linux中,多個檔名指向同一索引節點是存在的。一般這種連線就是硬連線。硬連線的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連線。只刪除一個連線並不影響索引節點本身和其它的連線,只有當最後一個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案才會被真正刪除。與硬連線相對應,Lnux系統中還存在另一種連線,稱為符號連線(Symbilc Link),也叫軟連線。軟連結檔案有點類似於Windows的快捷方式,它實際上是特殊檔案的一種,在符號連線中,檔案實際上是一個文字檔案,其中包含的有另一檔案的位置資訊)


12、小技巧

①、利用符號連結快速訪問關鍵目錄:

符號連結是一個非常實用的功能,假設有一些目錄或檔案需要頻繁使用,但由於Linux的檔案和目錄結構等原因,這個檔案或目錄在很深的子目錄中。比如,Apache Web伺服器文件位於系統的/usr/local/httpd/htdocs中,並且不想每次都要從主目錄進入這樣一個長的路徑之中,為了解決這個問題,可以在主目錄中建立一個符號連結,這樣在需要進入該目錄時,只需進入這個連結即可
ln -s /usr/local/httpd/htdocs gg
(這樣每次進入gg目錄就可訪問Web伺服器的文件,以後如果不再訪問Web伺服器的文件時,刪除gg即可,而真正的Web伺服器的文件並沒有刪除)

②、使用dd命令將init.rd格式的root.ram內容匯入記憶體:

dd if=/dev/fd0 of=floppy.fd
dd if=root.ram of=/dev/ram0 #

③、grep命令系統呼叫:

(1)、如果要查詢目錄列表中的目錄

ls -l | grep '∧d'

(2)、如果在一個目錄中查詢不包含目錄的所有檔案

ls -l | grep '∧[∧d]'

(3)、用find命令呼叫grep,如所有C原始碼中的“Chinput”

find /ZhXwin -name *.c -exec grep -q -s Chinput {} \;-print