文件和目錄管理涉及的命令比較多,在現(xiàn)存的各個(gè)版本的Linux系統(tǒng)中,各命令功能大體相同。
6.11.1 文件和目錄操作常用通配符
在Linux文件系統(tǒng)中,可以使用通配符來(lái)匹配多個(gè)選擇。常用的通配符及其說(shuō)明如表6.14所示。
表6.14 常用通配符及其說(shuō)明
通 配 符 | 說(shuō) 明 |
* | 用來(lái)代表文件中任意長(zhǎng)度的任意字符 |
? | 用來(lái)代表文件中的任一個(gè)字符 |
[…] | 匹配任意一個(gè)在中括號(hào)中的字符, 中括號(hào)里可以是一個(gè)用破折號(hào) 格式表示的字母或數(shù)字范圍 |
前導(dǎo)字符串 {…} 后 繼字符串 | 大括號(hào)中的字符串逐一匹 配前導(dǎo)字符串和后繼字符串 |
例如當(dāng)前目錄下存在cars 、cat、can、cannon、truck、bus和bike等幾個(gè)文件,要列出所有以字母"c"開(kāi)頭的文件,可使用命令:
#touch car cats can cannon truck bus bike
#ls c*
cars can cannon
列出所有以字母"b"開(kāi)頭的文件名,命令行為:
#ls b*
bike bus
列出所有第一個(gè)字母為"c",最后一個(gè)字母為"n"的文件,命令行為:
#ls c*n
can cannon
列出包含字母"a"的所有文件,命令行為:
#ls *a*
cars cat can cannon
列出當(dāng)前目錄下的所有文件,命令行為:
#ls *
bike bus cars cat can cannon truck
通配符"?"只能匹配任意一個(gè)字符。例如列出上例中所有第三個(gè)字母是"n"的文件,命令行為:
#ls ??n*
can cannon
列出第一個(gè)字母是"b",第三個(gè)字母是"s"的所有文件,命令行為:
#ls b?s*
bus
中括號(hào)表示一個(gè)匹配的字符集,例如[123456]與[1-6]都表示數(shù)字1、2、3、4、5和6。大寫(xiě)字母A到D之間的任意一個(gè)字符可用[A-D]表示。多個(gè)集合之間可以用逗號(hào)分隔,例如[1-10,a-z,A-Z]表示數(shù)字1到10,小寫(xiě)字母a到小寫(xiě)字母z及大寫(xiě)字母A到大寫(xiě)字母Z。一個(gè)集合中若有前綴"!",則表示除了集合中包含的字符以外的所有字符組成的集合。如表示所有的輔音組成的字符集可寫(xiě)成[!aeiou]。例如要顯示上例中所有以字母b 或c開(kāi)頭的文件名,命令行為:
#ls [b,c]*
bike bus car cat can cannon
又如列出所有以字母b或c開(kāi)頭,以字母s或k 結(jié)尾的文件,命令行為:
#ls [b,c]*[s,k]
bus cars
大括號(hào)是用來(lái)查找文件的一個(gè)常用方法,例如以長(zhǎng)格式列出cars、cans和cats文件的信息,可以使用命令:
#ls -l c{ar,an,at}s
6.11.2 ls或dir命令:列出當(dāng)前目錄的內(nèi)容
ls(list的縮寫(xiě))命令可以列出當(dāng)前目錄的內(nèi)容。dir命令是ls命令的一個(gè)別名,也是directory的縮寫(xiě)。通常列出的文件會(huì)以不同的顏色進(jìn)行顯示,不同的顏色代表不同的文件類型,表6.15列出了文件類型與顏色的對(duì)應(yīng)關(guān)系。
表6.15 文件類型與顏色的對(duì)應(yīng)關(guān)系
文件類型 | 顏 色 |
目錄 | 深藍(lán)色 |
一般文件 | 淺灰色 |
執(zhí)行文件 | 綠色 |
圖形文件 | 紫色 |
鏈接文件 | 淺藍(lán)色 |
壓縮文件 | 紅色 |
FIFO 文件(命名管道) | 棕色 |
設(shè)備文件 | 黃色 |
ls還會(huì)對(duì)特定類型的文件用符號(hào)進(jìn)行標(biāo)識(shí),表6.16列出了常用的標(biāo)識(shí)符號(hào)及其說(shuō)明。
表6.16 特定文件類型標(biāo)識(shí)符及其說(shuō)明
符 號(hào) | 說(shuō) 明 |
. | 表示隱藏文件 |
/ | 表示一個(gè)目錄名 |
* | 表示一個(gè)可執(zhí)行文件 |
@ | 表示一個(gè)符號(hào)鏈接文件 |
| | 表示管道文件 |
= | 表示 socket 文件 |
ls命令的格式如下:
ls [選項(xiàng)] 目錄或文件名
其中各選項(xiàng)意義如下。
-a:列出指定目錄下所有文件和子目錄的信息(包括隱含文件)。
-A:同-a,但不列出. 和..。
-b:當(dāng)文件名中有不可顯示的字符時(shí),將顯示該字符的八進(jìn)制數(shù)字。
-c:按文件的最后修改時(shí)間排序。
-C:分成多列顯示。
-d:顯示目錄名而不是顯示目錄下的內(nèi)容,一般與-l連用。
-f:在列出的文件名后加上符號(hào)來(lái)區(qū)別不同類型。
-R:遞歸地顯示指定目錄的各級(jí)子目錄中的文件。
-s:給出每個(gè)目錄項(xiàng)所用的塊數(shù),包括間接塊。
-t:按最后修改時(shí)間排序(新的在前,舊的在后)。
-l:以長(zhǎng)格式顯示文件的詳細(xì)信息,包括文件的類型與權(quán)限、鏈接數(shù)、文件所有者、文件所有者所屬的組、文件大小、最近修改時(shí)間及文件名,詳情見(jiàn)圖6.4。
下面以不同的格式顯示目錄的內(nèi)容:
# ls //以縮略格式顯示目錄內(nèi)容
cal_txt finger_txt id_txt newgrp_txt
suple_txt who.txtfinger2_txt groups_txt last_txt suple3_txt
suple_txt~ w.txtfinger3_txt groups_txt2 ln suple3_txt~ w
# ls -l //以長(zhǎng)格式顯示目錄內(nèi)容,包括權(quán)限、
用戶名、修改時(shí)間等總計(jì) 224
-rw-r--r-- 1 root root 2163 07-24 13:00 cal_txt
-rw-r--r-- 1 root root 212 07-23 06:37 finger2_txt
-rw-r--r-- 1 root root 0 07-23 06:39 finger3_txt
-rw-r--r-- 1 root root 248 07-23 06:31 finger_txt
-rw-r--r-- 1 root root 35 07-23 04:22 groups_txt
-rw-r--r-- 1 root bin 140 07-23 04:32 groups_txt2
-rw-r--r-- 1 root root 144 07-23 04:11 id_txt
-rw-r--r-- 1 root root 1655 07-22 19:19 last_txt
drwxr-xr-x 5 root root 4096 07-26 09:42 ln
-rw-r--r-- 1 root bin 143 07-23 04:24 newgrp_txt
-rw-r--r-- 1 root root 25098 07-26 19:15 suple3_txt
-rw-r--r-- 1 root root 24031 07-26 16:00 suple3_txt~
-rw-r--r-- 1 root root 25198 07-24 20:16 suple_txt
-rw-r--r-- 1 root root 24827 07-24 20:06 suple_txt~
-rw-r--r-- 2 root root 196 07-23 06:48 w
-rw-r--r-- 1 root root 46 07-23 06:48 who.txt
-rw-r--r-- 2 root root 196 07-23 06:48 w.txt
# ls -s //顯示所用的塊數(shù)
總計(jì) 224
8 cal_txt 8 groups_txt 8 ln
32 suple_txt 8 w.txt8 finger2_txt 8 groups_txt2 8 newgrp_txt
32 suple_txt~4 finger3_txt 8 id_txt 32 suple3_txt 8 w
8 finger_txt 8 last_txt 28 suple3_txt~ 8 who.txt
選項(xiàng)可以組合使用。例如,如果需要列出當(dāng)前目錄的所有內(nèi)容(包括那些以"."開(kāi)頭的隱含文件),并以"冗余格式"在屏幕上輸出文件的詳細(xì)信息,可以使用選項(xiàng)"-al"。以冗余格式顯示/root目錄下的所有文件,可以使用命令:
# ls -al /root
drwxr-x--- 18 root root 4096 07-26 16:00 .
//當(dāng)前目錄drwxr-xr-x 24 root root 4096 07-25 05:43 ..
//父目錄-rw------- 1 root root 997 07-15 20:58
anaconda-ks.cfg //普通文件-rw------- 1 root root 2827 07-24 21:32
.bash_history //隱藏文件-rw-r--r-- 1 root root 24 2006-07-13
.bash_logout //隱藏文件… …
其中文件名為"."表示當(dāng)前目錄,對(duì)應(yīng)行列出了當(dāng)前目錄的詳細(xì)信息。文件名為".."表示當(dāng)前目錄的上一級(jí)目錄,即父目錄,對(duì)應(yīng)行列出了父目錄的詳細(xì)信息。文件名前有"."符號(hào)的文件是隱藏文件,只有使用了"-a"參數(shù)才會(huì)顯示出來(lái)。
6.11.3 cd命令:更改當(dāng)前目錄
cd(Chage Directory)命令用于更改當(dāng)前目錄,表6.17列出了常用的cd命令與運(yùn)行說(shuō)明。
表6.17 cd命令與運(yùn)行說(shuō)明
命 令 | 說(shuō) 明 |
cd | 切換到當(dāng)前用戶的主目錄 |
cd .. | 切換到當(dāng)前目錄的上一層目錄,例 如當(dāng)前目錄為 /home/student ,使用該 命令可以將當(dāng)前目錄移到 /home |
cd ../.. | 切換到當(dāng)前目錄的上二層目錄,例如 當(dāng)前目錄為 /home/student/student1 ,使 用該命令可以將當(dāng)前目錄移動(dòng)到 /home |
cd ~ | 切換當(dāng)前目錄為當(dāng)前用戶的主目錄, 適用于任何用戶 |
cd / | 切換當(dāng)前目錄到根目錄,即返回到 / |
注意:在Linux中,引用目錄名、計(jì)算機(jī)名或域名時(shí)使用正斜杠"/",而在Windows中需使用反斜杠"\"。
例如當(dāng)前系統(tǒng)中存在目錄結(jié)構(gòu)如圖6.9所示,其中用戶當(dāng)前目錄為/home/student。
![]() |
圖6.9 目錄結(jié)構(gòu)圖 |
若改變當(dāng)前目錄為/home/director,可以使用相對(duì)路徑,命令如下:
#pwd
/home/student
#cd ../director
#pwd
/home/director
也可以使用絕對(duì)路徑切換到/home/director,命令如下:
#pwd
/home/student
#cd /home/director
#pwd
/home/director
將當(dāng)前目錄由/home/student切換為/home/student/student1,由于student1目錄位于student目錄下,可以采用相對(duì)路徑:
#pwd
/home/student
#cd student1
#pwd
/home/student/student1
也可以采用絕對(duì)路徑,命令如下:
#pwd
/home/student
#cd /home/student/student1
#pwd
/home/student/student1
從student1目錄返回根目錄,可以使用命令:
#pwd
/home/student/student1
#cd /
#pwd
/
也可以使用相對(duì)路徑,命令行為:
#pwd
/home/student/student1
#cd ../../..
#pwd
/
6.11.4 cp 命令:復(fù)制目錄或文件
cp命令用于實(shí)現(xiàn)文件或目錄的復(fù)制,與DOS下的copy命令相似。cp命令格式如下:
cp [選項(xiàng)] 源文件或目錄 目標(biāo)文件或目錄
其中各可用選項(xiàng)意義如下。
-a:常在復(fù)制目錄時(shí)使用。該選項(xiàng)保留鏈接、文件屬性,并遞歸地復(fù)制目錄。
-f:如果目標(biāo)文件或目錄已存在,就覆蓋它,并且不做提示。
-i:與-f選項(xiàng)正好相反,在覆蓋已有文件時(shí),會(huì)讓用戶輸入"Y"來(lái)確認(rèn)。
-r:若給出的源是一個(gè)目錄,那么cp 將遞歸復(fù)制該目錄下所有的子目錄和文件,不過(guò)這要求目標(biāo)也是一個(gè)目錄名。
常用的cp命令行組合與運(yùn)行結(jié)果見(jiàn)表6.18。
表6.18 cp命令格式與運(yùn)行結(jié)果
命令格式 | 運(yùn)行結(jié)果 |
cp 文件 1 文件 2 | 復(fù)制源文件 1 的內(nèi)容到目標(biāo) 文件 2 上,目標(biāo)文件有一個(gè)新 的創(chuàng)建日期和節(jié)點(diǎn)索引號(hào) |
cp 多個(gè)文件 (文件名之間用 空格分隔)目錄 1 | 復(fù)制多個(gè)文件到目錄 1 中 |
cp -f 文件 1 文件 2 | 如果已有一個(gè)文件 2 存在, 該命令不顯示任何提示就用 文件 1 覆蓋文件 2 |
cp -i 文件 1 文件 2 | 如果已有一個(gè)文件 2 存在,該 命令在覆蓋文件 2 之前會(huì)給出提示 |
cp -p 目錄 1 目錄 2 | 復(fù)制目錄 1 的內(nèi)容到目錄 2 ,如 果目錄 1 下還有子目錄,則一并進(jìn)行復(fù)制 |
cp -u 文件 1 文件 2 | 如 果文件 2 已存在,但文件 1 比 文件 2 新,則不顯示任何提示就覆蓋文件 2 |
例如把a(bǔ).txt 和b.txt文件復(fù)制到/home/teacher目錄中,命令行如下:
#cp a.txt b.txt /home/teacher
cp命令可以在同一目錄下,換名復(fù)制一個(gè)文件,源文件保持不變。例如將當(dāng)前目錄下的a.txt文件復(fù)制一份且取名為b.txt,放在當(dāng)前目錄下,命令行為:
#cp a.txt b.txt
若源文件是普通文件,則直接復(fù)制到目標(biāo)文件;若是目錄,需要使用"-r"選項(xiàng)才能將整個(gè)目錄復(fù)制到目標(biāo)位置。例如將/home/teacher目錄下的所有內(nèi)容復(fù)制到/home/student目錄下,命令行為:
#cp -r /home/teacher /home/student
6.11.5 rm 命令:刪除目錄或文件
rm命令用于刪除文件或目錄,可刪除一個(gè)目錄中的一個(gè)或多個(gè)文件或目錄,也可刪除某個(gè)目錄及其下面的所有文件和子目錄。對(duì)于鏈接文件則只刪除鏈接,原文件保持不變。rm命令格式如下:
rm [選項(xiàng)] 文件…
其中各可用選項(xiàng)意義如下。
-f:在刪除過(guò)程中不給任何指示,直接刪除。
-r:將參數(shù)中列出的全部目錄和子目錄都遞歸地刪除。
-i:與-f選項(xiàng)相反,交互式刪除,在刪除每個(gè)文件時(shí)都給出提示。
刪除文件可以直接使用rm命令,若刪除目錄則必須配合選項(xiàng)"-r",例如:
# rm pp.c
rm:是否刪除 一般文件 "pp.c"? y
# rm homework
rm: 無(wú)法刪除目錄"homework": 是一個(gè)目錄
# rm -r homework
rm:是否刪除 目錄 "homework"? y
例如,刪除當(dāng)前目錄下的所有文件及目錄,命令行為:
# rm -r *
文件一旦通過(guò)rm命令刪除,則無(wú)法恢復(fù),所以必須格外小心地使用該命令。
6.11.6 mkdir命令:創(chuàng)建目錄
mkdir命令用于創(chuàng)建目錄。mkdir命令格式為:
mkdir [選項(xiàng)] 目錄名
各可用選項(xiàng)意義如下。
-m數(shù)字:設(shè)置新建目錄的權(quán)限,權(quán)限用數(shù)字表示。
-p:如果目錄名的路徑中包含著不存在的子目錄,那么就逐一地建立,直到最后的子目錄為止。
創(chuàng)建目錄時(shí),如果目錄名前沒(méi)有指定目錄的路徑,那么就表示在當(dāng)前目錄下創(chuàng)建;如果有路徑名,則在指定的路徑下建立。新建的子目錄必須不與已經(jīng)存在的文件名或目錄名重名。例如:
# pwd //在當(dāng)前目錄下創(chuàng)建子目錄zhang
/home/teacher1
# ls
# mkdir zhang
# ls
zhang
# mkdir /home/teacher1/yang //使用絕對(duì)路徑創(chuàng)建子目錄yang
# ls
yang zhang
# mkdir zhang //不能重名創(chuàng)建
mkdir: 無(wú)法創(chuàng)建目錄 "zhang": 文件已存在
在創(chuàng)建子目錄的時(shí)候,如果子目錄的父目錄不存在,則無(wú)法創(chuàng)建。使用選項(xiàng)"-p",則可以逐級(jí)創(chuàng)建目錄。例如在當(dāng)前目錄下創(chuàng)建li/document目錄:
# pwd
/home/teacher1
#mkdir li/document //由于不存在li子目
錄,li/document子目錄無(wú)法創(chuàng)建mkdir: 無(wú)法創(chuàng)建目錄 "li/document": 沒(méi)有那個(gè)文件或目錄
# mkdir -p li/document //參數(shù)"-p"允許逐級(jí)創(chuàng)建目錄
# ls
li yang zhang
# cd li
# ls
document
再如創(chuàng)建新目錄/usr/Bob/example,且指定權(quán)限為700,命令行為:
$ mkdir -m 700 /usr/Bob/example
6.11.7 rmdir命令:刪除空目錄
rmdir命令用于刪除一個(gè)空目錄。被刪除的目錄必須是一個(gè)空目錄否則無(wú)法刪除。rmdir只用于刪除目錄,無(wú)法刪除文件。rmdir命令格式為:
rmdir [選項(xiàng)] 目錄名
可用選項(xiàng)意義如下。
-p:刪除目錄下所有空目錄,如果有非空的子目錄,則保留下來(lái);如果所有的子目錄都刪除了,則刪除該目錄。
例如刪除document子目錄,命令行為:
# ls
document
# cd document
# ls
# rmdir document //在document子
目錄內(nèi)無(wú)法刪除document子目錄rmdir: document: 沒(méi)有那個(gè)文件或目錄
# cd ..
# rmdir document
# ls
若沒(méi)有document的寫(xiě)權(quán)限或目錄非空則無(wú)法刪除,例如:
# ls
li yang zhang
# rmdir li
rmdir: li: 目錄非空
6.11.8 mv 命令:移動(dòng)文件或目錄
mv 命令用于實(shí)現(xiàn)文件或目錄的移動(dòng)。mv命令格式如下:
mv [選項(xiàng)] 源文件或目錄 目標(biāo)文件或目錄
可用選項(xiàng)意義如下。
-f:如果操作要覆蓋某個(gè)已有的目標(biāo)文件時(shí)不給任何指示。
-i:交互式的操作,如果操作要覆蓋某個(gè)已有的目標(biāo)文件時(shí)會(huì)詢問(wèn)用戶是否覆蓋。
mv與cp命令的明顯不同之處在于:mv命令移動(dòng)文件,文件個(gè)數(shù)沒(méi)有增加;cp命令復(fù)制文件,文件個(gè)數(shù)增加。mv命令還可以進(jìn)行文件或目錄的改名,其參數(shù)設(shè)置與運(yùn)行結(jié)果對(duì)應(yīng)關(guān)系如表6.19所示。
表6.19 mv參數(shù)設(shè)置與運(yùn)行結(jié)果
命令格式 | 運(yùn)行結(jié)果 |
mv 文件名 文件名 | 將源文件名改為目標(biāo)文件名 |
mv 文件名 目錄名 | 將文件移動(dòng)到目標(biāo)目錄 |
mv 目錄名 目錄名 | 目標(biāo)目錄已存在,將源目錄 移動(dòng)到目標(biāo)目錄;目標(biāo) 目錄不存在則改名 |
mv 目錄名 文件名 | 出錯(cuò) |
例如將m1.c文件改名為m2.c,命令行為:
$ mv m1.c m2.c
再如將/usr/student下的所有文件和目錄移到當(dāng)前目錄下,命令行為:
$ mv /usr/student/* .
6.11.9 find 命令:查找文件
find命令用于查找文件,其命令格式為:
find [起始目錄](méi) [搜索條件] [操作]
其中[起始目錄](méi)是指命令將從該目錄起,遍歷其下的所有子目錄,查找滿足條件的文件。該目錄默認(rèn)是當(dāng)前目錄。[搜索條件]是一個(gè)邏輯表達(dá)式,當(dāng)表達(dá)式為"真"時(shí),搜索條件成立,為"假"時(shí)不成立。搜索條件的一般表達(dá)式及其說(shuō)明見(jiàn)表6.20。
表6.20 find命令搜索條件的一般表達(dá)式及其說(shuō)明
搜索條件 | 說(shuō) 明 |
-name ‘ 字符串 ’ | 查找文件名中包含所給字符串的所有文件 |
-user ‘ 用戶名 ’ | 查找屬于指定用戶的文件 |
-group ‘ 用戶組名 ’ | 查找屬于指定用戶組的文件 |
-type x | 查找類型為 x 的文件,類型包括 b (塊設(shè)備文件), c (字符設(shè)備文件), d (目錄文件), p (命名管道文件), f (普通文件), l (符號(hào)鏈接文件), s ( socket 文件) |
續(xù)表
搜索條件 | 說(shuō) 明 |
-atime n | 查找 n 天以前被訪問(wèn)過(guò)的文件 |
-size n | 指定文件大小為 n |
-perm | 查找符合指定權(quán)限值的文件或目錄 |
-mount | 要查找文件時(shí)不跨越文件系統(tǒng) mount 點(diǎn) |
-follow | 如果 find 命令遇到符號(hào)鏈接文件, 就跟蹤到鏈接所指向的文件 |
-cpio | 對(duì)匹配的文件使用 cpio 命令,將文 件備份到磁帶設(shè)備中 |
-newer file1 ! file2 | 查找更改時(shí)間比文件 file1 晚但比 文件 file2 早的文件 |
-prume | 不在指定的目錄中查找,如果同時(shí) 指定 -depth 選項(xiàng),那么 -prune 將被 find 命令忽略 |
-ok | 和 exec 作用相同,但在執(zhí)行每一個(gè) 命令之前,都會(huì)給出提示,由用戶 來(lái)確定是否執(zhí)行 |
-depth | 在查找文件時(shí),首先查找當(dāng)前目錄, 然后再在其他子目錄中查找 |
可執(zhí)行的操作及其說(shuō)明見(jiàn)表6.21。
表6.21 find命令常用可執(zhí)行操作及其說(shuō)明
可執(zhí)行操作 | 說(shuō) 明 |
-exec 命令名 {} \ ; | 不需確認(rèn)執(zhí)行命令。注意 : “ {} ”代 表找到的文件名,“ } ”與“ \ ”之間有空格 |
送往標(biāo)準(zhǔn)輸出 |
例如從當(dāng)前目錄查找所有以.txt結(jié)尾的文件并在屏幕上顯示出來(lái),命令行為:
$ find . -name '*.txt' -print
再如從根目錄查找類型為符號(hào)連接的文件,并將其刪除,命令行為:
$ find / -type l -exec rm { } \;
又如從當(dāng)前目錄查找用戶tom的所有文件并在屏幕上顯示,命令行為:
$ find . -user 'tom' -print
又如顯示當(dāng)前目錄中大于20字節(jié)的.c文件名,命令行為:
$ find . -name "*.c" -size +20c -print
顯示當(dāng)前目錄中恰好10天前訪問(wèn)過(guò)的文件名,命令行為:
$ find . -atime 10 -print
顯示當(dāng)前目錄中不到10天前訪問(wèn)過(guò)的文件名,命令行為:
$ find . -atime -10 -print
查找/home目錄下權(quán)限為640的文件或目錄,命令行為:
#find /home -perm 640
搜索根目錄下大于100KB的文件,并顯示,命令行為:
#find / -size +100K -print
搜索根目錄下小于500KB的文件,命令行為:
#find / -size -500K -print
在當(dāng)前目錄中查找所有文件名以.doc結(jié)尾,且更改時(shí)間在5天以上的文件,找到后進(jìn)行刪除,且刪除前給出提示,命令行為:
#find . -name '*.doc' -mtime +5 -ok rm { } \;
在當(dāng)前目錄下查找所有鏈接文件,并以長(zhǎng)格式顯示文件的基本信息,命令行為:
# find . -type l -exec ls -l {} \;
lrw-rw-r-- 1 root root 36 07-27 14:34 ./example2
lrw-rw-r-- 1 root root 72 07-27 14:36 ./example3
lrw-rw-r-- 1 root root 36 07-27 14:36 ./example1
在當(dāng)前目錄中查找文件名由一個(gè)小寫(xiě)字母、一個(gè)大寫(xiě)字母和兩個(gè)數(shù)字組成,且擴(kuò)展名為.doc的文件,并顯示,命令行為:
#find . -name ' [a-z][A-Z][0-9][0-9].doc' -print
6.11.10 grep 命令:在文件中搜索指定的字符串
grep命令是"global regular expression print"的縮寫(xiě),用于在文件中搜索指定的字符串模式,列出含有匹配模式字符串的文件名,并輸出含有該字符串的文本行,命令格式為:
grep [選項(xiàng)] [查找模式][文件名……]
其中各可用選項(xiàng)意義如下。
-F:將查找模式看成是單純的字符串。
-i:要查找的字符串不區(qū)分字母的大小寫(xiě)。
-r:以遞歸方式查詢目錄下的所有子目錄的文件。
-n:標(biāo)出包含指定字符串的行編號(hào)。
例如在文件example中查找包含"aa"字符串的行,命令如下:
# cat example
aa bb cc dd
aa bb ff
ee
# grep aa example
aa bb cc dd
aa bb ff
如果待查找的字符串模式的字?jǐn)?shù)大于1,則必須在字符串模式兩邊使用單引號(hào),否則系統(tǒng)會(huì)只把第一個(gè)字作為搜索目錄,如:
# cat example
aa bb cc dd
aa bb ff
ee
# grep bb cc example
grep: cc: 沒(méi)有那個(gè)文件或目錄
example:aa bb cc dd
example:aa bb ff
# grep 'bb cc' example
aa bb cc dd
例如在/passwd文件中查找包含"teacher"字符串的行,命令為:
#grep -F teacher /etc/passwd
teacher:*:500:500: teacher:/home/ teacher:/bin/bash
再如在file1中查找包含"print" 字符串的所有行,不管字符的大小寫(xiě),命令行如下:
# grep -i 'print' file1
又如查找包含字符串"bb cc"的行,輸出該行,并輸出該行所在的行號(hào),命令為:
# cat example
aa bb cc dd
aa bb ff
ee
# grep -n 'bb cc' example
1:aa bb cc dd
通常grep命令配合管道符(|)還可用來(lái)作為其他命令的輸入,例如統(tǒng)計(jì)指定文件中包含某字符串的行數(shù)、字?jǐn)?shù)和字節(jié)數(shù):
# cat example
aa bb cc dd
aa bb ff
ee
# grep 'bb' example | wc
2 7 21
grep命令除了作為其他命令的輸入,也可以作為一些命令(例如ls,ps)的輸出。例如在當(dāng)前運(yùn)行的進(jìn)程中查找vi程序的進(jìn)程信息,命令行如下:
# ps aux | grep vi
root 5716 0.0 0.2 4956 736 pts/1
T Jul25 0:00 viroot 20681 0.3 0.4 4960 1012 pts/1
T 14:21 0:00 viroot 20689 5.0 0.2 4132 668 pts/1
R+ 14:22 0:00 grep vi
注意:還有兩個(gè)命令與grep非常相似。一個(gè)是"egrep",表示Extend grep,執(zhí)行效率比grep高,但需占用較大的內(nèi)存空間;另一個(gè)是"fgrep",占用空間比egrep小,且速度也比grep快。由于三個(gè)命令的結(jié)構(gòu)、功能類似,因此大部分參數(shù)可以共享。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
