find文件查找

今日思维导图:
小胖学Linux day21~22:find文件查找_ide

find基础语法

 find [路径] [选项] [表达式] [动作]

find选项

按文件类型查找

-type
f:可编辑的文件
d:目录
l:软链接文件
b:块设备文件 磁盘,U盘 /dev/sda
c:字符设备文件 终端
s:socket 安全套接字文件
p:管道文件

find [路径] [选项]
例↓
[root@wudidesangege <sub>]\ find /run -type s
/run/vmware/guestServicePipe
/run/dbus/system_bus_socket

# 查看找出文件的详细信息↓
[root@wudidesangege </sub>]\ find /run -type s|xargs ls -l
srw-rw-rw-. 1 root root 0 Apr 16 21:43 /run/dbus/system_bus_socket
srwx------. 1 root root 0 Apr 16 21:43 /run/systemd/cgroups-agent

# 查询/etc/目录下所有目录,总共有多少个?
[root@wudidesangege ~]\ find /etc -type d|wc -l
3987

小胖学Linux day21~22:find文件查找_ide_02

按文件大小查找

-size
-:小于
+:大于
Num:精准但是又不精准的匹配

# 1.在/opt下创建1000个文件
# 2.使用find找出(/opt下小于1k的文件)并删除
[root@wudidesangege <sub>]\ touch /opt/{1..1000}wyk
[root@wudidesangege </sub>]\ ll /optaa/
total 0
-rw-r--r--. 1 root root 0 Apr 16 22:38 1000wyk
-rw-r--r--. 1 root root 0 Apr 16 22:38 100wyk

[root@wudidesangege <sub>]\ find /opt/ -size -1k|xargs rm -fr
[root@wudidesangege </sub>]\ ll /optaa/
total 0

# 1.在/opt下创建1000个文件
# 2.使用find找出(/opt下小于1k的文件)把它们全部移动到/tmp下
[root@wudidesangege <sub>]\ touch /opt/{1..1000}wyk
[root@wudidesangege </sub>]\ ll /optaa/
total 0
-rw-r--r--. 1 root root 0 Apr 16 22:38 1000wyk
-rw-r--r--. 1 root root 0 Apr 16 22:38 100wyk

[root@wudidesangege <sub>]\ find /opt/ -size -1k|xargs -i mv {} /tmp
[root@wudidesangege </sub>]\ ll /tmp
total 0
-rw-r--r--. 1 root root 0 Apr 16 22:41 569wyk
-rw-r--r--. 1 root root 0 Apr 16 22:41 56wyk

# xargs命令
-i:指定数据流的位置,将数据流放入{}的位置↓

小胖学Linux day21~22:find文件查找_ide_03

按文件名查找

## -name:严格区分大小写
[root@wudidesangege <sub>]\ ll
-rw-r--r--. 1 root root 0 Apr 16 22:52 wdswyk
-rw-r--r--. 1 root root 0 Apr 16 22:52 wdsWYK
-rw-r--r--. 1 root root 0 Apr 16 22:53 wyk
-rw-r--r--. 1 root root 0 Apr 12 23:29 wykbdsg55
-rw-r--r--. 1 root root 0 Apr 16 22:52 WYK

[root@wudidesangege </sub>]\ find /root/ -name 'wyk'
/root/wyk

[root@wudidesangege <sub>]\ find /root/ -name '*wyk*'
/root/wykbdsg55
/root/wdswyk
/root/wyk

[root@wudidesangege </sub>]\ find /root/ -name 'wyk*'
/root/wykbdsg55
/root/wyk

[root@wudidesangege <sub>]\ find /root/ -name '*wyk'
/root/wyk
/root/wdswyk

## -iname:不区分大小写
[root@wudidesangege </sub>]\ find /root/ -iname '*wyk*'
/root/wykbdsg55
/root/WYK
/root/wdswyk
/root/wdsWYK
/root/wyk

按文件时间查找

# 一个文件有以下三种时间
access time:atime
modify time:mtime
change time:ctime

-atime:文件访问时间差找
-mtime:文件内容创建,修改时间差找
-ctime:文件属性,修改时间差找

# Num:查找第N天的文件(不包括今天)
例↓
[root@wudidesangege <sub>]\ find /opt/ -mtime Num

# +Num:查找第N天之前的所有文件(不包括今天)
例↓
[root@wudidesangege </sub>]\ find /opt/ -mtime +Num

