Linux find 命令详解
简介:
在 Linux 中 find 是一个强大的文件查找工具, 可以用于查找系统或指定目录的指定文件, find 支持正则表达式和统配符进行匹配
find 命令格式:
# 使用格式 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] 格式说明: path find 查找的路径, / 表示在当前系统中查找 expression 表达式, 默认为 print(将 find 的匹配结果输出到屏幕)
find 参数:
OPTIONS(选项): 和符号链接相关的选项: -P 不跟踪符号链接(默认行为) -L 当 find 检查或打印有关文件的信息时, 所使用的信息应取自链接指向的文件的属性, 而不是链接本身 -H 和 -L 参数刚好相反, 当 find 检查或打印有关文件的信息时, 所使用的信息应取自符号链接的属性 示例: # 建立测试环境 ln -s /etc/ /tmp/ # 查找 etc/fstab, 默认 find 命令不会跟踪符号链接, 所以 find 不会搜索 /tmp/etc/ 所指向的 /etc/, 这时 find 不会得到的任何内容 find /tmp/ -name 'fstab' # 查找 etc/fstab, 使用 -L 选项, find 会搜索 /tmp/etc/ 所指向的 /etc/ 和其子目录, 这时可以查找到 fstab find -L /tmp/ -name 'fstab' # -H 使用符号链接本身的属性, 所以 find 将 /tmp/etc/ 当成一个文件, 这时 find 不会得到的任何内容 find -H /tmp/ -name 'fstab' 注意: 1、-P -L -H 可以同时出现, 但是只有处于命令行最后的那个参数生效 2、当 -L 或 -H 生效时, 任何作为 -newer 参数列出的符号链接将被取消引用, 并且时间戳将从符号链接指向的文件中取出(-newerXY、-anewer、-cnewer 和 -newer 的行为相同) 调试和优化: -D 调试模式 -O 指定优化级别(默认为0) 0、1 级别 0 和 级别 1 相同, 这是默认的优化级别, 对表达式进行重新排序, 以便基于 -name 和 -regex 的查找 2 对于基于 -type 或者 -xtype 的查找, 先从 inode 中读取文件类型 3 启用快速查找 EXPRESSIONS(表达式): OPTIONS(选项): -d、-depth 在查找文件时, 首先查找当前目录中的文件, 然后再在其子目录中查找 -maxdepth n find 查找目录的最大深度 -mindepth n find 从指定的目录的第几层深度开始查找 -mount 查找文件时不跨越文件系统的 mount 点 -follow 和 -L 参数类似 -regextype 指定后面所使用的正则表达式语法, 默认为 emacs posix-awk 类 awk 的正则表达式语法 posix-basic 基本正则表达式 posix-egrep 不使用正则表达式 posix-extended 扩展正则表达式 TESTS(测试, 检查文件是否符合表达式): 可以将数字参数指定为: +n 大于n -n 小于n n 等于n 常用参数: -anewer file 将指定目录下的所有文件和 file 对比, 输出读取或写入时间在 file 读取或写入之后的文件, 该选项会的链接文件进行跟踪 -newer file 和 anewer 类似, 将指定目录下的所有文件和 file 对比, 输出修改时间在 file 修改之后的文件, 该选项会的链接文件进行跟踪 -empty 查找空文件或目录 -fstype type 查找指定文件系统上的文件 -gid n 根据文件 gid 查找 -uid 根据文件 uid 查找 -user 根据属主查找 -group gname 根据文件属组查找 -name 根据文件名进行查找 -iname 和 -name 类似, 但是 -iname 不区分大小写 -regex 使用正则表达式进行查找 -iregex 和 -regex 类似, 但是 -iregex 不区分大小写 -nogroup 查找没有属组的文件(文件的属组列为数字) -nouser 查找没有属主的文件(文件的属主列为数字) -perm 根据文件权限进行查找 -readable 查找可读文件 -writable 查找可写文件 -path 通常和 -prune 一起使用, 表示忽略某个目录 -prune 忽略 -path 指定的目录, 不能和 -delete、-depth 参数一起使用 -size n[cwbkMG] 根据文件大小进行查找 b 512 字节(默认) c 1 字节 w 2 个字节的单词 k 1 k M 1 m G 1 g -type c b 块设备 c 字符设备 d 目录 p 命名管道 f 文件 l 链接文件 s socket 文件 和时间查找相关: time 类型介绍: mtime(Change): 当文件内容发送改变时更新 mtime ctime(Modify): 当文件权限或属性发生改变时更新 ctime(内容更新时也会更新该值, 和 mtime 唯一区别在于, 当权限或属性发生改变时 mtime 不会改变) atime(Access): 文件被访问时发生改变 relatime: 如果一个文件不停的被访问每一次都更新 atime 的话将会大大的增加磁盘 IO 的压力, 所有 Linux kernel 2.6 之后出现了 relatime 属性 使用这个属性之后只有当 atime 的时间落后 mtime 或者 ctime 之后 atime 才会更新, 在 centos 中想要使用 relatime 必须使用 mount -o relatime 或者在 /etc/fstab 中添加 relatime 参数 在 Linux 中使用 stat [file|dir] 可以看见这个几个值的具体信息 -ctime n 文件状态最后一次修改是在 n 天之前 -atime n 文件最后一次访问是在 n 天之前 -mtime n 文件最后一次修改是在 n 天之前 -cmin n 文件状态最后一次修改是在 n 分钟之前 -amin n 文件最后一次访问是在 n 分钟之前 -mmin n 文件最后一次修改是在 n 分钟之前 ACTIONS(对符合表达式的结果进行操作): -delete 删除查找到的文件或目录(谨用) -exec 将查找的文件或目录传递给 exec 后面的 shell 命令作为参数 -ls 将查找到的文件或目录传递给 ls -l 命令作为该命令的参数 -ok 类似于 -exec , 但是在执行命令之前会询问用户是否执行 -print 默认动作, 将查找结果输出的屏幕 -printf format 类似于 -print, 但是可以自定义输出格式
常用示例:
# 查找系统中的所有以 .log 结尾的文件 find / -name "*.log" # 查找系统中权限为 777 的文件或目录, 并使用 ls -l 查看其详细信息 find / -perm 777 -ls # 查找系统中属主和属组为 postfix 的文件或目录 find / -user postfix -group postfix # 删除 /var/log/ 空文件和目录 find /var/log/ -empty -delete # 使用"扩展正则表达式"查找系统中的所有以.so和.log结尾的文件 find / -regextype posix-extended -regex ".*\.log$|.*\.so$" # 查看 /etc/ 最近三天修改过的文件 find /etc/ -mtime -3 # 查看 /etc/ 30天前修改过的文件 find /etc/ -mtime +30 # 查找 /var/log/ 所有以 .log 结尾的文件, 通过 chmod 命令将其权限改为 666 find /var/log/ -name "*.log" -exec chmod 666 {} \; # 查看权限是否已经更改 find /var/log/ -name "*.log" -ls # 查找系统文件大小大于 10M 的所有文件 find / -type f -size +10M # 查找系统文件大小小于 1k 的所有文件 find / -type f -size -1k # 系统中没有属组和属主的文件或目录 find / -nouser -nogroup # 查找系统中的 .log 文件, 查询深度不超过 3 层 find / -maxdepth 3 -name "*.log" # 查找系统中的 .log 文件, 查询深度从第 4 层开始 find / -mindepth 4 -name "*.log"
posted on 2018-12-18 12:03 HuYuanBlog 阅读(4488) 评论(1) 编辑 收藏 举报