Linux文件查找之locate、find詳解

 locate命令詳解

locate命令其實是find -name的另一種寫法,但是要比后者快得多,原因在于它不搜索具體目錄,而是搜索一個數據庫文件,這個數據庫中含有本地所有文件信息。Linux系統自動創建這個數據庫,并且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數據庫。使用updatedb更新數據庫時會占用系統的資源,特別是對特別復雜的目錄或要文件較多時,要進行更新數據時,可選擇系統空閑的時間段進行。

 

查詢系統上預建的文件索引數據庫

/var/lib/mlocate/mlocate.db

依賴于事先構建的索引;

索引的構建是在系統較為空閑時自動進行(周期性任務);管理員手動更新數據庫(updatedb);

索引構建過程需要遍歷整個根文件系統,極消耗資源;

工作特點:

查找速度快;

模糊查找;

非實時查找

搜索的是文件的全路徑,不僅僅是文件名

可能只搜索用戶具備讀取和執行權限的目錄,普通用戶因為沒有權限可能搜索不到root用戶目錄的文件

 

locate [OPTION]… [PATTERN]…

locate選項

-n, x只列舉前x個匹配項目

-b, –basename 匹配唯一的路徑名稱的基本文件名  

-c, –count 只顯示找到條目的號碼  

-d, –database DBPATH 用 DBPATH 替代默認的數據庫(/var/lib/mlocate/mlocate.db)  

-e, –existing 只顯示當前存在的文件條目  

-L, –follow 當文件存在時跟隨蔓延的符號鏈接 (默認)  

-h, –help 顯示本幫助  

-i, –ignore-case 匹配模式時忽略大小寫區別  

-l, –limit, -n LIMIT 限制為 LIMIT項目的輸出 (或 計數)   

-m, –mmap 忽略向后兼容性  

-P, –nofollow, -H 當檢查文件時不跟隨蔓延的符號  

-0, –null 輸出時以 NUL 分隔項目  

-S, –statistics 不搜索項目,顯示有關每個已用數據庫的統計信息  

-q, –quiet 不報告關于讀取數據庫的錯誤消息  

-r, –regexp REGEXP 搜索基本正則表達式 REGEXP 來代替模式  

–regex 模式是擴展正則表達式  

-s, –stdio 忽略向后兼容性  

-V, –version 顯示版本信息  

-w, –wholename 匹配完整路徑名 (默認) 

 

手動更新locate數據庫

[root@localhost tmp]# ll /var/lib/mlocate/mlocate.db 
-rw-r-----. 1 root slocate 4349086 Aug 15 09:09 /var/lib/mlocate/mlocate.db
[root@localhost tmp]# updatedb
[root@localhost tmp]# ll /var/lib/mlocate/mlocate.db 
-rw-r-----. 1 root slocate 4354529 Aug 15 19:15 /var/lib/mlocate/mlocate.db

 

在當前系統上查找fstab文件

[root@localhost ~]# locate fstab
/etc/fstab
/etc/fstab.bak
/etc/selinux/targeted/modules/active/modules/updfstab.pp
/home/cyh/fstab.bak
/usr/lib/dracut/modules.d/95fstab-sys
/usr/lib/dracut/modules.d/95fstab-sys/module-setup.sh
/usr/lib/dracut/modules.d/95fstab-sys/mount-sys.sh
/usr/lib/systemd/system-generators/systemd-fstab-generator
/usr/share/augeas/lenses/dist/fstab.aug
/usr/share/augeas/lenses/dist/vfstab.aug
/usr/share/man/man5/fstab.5.gz
/usr/share/man/man8/systemd-fstab-generator.8.gz
/usr/share/vim/vim74/syntax/fstab.vim

 

搜索bin目錄下的以“.sh”結尾的文件

[root@localhost ~]# locate bin/*.sh
/root/bin/1to100sum.sh
/root/bin/3.sh
/root/bin/3.sh1g5
/root/bin/3sum200.sh
/root/bin/AtoBsum.sh
/root/bin/Sum.sh
/root/bin/Te.sh

 

搜索/etc目錄下所有以sh開頭的文件

[root@localhost ~]# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shadow.bak
/etc/shells

find命令詳解

 

實時查找工具,通過遍歷指定路徑完成文件查找;

 

工作特點:

查找速度略慢

精確查找

實時查找

可能只搜索用戶具備讀取和執行權限的目錄

 

語法:

