文件查找命令
文件查找命令
文件查找
在文件系统上查找符合条件的文件一般有两个工具, 分别为locate, find
locate:
依赖于实现构建好的索引库:
系统自动实现
手动更新数据库(updatedb)
工作特性:
查找速度快
模糊查找
非精确查找
非实时查找
参数:
locate [OPTION]... PATTERN...
-b: 基名查找
-c: 统计出共有多少个符合条件的文件
-r: BRE
updatedb这个操作非常占用系统资源
find:
实时查找工具, 通过遍历指定起始路径下文件系统层级结构完成文件查找
工作特性:
查找速度略慢
实时查找
精确查找
用法:
find [OPTION] : [查找路径] [查找条件] [处理动作]
查找起始路径: 指定具体搜索目标起始路径, 默认为当前目录
查找条件, 指定的查找标准, 可以根据文件名, 大小, 类型, 从属关系, 权限等等标准进行.默认找出指定路径下的所有文件
处理动作: 对符合查找条件的文件的操作, 例如删除等操作, 默认为是输出到标准输出.
查找条件:
表达式: 选项和测试
测试:
1. 根据文件名查找
-name 'pattern': 大小写敏感
-iname 'pattern': 忽略大小的名字
此处的规则时基于glob风格的通配符来查找的
* , ? [] [^]
-regex pattern : 基于正则表达式来查找文件, 但是是基于整个文件路径来查找的, 而不是根据基名来查找的, 非常少用..
2. 根据文件从属关系查找
-user: USERNAME 根据属主指定用户的所有文件
-gourp: GROUPNAME 根据属组来查找所有文件
-uid UID 根据属主指定uid的所有文件, (因为用户可能被删除)
-gid GID 查找属组指定的gid的所有文件
-nouser: 查找没有属主的所有文件
-nogroup 查找所有没有属组的文件
3. 根据文件的类型查找
-type TYPE
f: 普通文件
d: 目录文件
l: 符号链接文件(符号链接方式)
b: 块设备文件
c: 字符设备文件
p: 管道文件
s: 套接字文件
4. 组合测试
与: -a 默认
或: -o
非: -not
5. 根据文件的大小查找:
-size [+|-] # UNIT
常用单位: k, M, G
# UNIT: (#-1, #] 只要换算后在这个里面的都算
-# UNIT: [0, #-1] 小于# 的都是
+# UNIT: (#, oo) 大于# 的文件
6. 根据时间戳来查找:
时间都是相对于当前的时间往前计算的, 例如#3, 是指第2.xxx天前到3天前整的时间
以天为单位
-atime [+|-] 为单位, 访问时间
#: [#, #-1)
-#: (#, 0] 表示#-1天到今天之前的
+#: [oo, #), 例如#=3, 表示3天前到oo天以前
-mtime: 修改时间
-ctime: 创建时间
以分钟为单位:
-amin:
-mmin:
-cmin:
7. 根据权限查找:
-perm [/|-]mode
mode: 精确权限匹配
/mode: 任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件
例如 find . -perm /222 -ls 表示查找至少有一类用户拥有写权限3类用户之间是并列关系, 只要有一个符合要求即可
-mode: 每一类用户的每一位权限都符合条件, 与上面相反, 是 与关系
处理动作
-print: 输出到标准输出
-ls: 类似于对查找到的文件执行'ls -l'命令, 输出文件的详细信息
-delete : 删除查找到的文件
-fls /PATH: 把查到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; :对查找到的每个文件执行有COMMAND表示的命令. 交互式, 每次操作都要提示是否确认
-exec COMMAND {} \; 非交互式
查找到的结果可能不支持管道, 这时候可以通过xargs命令来将参数传递给那些不支持管道的命令, 例如ls
小练习:
1. 查找/etc/init.d/ 目录下, 所有用户都有执行权限, 且其他用户拥有写权限的文件 find /etc/init.d/ -perm -111 -a -perm /002 -ls
2. 查找/etc/目录下, 至少有一类用户没有执行权限的文件 find /etc/ -not -perm -111 -ls
3. 查找当前系统上没有属主或属组, 且最近一周内未曾被访问过的文件或目录
find / \( -nouser -o -nogroup \) -atime +7 \( -type f -o -type d \) -ls

浙公网安备 33010602011771号