码迷,mamicode.com
首页 > 其他好文 > 详细

文件查找-locate和find

时间:2020-12-23 12:21:42      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:pattern   fstab   任务   nss   索引   comm   指定路径   命令   font   

文件查找

locate	非实时查找(数据库查找)
find	实时查找

1、文件查找

1.1 locate

locate查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db

索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库

索引构建过程需要遍历整个根文件系统,很消耗资源

格式及选项

locate [-d] [--help] [--version] [范本样式]

-b,--basename:仅匹配路径名称的基本名称
-d, --database DBPATH:使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
-c,--count:只输出找到的数量
-e,--existing:仅打印当前现有文件的条目
-1:如果是1,则启动安全模式
-0,--null:在输出上带有NUL的单独条目
-S,--statistics:不搜索条目,打印有关每个数据库统计信息
-P,--nofollow,-H:检查文件存在时不要准寻尾随的符号链接
-l,--;imit,-n LIMIT:将输出限制为LIMIT个条目
-n:最多显示n个输出
-m,--mmap:被互虐,为了向后兼容
-r,regexp REGEXP:使用基本正则表达式
-q,--quit:安静模式,不会显示任何错误信息
-s,--stdio:被忽略,为了向后兼容
-o:指定资料库存的名字
-i,--ignore-case:忽略大小写

例:

[12:53:53 root@zhang ~]#locate passwd -n 3
/data/backup2020-11-17_11:09:24/passwd
/data/test/passwd
/etc/passwd

[12:57:46 root@zhang ~]#locate -r ‘\.conf$‘ -n5
/data/haha.conf
/etc/GeoIP.conf
/etc/asound.conf
/etc/chrony.conf
/etc/dnsmasq.conf

[12:59:29 root@zhang ~]#locate -ir \.TXT$ -n5
/data/test/abc.txt
/etc/pki/nssdb/pkcs11.txt
/usr/share/licenses/freetype-2.8/FTL.TXT
/usr/share/licenses/freetype-2.8/GPLv2.TXT
/usr/share/licenses/freetype-2.8/LICENSE.TXT

:locate的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 /var/lib/slocate/slocate.db 中,所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 ,命令为updatedb。

例:

[root@zhang data]#touch /data/haha.conf
[root@zhang data]#locate conf | grep /data/haha.conf 
[root@zhang data]#updatedb 
[root@zhang data]#locate conf | grep /data/haha.conf 
/data/haha.conf
[root@zhang ~]#rm /data/haha.conf 
[root@zhang ~]#locate conf | grep /data/haha.conf 
/data/haha.conf
[root@zhang ~]#updatedb 
[root@zhang ~]#locate conf | grep /data/haha.conf 

2、find

find时实时查找工具,通过遍历指定路径完成文件查找

特点:

查找速度略快
精确查找
实时查找
查找条件丰富
可能只搜索用户具备读取和执行权限的目录

格式

find [OPTION] [查找路径] [查找条件] [处理动作]

查找路径:指定具体路径;默认当前目录;
查找条件:指定查找标准,可以文件名、大小、权限登便准进行;默认找指定路径下的所有文件;
查找动作:对复合体案件的文件做操作,默认输出至屏幕。

例:

[13:02:45 root@zhang ~]#find
.
./.bash_logout
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.cache
./.cache/abrt
./.cache/abrt/lastnotification
./.config
./.config/abrt
./.bash_history
./.pki
./.pki/nssdb
./.bash
./.bash_profile
./y.sh
./.viminfo
./.vimrc.swp
./.vimrc
./.bashrc

2.1 指定搜索目录层级

-maxdepth level	最大搜索目录深度,指定目录下的文件为第1级
-mindepth level	最小搜索目录深度

例:

[13:14:31 root@zhang ~]#find /etc/ -maxdepth 1 -mindepth 1
/etc/fstab
/etc/crypttab
/etc/mtab

[13:15:28 root@zhang ~]#find /etc/ -maxdepth 2 -mindepth 2
/etc/pki/rpm-gpg
/etc/pki/tls
/etc/pki/ca-trust
/etc/pki/java

2.2 对每个目录先处理目录内的文件,在处理目录本身

-depth -d

