which:查找二进制或执行命令路径
[root@localhost ~]# which free 结果: /usr/bin/free
locate:非实时的 模糊查询 每日更新
(通过一个内置数据库,系统文件在数据库中有一个映射,瞬间查找前一天夜里自动更新的目标文件)
-b 匹配基名
-c 统计有多少符合条件
updatedb 手动更新
find:实时、文件遍历、精确匹配、速度略慢
-a :与
-o :或
-not:非 优先级最低,结合使用要使用分组 \( \)
-fls /PATH/TO/SOMEFILE find之后将匹配到的结果存入某文件
-ok COMMAND {} 交互式引用-ok之前的结果
-exec COMMAND{} \; :直接引用-exec前面的结果 注意结尾的“;”
基于文件名查找:
find /tmp -name 'passwd*' -ls ----匹配文件名为passwd后面跟任意字符
find /tmp -iname 'passwd*' -ls ----不区分大小写
基于属主、属组、UID查找:
find /tmp -user mysql -ls ----匹配/tmp下属主为mysql的文件 find /tmp -group mysql -ls ---- 匹配/tmp下属组为mysql的文件
查找没有属主的文件:
find /tmp -nouser
删除没有属主的文件:
find /tmp -nouser -exec rm{} \; ---- -exec 非交互式执行 {}引用前面结果
基于文件类型查找:
find /etc/ -type f/d/l/s/b/c/p ----查找类型为普通、目录、链接、套接字等类型 文件
根据文件大小查找:(如果要找2k的文件 1-2k都是2k)
find /etc -size 2k -ls ----查1-2k的文件 find /etc -size -2k -ls ----查0-1k的文件 find /etc -size +3k -ls -a -size -9k -ls ----查大于3k并小于9k的文件
基于时间戳查找:
公式:第#天被改动 #;[#,#-1) ; #天内被改动 -#:(#,0] ; #天前被改动 +#:(00,#-1]
理解:当前时间3月9号21点,查询三天前的文件,查询出的文件时间应为3月5号21点到负无穷的时间,因为第三天前,不包括第三天,(今天之前,就是昨天的23点59分59秒)
find /var/log -mtime +3 -type f -ls----> 查询三天前的普通文件
理解:当前时间3月9号21点,查询三天内的文件,查询出的文件应为3月6号21点到3月9号21点的内容,对比公式查看
find /var/log -time -3 -type f -ls ---->查询三天内被修改的普通文件
理解:当前时间3月9号21点,查询第三天的文件,查询出的文件应为3月6号21点到3月7号21点的内容,对比公式查看理解
find /var/log -mtime 3 -type f -ls ----> 查询第三天被修改的普通文集那
基于权限查找:
-perm
MODE :精确权限匹配
/MODE :(u,g,o)对象的权限中只要能有一位相同就可匹配
-MODE :每一类都需要匹配拥有
find /tmp -perm /400 ----> 匹配任何一类哟读权限就可匹配
find /tmp -type f -perm /001 -ls ---->查看目录下哪些为普通文件且其他用户有执行权限
实战练习:
找/var目录下属主为root,且属组为mail的所有文件或目录
find /var -user root -a -group mail -ls
找/usr目录下不属于root、bin、或hadoop的所有文件或目录
find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
找/etc目录下最近一周内其内容修改过,同时属主不为root,也不是hadoop的文件或目录
find /etc -mtime -7 -not \( -user root -o -user hadoop \) -ls
找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
find / \( -nouser -o -nogroup \) -atime -7 -ls
找/etc目录下大于1M且类型为普通文件的所有文件,并以兆为单位显示出来
find /etc -size +1M -type f -exec ls -lh {} \;
找/etc目录下所有用户都没有写权限的文件
find /etc -not -perm /222 -type f -ls
找/etc目录下至少有一类用户没有执行权限的文件
find /etc -not -perm -111 -type f -ls
找/etc/init.d/目录下,所有用户都有执行权限,且其他用户有写权限的文件
find /etc/init.d -perm -113 -type f -ls
以读秒的方式查询/tmp下,60秒内被访问的文件
watch -n1 "find /tmp -amin -60 -type f"
用脚本实现,每天晚上4点半,找出/data/log/nginx下的该格式“nginx-test ×××.log”的测试日志文件,如果该日志大于2M,则将其删除,删除后,把删除的文件名称,记录到/tmp目录下rm.log文件中
30 4 * * * find /data/log/nginx -name 'nginx-test*.log' -size +2M -exec -fls /tmp/rm.log \; echo ` ` > /tmp/rm.log