linux文本查找工具之locate、find
一、文件查找分為兩類:
1、非實時查找:locate
2、實時查找:find
二、非實時查找:locate
非實時查找:查找速度快、非精準查找、模糊查找
原因在于它不搜索具體目錄,而是依賴于一個數據庫( /var/lib/mlocate/mlocate.db ),這個數據庫中含有本地所有文件信息,這個數據庫是周期性更新,而不是實時更新,
所以查不到最新變動過的文件。所以使用locate查找文件時,先用updatedb,手動更新數據庫。
locate:用來查找文件或目錄
locate [選項] [參數]
選項:
-i 忽略大小寫
例如:
[root@zq bin]# locate -i “.sh”
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
/etc/X11/xinit/xinitrc.d/localuser.sh
…
-n N 顯示匹配的指定的前N行
例如:
[root@zq bin]# locate -n 2 “.sh”
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
/etc/X11/xinit/xinitrc.d/localuser.sh
[root@zq bin]#
-r 使用正則表達式的方式搜索文件
例如:
[root@zq bin]# locate -r “.* \ .sh”
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
/etc/X11/xinit/xinitrc.d/localuser.sh
/etc/X11/xinit/xinitrc.d/xdg-user-dirs.s
…
三、實時查找:find
實時查找:精確查找、查找速度慢
原因在于它是通過遍歷指定路徑下的文件系統完成文件查找,非常消耗計算機資源。
find [選項]…[查找路徑] [查找條件] [處理命令]
1、查找路徑:
默認為當前目錄
2、查找條件:
默認為指定路徑下的所用文件
(1)查找條件
-name “文件名” (支持文件名通配)
:任意長度的任意字符
?:任意單個字符
[]: 匹配指定范圍內的任意一個字符
[^]:匹配指定范圍外的任意一個字符
常用的字符集:
[:lower:]:所有小寫字母
[:upper:]:所有大寫字母
[:alpha:]:所有字母
[:digit:]:所有數字
[:alnum:]:所有數字和字母
[:space:]:表示空白字符
[:punct:]:表示所有標點符號
例如:
[root@zq ~]# find /etc -name “[0-9][[:alpha:]]”
/etc/sysconfig/i18n
/etc/makedev.d/01v4l
-iname 文件名稱忽略大小寫
例如:
[root@zq bb]# find /root/bb -iname “a“
/root/bb/A
/root/bb/a
-inum n 根據inode來查找
例如:
[root@zq bb]# find /root/bb -inum 290716
/root/bb/a
[root@zq bb]# ls -i
290716 a 290717 A
-links n 根據鏈接數
例如:
[root@zq bb]# find /var/log -links 2 -ls
393172 4 drwx—— 2 root root 4096 Mar 16 2015 /var/log/ppp
403608 4 drwxr-xr-x 2 root root 4096 Apr 8 10:09 /var/log/sa
-uid UID:根據UID查找文件
例如:
[root@zq bb]# find /etc/rc.d -uid 0 -ls
130654 4 drwxr-xr-x 10 root root 4096 Mar 22 18:51 /etc/rc.d
130663 4 drwxr-xr-x 2 root root 4096 Mar 22 19:03 /etc/rc.d/rc4.d
-gid GID:根據GID查找文件
例如:
[root@zq bb]# find /var/log -gid 0 -ls
393120 4 drwxr-xr-x 13 root root 4096 Apr 8 10:10 /var/log
392026 52 -rw——- 1 root root 46959 Apr 8 20:01 /var/log/cron
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
(2) 組合條件查找
-a:與 同時滿足條件
-o:或 滿足其中一個條件就行
-not:!非 條件取反
例如:
[root@zq bb]# find /usr -not ( -user root -o -user bin -o -user shutdown ) -ls
-rwsr-xr-x 1 abrt abrt 10296 May 12 2016 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
(3)根據文件類型查找:
文件類型:
– :普通文件
d :目錄文件
b :塊設備文件
c :字符設備文件
p :管道文件
l :符號連接文件
s :套接字文件
例如:
[root@localhost ~]# find . -type d -ls
1048578 4 dr-xr-x— 5 root root 4096 Apr 6 15:16 .
1068347 4 drwx—— 3 root root 4096 Apr 6 13:27 ./.dbus
1068348 4 drwx—— 2 root root 4096 Apr 6 13:27 ./.dbus/session-bus
1068350 4 drwx—— 4 root root 4096 Apr 6 13:44 ./.config
1068351 4 drwx—— 3 root root 4096 Apr 6 13:28 ./.config/ibus
…
(4) 根據文件大小查找
-size [-|+]#
常用單位:K M G
如:
5K :表示范圍是 大于4K小于等于5K
-5K : 表示范圍是 小于等于4K
+5K : 表示范圍是 大于5K
例如:
[root@localhost ~]# find /var/log -size +1k -ls
132569 4 drwxr-xr-x 20 root root 4096 Apr 8 06:11 /var/log
265195 4 drwx—— 3 root root 4096 Apr 6 13:14 /var/log/libvirt
278911 4 drwx—— 2 root root 4096 Nov 11 21:18 /var/log/libvirt/qemu
(5) 根據時間戳查找文件
以’天’為單位
-atime [-|+]# 根據訪問時間查找
如:
5 :表示時間范圍是 5<= # <6
-5 : 表示時間范圍是 #<5 5天以內的
+5 :表示時間范圍是 #=>6
-mtime : 根據修改時間查找
-ctime : 根據改變時間查找
例如:
[root@localhost ~]# find /var/log -mtime -7 -ls
132569 4 drwxr-xr-x 20 root root 4096 Apr 8 06:11 /var/log
265195 4 drwx—— 3 root root 4096 Apr 6 13:14 /var/log/libvirt
148902 4 -rw——- 1 root root 396 Apr 8 06:12 /var/log/maillog
265202 4 drwxr-xr-x 3 root root 4096 Apr 6 13:13 /var/log/pluto
…
以“分鐘”為單位
-amin 根據訪問時間查找
-mmin 根據修改時間查找
-cmin 根據改變時間查找
(6) 根據權限查找
-perm [-|+] MODE
MODE:與MODE精確匹配查找
例如:
[root@localhost ~]# find /var/log -perm 644 -ls
131127 24 -rw-r–r– 1 root root 23592 Apr 6 13:28 /var/log/Xorg.9.log
131517 4 -rw-r–r– 1 root root 80 Apr 8 06:12 /var/log/wpa_supplicant.log
131076 16 -rw-r–r– 1 root root 14310 Apr 8 06:11 /var/log/boot.log
…
-MODE:必須包含全部的MODE權限才可以
例如:
[root@zq bb]# find /root/bb/* -perm -644 -ls
290717 0 -rw-r–r– 1 root root 0 Apr 8 19:59 /root/bb/A
290718 0 -rw-r–r– 1 root root 0 Apr 8 20:55 /root/bb/c
290719 0 -rwxrw-rw- 1 root root 0 Apr 8 20:55 /root/bb/d
+MODE: 只要有一個比如說屬主 屬組或者其他人有一個擁有MODE權限即可
例如:
[root@zq bb]# find /root/bb/* -perm +644 -ls
290716 0 -rw-r—– 1 root root 0 Apr 8 19:59 /root/bb/a
290717 0 -rw-r–r– 1 root root 0 Apr 8 19:59 /root/bb/A
290718 0 -rw-r–r– 1 root root 0 Apr 8 20:55 /root/bb/c
290719 0 -rwxrw-rw- 1 root root 0 Apr 8 20:55 /root/bb/d
3、 處理動作
-print:默認處理動作,顯示到屏幕上
-ls :類似于ls -l
-delete:刪除查找到的文件;只刪除文件,不能刪除非空目錄
-fls /PATH/TO/SOMEFILE:查找到的文件長格式信息保存到指定文件中
例如:
[root@zq bb]# find /root/bb/* -perm -644 -fls /tmp/findfile
[root@zq bb]# cat /tmp/findfile
290717 0 -rw-r–r– 1 root root 0 Apr 8 19:59 /root/bb/A
290718 0 -rw-r–r– 1 root root 0 Apr 8 20:55 /root/bb/c
290719 0 -rwxrw-rw- 1 root root 0 Apr 8 20:55 /root/bb/d
-ok COMMAND {} \;對查找到的文件執行COMMAND命令,執行命令之前,跟用戶進行交互確認。
例如:
[root@zq bb]# find /root/bb/* -perm -644 -ok stat {} \;
< stat … /root/bb/A > ? yes
File: /root/bb/A
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 290717 Links: 1
Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-04-08 19:59:51.535982828 +0800
Modify: 2017-04-08 19:59:51.535982828 +0800
Change: 2017-04-08 19:59:51.535982828 +0800
…
-exec COMMAND {} \; 對查找到的文件執行COMMAND命令,執行命令之前,不用跟用戶進行交互確認。
例如:
[root@zq bb]# find /root/bb/* -perm -644 -exec stat {} \;
File: `/root/bb/A’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 290717 Links: 1
Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-04-08 19:59:51.535982828 +0800
Modify: 2017-04-08 19:59:51.535982828 +0800
Change: 2017-04-08 19:59:51.535982828 +0800
…
工作環境常用:
工作環境中利用find查找文件,找到的文件很大(比如大于15T),然后對其做處理動作,很有可能造成進程中斷而停止。
這時候我們可以利用xargs命令與find相結合來處理問題
xargs 將前面的find的查找結果分批次給后面的命令作為執行的參數。
例如:
[root@zq bb]# find /var/log -name “*.log” | xargs ls -l
-rw——-. 1 root root 5354 Mar 22 19:06 /var/log/anaconda.ifcfg.log
-rw——-. 1 root root 22672 Mar 22 19:06 /var/log/anaconda.log
-rw——-. 1 root root 47672 Mar 22 19:06 /var/log/anaconda.program.log
-rw——-. 1 root root 250354 Mar 22 19:06 /var/log/anaconda.storage.log
-rw——-. 1 root root 174890 Mar 22 19:06 /var/log/anaconda.yum.log
-rw——-. 1 root root 3149433 Apr 8 21:20 /var/log/audit/audit.log
原創文章,作者:zq,如若轉載,請注明出處:http://www.www58058.com/72835
建議把命令或代碼放入到插入程序代碼中去,還有標題格式需要注意