linux查詢文件的命令有哪些

linux查詢文件的命令:1、locate,用于查找符合條件的文件,語法“l(fā)ocate [選擇參數(shù)] [樣式]”;2、find,用來在指定目錄下查找文件,語法“find [OPTION]… [查找路徑] [查找條件] [處理動作]”。

linux查詢文件的命令有哪些

本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。

linux查詢文件的常用命令有兩個:

  • locate

  • find

locate

locate 讓使用者可以很快速的搜尋檔案系統(tǒng)內(nèi)是否有指定的檔案。其方法是先建立一個包括系統(tǒng)內(nèi)所有檔案名稱及路徑的數(shù)據(jù)庫,之后當尋找時就只需查詢這個數(shù)據(jù)庫,而不必實際深入檔案系統(tǒng)之中了。在一般的 distribution 之中,數(shù)據(jù)庫的建立都被放在 crontab 中自動執(zhí)行。

1. 命令格式:

locate?[選擇參數(shù)]?[樣式]

2.命令功能:

locate命令可以在搜尋數(shù)據(jù)庫時快速找到檔案,locate為模糊查找,數(shù)據(jù)庫由updatedb程序來更新,updatedb是由cron daemon周期性建立的,locate命令在搜尋數(shù)據(jù)庫時比由整個由硬盤資料來搜尋資料來得快,但較差勁的是locate所找到的檔案若是最近才建立或 剛更名的,可能會找不到,在內(nèi)定值中,updatedb每天會跑一次,可以由修改crontab來更新設(shè)定值。(etc/crontab)

locate指定用在搜尋符合條件的檔案,它會去儲存檔案與目錄名稱的數(shù)據(jù)庫內(nèi),locate查詢文件時,會去搜索/var/lib/mlocate/mlocage.db,尋找合乎范本樣式條件的檔案或目錄錄,可以使用特殊字元(如”*” 或”?”等)來指定范本樣式,如指定范本為kcpa*ner, locate會找出所有起始字串為kcpa且結(jié)尾為ner的檔案或目錄,如名稱為kcpartner若目錄錄名稱為kcpa_ner則會列出該目錄下包括 子目錄在內(nèi)的所有檔案。

locate指令和find找尋檔案的功能類似,但locate是透過update程序?qū)⒂脖P中的所有檔案和目錄資料先建立一個索引數(shù)據(jù)庫,在 執(zhí)行l(wèi)oacte時直接找該索引,查詢速度會較快,索引數(shù)據(jù)庫一般是由操作系統(tǒng)管理,但也可以直接下達update強迫系統(tǒng)立即修改索引數(shù)據(jù)庫。

3.命令參數(shù):

  • -e 將排除在尋找的范圍之外。

  • -1 如果 是 1.則啟動安全模式。在安全模式下,使用者不會看到權(quán)限無法看到 的檔案。這會始速度減慢,因為 locate 必須至實際的檔案系統(tǒng)中取得檔案的權(quán)限資料。

  • -f 將特定的檔案系統(tǒng)排除在外,例如我們沒有到理要把 proc 檔案系統(tǒng)中的檔案 放在資料庫中。

  • -q 安靜模式,不會顯示任何錯誤訊息。

  • -n 至多顯示 n個輸出。

  • -r 使用正規(guī)運算式 做尋找的條件。

  • -o 指定資料庫存的名稱。

  • -d 指定資料庫的路徑

  • -h 顯示輔助訊息

  • -V 顯示程式的版本訊息

4.使用實例:

實例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?~#]

實例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?~#]

實例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命令是一個實時查找工具,通過遍歷指定路徑而完成對文件的查找;在使用該命令時,如果不選定參數(shù),則在當前目錄下查找子目錄與文件并顯示之;另外,任何位于參數(shù)之前的字符串,都將視為欲查找的目錄名。由于是實時遍歷查找,find有如下特性:精確實時查找,速度慢可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄。

2.find語法:

<br>
  • 查找路徑:指定具體目標路徑,默認為當前目錄

  • 查找條件:指定的查找標準,可以是文件名、大小、類型、權(quán)限等標準進行;默認為找出指定路徑下的所有文件

  • 處理動作:對符合條件的文件做操作,默認輸出至屏幕

3.查找條件:

  • 根據(jù)文件名和inode查找

  • 根據(jù)屬主、屬組查找

  • 根據(jù)文件類型查找

  • 根據(jù)邏輯組合條件查找

  • 根據(jù)文件大小來查找

  • 根據(jù)時間戳來查找

  • 根據(jù)權(quán)限來查找

4.處理動作:

  • -print: 默認動作,顯示至屏幕

  • -ls: 類似于對查找到的文件執(zhí)行 ls -l 命令

  • -delete: 刪除查找到的文件

  • -fls file: 查找到的所有長格式的信息保存至指定文件中

  • -ok COMMMAND {} ; 對查找到的每個文件執(zhí)行由COMMAND指定的命令,且都會交互式要求用戶確認

  • -exec COMMAND {} ; 對查找到的每個文件執(zhí)行由COMMAND指定的命令;

  • {}: 用于引用查找至的文件名稱自身

  • find 傳遞查找到的文件至后面指定的命令時,查找到所有符號條件的文件一次性傳遞給后面的命令

  • 有些命令不能接受過多的參數(shù),此時命令執(zhí)行可能會失敗,用 xargs 來規(guī)避此問題