find [OPTION]… [查找路徑] [查找條件] [處理動作]

查找路徑:指定具體目標路徑;默認為當前目錄

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

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

 

查找條件


根據文件名和inode查找:

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

-iname "文件名稱":不區分字母大小寫

-inum n 按inode號查找

-samefile name 相同inode號的文件

-links n 鏈接數為n的文件

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

 

根據屬主、屬組查找:

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

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

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

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

-nouser:查找沒有屬主的文件

-nogroup:查找沒有屬組的文件

 

根據文件類型查找:

-type TYPE:

f: 普通文件

d: 目錄文件

l: 符號鏈接文件

s:套接字文件

b: 塊設備文件

c: 字符設備文件

p: 管道文件

 

組合條件:

與: -a

或: -o

非: -not, !

德·摩根定律:

非(P 且 Q) = (非 P) 或 (非 Q)

非(P 或 Q) = (非 P) 且 (非 Q)

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

 

根據文件大小來查找:

-size [+|-]#UNIT

常用單位: k, M, G

#UNIT: (#-1, #],如: 6k

-#UNIT: [0,#-1], 如: -6k

+#UNIT: (#,∞), 如: +6k

 

根據時間戳:

以“天”為單位;

-atime [+|-]#,

#: [#,#+1)

+#: [#+1,∞]

-#: [0,#)

-mtime

-ctime

以“分鐘”為單位:

-amin

-mmin

-cmin

 

根據權限查找:

-perm [/|-]MODE

MODE: 精確權限匹配

/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系, + 從centos7開始淘汰

-MODE:每一類對象都必須同時擁有指定權限,與關系

0 表示不關注

find -perm 755 會匹配權限模式恰好是755的文件

只要當任意人有寫權限時, find -perm +222就會匹配

只有當每個人都有寫權限時, find -perm -222才會匹配

只有當其它人( other)有寫權限時, find -perm -002才會匹配

 

處理動作

-print:默認的處理動作,顯示至屏幕;

-ls:類似于對查找到的文件執行“ ls -l”命令

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

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

-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令

對于每個文件執行命令之前,都會交互式要求用戶確認

-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令

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

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

有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題

find | xargs COMMAND

 

示例:

查找當前目錄下面所有以“.txt”結尾的文件或目錄

[root@localhost ~]# find -name "*.txt"
./.cache/tracker/db-version.txt
./.cache/tracker/db-locale.txt
./.cache/tracker/miner-applications-locale.txt
./.cache/tracker/last-crawl.txt
./.cache/tracker/first-index.txt
./.local/share/Trash/files/notepad.txt
./.local/share/Trash/files/Sublime.txt
./Desktop/Sublime.txt
./Desktop/windowstext.txt
./Desktop/linuxtext.txt
......

 

查找當前目錄下面所有以字母u且后面跟一位數字,以“.sh”結尾的文件或目錄

[root@localhost ~]# find -name "u[0-9].sh"
./u5.sh
./u1.sh
./u2.sh
./u8.sh
./u9.sh
./u4.sh

 

在當前目錄下查找以f開頭,后面至少跟一位數字,且以“.sh”結尾的文件

[root@localhost ~]# find -name "f[0-9]*.sh"
./bin/f1.sh
./bin/f2.sh
./f4d.sh
./f5t.sh

 

查找當前目錄下面所有以“host”開頭的文件或目錄

[root@localhost ~]# find -name "host*"
./bin/hostping.sh
./etc2016-08-12/selinux/targeted/modules/active/modules/hostname.pp
./etc2016-08-12/host.conf
./etc2016-08-12/hosts
./etc2016-08-12/hosts.allow
./etc2016-08-12/hosts.deny
./etc2016-08-12/avahi/hosts
./etc2016-08-12/hostname
./etc2016-08-12/etc/selinux/targeted/modules/active/modules/hostname.pp
./etc2016-08-12/etc/host.conf
./etc2016-08-12/etc/hosts
./etc2016-08-12/etc/hosts.allow
./etc2016-08-12/etc/hosts.deny
./etc2016-08-12/etc/avahi/hosts
./etc2016-08-12/etc/hostname

 

查找Linux系統網卡配置文件

[root@localhost ~]# find /etc -name ifcfg-eno*
/etc/sysconfig/network-scripts/ifcfg-eno16777736
/etc/sysconfig/network-scripts/ifcfg-eno16777736.bak

 

