linux查詢檔案的命令有哪些

2022-03-24 19:00:40

linux查詢檔案的命令:1、locate,用於查詢符合條件的檔案,語法「locate [選擇引數] [樣式]」;2、find,用來在指定目錄下查詢檔案,語法「find [OPTION]... [查詢路徑] [查詢條件] [處理動作]」。

本教學操作環境:linux5.9.8系統、Dell G3電腦。

linux查詢檔案的常用命令有兩個:

  • locate

  • find

locate

locate 讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。其方法是先建立一個包括系統內所有檔案名稱及路徑的資料庫,之後當尋找時就只需查詢這個資料庫,而不必實際深入檔案系統之中了。在一般的 distribution 之中,資料庫的建立都被放在 crontab 中自動執行。

1. 命令格式:

locate [選擇引數] [樣式]

2.命令功能:

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

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

locate指令和find找尋檔案的功能類似,但locate是透過update程式將硬碟中的所有檔案和目錄資料先建立一個索引資料庫,在 執行loacte時直接找該索引,查詢速度會較快,索引資料庫一般是由作業系統管理,但也可以直接下達update強迫系統立即修改索引資料庫。

3.命令引數:

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

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

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

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

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

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

  • -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:更新資料庫

[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命令是一個實時查詢工具,通過遍歷指定路徑而完成對檔案的查詢;在使用該命令時,如果不選定引數,則在當前目錄下查詢子目錄與檔案並顯示之;另外,任何位於引數之前的字串,都將視為欲查詢的目錄名。由於是實時遍歷查詢,find有如下特性:精確實時查詢,速度慢可能只搜尋使用者具備讀取和執行許可權的目錄。

2.find語法:


  • 查詢路徑:指定具體目標路徑,預設為當前目錄

  • 查詢條件:指定的查詢標準,可以是檔名、大小、型別、許可權等標準進行;預設為找出指定路徑下的所有檔案

  • 處理動作:對符合條件的檔案做操作,預設輸出至螢幕

3.查詢條件:

  • 根據檔名和inode查詢

  • 根據屬主、屬組查詢

  • 根據檔案型別查詢

  • 根據邏輯組合條件查詢

  • 根據檔案大小來查詢

  • 根據時間戳來查詢

  • 根據許可權來查詢

4.處理動作:

  • -print: 預設動作,顯示至螢幕

  • -ls: 類似於對查詢到的檔案執行 ls -l 命令

  • -delete: 刪除查詢到的檔案

  • -fls file: 查詢到的所有長格式的資訊儲存至指定檔案中

  • -ok COMMMAND {} \; 對查詢到的每個檔案執行由COMMAND指定的命令,且都會互動式要求使用者確認

  • -exec COMMAND {} \; 對查詢到的每個檔案執行由COMMAND指定的命令;

  • {}: 用於參照查詢至的檔名稱自身

  • find 傳遞查詢到的檔案至後面指定的命令時,查詢到所有符號條件的檔案一次性傳遞給後面的命令

  • 有些命令不能接受過多的引數,此時命令執行可能會失敗,用 xargs 來規避此問題

find |xargs COMMAND

5.常用引數:

檔名和inode類:

  • -name "檔名稱":支援使用glob, *, ?, [], [^]

  • -iname "檔名稱":不區分字母大小寫

  • -inum n:按inode號查詢

  • -somefile name:相同的inode號檔案

  • -links n:連結數為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)

1.png

2.png

檔案大小類:

-size [+|-]#UNIT
    常用單位:k,M,G 
#UNIT: (#-1,#]
    如:5M 表示 (4M,5M]
-#UNIT: [0,#-1]
    如:-5M 表示 [0,5M]
+#UNIT: (#,oo)
    如:+5M 表示 (6M,oo)

關於檔案大小類的解釋:為什麼-size 5M 還是找精確的5M而是表示(4M,5M], 試想檔案的大小指什麼?是指檔案資料的大小還是包括了後設資料後的大小,那你找後設資料的大小有意義嗎?但檔案的大小肯定是包含後設資料大小的,而我們一般以檔案大小找檔案時往往考慮的是檔案資料的大小;另外,精確查詢一定大小的檔案意義不大;所以這裡的大小會有1個單位的浮動。

時間戳類:

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

3.png

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

許可權類:

-perm [/|-]MODE
    MODE: 精確匹配許可權
    /MODE: 任何一類(u,g,o)物件的許可權中只要能一位匹配即可,屬於或關係。以前用'+',CentOS 7以'/'替代之
    -MODE: 每一類物件都必須同時擁有指定許可權,屬於與關係 
    0:表示不關注

範例:

  • find -perm 644 表示要嚴格匹配644的檔案

  • find -perm +222 表示u,g,o任何一類使用者有寫許可權即匹配

  • find -perm -222 表示僅嚴格匹配寫許可權,即每個使用者必須要有寫許可權

  • find -perm -002 表示僅嚴格匹配other使用者的寫許可權

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 #預設關係就是與
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目錄下最近一週內其內容修改過,同時屬主不為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:查詢當前系統上沒有屬主或屬組,且最近一個周內曾被存取過的檔案

[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目錄下所有使用者都沒有寫許可權的檔案

[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目錄下至少有一類使用者沒有執行許可權的檔案

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

範例11:.查詢/etc/init.d目錄下,所有使用者都有執行許可權,且其它使用者有寫許可權的檔案

[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

相關推薦:《Linux視訊教學

以上就是linux查詢檔案的命令有哪些的詳細內容,更多請關注TW511.COM其它相關文章!