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