• Linux常用命令——find命令大全


    一、find命令常用功能

    1、find命令的基本信息如下。

    • 命令名称:find。
    • 英文原意:search for files in a directory hierarchy。
    • 所在路径:/bin/find。
    • 执行权限:所有用户。
    • 功能描述:在目录中搜索文件。

    2、按照文件名搜索

    1. [root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
    2. 选项:
    3. -name:按照文件名搜索
    4. -iname:按照文件名搜索,不区分文件名大小写
    5. -inum:按照inode号搜索
    6. #1.find命令基本使用
    7. [root@192 ~]# find . -name abcde
    8. ./abcde
    9. 提示:搜索位置越大,消耗系统资源越多。
    10. 在生产服务器上搜索的时候,尽量不在根目录下搜索,把搜索的范围尽量控制在最小。
    11. #2.-iname
    12. [root@192 ~]# find . -iname abcde
    13. ./ABCDE
    14. ./abcde
    15. 提示:i表示忽略的意思,就是忽略大小写。
    16. #3.-inum
    17. 之前我们通过文件名可以查看到文件的i节点号
    18. [root@192 ~]# ls -i abcde
    19. 1043285 abcde
    20. 这里通过find命令的-inum选项可以实现,通过i节点号查看文件的名字。
    21. [root@192 ~]# find . -inum 1043285
    22. ./abcde
    23. 这两个是一对命令,记忆比较方便。

    扩展:
    之前我们说过,硬连接是非常不好识别链接,源文件和硬链接文件只是引用计数增加了,其他信息是无法识别的。如下:

    1. [root@192 ~]# ls -il abcde /tmp/abcde_h
    2. 1043285 -rw-r--r--. 2 root root 0 12月 30 18:24 abcde
    3. 1043285 -rw-r--r--. 2 root root 0 12月 30 18:24 /tmp/abcde_h

    我们可以看到硬连接文件和源文件的i节点号是一样的。我们可以通过i节点号来查询是否有多个文件与之对应。Linux系统中是一个文件对应一个i节点号,如果有多个文件对应一个i节点号,说明存在硬连接关系。

    1. [root@192 ~]# find / -inum 1043285
    2. find: “/proc/39609/task/39609/fd/5”: 没有那个文件或目录
    3. find: “/proc/39609/task/39609/fdinfo/5”: 没有那个文件或目录
    4. find: “/proc/39609/fd/5”: 没有那个文件或目录
    5. find: “/proc/39609/fdinfo/5”: 没有那个文件或目录
    6. /tmp/abcde_h
    7. /root/abcde

    我们可以看到,通过上边这种方式是可以确定两个文件是硬链接关系。但是我们在平时使用Linux系统的时候,还是不推荐创建文件的硬链接。
    补充:上边代码块的前4行是干扰项。这是在整个根目录搜索的时候,会搜索到proc目录,而proc目录是内存,find命令在运行的时候,就会消耗一定的内存资源,这4行就是find命令在运行时产生的临时文件。同时这种临时文件找到也是立刻消失的,所以会出现每行最后的没有那个文件或目录

    3、按照文件大小搜索

    1. [root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
    2. 选项:
    3. -size[+|-]大小:按照指定大小搜索文件
    4. 这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件。

    find 命令的单位:

    1. [root@localhost ~ ] # man find
    2. -size n[cwbkMG]
    3. File uses n units of space.The following suffixes can be used:
    4. #这是默认单位,如果单位为b或不写单位,则按照512 Byte搜索。
    5. ' b'for 512-byte blocks(this is the default if no suffix is used)
    6. #搜索单位是c,按照字节搜索。
    7. 'c'for bytes
    8. #搜索单位是w,按照双字节(中文)搜索。
    9. 'w'for two-byte words
    10. #按照KB单位搜索,必须是小写的k。
    11. 'k'for Kilobytes(units of 1024 bytes)
    12. #按照MB单位搜索,必须是大写的M
    13. 'M'for Megabytes(units of 1048576 bytes)
    14. #按照GB单位搜索,必须是大写的G
    15. ' G'for Gigabytes(units of 1073741824 bytes)

    举例:

    1. 1.查看root目录下文件信息
    2. [root@DevOps ~]# ll -h
    3. 总用量 48K
    4. -rw-r--r--. 1 root root 17 19 17:08 abc
    5. -rw-------. 1 root root 1.3K 1223 20:46 anaconda-ks.cfg
    6. -rw-r--r--. 1 root root 28K 1223 20:46 install.log
    7. -rw-r--r--. 1 root root 7.4K 1223 20:45 install.log.syslog
    8. 2.在当前目录下搜索文件大小为28k的文件
    9. [root@DevOps ~]# find . -size 28k
    10. ./install.log
    11. 3.在当前目录下搜索文件大小大于1k的文件。
    12. [root@DevOps ~]# find . -size +1k
    13. .
    14. ./install.log
    15. ./anaconda-ks.cfg
    16. ./install.log.syslog
    17. 注意:具体单位字母看上边列表。
    18. 4.注意一个小问题
    19. 如果按文件大小搜索,并且文件的大小没有写单位,默认是按b(字节)进行查找的,但是我们可以看到下面并没有查询处abc文件。
    20. [root@DevOps ~]# ll -h
    21. 总用量 48K
    22. -rw-r--r--. 1 root root 17 19 17:08 abc
    23. -rw-------. 1 root root 1.3K 1223 20:46 anaconda-ks.cfg
    24. -rw-r--r--. 1 root root 28K 1223 20:46 install.log
    25. -rw-r--r--. 1 root root 7.4K 1223 20:45 install.log.syslog
    26. [root@DevOps ~]# find . -size 17
    27. [root@DevOps ~]#
    28. 原因是:
    29. 看上边的单位说明` ' b'for 512-byte blocks(this is the default if no suffix is used)`
    30. 说b默认单位是按照512byte查找,这是一个默认的属性值,如上边我们输入的17,就是17*512b的结果进行计算,然后进行查找。
    31. `c`是按照字节搜索。
    32. [root@DevOps ~]# find . -size 17c
    33. ./abc

    4、按照修改时间搜索

    Linux中的文件有访问时间(atime)数据修改时间(mtime)状态修改时间(ctime)这三个时间,我们也可以按照时间来搜索文件。(注意:如果以time结尾的时间单位,默认单位时间是天。)

    1. 命令格式:
    2. [root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
    3. 选项:
    4. -atime[+|-]时间:按照文件访问时间搜索
    5. -mtime[+|-]时间:按照文件数据修改时间搜索
    6. -ctime[+|-]时间:按照文件状态修改时间搜索
    7. 提示:也有-amin、-mmin等时间选项,时间单位为分钟。

    用mtime数据修改时间来举例,重点说说+-时间的含义。
    我们画一个时间轴,来解释一下

    说明:
    -5:代表5天内修改的文件。
    5:代表前5~6天,那一天修改的文件。
    +5:代表6天前修改的文件。

    5、按照权限搜索

    1. 命令格式:
    2. [root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
    3. 选项:
    4. -perm: 权限模式:查找文件权限刚好等于“权限模式”的文件
    5. -perm: -权限模式:查找文件权限全部包含“权限模式”的文件
    6. -perm: +权限模式:查找文件权限包含“权限模式”的任意一个权限的文件

    举例:

    1. 1.查看文件夹内容
    2. [root@DevOps test]# ll
    3. 总用量 0
    4. -rw-r--r--. 1 root root 0 19 18:17 abc
    5. -rw-r--r--. 1 root root 0 19 18:17 def
    6. 2.按照权限查找文件
    7. [root@DevOps test]# find . -perm 644
    8. ./def
    9. ./abc
    10. 注:644代表权限rw-r--r--
    11. 3.修改文件def权限为600,然后进行+、-查找
    12. [root@DevOps test]# chmod 600 def
    13. [root@DevOps test]# ll
    14. 总用量 0
    15. -rw-r--r--. 1 root root 0 19 18:17 abc
    16. -rw-------. 1 root root 0 19 18:17 def
    17. 查找
    18. [root@DevOps test]# find . -perm +444
    19. .(代表当前目录不用考虑)
    20. ./def
    21. ./abc
    22. [root@DevOps test]# find . -perm -444
    23. .
    24. ./abc
    25. [root@DevOps test]#
    26. 说明:
    27. 如果是+,代表所有者,所属组,其他人这三个权限中,只要有一个权限大于搜索的权限,就能够找到该权限。
    28. 如果是-,代表三个权限都要满足每项权限,如abc文件的权限是644,每个权限全都大于444,所以被搜索到。
    29. 总结说,`+`就是三个权限满足一个即可,`-`三个全满足才可以。

    find的权限搜索,能理解就好,+-工作中一般用不太多。

    6、按照所有者和所属组搜索

    1. 命令格式:
    2. [root@localhost ~ ] #find 搜索路径 [选项] 搜索内容
    3. 选项:
    4. -uid 用户ID:按照用户ID查找所有者是指定ID的文件
    5. -gid组ID:按照用户组ID查找所属组是指定ID的文件
    6. -user用户名:按照用户名查找所有者是指定用户的文件
    7. -group组名:按照组名查找所属组是指定用户组的文件
    8. -nouser:查找没有所有者的文件

    举例:

    1. 按照所有者查找文件
    2. [root@DevOps test] # find . -user root
    3. .
    4. ./def
    5. ./abc

    提示:

    (重要)上边这种方式并不常用,在按照所有者和所属组搜索时,“-nouser”选项比较常用,主要用于查找垃圾文件。
    (重要)只有一种情况例外,那就是外来文件。比如光盘和U盘中的文件如果是由Windows复制来的(也就是文件是由windows建立的),在Linux中查看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者(由其他系统打的源码包)。
    除了外来文件,Linux系统下所有的文件都应该有所有者,否则至少是一个垃圾文件。是需要用户来处理掉的。


    而关于所有者和所属组搜索常用的命令为:

    1. [root@DevOps test] # find / -nouser
    2. find: “/proc/5244/task/5244/fd/5”: 没有那个文件或目录
    3. find: “/proc/5244/task/5244/fdinfo/5”: 没有那个文件或目录
    4. find: “/proc/5244/fd/5”: 没有那个文件或目录
    5. find: “/proc/5244/fdinfo/5”: 没有那个文件或目录
    6. 注意:这四行之前说过,是find命令在执行时,在内存中自己产生的临时文件,执行完既消失。
    7. 上边命令结果证明Linux系统中没有垃圾文件。

    7、按照文件类型搜索

    1. 命令格式:
    2. [root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
    3. 选项:
    4. -type d:查找目录
    5. -type f:查找普通文件
    6. -type l:查找软链接文件

    举例

    1. 查找当前文件中的目录
    2. [root@DevOps ~]# find . -type d
    3. .
    4. ./test
    5. 其他选项同理

    8、逻辑运算符

    find命令支持一些复杂的搜索方式:逻辑与、逻辑或、逻辑非。

    1. 命令格式:
    2. [root@localhost ~ ] #find 搜索路径 [选项] 搜索内容
    3. 选项:
    4. -a:and逻辑与
    5. -o:or逻辑或
    6. -not:not 逻辑非
    • 1)-a:and逻辑与
      find命令也支持逻辑运算符选项,其中-a代表逻辑与运算,也就是-a的两个条件都成立,find搜索的结果才成立(其中有一个不成立都不行)。举个例子:
    1. #在当前目录下搜索大于2KB,并且文件类型是普通文件的文件
    2. [root@localhost ~ ] # find . -size +2k -a -type f
    • 2)-o:or逻辑或
      -o选项代表逻辑或运算,也就是-o的两个条件只要其中一个成立,find命令就可以找到结果。例如:
    1. #在当前目录下搜索文件要么是cangls的文件,要么是bols的文件,两个都可以搜索到。
    2. [root@localhost ~ ] # find . -name cangls -o -name bols
    3. ./cang1s
    4. ./bols
    • 3)-not:not 逻辑非
      -not是逻辑非,也就是取反的意思。举个例子:
    1. #在当前目录下搜索文件名不是cangls的文件
    2. [root@localhost ~] # find . -not -name cangls
    3. # 下面!的写法和上边-not是一个意思,都是逻辑非运算符。
    4. [root@localhost ~] # find . ! -name cangls
    5. (注意!左右两边都有要空格)


    9、其他选项
    这里我们主要讲解两个选项“-exec”和“-ok”,这两个选项的基本作用非常相似。我们先来看看“-exec”选项的格式。

    • 1)-exec选项
    [root@localhost ~ ] # find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \;
    说明:
    1.基本格式,只要写 -exec,命令最后一定要写 \;
    2.作用是,把命令1的搜索结果( find 搜索路径 [选项] 搜索内容),作为命令2的操作对象。(其实可以理解成把命令1的操作结果,放在命令2后边的{ }中,然后用命令2去搜索{ }中的内容。)
    3.在命令2种不识别别名,就是在命令2种不能用别名,如果 ll命令
    • 2)-ok选项
      “-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令2会直接处理,而不询问;“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。
    1. 在删除自己产生的一些零时文件,且很久不用的时候,可以用下面命令删除。
    2. [ root@ localhost ~] # find /var/log -mtime +10 -ok rm -rf 0\;
    3. rm.../var/log/samba/old〉?n
    4. rm.../var/log/sssd〉?n
    5. 〈 rm...I/var/log/ntpstats〉?n
    6. rm.../var/log/cups〉?n

    重点:配套学习资料和视频教学

    那么在这里我也精心准备了上述大纲的详细资料在下方链接如下

     

  • 相关阅读:
    VLAN笔记
    python 打包可执行文件-pyinstaller详解
    读高性能MySQL(第4版)笔记21_读后总结与感想兼导读
    人工神经网络实验:第一次上机
    如何用VS2015新建一个空白项目
    系统篇: ubuntu 下 sudo 命令执行慢的解决办法
    (三十二)大数据实战——Maxwell安装部署及其应用案例实战
    [DeepLearning] 线性回归的实现Pytorch
    图Graph的存储、图的广度优先搜索和深度优先搜索(待更新)
    【Leetcode】820. Short Encoding of Words
  • 原文地址:https://blog.csdn.net/m0_59868866/article/details/126217785