find查找命令用法
1概念语法
在Linux中一切皆文件,我们先需要在大量的文件中找到我们需要的文件就需要查找命令,find命令是查找文件的一个很好的命令
find
语法格式:find [option] 查找路径 查找条件 处理动作
1.1查找路径
默认从当前所在目录向下查找,即相对路径,也可以使用绝对路径
1.2查找条件
想要查找的文件所具有的特点、属性
1.2.1基于文件名和inode以及链接数查找
选项 | 描述 |
---|---|
name | 后面跟文件名,支持通配符模糊查找 |
iname | 后面跟文件名,支持通配符,忽略大小写 |
inum | 后面跟文件的inode号,基于inode查找 |
samefile | 后面跟文件名,查找与其inode相同的文件,即硬链接 |
links # | 后面跟数字,查找硬连接数为# 的文件 |
1.2.2基于文件属主属组查找
选项 | 描述 |
---|---|
user | 后面跟用户名,查找属主owner相同的文件 |
group | 后面跟用户名,查找属组相同的文件 |
uid # | 查找用户uid是#的文件 |
gid # | 查找用户gid是#的文件 |
nouser | 查找没有属主owner的文件 |
nogroup | 查找没有属组group的文件 |
1.2.3基于文件类型查找
-type
f:普通文件
d:目录文件
l:链接文件
s:套接字文件
c:字符设备文件
b:块设备文件
p:管道文件
1.2.4基于文件大小查找
-size [+|-]#
#为文件大小
单位
c:字节
b:块(512字节)
w:字(2字节)
K:千字节
M:兆字节
G:吉字节
参数 | 描述 |
---|---|
# | (#-1,#] :大于#且大小不超过1个同样单位大小的文件 |
-# | [0,#-1):小于#-1的文件 |
+# | (#.00):大于#的文件 |
1.2.5基于时间查找
1.以天为单位
-atime [+|-]#:表示访问时间
-mtime [+|-]#:表示数据修改时间
-ctime [+|-]#:表示与元数据修改时间
参数 | 描述 |
---|---|
# | [#,#+1)第几天 |
-# | [0,#)多少天之内 |
+# | [#+1.∞)多少天之前 |
2.以分钟为单位
-amin [+|-]#:表示访问时间
-mmin [+|-]#:表示数据修改时间
-cmin [+|-]#:表示与元数据修改时间
参数 | 描述 |
---|---|
# | [#,#+1)第几分钟 |
-# | [0,#)多少分钟之内 |
+# | [#+1.∞)多少分钟之前 |
1.2.6基于权限查找
-perm
语法:
find -perm mode / 精准匹配
find -perm -mode / 满足一个就可以,或关系
mode----->>755 644 rwx
1.2.7基于搜索层级查找
-maxdepth level 最大搜索深度
find -maxdepth 2 / 从当前目录开始向下最多搜索2层,包括第二层
-mindepth level 最小搜索深度
find -mindepth 2 / 从当前目录向下的第二层目录开始搜索,不包括第二层
1.2.8组合条件
与:-a // 不加也默认为加了-a
或:-o //字面意思,一个或者另一个
非:-not 或者 ! //在所选范围外
1.3处理动作
-print 默认动作,把查找到的内容输出到屏幕上
-exec command {} \;:
将前面查找到的文件当做后面command(命令)的参数,{}表示前面find查找到的文件,后面的\;是结束符不能少
-ok command {} \;:与-exec用法一样,在执行后面command命令时会给出提示,要不要执行
-xargs:传递参数,“|xargs”将find查找到的文件一个一个的传递给后面的命令当做参数
-delete:直接删除查找到的文件,不询问
> file:将查找到的文件重定向到新的文件中
2示例
1.查找家目录下其他人有写权限的文件,取消其写权限
find /root -perm -002 -exec chmod o-2 {} \;
2.查找/data下权限是644且以.sh结尾的普通文间件,修改权限为755
find /data -perm 644 -name "*.sh" -exec chmod 755 {} \;
3.查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
find / -nouser -o -nogroup -atime -7
4.查找/etc目录下所有用户都没有写权限的文件
find /etc ! -perm 222 -ls
find /etc ! -perm 222 -exec ls {} \;
5.查找/etc目录下至少有一类用户没有执行权限的文件
find /etc ! -perm -111 -ls // -111代表三个1最少选一个