例:

[13:18:01 root@zhang ~]#tree /data/test/
/data/test/
├── abc.txt
├── cman.sh
├── issue_zhang
    ├── atd
    ├── authconfig
    ├── cbq
        ├── avpkt
        
[13:20:07 root@zhang ~]#find /data/test/
/data/test/
/data/test/abc.txt
/data/test/cman.sh
/data/test/issue_zhang
/data/test/issue_zhang/atd
/data/test/issue_zhang/authconfig
/data/test/issue_zhang/cbq
/data/test/issue_zhang/cbq/avpkt

2.3 根据文件和inode查找

-name “文件名称”:支持使用glob,如:*、?、[]、[^]、通配符要加双引号引起来
-iname “文件名称”:不区分大小写字母
-inum n:按inode号查找
-samefile name:相同inode号的文件
-links n:链接数为n的文件
-regex “PATTERN”:以PATTERN匹配整个文件路径,而非文件名称

例:

[13:36:49 root@zhang ~]#find / -name test
/usr/bin/test
/usr/lib/modules/3.10.0-1127.19.1.el7.x86_64/kernel/drivers/ntb/test
/usr/lib64/python2.7/test
/usr/lib64/python2.7/unittest/test
/data/test
/test

[13:36:54 root@zhang ~]#find / -iname test
/usr/bin/test
/usr/lib/modules/3.10.0-1127.19.1.el7.x86_64/kernel/drivers/ntb/test
/usr/lib64/python2.7/test
/usr/lib64/python2.7/unittest/test
/usr/share/perl5/Test
/data/test
/test

[13:46:03 root@zhang ~]#find /var -name "log*"
/var/lib/logrotate
/var/lib/logrotate/logrotate.status
/var/lib/logrotate.status.rpmsave
/var/log

2.4 根据属主、属组查找

-user USERNAME:查找属主指定用户(UID)的文件
-group GRPNAME:查找属组指定组(GID)的文件
-uid USERID:查找属主为指定组UID号的文件
-gid GROUPID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件

2.5 根据文件类型查找

-type TYPE
TYPE 可以时一下形式:

f:普通文件
d:目录文件
l:符号链接文件
s:套接字文件
b:块设备文件
c:字符设备文件
p:管道文件

例:

#查看/home的目录
[14:27:41 root@zhang ~]#find /test -type d -ls
763503    4 drwxr-xr-x   2 root     root         4096 Nov 11 20:23 /test/rootdir/root/data/issu
34119263    0 drwxr-xr-x   3 root     root           17 Nov 11 20:41 /test/rootdir2
67266132    4 dr-xr-x---   6 root     root         4096 Nov 10 15:36 /test/rootdir2/root

2.6 空文件或目录

-empty

例:

[14:27:41 root@zhang ~]#find /test -type d -empty 
/test/backup2020-11-11/pki/tls/private
/test/backup2020-11-11/pki/ca-trust/source/anchors
/test/backup2020-11-11/pki/ca-trust/source/blacklist

2.7 组合条件

与:-a,默认多个条件是与关系
或:-o
非:-not !

例:

[14:42:53 root@zhang ~]#find /data/ -type d | wc -l
30
[14:43:04 root@zhang ~]#find /data/ -type l | wc -l
24
[14:43:08 root@zhang ~]#find /data/ -type d -o -type l | wc -l
54
[14:51:56 root@zhang ~]#find /data/ \( -type d -o -type l \) | wc -l
54

德·摩根定律

(非A)或(非B)=非(A且B)

(非A)且(非B)=非(A或B)

例:

[root@zhang ~]#find ! \( -type d -a -empty \) |wc -l
18
[root@zhang ~]#find ! -type d -o ! -empty |wc -l
18

[root@zhang ~]#find /home/ ! \( -user zhang -o -user lu \)
/home/
/home/123.txt
[root@zhang ~]#find /home/ ! -user zhang -a ! -user lu
/home/
/home/123.txt

