龙空技术网

Linux系统操作命令之find最佳实践

onme0 207

前言:

现在看官们对“centos中find”大概比较关注,兄弟们都想要剖析一些“centos中find”的相关文章。那么小编同时在网摘上搜集了一些关于“centos中find””的相关内容,希望同学们能喜欢,兄弟们一起来学习一下吧!

概述

find命令常用于查找特定文件,本期文章结合实际场景向各位小伙伴总结分享它的使用方法。

Tips:

测试操作系统:CentOS 8;

文件属性有哪些

Find命令可基于文件属性查找特定文件,因此,知悉文件属性也就顺理成章了。那么文件属性有哪些呢?一张图展示即可,如下图所示;

场景1:基于文件的类型标识查找文件

例如,查找/var/log/目录下,普通文件、链接文件和目录文件;

Tips:默认递归查找到该目录的子目录

#查找普通文件

[root@localhost ~]# find /var/log/ -type f

#查找链接文件

[root@localhost ~]# find /var/log/ -type l

#查找目录文件

[root@localhost ~]# find /var/log/ -type d

场景2:基于文件的权限分配查找文件

首先,创建一些不同用户权限的文件,如下图所示;

命令1:find -perm 220 -type f

命令1释义:在当前目录及子目录查找普通类型的文件,并且,该文件的权限需符合“文件所有者和文件所属组都具有“写”权限,其它用户无权限,符合这些条件但设置了其他权限位的文件(例如,如果有人可以执行该文件)将不匹配”的要求。

[root@localhost f_test]# find -perm 220 -type f

./f_220

[root@localhost f_test]#

命令2:find -perm -220 -type f

命令2释义:在当前目录及子目录查找普通类型的文件,并且,该文件的权限需符合“文件所有者和文件所属组都具有“写”权限,其它用户无权限,不考虑是否存在任何额外的权限位(例如可执行位)。例如,这将匹配具有模式0777的文件”的要求。

[root@localhost f_test]# find -perm -220 -type f

./f_664

./f_665

./f_220

./f_223

./f_222

./f_777

[root@localhost f_test]#

命令3:find -perm -222 -type f

命令3释义:在当前目录及子目录查找普通类型的文件,并且,该文件的权限需符合“文件所有者和文件所属组都具有“写”权限,其它用户具有“写”权限,不考虑是否存在任何额外的权限位(例如可执行位)”的要求。

[root@localhost f_test]# find -perm -222 -type f

./f_223

./f_222

./f_777

[root@localhost f_test]#

命令4:find -perm /220 -type f

命令4释义:当前目录及子目录查找普通类型的文件,并且,该文件的权限需符合“文件所有者或文件所属组具有“写”权限”的要求。

[root@localhost f_test]# find -perm /220 -type f

./f_664

./f_665

./f_202

./f_220

./f_223

./f_222

./f_777

[root@localhost f_test]#

命令5:find -perm /222 -type f

命令5释义:在当前目录及子目录查找普通类型的文件,并且,该文件的权限需符合“文件所有者或文件所属组或其它用户具有“写”权限”的要求。

[root@localhost f_test]# find -perm /222 -type f

./f_664

./f_665

./f_102

./f_202

./f_220

./f_223

./f_222

./f_777

[root@localhost f_test]#

命令6:find -type f -perm -444 -perm /222 ! -perm /111

命令6释义:在当前目录及子目录查找普通类型的文件,并且,该文件的权限需符合“文件所有者、文件所属组和其它用户都具有“读”权限并保证任意用户具有“写”权限而不具有“执行”权限”的要求。

[root@localhost f_test]# find -type f -perm -444 -perm /222 ! -perm /111

./f_664

[root@localhost f_test]#

场景3:基于文件的大小查找文件

首先,创建一些不同大小的文件,如下图所示;

命令1:find -type f -size 108M | xargs ls –lh

命令1释义:在当前目录及子目录查找普通类型的文件,并且,该文件的大小是“108MB”。

[root@localhost f_test]# find -type f -size 108M | xargs ls -lh

--w------- 1 root root 108M Jun 26 13:05 ./108/f_222

--w--w--w- 1 root root 108M Jun 26 11:41 ./f_222

[root@localhost f_test]#

命令2:find -type f -size +1G | xargs ls -lh

命令2释义:在当前目录及子目录查找普通类型的文件,并且,该文件的大小“大于1GB”。

[root@localhost f_test]# find -type f -size +1G | xargs ls -lh

-rwxrwxrwx 1 root root 1.6G Jun 26 11:39 ./f_777

[root@localhost f_test]#

命令3:find -type f -size +3c -size -20k | xargs ls -lh

命令3释义:在当前目录及子目录查找普通类型的文件,并且,该文件的大小“大于3字节小于20KB”。

[root@localhost f_test]# find -type f -size +3c -size -20k | xargs ls -lh