查找/etc目錄下面權限為755的文件或目錄(/etc/ 或 /etc)

[root@localhost ~]# find /etc/ -perm 755 | more
/etc/
/etc/fonts
/etc/fonts/conf.d
/etc/X11
/etc/X11/fontpath.d
/etc/X11/applnk
/etc/X11/xorg.conf.d
/etc/X11/xinit
/etc/X11/xinit/xinitrc.d
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
/etc/X11/xinit/xinitrc.d/localuser.sh
/etc/X11/xinit/xinitrc.d/50-xinput.sh
/etc/X11/xinit/xinitrc.d/xdg-user-dirs.sh
/etc/X11/xinit/xinitrc.d/zz-liveinst.sh
......

 

查找tmp目錄下面所有者為root的文件或目錄

[root@localhost ~]# find /tmp -user root -ls
   133    4 drwxrwxrwt  16 root     root         4096 Aug 15 18:06 /tmp
102476982    0 drwxrwxrwt   2 root     root           17 Aug  7 15:14 /tmp/.ICE-unix
105106828    0 srwxrwxrwx   1 root     root            0 Aug  7 15:14 /tmp/.ICE-unix/7118
798851    0 drwxrwxrwt   2 root     root            6 Aug  8 09:51 /tmp/.X11-unix
34830676    0 drwxrwxrwt   2 root     root            6 Jul 21 11:27 /tmp/.font-unix
67838375    0 drwxrwxrwt   2 root     root            6 Jul 21 11:27 /tmp/.Test-unix
102476984    0 drwxrwxrwt   2 root     root            6 Jul 21 11:27 /tmp/.XIM-unix
860203    4 -rwxr--r--   1 root     root          140 Aug 15 10:40 /tmp/per.sh
860212    0 -rwxr--r--   1 root     root            0 Aug 12 19:23 /tmp/1.sh
2494902    0 -rw-r--r--   1 root     root            0 Aug 12 19:23 /tmp/1.sh1
......

 

在/etc目錄下查找更改時間在5天以內的所有文件和目錄

[root@localhost ~]# find /etc/ -mtime -5 -ls
67149953   12 drwxr-xr-x 129 root     root         8192 Aug 15 16:47 /etc/
69909531    4 -rw-r--r--   1 root     root          129 Aug 15 16:47 /etc/resolv.conf
69909533    4 -rw-r--r--   1 root     root         1301 Aug 15 14:43 /etc/group
69909534    4 ----------   1 root     root         1031 Aug 15 14:43 /etc/gshadow
67811198    4 -rw-r--r--   1 root     root         1287 Aug 15 14:42 /etc/group-
69909532    4 -rw-r--r--   1 root     root         2934 Aug 15 14:43 /etc/passwd
67811196    4 ----------   1 root     root         1021 Aug 15 14:42 /etc/gshadow-
69909535    4 ----------   1 root     root         1857 Aug 15 14:43 /etc/shadow
33557926    4 drwxr-xr-x   6 root     root         4096 Aug 15 14:18 /etc/sysconfig
......

 

在/etc目錄下查找更改時間在5天以內的普通文件

[root@localhost ~]# find /etc -mtime -5 -type f -ls
69909531    4 -rw-r--r--   1 root     root          129 Aug 15 16:47 /etc/resolv.conf
69909533    4 -rw-r--r--   1 root     root         1301 Aug 15 14:43 /etc/group
69909534    4 ----------   1 root     root         1031 Aug 15 14:43 /etc/gshadow
67811198    4 -rw-r--r--   1 root     root         1287 Aug 15 14:42 /etc/group-
69909532    4 -rw-r--r--   1 root     root         2934 Aug 15 14:43 /etc/passwd
67811196    4 ----------   1 root     root         1021 Aug 15 14:42 /etc/gshadow-
69909535    4 ----------   1 root     root         1857 Aug 15 14:43 /etc/shadow
67811575    4 -rw-r--r--   1 root     root         2893 Aug 15 14:42 /etc/passwd-
67811577    4 ----------   1 root     root         1829 Aug 15 14:42 /etc/shadow-
2494903    0 -rwxr-xrwx   1 root     root            0 Aug 13 14:37 /etc/rc.d/init.d/file2
36340025    4 -rw-r--r--   1 root     root           14 Aug 15 14:18 /etc/tuned/active_profile

 

查找屬于root用戶不屬于root組的文件

