Linux中查詢檔案
1、find 命令
1.1、基本語法
使用 Linux find 命令可以用不同的搜尋標準如名字、型別、所屬人、大小等來搜尋目錄樹。基本語法如下:
[[email protected] ~]# find -help
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
預設路徑為當前目錄;預設表示式為 -print
表示式可能由下列成份組成:操作符、選項、測試表達式以及動作:
操作符 (優先順序遞減;未做任何指定時預設使用 -and):
( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2
EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2
位置選項 (總是真): -daystart -follow -regextype
普通選項 (總是真,在其它表示式前指定):
-depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
--version -xdev -ignore_readdir_race -noignore_readdir_race
比較測試 (N 可以是 +N 或 -N 或 N): -amin N -anewer FILE -atime N -cmin N
-cnewer 檔案 -ctime N -empty -false -fstype 型別 -gid N -group 名稱
-ilname 匹配模式 -iname 匹配模式 -inum N -ipath 匹配模式 -iregex 匹配模式
-links N -lname 匹配模式 -mmin N -mtime N -name 匹配模式 -newer 檔案
-nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN
-readable -writable -executable
-wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
-used N -user NAME -xtype [bcdpfls]
-context CONTEXT
actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
-fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
-exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
-execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;
通過 findutils 錯誤報告頁 http://savannah.gnu.org/ 報告錯誤及跟蹤修定過程。如果您無法瀏覽網頁,請發電子郵件至 <[email protected]>。
[[email protected] ~]#
1.2、按檔名查詢
使用 find 命令根據檔名來查詢特定檔案的一個例子:
[[email protected] hadoop-3.3.1]# find / -name README.txt
/usr/lib64/python3.6/site-packages/README.txt
/usr/share/doc/vim-common/README.txt
/usr/share/doc/pcre2-devel/html/README.txt
/usr/share/doc/pcre-devel/html/README.txt
/usr/share/vim/vim80/autoload/README.txt
/usr/share/vim/vim80/colors/README.txt
/usr/share/vim/vim80/compiler/README.txt
/usr/share/vim/vim80/ftplugin/README.txt
/usr/share/vim/vim80/indent/README.txt
/usr/share/vim/vim80/keymap/README.txt
/usr/share/vim/vim80/lang/README.txt
/usr/share/vim/vim80/macros/README.txt
/usr/share/vim/vim80/macros/maze/README.txt
/usr/share/vim/vim80/macros/urm/README.txt
/usr/share/vim/vim80/plugin/README.txt
/usr/share/vim/vim80/syntax/README.txt
/usr/share/vim/vim80/tutor/README.txt
/opt/module/hadoop-3.3.1/README.txt
[[email protected] hadoop-3.3.1]#
命令會搜尋整個目錄樹來查詢指定檔名的檔案,並且會提供其存放位置。
1.3、指定路徑查詢
find 命令有時會花費幾分鐘來查詢整個目錄樹,尤其是如果系統中有很多檔案和目錄的話。要顯著減少時間,你可以指定搜尋的目錄。比如,如果你知道某個檔案存在某個資料夾,那就沒有必要搜尋其它目錄。這樣,你可以使用下面的命令:
[[email protected] hadoop-3.3.1]# find /opt/module/hadoop-3.3.1/ -name README.txt
/opt/module/hadoop-3.3.1/README.txt
[[email protected] hadoop-3.3.1]#
1.4、模糊查詢
[[email protected] hadoop-3.3.1]# find /opt/module/hadoop-3.3.1/etc/ -name *.xml
/opt/module/hadoop-3.3.1/etc/hadoop/kms-acls.xml
/opt/module/hadoop-3.3.1/etc/hadoop/hadoop-policy.xml
/opt/module/hadoop-3.3.1/etc/hadoop/hdfs-rbf-site.xml
/opt/module/hadoop-3.3.1/etc/hadoop/kms-site.xml
/opt/module/hadoop-3.3.1/etc/hadoop/capacity-scheduler.xml
/opt/module/hadoop-3.3.1/etc/hadoop/httpfs-site.xml
/opt/module/hadoop-3.3.1/etc/hadoop/core-site.xml
/opt/module/hadoop-3.3.1/etc/hadoop/hdfs-site.xml
/opt/module/hadoop-3.3.1/etc/hadoop/mapred-site.xml
/opt/module/hadoop-3.3.1/etc/hadoop/yarn-site.xml
[[email protected] hadoop-3.3.1]#
2、locate命令
locate 命令用來查詢檔案或目錄。 locate 命令要比 find -name 快得多,原因在於它不搜尋具體目錄,而是搜尋一個數據庫 /var/lib/mlocate/mlocate.db 。這個資料庫中含有本地所有檔案資訊。Linux 系統自動建立這個資料庫,並且每天自動更新一次,因此,我們在用 whereis 和 locate 查詢檔案時,有時會找到已經被刪除的資料,或者剛剛建立檔案,卻無法查詢到,原因就是因為資料庫檔案沒有被更新。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新資料庫。整個locate工作其實是由四部分組成的:
/usr/bin/updatedb 主要用來更新資料庫,通過crontab自動完成的
/usr/bin/locate 查詢檔案位置
/etc/updatedb.conf updatedb的配置檔案
/var/lib/mlocate/mlocate.db 存放檔案資訊的檔案
2.1、CentOS 8.2 安裝locate
[[email protected] ~]# yum install mlocate
2.2、更新搜尋資料庫
locate是一種比find更快的方式,因為它在資料庫中查詢檔案。要更新搜尋資料庫,執行下面的命令:
[[email protected] ~]# updatedb
2.3、基本語法
[[email protected] ~]# locate [OPTION]... [PATTERN]...
2.4、基本選項
-b, --basename match only the base name of path names
-c, --count 只輸出找到的數量
-d, --database DBPATH 使用DBPATH指定的資料庫,而不是預設資料庫 /var/lib/mlocate/mlocate.db
-e, --existing only print entries for currently existing files
-L, --follow follow trailing symbolic links when checking file existence (default)
-h, --help 顯示幫助
-i, --ignore-case 忽略大小寫
-l, --limit, -n LIMIT limit output (or counting) to LIMIT entries
-m, --mmap ignored, for backward compatibility
-P, --nofollow, -H don't follow trailing symbolic links when checking file existence
-0, --null separate entries with NUL on output
-S, --statistics don't search for entries, print statistics about eachused database
-q, --quiet 安靜模式,不會顯示任何錯誤訊息
-r, --regexp REGEXP 使用基本正則表示式
--regex 使用擴充套件正則表示式
-s, --stdio ignored, for backward compatibility
-V, --version 顯示版本資訊
-w, --wholename match whole path name (default)
2.5、示例
示例一:搜尋檔名為”README.TXT“的檔案
[[email protected] ~]# locate README.TXT/opt/module/jdk1.8.0_181/lib/missioncontrol/dropins/README.TXT/usr/share/doc/libicu-devel/samples/datefmt/README.TXT/usr/share/doc/libicu-devel/samples/msgfmt/README.TXT/usr/share/doc/libicu-devel/samples/translit/README.TXT
驗證:
[[email protected] ~]# locate README.TXT/opt/module/jdk1.8.0_181/lib/missioncontrol/dropins/README.TXT/usr/share/doc/libicu-devel/samples/datefmt/README.TXT/usr/share/doc/libicu-devel/samples/msgfmt/README.TXT/usr/share/doc/libicu-devel/samples/translit/README.TXT[[email protected] ~]# find / -name README.TXT/usr/share/doc/libicu-devel/samples/datefmt/README.TXT/usr/share/doc/libicu-devel/samples/msgfmt/README.TXT/usr/share/doc/libicu-devel/samples/translit/README.TXT/opt/module/jdk1.8.0_181/lib/missioncontrol/dropins/README.TXT[[email protected] ~]#
示例二:搜尋/opt/module/hadoop-3.3.1/etc/hadoop/目錄下所有以hadoop開頭的檔案
[[email protected] ~]# locate /opt/module/hadoop-3.3.1/etc/hadoop/hadoop/opt/module/hadoop-3.3.1/etc/hadoop/hadoop-env.cmd/opt/module/hadoop-3.3.1/etc/hadoop/hadoop-env.sh/opt/module/hadoop-3.3.1/etc/hadoop/hadoop-metrics2.properties/opt/module/hadoop-3.3.1/etc/hadoop/hadoop-policy.xml/opt/module/hadoop-3.3.1/etc/hadoop/hadoop-user-functions.sh.example[[email protected] ~]#
3、whereis
3.1、基本簡介
whereis命令只能用於程式名的搜尋,而且只搜尋二進位制檔案(引數-b)、man說明檔案(引數-m)和原始碼檔案(引數-s)。如果省略引數,則返回所有資訊。
和find相比,whereis查詢的速度非常快,這是因為linux系統會將 系統內的所有檔案都記錄在一個數據庫檔案中,當使用whereis和下面即將介紹的locate時,會從資料庫中查詢資料,而不是像find命令那樣,通 過遍歷硬碟來查詢,效率自然會很高。
但是該資料庫檔案並不是實時更新,預設情況下時一星期更新一次,因此,我們在用whereis和locate 查詢檔案時,有時會找到已經被刪除的資料,或者剛剛建立檔案,卻無法查詢到,原因就是因為資料庫檔案沒有被更新。
3.2、基礎語法
[[email protected] ~]# whereis [-bmsu] [BMS 目錄名 -f ] 檔名
3.3、基本選項
-b 定位可執行檔案。-m 定位幫助檔案。-s 定位原始碼檔案。-u 搜尋預設路徑下除可執行檔案、原始碼檔案、幫助檔案以外的其它檔案。-B 指定搜尋可執行檔案的路徑。-M 指定搜尋幫助檔案的路徑。-S 指定搜尋原始碼檔案的路徑。
3.4、示例
將和**檔案相關的檔案都查找出來
[[email protected] ~]# whereis hadoophadoop: /opt/module/hadoop-3.3.1/bin/hadoop /opt/module/hadoop-3.3.1/bin/hadoop.cmd[[email protected] ~]# whereis sparkspark:[[email protected] ~]#
