您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)linux如何查詢文件的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
linux查詢文件的命令:1、locate,用于查找符合條件的文件,語法“l(fā)ocate [選擇參數(shù)] [樣式]”;2、find,用來在指定目錄下查找文件,語法“find [OPTION]... [查找路徑] [查找條件] [處理動(dòng)作]”。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
linux查詢文件的常用命令有兩個(gè):
locate
find
locate
locate 讓使用者可以很快速的搜尋檔案系統(tǒng)內(nèi)是否有指定的檔案。其方法是先建立一個(gè)包括系統(tǒng)內(nèi)所有檔案名稱及路徑的數(shù)據(jù)庫,之后當(dāng)尋找時(shí)就只需查詢這個(gè)數(shù)據(jù)庫,而不必實(shí)際深入檔案系統(tǒng)之中了。在一般的 distribution 之中,數(shù)據(jù)庫的建立都被放在 crontab 中自動(dòng)執(zhí)行。
1. 命令格式:
locate [選擇參數(shù)] [樣式]
2.命令功能:
locate命令可以在搜尋數(shù)據(jù)庫時(shí)快速找到檔案,locate為模糊查找,數(shù)據(jù)庫由updatedb程序來更新,updatedb是由cron daemon周期性建立的,locate命令在搜尋數(shù)據(jù)庫時(shí)比由整個(gè)由硬盤資料來搜尋資料來得快,但較差勁的是locate所找到的檔案若是最近才建立或 剛更名的,可能會(huì)找不到,在內(nèi)定值中,updatedb每天會(huì)跑一次,可以由修改crontab來更新設(shè)定值。(etc/crontab)
locate指定用在搜尋符合條件的檔案,它會(huì)去儲(chǔ)存檔案與目錄名稱的數(shù)據(jù)庫內(nèi),locate查詢文件時(shí),會(huì)去搜索/var/lib/mlocate/mlocage.db,尋找合乎范本樣式條件的檔案或目錄錄,可以使用特殊字元(如”*” 或”?”等)來指定范本樣式,如指定范本為kcpa*ner, locate會(huì)找出所有起始字串為kcpa且結(jié)尾為ner的檔案或目錄,如名稱為kcpartner若目錄錄名稱為kcpa_ner則會(huì)列出該目錄下包括 子目錄在內(nèi)的所有檔案。
locate指令和find找尋檔案的功能類似,但locate是透過update程序?qū)⒂脖P中的所有檔案和目錄資料先建立一個(gè)索引數(shù)據(jù)庫,在 執(zhí)行l(wèi)oacte時(shí)直接找該索引,查詢速度會(huì)較快,索引數(shù)據(jù)庫一般是由操作系統(tǒng)管理,但也可以直接下達(dá)update強(qiáng)迫系統(tǒng)立即修改索引數(shù)據(jù)庫。
3.命令參數(shù):
-e 將排除在尋找的范圍之外。
-1 如果 是 1.則啟動(dòng)安全模式。在安全模式下,使用者不會(huì)看到權(quán)限無法看到 的檔案。這會(huì)始速度減慢,因?yàn)?locate 必須至實(shí)際的檔案系統(tǒng)中取得檔案的權(quán)限資料。
-f 將特定的檔案系統(tǒng)排除在外,例如我們沒有到理要把 proc 檔案系統(tǒng)中的檔案 放在資料庫中。
-q 安靜模式,不會(huì)顯示任何錯(cuò)誤訊息。
-n 至多顯示 n個(gè)輸出。
-r 使用正規(guī)運(yùn)算式 做尋找的條件。
-o 指定資料庫存的名稱。
-d 指定資料庫的路徑
-h 顯示輔助訊息
-V 顯示程式的版本訊息
4.使用實(shí)例:
實(shí)例1:搜索etc目錄下所有以sh開頭的文件
[root@CentOS7 ~#]locate /etc/sh /etc/shadow /etc/shadow- /etc/shells [root@centos7 ~#]locate -r "/etc/\sh " # 正則,錨定詞首 /etc/shadow /etc/shadow- /etc/shells [root@centos7 ~#]
實(shí)例2:忽略大小寫
[root@centos7 ~#]locate -i ~/d /root/Desktop/root/Documents/root/Downloads /root/d1 /root/dd /var/lib/pcp/pmdas/root/domain.h [root@centos7 ~#]
實(shí)例3:更新數(shù)據(jù)庫
[root@centos7 ~#]locate ~/a /root/anaconda-ks.cfg [root@centos7 ~#]updatedb [root@centos7 ~#]locate ~/a /root/a.sh /root/anaconda-ks.cfg [root@centos7 ~#]
find
1. 主要用途:
find命令是一個(gè)實(shí)時(shí)查找工具,通過遍歷指定路徑而完成對(duì)文件的查找;在使用該命令時(shí),如果不選定參數(shù),則在當(dāng)前目錄下查找子目錄與文件并顯示之;另外,任何位于參數(shù)之前的字符串,都將視為欲查找的目錄名。由于是實(shí)時(shí)遍歷查找,find有如下特性:精確實(shí)時(shí)查找,速度慢可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄。
2.find語法:
查找路徑:指定具體目標(biāo)路徑,默認(rèn)為當(dāng)前目錄
查找條件:指定的查找標(biāo)準(zhǔn),可以是文件名、大小、類型、權(quán)限等標(biāo)準(zhǔn)進(jìn)行;默認(rèn)為找出指定路徑下的所有文件
處理動(dòng)作:對(duì)符合條件的文件做操作,默認(rèn)輸出至屏幕
3.查找條件:
根據(jù)文件名和inode查找
根據(jù)屬主、屬組查找
根據(jù)文件類型查找
根據(jù)邏輯組合條件查找
根據(jù)文件大小來查找
根據(jù)時(shí)間戳來查找
根據(jù)權(quán)限來查找
4.處理動(dòng)作:
-print: 默認(rèn)動(dòng)作,顯示至屏幕
-ls: 類似于對(duì)查找到的文件執(zhí)行 ls -l 命令
-delete: 刪除查找到的文件
-fls file: 查找到的所有長格式的信息保存至指定文件中
-ok COMMMAND {} \; 對(duì)查找到的每個(gè)文件執(zhí)行由COMMAND指定的命令,且都會(huì)交互式要求用戶確認(rèn)
-exec COMMAND {} \; 對(duì)查找到的每個(gè)文件執(zhí)行由COMMAND指定的命令;
{}: 用于引用查找至的文件名稱自身
find 傳遞查找到的文件至后面指定的命令時(shí),查找到所有符號(hào)條件的文件一次性傳遞給后面的命令
有些命令不能接受過多的參數(shù),此時(shí)命令執(zhí)行可能會(huì)失敗,用 xargs 來規(guī)避此問題
find |xargs COMMAND
5.常用參數(shù):
文件名和inode類:
-name "文件名稱":支持使用glob, *, ?, [], [^]
-iname "文件名稱":不區(qū)分字母大小寫
-inum n:按inode號(hào)查找
-somefile name:相同的inode號(hào)文件
-links n:鏈接數(shù)為n的文件
-regex "PATTERN":以PATTERN匹配整個(gè)文件路徑字符串,而不僅僅是文件名稱
屬主屬組類:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GROUPNAME:查找屬組為指定組(GID)的文件
-uid UserID:查找屬主為指定的UID號(hào)的文件
-gid GroupID:查找屬組為指定的GID號(hào)的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
文件類型類:
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)f regular file
l symbolic link
s socket
邏輯組合條件類:
組合條件:
與:-a
或:-o
非:-not, !
摩根定律:
(非P) 或(非Q) = 非(P且Q)
(非P) 且 (非Q) = 非(P或Q)
文件大小類:
-size [+|-]#UNIT 常用單位:k,M,G #UNIT: (#-1,#] 如:5M 表示 (4M,5M] -#UNIT: [0,#-1] 如:-5M 表示 [0,5M] +#UNIT: (#,oo) 如:+5M 表示 (6M,oo)
關(guān)于文件大小類的解釋:為什么-size 5M 還是找精確的5M而是表示(4M,5M], 試想文件的大小指什么?是指文件數(shù)據(jù)的大小還是包括了元數(shù)據(jù)后的大小,那你找元數(shù)據(jù)的大小有意義嗎?但文件的大小肯定是包含元數(shù)據(jù)大小的,而我們一般以文件大小找文件時(shí)往往考慮的是文件數(shù)據(jù)的大?。涣硗?,精確查找一定大小的文件意義不大;所以這里的大小會(huì)有1個(gè)單位的浮動(dòng)。
時(shí)間戳類:
以”天”為單位: -atime [+|-]# #: [#,#+1) +#: [#+1,oo) -#: [0,#) -mtime -ctime 以“分鐘”為單位: -amin -mmin -cmin
關(guān)于時(shí)間戳類的解釋:為什么-atime 3 表示的是 [3,4),這個(gè)就很好解釋了,我們這兒所說的時(shí)間是指時(shí)間段而非時(shí)刻,一“天”與一“分鐘”都是指一個(gè)時(shí)間段,只有[3,4)這個(gè)半閉半開的區(qū)間才能完整地表示第三天。
權(quán)限類:
-perm [/|-]MODE MODE: 精確匹配權(quán)限 /MODE: 任何一類(u,g,o)對(duì)象的權(quán)限中只要能一位匹配即可,屬于或關(guān)系。以前用'+',CentOS 7以'/'替代之 -MODE: 每一類對(duì)象都必須同時(shí)擁有指定權(quán)限,屬于與關(guān)系 0:表示不關(guān)注
示例:
find -perm 644 表示要嚴(yán)格匹配644的文件
find -perm +222 表示u,g,o任何一類用戶有寫權(quán)限即匹配
find -perm -222 表示僅嚴(yán)格匹配寫權(quán)限,即每個(gè)用戶必須要有寫權(quán)限
find -perm -002 表示僅嚴(yán)格匹配other用戶的寫權(quán)限
6.使用示例:
實(shí)例1:將配置文件備份到指定目錄下并添加擴(kuò)展名.org
[root@localhost ~]# find . -name "*.conf" -exec cp -r {} /testdir/{}.org \; [root@localhost ~]# cd /testdir/ [root@localhost testdir]# ls a.conf.org b.conf.org [root@localhost testdir]#
實(shí)例2:.提示刪除存在時(shí)間超過3天以上的屬主為young的臨時(shí)文件
[root@localhost ~]# find /tmp -ctime +3 -user young -exec rm -fr {} \; [root@localhost ~]#
實(shí)例3:在主目錄中查找可被其它用戶寫入的文件
[root@localhost ~]# find ~ -perm -002 /root/num [root@localhost ~]# find ~ -perm -002 -exec chmod o-w {} \; [root@localhost ~]# ll num --w--w---- 1 root root 35 Jan 21 05:55 num
實(shí)例4:查找/var目錄下屬主為root,且屬組為mail的所有文件
[root@localhost ~]# find /var -user root -group mail -ls #默認(rèn)關(guān)系就是與 1179652 4 drwxrwxr-x 2 root mail 4096 Jan 23 11:04 /var/spool/mail
實(shí)例5:查找/var目錄下不屬于root、lp、gdm的所有文件
[root@localhost ~]# find /var ! -user root ! -user lp ! -user gdm
實(shí)例6:查找/var目錄下最近一周內(nèi)其內(nèi)容修改過,同時(shí)屬主不為root,也不是postfix的文件
[root@localhost ~]# find /var/ -mtime -7 ! -user root ! -user postfix -ls 1179676 4 drwx------ 3 daemon daemon 4096 Jan 23 11:04 /var/spool/at 524399 4 drwx------ 2 nginx nginx 4096 Jan 23 03:16 /var/log/nginx 524413 0 -rw-r--r-- 1 nginx root 0 Jan 23 03:16 /var/log/nginx/access.log 524391 0 -rw-r--r-- 1 nginx root 0 Jan 21 03:44 /var/log/nginx/error.log 132174 4 drwx------ 3 nginx nginx 4096 Jan 21 03:44 /var/lib/nginx 132175 4 drwx------ 7 nginx nginx 4096 Jan 21 03:44 /var/lib/nginx/tmp 132173 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/client_body 132219 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/proxy 132221 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/uwsgi 132222 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/scgi 132220 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/fastcgi
實(shí)例7:查找當(dāng)前系統(tǒng)上沒有屬主或?qū)俳M,且最近一個(gè)周內(nèi)曾被訪問過的文件
[root@bash ~]# find / -nouser -o -nogroup -a -atime -7
實(shí)例8:查找/etc目錄下大于1M且類型為普通文件的所有文件
[root@bash ~]# find /etc/ -size +1M -type f /etc/selinux/targeted/policy/policy.29 /etc/udev/hwdb.bin
實(shí)例9:查找/etc目錄下所有用戶都沒有寫權(quán)限的文件
[root@bash ~]# find /etc/ ! -perm /222 /etc/pki/ca-trust/extracted/java/cacerts /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem /etc/lvm/profile/cache-mq.profile /etc/lvm/profile/cache-smq.profile /etc/lvm/profile/command_profile_template.profile /etc/lvm/profile/metadata_profile_template.profile /etc/lvm/profile/thin-generic.profile /etc/lvm/profile/thin-performance.profile /etc/openldap/certs/password /etc/gshadow /etc/dbus-1/system.d/cups.conf /etc/shadow /etc/gshadow- /etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf /etc/shadow- /etc/udev/hwdb.bin /etc/machine-id /etc/pam.d/cups /etc/sudoers
實(shí)例10:查找/etc目錄下至少有一類用戶沒有執(zhí)行權(quán)限的文件
[root@bash ~]# find /etc/ ! -perm -111 # 至少有一類用戶沒有就是所有用戶都沒有
實(shí)例11:.查找/etc/init.d目錄下,所有用戶都有執(zhí)行權(quán)限,且其它用戶有寫權(quán)限的文件
[root@bash ~]# find /etc/init.d -perm -113 /etc/init.d
或者
[root@bash ~]# find /etc/init.d -perm -111 -perm -002 /etc/init.d
實(shí)例12:摩根定律找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
[root@centos7 ~]#find /tmp \( -not -user root -a -not -name 'f*' \) -ls
即
[root@centos7 ~]#find /tmp -not \( -user root -o -name 'f*' \) -ls
實(shí)例13:查找/etc/下,除/etc/sane.d目錄的其它所有.conf后綴的文件
[root@bash ~]# find /etc -path '/etc/sane.d' -prune -o -name '*.conf'
實(shí)例14:匹配文件路徑或文件
[root@bash ~]# find /usr/ -path '*local' /usr/bin/abrt-action-analyze-ccpp-local /usr/share/doc/postfix-2.10.1/examples/qmail-local /usr/share/aclocal /usr/libexec/postfix/local /usr/local
實(shí)例15:基于正則表達(dá)式匹配文件路徑
[root@bash ~]# find . -regex ".*txt$" ./.mozilla/firefox/4dqu966q.default/revocations.txt ./vimrc/spf13-vim/LICENSE.txt ./a.txt
感謝各位的閱讀!關(guān)于“l(fā)inux如何查詢文件”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。