文件查找:在文件系统上查找符合条件的文件;
locate, find
非实时查找(数据库查找):locate //不是遍历系统文件,把当前系统目录下的所有文件抽取出来制作成一个索引(或者叫数据库),locate就是基于索引进行的查找;
实时查找:find
locate:依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);
手动更新数据库(updatedb);
索引构建过程需要遍历整个根文件系统,极消耗资源;
工作特点:
查找速度快;
模糊查找;
非实时查找;
语法:
locate KEYWORD
# locate passwd
find:
实时查找工具,通过遍历指定路径下的文件系统完成文件查找;
工作特点:
查找速度略慢;
精确查找;
实时查找;
语法:
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;
默认为当前目录;
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;
默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;
默认输出至屏幕;
大多数用到的是查找路径、查找条件、处理动作
查找条件:
根据文件名查找:
-name "文件名称"(严格区分大小写):支持使用glob
*, ?, [], [^]
示例:
# find /etc/ -name passwd
# find /etc/ -name "passwd*"
-iname "文件名称":不区分字母大小写
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
根据属主、属组查找:
-user USERNAME:查找属主为指定用户的文件;
# find /tmp -user root -ls //查找tmp目录下属主为user的文件,并用-ls长格式显示
-ls:是查找到文件,对文件执行的动作 ,相当于#ls -l
group GRPNAME: 查找属组为指定组的文件;
# find /tmp -group user1 -ls
-uid UserID:查找属主为指定的UID号的文件;
# find /home -uid 501 -ls
-gid GroupID:查找属组为指定的GID号的文件;
-nouser:查找没有属主的文件;
当一个用户被删除后,这个用户之前创建的文件的属主和属组就为这个用户的UID和GID了。
# find /tmp -nouser -ls
-nogroup:查找没有属组的文件;
# find /tmp -nogroup -ls
根据文件类型查找:
-type TYPE:
f: 普通文件
d: 目录文件
#find /tmp -type d
#find /tmp -type d -ls
l: 符号链接文件
s:套接字文件
#find /tmp -type s
b: 块设备文件
c: 字符设备文件
p: 管道文件
组合条件:
与:-a
或:-o
非:-not, !
# find /tmp -nouser -o -nogroup //没有属主或没有属组的文件