在文件系统中查找符合条件的文件
locate :非实时查找(数据库查找)
语法 :locate + 文件名 直接查找
按照查询系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.db (每天开机以后自动生成,刚装的系统就找不到)
特点: 查找速度快 模糊查找 非实时查找 搜索的是文件的全路径,不仅仅是文件名
可能只搜索用户具备读取和执行权限的目录
locate 的命令选项: -i :不区分大小写
-n N : 只列举前N个
-r : 可以使用正则表达式
查找文件 locate f1.sh
locate /data -i f1.sh
locate -n5 f1.sh 显示出前面5行
locate -r “^/usr/.*\.lua$” 在/data 目录下 寻找以/usr 开头 以.lua结尾
find : 实时查找工具,通过遍历指定路径完成文件查找
工作特点: 查找速度略慢 精确查找 实时查找 可能只搜索用户具备读取和执行权限的目录
语法 : find 【OPTION】……[查找路径]【查找条件】【处理动作】
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径 下的所有路径
处理动作:对符合条件的文件做操作,默认输出至屏幕
查找条件
指搜索层级 -maxdepth level 最大搜索目录深度,指定目录为第一级
-mindepth level 最小搜索目录深度
根据文件名或inode查找:
-name”文件名称”:支持使用glob
*, ?, [], [^]
-iname“文件名称”:不区分字母大小写
-inum n 按inode号查找
-samefile name 相同inode号的文件
-links n 链接数为n的
-regex “PATTERN”:以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
find /etc/ -maxdepth 2 -name passwd 取/etc/ 下 含有passwd的最少第2层目录
find /etc/ -maxdepth 2 -mindepth 2 -name passwd 取/etc/ 最少2层 最多2层 含有passwd的目录
ll -ia 可以看到文件的节点编号
find /data inum 68 取 /data 下文件 68的节点编号
find /data -samefile lg.out -ls 取 /data 目录下和lg.out相同的节点编号
find /etc/ -regex “.*\.conf$” 用正则表达式取/etc/下的 以.conf结尾的文件
根据属主,属主查找:
user USERNAME : 查找属主为制定用户的(UID)的文件
-group GRPNAME: 查找属组为指定组(GID)的文件
find /home -user heihei -ls 查找在/home 下 用户为heihei 的文件属性
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
find /home -nouser 查找/home下没有所属主的文件
find /home -nouser -a -nogroup -ls 查找/home下即没有所属主有没有所属组的文件
find /home -nouser -o -nogroup
根据文件类型查找
-type : f :普通文件 d:目录文件 l :符号链接文件 s: 套接字文件 b: 块设备文件
c: 字符设备文件 p : 管道文件
空文件或目录
-empty
find /etc/ -empty -type f 查找/etc/ 普通空文件目录
-not , !
find /data ! -empty -type f 查找/data目录下非空的普通文件
!A -a !B = !(A -o B) !A -o !B = !(A -a B)
find /tmp \( -not -user root -a -not -name ‘f*’ \) -ls
find /tmp -not \( -user root -o -name ‘f*’ \) –ls
根据文件的大小来查找
-size [+|-] # UNIT 常用单位 :k, M ,G , c (byte)
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)
如果SIZE 后面 跟数字 # 大小的话搜索出的数字是(数字#-1 ~ 到数字#)
如果size 后面跟数字 -# 的大小的话搜索出的数字是【0 ~ -1】
如果size后面跟数字 +# 的大小的话搜索出的数字是(数字# ~ 无穷大)
根据事件戳 以天为单位
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin
如果-atime 后面跟 # 【# ~ #+1)
如果-atime后面跟 -#【0 ~ # )
如果-atime后面跟+#【#+1 ~ 无穷大】
查看文件的时间用 stat 文件名
根据权限查找
-perm [-|/] MODE
MODE: 精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
-MODE:每一类对象都必须同时拥有指定权限
find /data -perm 644 -ls 查找在/data目录下权限为644的文件
find /data -perm /644 -ls 查找在/data目录下只要有权限符合644中的任意一个都可以显示出来find /data -perm -644 -ls 查找在/data目录下权限为644以上的文件
文件的处理动作
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
ind传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
find /data -name “f*” -exec mv {} {}.bak2.org \; 把/data 目录下带 f 的文件移动到 /data 目录下并改名为以.bak2.org 结尾的文件
在 find 中带有-ok -exec 必须以 \; 作为结束命令
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96997