---x----w- 1 root root 12K Jun 25 16:36 ./f_102

-rw-r--r-- 1 root root 4 Jun 26 11:29 ./f_111

--w-----w- 1 root root 11K Jun 26 08:56 ./f_202

[root@localhost f_test]#

命令4:find -type f -size +60M | xargs du -hm | sort -rn

命令4释义:在当前目录及子目录查找普通类型的文件,并且,该文件的大小“大于60MB”。根据查找到符合条件的文件,再次查询获取文件的大小并按照倒序的方式显示。

[root@localhost f_test]# find -type f -size +60M | xargs du -hm | sort -rn

1627 ./f_777

139 ./f_665

108 ./f_222

108 ./108/f_222

[root@localhost f_test]#

场景4:基于文件的名字查找文件

命令1:find -type f -name "*222"

命令1释义:在当前目录及子目录查找普通类型的文件,并且,该文件名尾包含信息 “222”。

[root@localhost f_test]# find -type f -name "*222"

./f_222

./108/f_222

[root@localhost f_test]#

命令2:find -type f -name "?_222"

命令2释义:在当前目录及子目录查找普通类型的文件,并且,该文件名头匹配一个字符并包含信息 “_222”。

[root@localhost f_test]# find -type f -name "?_222"

./f_222

./108/f_222

[root@localhost f_test]#

命令3:find -type f -name "[0-9]*"

命令3释义:在当前目录及子目录查找普通类型的文件,并且,该文件名头包含信息 “数字”。

[root@localhost f_test]# find -type f -name "[0-9]*"

./1111.txt

[root@localhost f_test]#

命令4:find -type f -name "[a-z]*"

命令4释义:在当前目录及子目录查找普通类型的文件,并且,该文件名头包含信息 “字母”。

[root@localhost f_test]# find -type f -name "[a-z]*"

./f_664

./f_665

./f_102

./f_010

./f_202

./f_220

./f_223

./f_222

./f_777

./f_111

./108/f_222

./abc.c

[root@localhost f_test]#

命令5:find -type f -name \*

命令5释义:在当前目录及子目录查找所有普通类型的文件。

[root@localhost f_test]# find -type f -name \*

./f_664

./f_665

./f_102

./f_010

./f_202

./f_220

./f_223

./f_222

./f_777

[root@localhost f_test]#

场景5:基于文件创建的时间查找文件

当前时间点,如下所示;

[root@localhost log]# date

Mon Jun 26 15:20:32 CST 2023

[root@localhost log]#

命令1:find -type f -name "vmware-network*" -mtime +30 | xargs ls -l

命令1释义:在/var/log/目录及子目录查找普通类型的文件,并且,该文件名头包含信息 “vmware-network”且该“文件内容”30天前被修改。

[root@localhost log]# find -type f -name "vmware-network*" -mtime +30 | xargs ls -l

-rw------- 1 root root 719 May 25 13:07 ./vmware-network.2.log

-rw-------. 1 root root 719 May 25 10:41 ./vmware-network.3.log

-rw-------. 1 root root 741 May 24 14:54 ./vmware-network.4.log

-rw-------. 1 root root 719 May 24 14:02 ./vmware-network.5.log

[root@localhost log]#

命令2:find -type f -name "vmware-network*" -mtime -30 | xargs ls -l

命令2释义:在/var/log/目录及子目录查找普通类型的文件,并且,该文件名头包含信息 “vmware-network”且该“文件内容”30天内被修改。

[root@localhost log]# find -type f -name "vmware-network*" -mtime -30 | xargs ls -l

-rw------- 1 root root 741 Jun 21 16:12 ./vmware-network.1.log

-rw------- 1 root root 719 Jun 25 09:42 ./vmware-network.log

[root@localhost log]#

场景6:基于文件所属者或所属组查找文件

命令1:find -type f -user test | xargs ls -l

命令1释义:在当前目录及子目录查找普通类型的文件,并且,该文件的所属者是test。

[root@localhost f_test]# find -type f -user test | xargs ls -l

-rw-r--r-- 1 test root 4 Jun 26 11:29 ./f_111

-rwxrwxrwx 1 test Test 1705703150 Jun 26 11:39 ./f_777

[root@localhost f_test]#

命令2:find -type f -group Test | xargs ls -l

命令2释义:在当前目录及子目录查找普通类型的文件,并且,该文件的所属组是Test。

[root@localhost f_test]# find -type f -group Test | xargs ls -l

--w--w--w- 1 root Test 112539936 Jun 26 11:41 ./f_222

-rwxrwxrwx 1 test Test 1705703150 Jun 26 11:39 ./f_777

[root@localhost f_test]#

总结

结合具体的使用场景详细说明了find命令的使用方法,其它用法可通过命令man find查看。以上分享,希望各位小伙伴有所收获,欢迎各位点赞收藏和指正。

标签: #centos中find