[root@localhost ~]# find -user root -not -group root -ls
105121001    4 -rw-------   1 root     daemon         30 Jun 10  2014 ./etc2016-08-12/ppp/peers/wvdial
105121006    4 -rw-r-----   1 root     ssh_keys     1679 Jul 21 11:47 ./etc2016-08-12/ssh/ssh_host_rsa_key
105121008    4 -rw-r-----   1 root     ssh_keys      227 Jul 21 11:47 ./etc2016-08-12/ssh/ssh_host_ecdsa_key
105121010    4 -rw-r-----   1 root     ssh_keys      387 Jul 21 11:47 ./etc2016-08-12/ssh/ssh_host_ed25519_key
69760948    0 drwxr-x---   7 root     polkitd        93 Jul 21 11:27 ./etc2016-08-12/polkit-1/localauthority
36383394    4 -rw-r-----   1 root     chrony          9 Nov 24  2015 ./etc2016-08-12/chrony.keys
2198753    4 drwxr-xr-x   5 root     lp           4096 Aug  8 08:15 ./etc2016-08-12/cups
2198755    0 -rw-------   1 root     lp              0 Nov 20  2015 ./etc2016-08-12/cups/classes.conf
2198756    0 -rw-r--r--   1 root     lp              0 Nov 20  2015 ./etc2016-08-12/cups/client.conf
2198757    4 -rw-r-----   1 root     lp           3091 Jul 21 11:29 ./etc2016-08-12/cups/cups-files.conf
2198758    8 -rw-r-----   1 root     lp           4504 Nov 20  2015 ./etc2016-08-12/cups/cupsd.conf

提示刪除存在時間超過3天以上的root的臨時文件

[root@localhost ~]# find /tmp/ -ctime +3 -user root -ok rm {} \;
< rm ... /tmp/.ICE-unix/7118 > ?

原創文章,作者:cyh5217,如若轉載,請注明出處:http://www.www58058.com/36082

(0)
cyh5217cyh5217
上一篇 2016-08-16
下一篇 2016-08-16

相關推薦

  • 編譯安裝Apache

    實驗環境:CentOS 6 安裝包版本:httpd-2.2.29.tar.bz2 一、安裝前準備     (1)、獲取httpd-2.2.29.tar.bz2安裝包     (2)、準備開發工具,安裝相應的包組 yum groupinstall -y&nbsp…

    Linux干貨 2016-08-24
  • DNS服務器搭建

    1. 配置正向解析 1.安裝bind yum install bind bind-utils -y 2.配置/etc/named.conf,需要修改的地方 listen-on port 53 { 127.0.0.1; 192.168.42.135; }; allow-query { any; }; dnssec-enable no; dnssec-valid…

    Linux干貨 2017-05-24
  • SHELL中的變量

    SHELL中的變量            運行SHELL腳本中的單個命令自然有用,但這有其自身的限制。通常你會需要在SHELL命令使用其他數據來處理信息。這可以通過變量來實現。變量允許你臨時性地將信息存儲在SHELL腳本中,以便和腳本中的其他命令一起使用。 1 環境變量…

    Linux干貨 2017-04-16
  • ansible高級應用

    上一篇博客介紹了ansible的基礎應用Modules,博客地址 http://www.www58058.com/14860 。這次介紹下Ansible的另一個核心模塊Playbooks。   Ansible的核心模塊:     Ansible core:   &nbs…

    Linux干貨 2016-04-18
  • 不作死就不會死,運維的危險命令(2)

    命令是一種很有趣且有用的東西,但在你不知道會帶來什么后果的時候,它又會顯得非常危險。所以,在輸入某些命令前,請多多檢查再敲回車。

    2017-12-03
  • Linux mdadm命令解析

    mdadm命令解析 一,在Linux系統中目前MD(Multiple Devices)虛擬塊設備的方式實現軟件RAID,利用多個底層的塊設備虛擬出一個新的虛擬設備,并且利用條帶化(stripping)技術將數據塊均勻分布到多個磁盤上來提高虛擬設備的讀寫性能,利用不同的數據冗余算法來保護用戶數據不會因為某個塊設備的故障而完全丟失,而且還能在設備被替換后將丟失的…

    Linux干貨 2017-08-31

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 10:27

    對于文件查找,我們用的最多的工具是find命令,這也是筆試中必考的內容,希望能多加練習,熟練掌握。

欧美性久久久久