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.178linux.com/72835
评论列表(1条)
建议把命令或代码放入到插入程序代码中去,还有标题格式需要注意