#找出/tmp目录下,属主不是root且文件名不以f开头的文件
[15:28:19 root@zhang ~]#find /etc/ \( -not -user root -a -not -name ‘f*‘ \) -ls
67829387    0 drwx------   2 polkitd  root           63 Oct 29 16:41 /etc/polkit-1/rules.d
34117389    8 -rw-------   1 tss      tss          7046 Aug  4  2017 /etc/tcsd.conf
[15:28:22 root@zhang ~]#find /etc/ -not \( -user root -o -name ‘f*‘ \) -ls 
67829387    0 drwx------   2 polkitd  root           63 Oct 29 16:41 /etc/polkit-1/rules.d
34117389    8 -rw-------   1 tss      tss          7046 Aug  4  2017 /etc/tcsd.conf

2.8 排除目录

例:

#查找/etc下,除/etc/sane.d目录的其它所有.conf后缀的文件
[15:34:20 root@zhang ~]#find /etc/ -path ‘/etc/sane.d‘ -a -prune -o -name "*.conf"
/etc/resolv.conf
/etc/pki/ca-trust/ca-legacy.conf
/etc/yum/pluginconf.d/fastestmirror.conf

#查找/etc下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件
[15:35:28 root@zhang ~]#find /etc/ \( -path "/etc/sane.d" -o -path "/etc/fonts" \) -a -prune -o -name "*.conf"
/etc/resolv.conf
/etc/pki/ca-trust/ca-legacy.conf
/etc/yum/pluginconf.d/fastestmirror.conf

#排除/proc和/sys目录
[15:37:27 root@zhang ~]#find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -type f -a -mmin -1 
/proc
/sys

2.9 根据文件大小来查找

-size [+|-]#UNIT
	常用单位:K,M,G,c(byte),注意大小写敏感
#UNIT:(#-1,#]
	如:6k表示(5k,6k]
-#UNIT:[0,#-1]
	如:-6k 表示[0,5k]
+#UNIT:(#,∞)
	如:+6k 表示(6k,∞)

例:

[15:46:57 root@zhang data]#find /data/ -size 6k
/data/test/issue_zhang/network-scripts/init.ipv6-global
/data/test/issue_zhang/sysconfig/network-scripts/init.ipv6-global
/data/sysconfig.bak/network-scripts/init.ipv6-global
/data/sysconfig.bak/sysconfig/network-scripts/init.ipv6-global

[15:45:49 root@zhang data]#find /data/ -size -10k
/data/
/data/test
/data/test/cman.sh
/data/test/issue_zhang
/data/test/issue_zhang/selinux

[15:46:02 root@zhang data]#find /data/ -size +10k
/data/test/issue_zhang/network-scripts/ifup-aliases
/data/test/issue_zhang/network-scripts/ifup-eth
/data/test/issue_zhang/network-scripts/ifup-ippp

2.10 根据时间戳

#以“天”为单位
-atime [+|-]
-mtime
-ctime

#:[#,#+1)
-#:[0,#)
+#:[#+1,∞)

-mtime 10
-mtime -10
-mtime +10

#以“分钟”为单位
-atin
-mmin
-cmin

2.11 根据权限查找

-perm [/|-] MODE

MODE:精确权限匹配
/MODE:任何一类(u、g、o)对象的权限重只要能一位匹配即可,或关系,+从CentOS 7开始淘汰
-MODE:每一类对象都必须同事拥有指定权限,与关系
0 表示不关注

2.13 处理动作

-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于-ls>file
-delete:删除查找到的文件,慎用!
-ok COMMAND {} \:对查找到的每个文件执行由COMMAND指定命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \:对查找到的每个文件执行由COMMAND指定的命令
{}:用于引用查找到的文件名称自身

例:

#备份配置文件,添加.orig这个扩展名
find -name ".conf" -exec cp {} {},.orig \;

#提示删除存在时间超过3天以上的joe的临时文件
find /tmp -ctime +3 -user joe -ok rm {} \;

#在主目录中寻找可被其他用户写入的文件
find ~ -perm -002 -exec chmod o-w {} \;

#查找/data下的权限为644,后缀为sh的普通文件,怎加执行权限
find /data -type f -perm 644 -name "*.sh" -exec chmod 755 {} \;

文件查找-locate和find

标签:pattern   fstab   任务   nss   索引   comm   指定路径   命令   font   

原文地址:https://www.cnblogs.com/oldzhang01/p/14156287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!