前面我们已经到过正则表达式的grep工具,接下来让我们了解另一个个文本查找搜索工具find
一 find特性
与grep的模糊查找不同
1 find 是实时查找
2 find 查找的速度慢
3 find 可以做到精确匹配,自然比较耗费资源,不要大范围的find
二 命令格式
find [options] [查找路径][查找条件][处理]
查找路径:默认为当前目录
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示到显示器 -print
详细阐述
1 查找条件
1.1 -name "文件名称"
###查找 /etc目录下 所有以shadow开头的文件 支持字符串通配符
1.2 -iname "文件名称":忽略大小写查找
例如 #find /etc/ -name "A*"
###查找/etc目录下 所有以小写字母a开头的文件,忽略大小写
1.3 -user UserName:根据属主查找
linux用户创建updatedb.conf文件
###查找以属主为linux的文件
1.3.1 -uid 用户ID号:根据用户ID查找
1.4 -group GroupName:根据属组查找
###查找属组为root的所有文件
1.4.1 -gid 基本组号:根据属组ID查找
###查找gid为0的用户的/bin目录下的所有文件 gid为0的用户为root用户
1.5 -nouser:根据没有属主的条件查找
-nogroup:根据没有属组的条件查找
删除用户后,再次查看/tmp目录下该用户创建的文件属性
#ll /tmp
你会发现该文件的属主属组为502 而非linux用户
此时我们通过 -nouser ;-nogroup来查找
-nouser -nogroup 的用途:当一个用户被删除后,有其残留的文件,此时可以这样 查找并删除
1.6 一些强大的组合条件
-a :“与” 同时满足
##查找不属于用户root 也不属于linux用户的文件
等同于find /tmp -not \( -user linux -a -user root \)
-o : 或,有一个满足
###以上命令表示 :在/tmp目录中查找出 属主不是linux的文件 或者查找出名字不是 以.txt结尾的文件。
(也可以理解为查找出除 属主为linux或者名字是以.txt结尾的文件 以外的文件)
=find /tmp -not \( -user linux -o -name "*.txt")\
您看是不是一样 哈哈,仔细琢磨下,我刚琢磨过来
-not,!:非,取反 相反则满足
2 -type 根据文件类型查找
f 普通文件 #find /tmp -type f 查找tmp目录下的普通文件
b 块设备文件
s 套子节
d 目录文件
p 管道符
l 链接符
3 -size 根据文件大小查找
-size [+-] #Unit
#Unit 是单位:k,M,g --kb,MB,GB
所以查找的是属于一个单位该单位的范围内的--是不是比较绕?继续看
--- 如果没有[+-]则默认的代表=
例如 2M 表示大于1M小于等于2M 的意思
查找出3kb< #《4kb的文件
4 根据时间戳查找(比较麻烦自习看哦)
-a --access time 访问时间
-m --modify time 修改时间
-c --change time 改变时间
4.1 以天为单位 time
格式:以访问时间为例
-atime [+|-]#
+ 表示(#+1)天之外被访问过
- 表示#天之内被访问过
无符号 表示在 (#+1) > x >=#天的时间段被访问过;
上图
查看/var/log 一天外被修改过的文件 注意 -mtime +1 的意思,不明白继续返回去看
4.1.1 以分钟为单位 min
-amin
-mmin
-cmin
用法同以天为单位time
5 根据权限查找
格式:-perm [+|-] MODE
MODE : 没有+-的时候 表示= 精确匹配
+MODE: 任何一类用户的任何一位权限匹配;常用于查找某类用户的某特定权限是否存在;
-MODE: 每类用户的指定要检查的权限为都匹配
例如:find /etc/ -not -perm +222
先来看 -perm +222
表示:任何一类用户的任何一位权限匹配就匹配 -->属主、属组、others 其中任何一 个匹配2(写的权限)就匹配查找
-not -perm +222
表示:每类用户的指定要检查的权限都匹配才匹配-->属主、属组、others 都匹配 2(写的权限)才匹配查找
那么find /etc/ -not -perm -222呢?
表示 用户、用户组、others的任何一个没有写权限的 就匹配查找
6 处理动作
-print:打印在标准输出上
-ls 以长格式输出各文件信息
-exec COMMAND \; 对查找到的文件执行指定的命令
-ok COMMAND \; 交互式的-exec
| xargs COMMAND
注意:find把查找到的所有文件一次性的传递给-exec所指定的命令
# find /tmp -perm -003 -type f -exec ls -ld {} \;
查找出/tmp目录下 所有符合其他用户有读且执行权限 的普通文件,并调用 ls -ld 命令 执行出来
简直是太绕了~~~
PS:望大神多提意见,错误的地方请指出。我很菜但是我很努力.