EduCoder Linux之文件/目录搜索
本實訓(xùn)主要講解Linux中文件查找和定位方法。
Linux系統(tǒng)中查找文件的方法不同于Windows系統(tǒng),在Windows系統(tǒng)中查找文件的方法比較容易,只要在桌面上點擊“開始”-“搜索”中就能按照各種方式進(jìn)行查找,對于Linux新手來講,在Linux系統(tǒng)中查找一個文件比較空難,它不像Windows那樣方便,在Linux中通常使用命令來查找文件,常見查找文件的命令有l(wèi)ocate、which、whereis和find等。
本實訓(xùn)主要講解如何在Linux系統(tǒng)中查找文件/目錄。
第1關(guān):查詢命令-locate
- 任務(wù)描述
- 相關(guān)知識
- locate
- updatedb
- 編程要求
- 測試說明
任務(wù)描述
假設(shè),我們想找一個月前創(chuàng)建的一個文件,但是又不記得具體是放在什么位置,只記得文件的名稱,通過本關(guān)的學(xué)習(xí),我們將可以輕松的完成對文件/目錄的搜索。
本關(guān)任務(wù):使用locate命令查找系統(tǒng)中的文件。
相關(guān)知識
locate
locate命令用來查找文件或目錄。
locate命令要比其他查找文件命令(例如:find)快得多,原因在于它不搜索具體目錄,而是搜索一個數(shù)據(jù)庫/var/lib/mlocate/mlocate.db。
/var/lib/mlocate/mlocate.db這個數(shù)據(jù)庫中含有本地所有文件信息。Linux 系統(tǒng)自動創(chuàng)建這個數(shù)據(jù)庫,并且每天自動更新一次,因此,我們在用locate查找文件時,有時會找到已經(jīng)被刪除的數(shù)據(jù),或者剛剛建立文件,卻無法查找到,原因就是因為數(shù)據(jù)庫文件沒有被更新。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數(shù)據(jù)庫。
接下讓我們詳細(xì)的學(xué)習(xí)locate和updatedb的使用方法。
locate具體命令如下:
locate 命令參數(shù) 文件/目錄
常用命令參數(shù)如下:
案例演示1:
搜索etc目錄下以pass開頭的文件或目錄,具體使用如下命令:
案例演示2:
搜索包含passwd字母的文件或目錄總個數(shù),具體使用如下命令:
updatedb
updatedb命令用來創(chuàng)建或更新locate命令所必需的數(shù)據(jù)庫文件。
updatedb命令的執(zhí)行過程較長,因為在執(zhí)行時它會遍歷整個系統(tǒng)的目錄樹,并將所有的文件信息寫入locate數(shù)據(jù)庫文件中。
具體命令如下:
updatedb 命令參數(shù)
常用參數(shù)如下:
執(zhí)行權(quán)限:updatedb必須以root權(quán)限才能執(zhí)行,如果是普通用戶想執(zhí)行updatedb時,需要在命令前加sudo命令來提升權(quán)限為root權(quán)限。
案例演示1:
新創(chuàng)建一個testFile文件,更新locate數(shù)據(jù)庫后使用locate命令定位該文件,具體使用如下命令:
可以看到新創(chuàng)建文件后直接使用locate去查找是沒有任何結(jié)果的,只有更新數(shù)據(jù)庫后才能查找到新創(chuàng)建的文件。
案例演示2:
刪除testFile文件,更新locate數(shù)據(jù)庫后使用locate命令定位該文件,具體使用如下命令:
第三條命令是只更新testFile所在目錄的數(shù)據(jù)庫,這樣速度比較快,如果不使用該參數(shù),則會更新整個文件系統(tǒng)的內(nèi)容。
可以看到刪除文件后直接使用locate去查找是可以定位到的,但是此時文件已經(jīng)不存在了,原因是沒有馬上更新數(shù)據(jù)庫。
編程要求
在右側(cè)編輯器中補充代碼,使用locate命令查找系統(tǒng)中的文件,具體編程要求如下:
使用locate命令查找系統(tǒng)中所有包括group字母的文件或目錄的總個數(shù);
使用locate命令定位系統(tǒng)中最新創(chuàng)建的文件newFile。
測試說明
平臺會對你編寫的代碼進(jìn)行評測:
預(yù)期輸出:
只有勝利才能生存,只有成功才有代價,只有耕耘才有收獲。——佚名
開始你的任務(wù)吧,祝你成功!
#!/bin/bash#在以下部分寫出完成任務(wù)的命令 #*********begin*********# locate -c group updatedb locate newFile #********* end *********#第2關(guān):查詢命令-which/whereis
- 任務(wù)描述
- 相關(guān)知識
- which
- whereis
- 編程要求
- 測試說明
任務(wù)描述
假設(shè)系統(tǒng)中存在兩個同名的可執(zhí)行文件gcc時,我們在命令行下輸入gcc后,但是我們不知道具體執(zhí)行的是那個gcc,通過本關(guān)的學(xué)習(xí),我們將會學(xué)習(xí)到如何定位一個命令的位置以及首選執(zhí)行命令的位置。
本關(guān)任務(wù):使用which和whereis命令查找系統(tǒng)中的文件。
相關(guān)知識
在第一關(guān)中我們講解了locate命令的使用方法以及其原理,本關(guān)將介紹 Linux 另外兩個定位文件的命令,分別是which和whereis。
which命令主要是用來查找系統(tǒng)PATH目錄下的可執(zhí)行文件,說白了就是查找那些我們已經(jīng)安裝好的可以直接執(zhí)行的命令。
whereis命令可以用來查找二進(jìn)制(命令)、源文件、man文件。與which不同的是這條命令可以是通過文件索引數(shù)據(jù)庫而非PATH來查找的,所以查找的面比which要廣。
接下讓我們詳細(xì)的學(xué)習(xí)which和whereis的使用方法。
which
which命令用于查找并顯示給定命令的絕對路徑,環(huán)境變量PATH中保存了查找命令時需要遍歷的目錄。which指令會在環(huán)境變量$PATH設(shè)置的目錄里查找符合條件的文件。也就是說,使用which命令,就可以看到某個系統(tǒng)命令是否存在,以及執(zhí)行的到底是哪一個位置的命令。
which是shell內(nèi)建命令,內(nèi)建命令要比系統(tǒng)論命令有比較高的執(zhí)行效率。
具體命令如下:
which 命令
案例演示:
使用which命令定位passwd命令的位置,具體使用如下命令:
可以看到passwd命令是存放在/usr/bin目錄下。
whereis
whereis命令用來定位指令的二進(jìn)制程序、源代碼文件和man手冊頁等相關(guān)文件的路徑。
具體命令如下:
whereis 命令參數(shù) 文件名
常用命令參數(shù)如下:
案例演示1:
使用whereis命令查找passwd命令所有信息,包括二進(jìn)制文件位置、說明文件位置和源碼文件位置,具體使用如下命令:
案例演示2:
使用whereis命令僅查找passwd命令二進(jìn)制文件位置,具體使用如下命令:
可以看到passwd命令存在的位置有兩處,分別是/usr/bin/passwd和/usr/bin/X11/passwd,那么在我們執(zhí)行passwd時,如何確定是執(zhí)行的哪一個,此時我們就可以使用which命令來定位首先被執(zhí)行的命令位置。
編程要求
在右側(cè)編輯器中補充代碼,使用which和whereis命令定位命令位置,具體編程要求如下:
使用which命令定位useradd命令的位置;
使用whereis命令查詢useradd命令的所有信息,包括二進(jìn)制文件位置、說明文件位置和源碼文件位置;
使用whereis命令僅查找useradd命令說明文件位置。
測試說明
平臺將對編寫的代碼進(jìn)程評測:
預(yù)期輸出:
成功的唯一秘訣——堅持最后一分鐘。——柏拉圖
開始你的任務(wù)吧,祝你成功!
#!/bin/bash#在以下部分寫出完成任務(wù)的命令 #***********begin*************# which useradd whereis useradd whereis -m useradd #************end**************#第3關(guān):查詢命令-find
- 任務(wù)描述
- 相關(guān)知識
- find
- -type 文件類型使用方法
- size <+|-|=文件大小>使用方法
- -exec使用方法
- find
- 編程要求
- 測試說明
任務(wù)描述
通過前兩關(guān)的學(xué)習(xí),我們學(xué)會了如何定位一個文件/目錄,但是Linux系統(tǒng)還提供了一個搜索文件/目錄的命令,這個命令就是-find,find命令是每個學(xué)習(xí)Linux的用戶都會遇到的,通過本關(guān)的學(xué)習(xí),我們將會掌握find命令的常用用法以及高級用法。
本關(guān)任務(wù):使用find命令查找系統(tǒng)中的文件/目錄。
相關(guān)知識
通過以上兩關(guān)的學(xué)習(xí),我們已經(jīng)學(xué)會了使用locate命令查詢系統(tǒng)中的文件/目錄,使用which和whereis命令來定位可執(zhí)行文件的位置。接下來讓我們一起學(xué)習(xí)查詢文件/目錄的最后一個命令-find。
find命令與locate命令相比各有各的優(yōu)缺點,locate命令的優(yōu)點就是查找速度比find命令快的多,但是缺點也比較明顯,locate命令無法查找最新添加的文件/目錄以及會查找出來已經(jīng)過期的文件/目錄。
相反find命令的優(yōu)點就是可以按照自定義的方法查找任何文件,缺點就是查詢速度比較慢,因為是通過遍歷硬盤來查找而不像locate命令事先建立好數(shù)據(jù)庫來進(jìn)行查找。
接下讓我們詳細(xì)的學(xué)習(xí)find的使用方法。
find
find命令用來在指定目錄下查找文件。任何位于參數(shù)之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設(shè)置任何參數(shù),則find命令將在當(dāng)前目錄下查找子目錄與文件。并且將查找到的子目錄和文件全部進(jìn)行顯示。
具體命令如下:
find 查找目錄 查找參數(shù) 查找內(nèi)容
常用查找參數(shù)如下:
注意:通常使用find命令的時候使用root權(quán)限,這樣就有權(quán)限查找任何目錄下的內(nèi)容,本平臺默認(rèn)權(quán)限是root權(quán)限,所有在本平臺上執(zhí)行find命令時不需要加sudo。
案例演示1:
查找/etc目錄下以my開頭以.conf結(jié)尾的文件或目錄,具體使用如下命令:
*表示任意字母。
案例演示2:
查找/etc目錄下在超過7天前被訪問的文件或目錄,具體使用如下命令:
案例演示3:
查找/etc目錄下恰好在7天前被訪問的文件或目錄,具體使用如下命令:
案例演示4:
查找/etc目錄下在5分鐘內(nèi)被訪問的文件或目錄,具體使用如下命令:
-type 文件類型使用方法
常見文件類型:
案例演示:
查找/etc目錄下以my開頭的目錄,具體使用如下命令:
size <+|-|=文件大小>使用方法
常見文件大小單位:
案例演示:
查找/etc目錄下大于1M的文件,具體使用如下命令:
-exec使用方法
具體使用方法如下:
find … -exec 要執(zhí)行的命令 {} \;
-exec選項后面跟隨著所要執(zhí)行的命令或腳本,然后是一個空格一對兒{}一個空格和一個\;。
注意:要執(zhí)行的命令和{之間以及}與\;之間的空格是不能省略的。
案例演示:
查找/etc目錄下大于1M的文件/目錄的詳細(xì)信息,具體使用如下命令:
sudo find /etc -size 1M -exec ls -l {} \;
編程要求
請在右側(cè)編輯器中補充代碼,使用find命令查找文件或目錄,具體編程要求如下:
使用find命令查找當(dāng)前目錄中所有以.conf結(jié)尾的文件/目錄;
使用find命令查找當(dāng)前目錄中所有以my開頭的目錄;
使用find命令查找/root目錄中大于1M的文件;
使用find命令查找/root目錄中類型為符號鏈接且文件名以 Link 結(jié)尾的所有鏈接詳細(xì)數(shù)據(jù)(提示使用ls -l查看文件詳細(xì)數(shù)據(jù))。
測試說明
平臺將對你編寫的代碼進(jìn)行評測:
注意:本平臺默認(rèn)權(quán)限是root,所以執(zhí)行命令不需要加sudo。
預(yù)期輸出:
勝利者往往是從堅持最后五分鐘的時間中得來成功。——牛頓
開始你的任務(wù)吧,祝你成功!
#!/bin/bash#在以下部分寫出完成任務(wù)的命令 #***********begin*************# find . -name "*.conf" find . -name "my*" find /root -type f -size +1M find /root -type l -name "*Link" -exec ls -l {} \; #************end**************#總結(jié)
以上是生活随笔為你收集整理的EduCoder Linux之文件/目录搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TypeError: sequence
- 下一篇: LeetCode 1049. 最后一块石