当前位置 > it书童 > linux > 正文
推荐小册
java高效编程
怎样更高效地用 java 编程

juc并发工具库
java并发编程工具库

设计模式
设计模式

jvm调优
jvm调优

rabbitmq实战
rabbitmq实战

redis实战
redis实战

Keepavlied高可用集群
Keepavlied高可用集群

nginx入门到实战
nginx入门到实战

java调试
java调试中遇到的各种坑

java输入输出流
java输入输出流

linux 命令 find

linux it书童 2019-10-05 09:37:31 0赞 0踩 744阅读 0评论

Find 命令是 linux 中最常用且重要的命令之一,Find 命令用于检索文件所在的位置,可以根据多种参数组合进行检索:文件名称,文件权限,文件属组,文件类型,文件大小等。

虽然 man find 手册有关于find的详细说明,可缺乏实例的说明文档显得干巴巴,对初学者很不友好。导致初学者对于find产生这样的印象:“我知道find很强大,但不知道用在什么场景,该怎么用”。

再强大的工具,只有会用,用得好,才能体现出其价值。

基于此,本文将用实例讲解find命令常用场景:

基本使用

  • -name 指定文件名
$ find /etc -name passwd
/etc/cron.daily/passwd
/etc/pam.d/passwd
/etc/passwd

find会对指定路径进行递归查找

  • -iname 忽略大小写
$ find . -iname test.txt
./TesT.txt
./Test.txt
./test.txt
  • -type d 查找目录
$ find . -type d -name dir1
./dir1
  • -type f 查找文件
$ find . -type f -name test.php
./test.php
  • 查找某一类文件
$ find . -type f -name "*.php"
./test.php
./test1.php
./test2.php
  • 查找所有空文件
$ find /tmp -type f -empty
  • 查找所有空目录
$ find /tmp -type d -empty
  • 查找所有隐藏文件
$ find . -type f -name ".*"

* 表示通配符

根据权限查找

  • 查找权限为777的文件
$ find . -type f -perm 777 -print

-print 将结果打印

  • 查找权限不为777的文件
$ find . -type f ! -perm 777

! 反选

  • 查找可执行文件

即查找所有用户都拥有x权限的文件

$ find . -type f -perm /a=x
  • 找到777权限的文件并将其改为644
$ ll
-rwxrwxrwx 1 root root 0 9月  17 22:01 test

$ find -type f -perm 777 -print -exec chmod 644 {} \;
./test

$ ll                                                 
-rw-r--r-- 1 root root 0 9月  17 22:01 test

查找并执行命令

  • 查找并删除单一文件
$ find . -type f -name "test" -exec rm -f {} \;
  • 查找并删除多个文件
$ find . -type f -name "*.txt" -exec rm -f {} \;

根据属主/属组查找文件

$ find /etc -user senlong -name passwd

$ find /etc -user root -name passwd   
/etc/cron.daily/passwd
/etc/pam.d/passwd
/etc/passwd

$ find /etc -group root -name passwd
/etc/cron.daily/passwd
/etc/pam.d/passwd
/etc/passwd

根据文件时间查找

  • 50天前修改过的文件
$ find . -mtime 50
  • 大于50天小于100天前修改过的文件
$ find . -mtime +50 -mtime -100

根据文件大小查找

  • 查找大小为50M的文件
$ find / -size 50M
  • 查看大小为50M至100M的文件
$ find / -size +50M -size -100M
  • 查找大于100M的log文件并删除
$ find / -type f -name "*.log" -size +100M -exec rm {} \;

练习

  • 查找/var目录下属主为root,且属组为mail的所有文件或目录
find /var -user root -group mail
  • 查找/usr目录下不属于root,bin或hadoop的所有文件或目录
find /usr -not -user root -a -not -user bin -a -not -user hadoop
find /usr -not \( -user root -o -user bin -o -user hadoop\)
  • 查找/etc目录下最近一周内其内容修改过,同时属主不为root,也不是hadoop的文件或目录
find /etc -mtime -7 -a -not -user root -a -not -user hadoop
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \)
  • 查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
find / -nouser -a -nogroup -a -atime -7
  • 查找/etc目录下大于1M且类型为普通文件的所有文件或目录
find /etc -size +1M -type f
关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/246/linux-command-find