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