在日常使用linux系統的過程中,我們會經常需要在系統中查找一個文件,那麼在Linux系統中如何準確高效的確定一個文件在系統中的具體位置。提供如下幾種命令。
1、 find命令
man find
格式:
find
:所要搜索的目錄及其所有子目錄[默認為當前目錄]。
:所要搜索的文件的特徵。
:對搜索結果進行特定的處理。
即:
find pathName -options [-print -exec -ok]
注意:
如果什麼參數都不加,find默認搜索當前目錄及其子目錄,並且不過濾任何結果。
常用的option選項:
-name:按文件名來查找文件。
-user:按照文件的屬主來查找文件。
-group:按照文件所屬的組來查找文件。
-perm:按照文件權限來查找文件。
-prune:不在當前指定目錄中查找。
案例:
1.1、
find /etc/ -name 'passwd'
查看/etc/目錄及其子目錄下passwd文件
1.2、
find /etc/ -path /etc/pam.d -prune -o -name 'passwd' -print
排除/etc/pam.d目錄下的passwd
1.3、
find . -name '*.sh' -ls
查看當前目錄及以下.sh結尾的文件並以ls輸出
1.4、
find . -perm 700 -ls
查看當前目錄及子目錄下權限為700的文件
補充:
find在尋找數據的時候相當的耗硬盤,請見whereis與locate。
2、 locate命令
其實是"find -name"的另一種寫法,比後者快得多,原因是它不搜索具體目錄,而是搜索一個數據庫(/var/lib/locatedb),這個數據庫中含有本地所有文件信息。
補充:
Linux系統自動創建這個數據庫,每天自動更新一次,所以使用locate命令查不到最新變動過的文件。
注意:
為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數據庫。
man locate
案例:
2.1、
locate ~/*.sh
搜索用戶家目錄下以.sh結尾的文件
2.2、
在用戶家目錄的myShell目錄新創建一個DEMO文件
locate -i ~/General/myShell/de
以不區分大小寫de去查詢
並未查詢到DMEO文件
updatedb
locate -i ~/General/myShell/de
下圖所示:
查出來了我們剛剛創建的DEMO文件
補充:
每次文件更新和刪除之後,未執行updatedb,數據庫中保存的文件信息不會改變。
例如:
新建一個文件,未執行updatedb,用locate搜索不到新建的文件。
同理:
刪除一個文件,未執行updatedb,用locate照樣能搜索到該文件的信息。
3、 whereis 命令
下圖標紅描述:
whereis命令只能用於程序名的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。
如果省略參數則返回所有的信息。
案例:
以我們find為例
whereis find
返回了所有信息
whereis -m/b/s find
4、 which命令
在PATH變量指定的路徑中,搜索某個系統命令的位置,並且返回第一個搜索結果。
使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。
案例:
打印一下PATH
echo $PATH
查看一下我們java命令的位置
which java
下圖該路徑就在我們的PATH變量中
測試完成
歡迎大家給予寶貴的意見或者建議。
歡迎大家補充或者共享一些其他的方法。
感謝支持。
閱讀更多 程序員日常筆記 的文章