文本查找工具find

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


你可能感兴趣的:(find,which,locate)