# -Num:查找从今天开始算,N天内的文件
例↓
[root@wudidesangege <sub>]\ find /opt/ -mtime -Num

# 查看三种时间
[root@wudidesangege </sub>]\ stat wdswyk
File: ‘wdswyk’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 33983385 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-04-16 22:58:23.526092736 +0800
Modify: 2022-04-16 22:58:23.526092736 +0800
Change: 2022-04-16 22:58:23.526092736 +0800
Birth: -

## 保留近七天的文件 # !:取反
[root@wudidesangege ~]\ find /opt/ ! -mtime -7|xargs rm -f

按照文件用户和组查找

-user:查找文件的属主
例↓
[root@wudidesangege <sub>]\ find / -user root

-nouser:文件没有属主用户的
例↓
[root@wudidesangege </sub>]\ find / -nouser root

-group:查找文件的属组
例↓
[root@wudidesangege <sub>]\ find / -nogroup root

-nogroup:文件没有属组的
例↓
[root@wudidesangege </sub>]\ find / -nogroup root

多条件组合查找

# 可将多个查找选项 组合在一起进行查找
例↓
[root@wudidesangege <sub>]\ find /opt/ -type f -user root
/opt/info.txt
/opt/info1.txt
/opt/disk

[root@wudidesangege </sub>]\ find /opt/ -size +1k -name disk
/opt/disk

按权限查找

-perm

## 权限精确查找
## -权限
# 每个权限位上,都要包含该数字权限的所有权限
例↓
[root@wudidesangege <sub>]\ ll /optaa/ #案例样板内容↓
total 0
--w--w--w-. 1 root root 0 Apr 16 23:35 1
-rw-rw-rw-. 1 root root 0 Apr 16 23:35 2
-rwxrwxrwx. 1 root root 0 Apr 16 23:35 3
-rwx-w--w-. 1 root root 0 Apr 16 23:35 4
-----w----. 1 root root 0 Apr 16 23:35 5

[root@wudidesangege </sub>]\ find /optaa/ -perm 222 -ls
33983386 0 --w--w--w- 1 root root 0 Apr 16 23:35 /optaa/1

[root@wudidesangege <sub>]\ find /optaa/ -perm 666 -ls
33983387 0 -rw-rw-rw- 1 root root 0 Apr 16 23:35 /optaa/2

# /权限
# 总共三个权限位,只要有一个权限位的权限被包含,就可以找到
例↓
[root@wudidesangege </sub>]\ find /optaa/ -perm /642 -ls
33983375 0 drwxr-xr-x 2 root root 51 Apr 16 23:35 /optaa/
33983386 0 --w--w--w- 1 root root 0 Apr 16 23:35 /optaa/1
33983387 0 -rw-rw-rw- 1 root root 0 Apr 16 23:35 /optaa/2
33983388 0 -rwxrwxrwx 1 root root 0 Apr 16 23:35 /optaa/3
33983389 0 -rwx-w--w- 1 root root 0 Apr 16 23:35 /optaa/4

属主权限位,有一个r或者有一个w就满足条件
属组权限位,有一个r就满足条件
其他用户权限位,有一个r就满足条件

按深度查找

-maxdepth
针对目录层级查找

# 查找/etc/目录下的所有1级和2级目录
例↓
[root@wudidesangege ~]\ find /etc/ -type d -maxdepth 2
/etc/
/etc/grub.d
/etc/pki

find动作

-print:打印查找到的内容到终端上(find命令默认就是打印结果 -print

-ls:查看文件的详细信息 |xargs ls -l 或者 ls -l $(find xxx) 或者 ls -l `find xxx`

-delete:删除查找到的文件(bug跟ls,ls看不见的,也删除不掉)并且只能删除空目录

其他删除方法: |xargs rm -fr 或者 rm -fr $(find xxx) 或者 rm -fr `find xxx`

[root@wudidesangege ~]\ find / -name 'etc' -delete
find: cannot delete ‘/run/initramfs/state/etc’: Directory not empty
find: cannot delete ‘/etc’: Directory not empty
find: cannot delete ‘/var/tmp/etc’: Directory not empty

-ok:找到文件后,执行后面的bash命令,询问是否要操作

find多条件

-a:和,并且(默认为-a)
-o:或者
!:取反