find?|xargs?COMMAND

5.常用參數(shù):

文件名和inode類:

  • -name “文件名稱”:支持使用glob, *, ?, [], [^]

  • -iname “文件名稱”:不區(qū)分字母大小寫

  • -inum n:按inode號查找

  • -somefile name:相同的inode號文件

  • -links n:鏈接數(shù)為n的文件

  • -regex “PATTERN”:以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱

屬主屬組類:

  • -user USERNAME:查找屬主為指定用戶(UID)的文件

  • -group GROUPNAME:查找屬組為指定組(GID)的文件

  • -uid UserID:查找屬主為指定的UID號的文件

  • -gid GroupID:查找屬組為指定的GID號的文件

  • -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)

linux查詢文件的命令有哪些

linux查詢文件的命令有哪些

文件大小類:

-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ù)據(jù)的大??;另外,精確查找一定大小的文件意義不大;所以這里的大小會有1個單位的浮動。

時間戳類:

以”天”為單位: ????-atime?[+|-]#???????? ????????#:?[#,#+1) ????????+#:?[#+1,oo)???????? ????????-#:?[0,#) ????-mtime???? ????-ctime 以“分鐘”為單位: ????-amin???? ????-mmin???? ????-cmin

linux查詢文件的命令有哪些

關(guān)于時間戳類的解釋:為什么-atime 3 表示的是 [3,4),這個就很好解釋了,我們這兒所說的時間是指時間段而非時刻,一“天”與一“分鐘”都是指一個時間段,只有[3,4)這個半閉半開的區(qū)間才能完整地表示第三天。

權(quán)限類:

-perm?[/|-]MODE ????MODE:?精確匹配權(quán)限 ????/MODE:?任何一類(u,g,o)對象的權(quán)限中只要能一位匹配即可,屬于或關(guān)系。以前用'+',CentOS?7以'/'替代之 ????-MODE:?每一類對象都必須同時擁有指定權(quán)限,屬于與關(guān)系? ????0:表示不關(guān)注

示例:

  • find -perm 644 表示要嚴格匹配644的文件

  • find -perm +222 表示u,g,o任何一類用戶有寫權(quán)限即匹配

  • find -perm -222 表示僅嚴格匹配寫權(quán)限,即每個用戶必須要有寫權(quán)限

  • find -perm -002 表示僅嚴格匹配other用戶的寫權(quán)限

6.使用示例:

實例1:將配置文件備份到指定目錄下并添加擴展名.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]#

實例2:.提示刪除存在時間超過3天以上的屬主為young的臨時文件

[root@localhost?~]#?find?/tmp?-ctime?+3?-user?young?-exec?rm?-fr?{}?; [root@localhost?~]#

實例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

實例4:查找/var目錄下屬主為root,且屬組為mail的所有文件

[root@localhost?~]#?find?/var?-user?root??-group?mail?-ls?#默認關(guān)系就是與 1179652????4?drwxrwxr-x???2?root?????mail?????????4096?Jan?23?11:04?/var/spool/mail

實例5:查找/var目錄下不屬于root、lp、gdm的所有文件

[root@localhost?~]#?find?/var?!?-user?root?!?-user?lp?!?-user?gdm

實例6:查找/var目錄下最近一周內(nèi)其內(nèi)容修改過,同時屬主不為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

實例7:查找當前系統(tǒng)上沒有屬主或?qū)俳M,且最近一個周內(nèi)曾被訪問過的文件

[root@bash?~]#?find?/?-nouser?-o?-nogroup?-a?-atime?-7

實例8:查找/etc目錄下大于1M且類型為普通文件的所有文件

[root@bash?~]#?find?/etc/?-size?+1M?-type?f /etc/selinux/targeted/policy/policy.29 /etc/udev/hwdb.bin

實例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

實例10:查找/etc目錄下至少有一類用戶沒有執(zhí)行權(quán)限的文件

[root@bash?~]#?find?/etc/?!?-perm?-111?#?至少有一類用戶沒有就是所有用戶都沒有

實例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

實例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

實例13:查找/etc/下,除/etc/sane.d目錄的其它所有.conf后綴的文件

[root@bash?~]#?find?/etc?-path?'/etc/sane.d'?-prune?-o?-name?'*.conf'

實例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

實例15:基于正則表達式匹配文件路徑

[root@bash?~]#?find?.?-regex?".*txt$"?????????????? ./.mozilla/firefox/4dqu966q.default/revocations.txt ./vimrc/spf13-vim/LICENSE.txt ./a.txt

相關(guān)推薦:《Linux視頻教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊13 分享