find命令基础

find命令

find程序可以依据文件的各种属性在目录或者其子目录里查找,他是一种实时查找工具,通过遍历指定路径完成文件查找。

一.语法

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]
find [OPTION]… [查找路径] [查找条件] [处理动作]

查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕

二.通过查找条件使用find命令

1.指定搜索层级

-maxdepthlevel 最大搜索目录深度,指定目录为第1级
-mindepthlevel 最小搜索目录深度
示例:

[root@localhost etc]$find -maxdepth 3 | less 
.
./fstab
./crypttab
./mtab
./resolv.conf
./fonts
./fonts/conf.d
./fonts/conf.d/65-0-lohit-bengali.conf
./fonts/conf.d/20-unhint-small-dejavu-sans.conf
./fonts/conf.d/57-dejavu-sans.conf
./fonts/conf.d/65-0-lohit-kannada.conf
./fonts/conf.d/10-scale-bitmap-fonts.conf
./fonts/conf.d/57-paratype-pt-sans.conf
./fonts/conf.d/20-unhint-small-vera.conf
./fonts/conf.d/20-unhint-small-dejavu-serif.conf
./fonts/conf.d/25-no-bitmap-fedora.conf
./fonts/conf.d/57-dejavu-serif.conf
./fonts/conf.d/25-unhint-nonlatin.conf
./fonts/conf.d/66-ucs-miscfixed.conf
./fonts/conf.d/30-metric-aliases.conf
./fonts/conf.d/30-urw-aliases.conf
./fonts/conf.d/40-nonlatin.conf
./fonts/conf.d/45-latin.conf
./fonts/conf.d/49-sansserif.conf
./fonts/conf.d/50-user.conf
./fonts/conf.d/51-local.conf
./fonts/conf.d/60-latin.conf

maxdepth 搜索最大目录深度,数字3意思是最多只搜索到第3级目录不会再向下搜索了,
第3级目录是搜索的最终

[root@localhost etc]$find -mindepth 3 | less 

./fonts/conf.d/65-0-lohit-bengali.conf
./fonts/conf.d/20-unhint-small-dejavu-sans.conf
./fonts/conf.d/57-dejavu-sans.conf
./fonts/conf.d/65-0-lohit-kannada.conf
./fonts/conf.d/10-scale-bitmap-fonts.conf
./fonts/conf.d/57-paratype-pt-sans.conf
./fonts/conf.d/20-unhint-small-vera.conf
./fonts/conf.d/20-unhint-small-dejavu-serif.conf
./fonts/conf.d/25-no-bitmap-fedora.conf
./fonts/conf.d/57-dejavu-serif.conf
./fonts/conf.d/25-unhint-nonlatin.conf
./fonts/conf.d/66-ucs-miscfixed.conf
./fonts/conf.d/30-metric-aliases.conf
./fonts/conf.d/30-urw-aliases.conf
./fonts/conf.d/40-nonlatin.conf
./fonts/conf.d/45-latin.conf
./fonts/conf.d/49-sansserif.conf
./fonts/conf.d/50-user.conf
./fonts/conf.d/51-local.conf
./fonts/conf.d/60-latin.conf
./fonts/conf.d/65-0-ttf-arphic-uming.conf
./fonts/conf.d/65-fonts-persian.conf
./fonts/conf.d/65-nonlatin.conf
./fonts/conf.d/69-unifont.conf
./fonts/conf.d/80-delicious.conf
./fonts/conf.d/90-synthetic.conf
./fonts/conf.d/README

-mindepth 搜索最小目录深度,数字3意思是搜索是从第3级目录开始的,
然后搜索到最后子目录及子文件

2.根据文件名和inode查找
选项说明
-name“文件名称”:支持使用glob *, ?, [], [^]
-iname“文件名称”:不区分字母大小写
-inumn按inode号查找
-samefile name相同inode号的文件
-links n链接数为n的文件
-regex“PATTERN”以PATTERN匹配整个文件路径,而非文件名称

查看文件的inode号用到的命令是 ls -i
示例:

[root@localhost etc]$find -name passwd
./passwd
./pam.d/passwd

[root@localhost etc]$ls -i passwd
9674858 passwd
[root@localhost etc]$find -inum 9674858
./passwd

find -links n这里的这个链接数指的是硬链接,查看链接数应该用stat这个命令。
示例:

[root@localhost etc]$stat .  <----查看在etc目录下硬链接数
  File:.’
  Size: 8192            Blocks: 24         IO Block: 4096   directory
Device: 805h/2053d      Inode: 8409153     Links: 139  <--此处为硬链接数
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2019-08-31 16:17:52.042755794 +0800
Modify: 2019-08-31 11:41:58.651048832 +0800
Change: 2019-08-31 11:41:58.651048832 +0800
 Birth: -
[root@localhost etc]$find -links 10     <----查看在etc目录下硬链接数为10的目录
./pki
./rc.d
[root@localhost etc]$stat rc.d   <----查看在rc.d的目录硬链接数是否为10
  File: ‘rc.d’
  Size: 127             Blocks: 0          IO Block: 4096   directory
Device: 805h/2053d      Inode: 6984        Links: 10
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2019-08-31 20:02:30.612517189 +0800
Modify: 2019-08-06 22:50:15.685992906 +0800
Change: 2019-08-06 22:50:15.685992906 +0800
 Birth: -

以PATTERN匹配整个文件路径,匹配的字符串一定是文件的路径,支持正则表达

[root@localhost etc]$find -regex ".*/pas.*"
./openldap/certs/password
./passwd
./selinux/targeted/active/modules/100/passenger
./selinux/targeted/active/modules/100/passenger/cil
./selinux/targeted/active/modules/100/passenger/hll
./selinux/targeted/active/modules/100/passenger/lang_ext
./pam.d/passwd
./pam.d/password-auth-ac
./pam.d/password-auth
./passwd-
3.根据属主、属组查找
选项说明
-user USERNAME查找属主为指定用户(UID)的文件
-group GRPNAME查找属组为指定组(GID)的文件
-uid UserID查找属主为指定的UID号的文件
-gid GroupID查找属组为指定的GID号的文件
-nouser查找没有属主的文件
-nogroup查找没有属组的文件
# 查找/var目录下属主为root,且属组为mail的所有文件
[root@localhost ~]$find /var -user root -a -group mail
/var/spool/mail

#查找/var目录下不属于root、lp、gdm的所有文件
[root@localhost ~]$ find /var ! \( -user root -o -user lp -o -user gdm \) 

/var/tmp/abrt
/var/tmp/yum-mrlin-k1GJoC
/var/tmp/yum-mrlin-k1GJoC/x86_64
/var/tmp/yum-mrlin-k1GJoC/x86_64/7
/var/tmp/yum-mrlin-k1GJoC/x86_64/7/base
/var/tmp/yum-mrlin-k1GJoC/x86_64/7/base/gen
/var/tmp/yum-mrlin-k1GJoC/x86_64/7/base/packages
/var/tmp/yum-mrlin-k1GJoC/x86_64/7/base/repomd.xml
/var/tmp/yum-mrlin-k1GJoC/x86_64/7/base/cachecookie
/var/tmp/yum-mrlin-k1GJoC/x86_64/7/base/mirrorlist.txt
/var/tmp/yum-mrlin-k1GJoC/x86_64/7/extras
...
...
...
4.根据文件类型查找

-type TYPE:

选项说明
b块设备文件
c字符设备文件
d目录
f普通文件
l符号链接文件
s套接字文件
p管道文件
#通过find -type d查看etc下的目录
[root@localhost etc]$find -type d |head -n10
.
./fonts
./fonts/conf.d
./grub.d
./X11
./X11/fontpath.d
./X11/applnk
./X11/xinit
./X11/xinit/Xclients.d
./X11/xinit/xinitrc.d

#通过find -type f查看etc下的普通文件
[root@localhost etc]$find -type f | head -n10
./fstab
./crypttab
./resolv.conf
./fonts/conf.d/25-no-bitmap-fedora.conf
./fonts/conf.d/README
./fonts/fonts.conf
./grub.d/00_header
./grub.d/01_users
./grub.d/10_linux
./grub.d/20_linux_xen
5.根据操作符查找
组合条件:
与:-a
或:-o
非:-not, !

德·摩根定律:
(A) (B) = (AB)
(A) (B) = (AB)
6.根据权限查找
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
-MODE:每一类对象都必须同时拥有指定权限,与关系
0 表示不关注

精确查找匹配644的文件,再过滤出passwd验证

[root@localhost etc]$find . -perm 644 | grep passwd 
./passwd
./pam.d/passwd
./passwd-

[root@localhost etc]$ll passwd
-rw-r--r--. 1 root root 2279 Aug 18 12:26 passwd

只有当每个人都有写权限时

[root@localhost etc]$find . -perm -222 | head -n10

./mtab
./fonts/conf.d/65-0-lohit-bengali.conf
./fonts/conf.d/20-unhint-small-dejavu-sans.conf
./fonts/conf.d/57-dejavu-sans.conf
./fonts/conf.d/65-0-lohit-kannada.conf
./fonts/conf.d/10-scale-bitmap-fonts.conf
./fonts/conf.d/57-paratype-pt-sans.conf
./fonts/conf.d/20-unhint-small-vera.conf
./fonts/conf.d/20-unhint-small-dejavu-serif.conf
./fonts/conf.d/57-dejavu-serif.conf

只有当其它人(other)有读权限时

[root@localhost etc]$find . -perm -004 | head -n10 
.
./fstab
./mtab
./resolv.conf
./fonts
./fonts/conf.d
./fonts/conf.d/65-0-lohit-bengali.conf
./fonts/conf.d/20-unhint-small-dejavu-sans.conf
./fonts/conf.d/57-dejavu-sans.conf
./fonts/conf.d/65-0-lohit-kannada.conf

查找访问权限不是0600的文件和访问权限不是0700的子目录

[root@localhost etc]$find . \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \) | head -n10
.
./fstab
./resolv.conf
./fonts
./fonts/conf.d
./fonts/conf.d/25-no-bitmap-fedora.conf
./fonts/conf.d/README
./fonts/fonts.conf
./grub.d/00_header
./grub.d/01_users
7.根据文件大小来查找
-size [+|-]#UNIT
常用单位:k, M, G,c(byte)
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT[0,#-1]
如:-6k 表示[0,5k]
+#UNIT(#,)
如:+6k 表示(6k,)
8.根据时间戳
时间类型动作表达方式
访问时间Accessatime
修改时间Modifymtime
状态改动时间Changectime

通过stat命令查看etc目录的三个时间戳

[root@localhost etc]$stat /etc
  File:/etc’
  Size: 8192            Blocks: 24         IO Block: 4096   directory
Device: 805h/2053d      Inode: 8409153     Links: 139
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2019-08-31 16:17:52.042755794 +0800
Modify: 2019-08-31 11:41:58.651048832 +0800
Change: 2019-08-31 11:41:58.651048832 +0800
 Birth: -
以“天”为单位
-atime[+|-]#,
#: [#,#+1)
+#: [#+1,]
-#: [0,#)
-mtime
-ctime
以“分钟”为单位
-amin
-mmin

在这里插入图片描述
这里使用了一张鸟哥Linux私房菜里的一张图。

图中最右边为目前的时间,越往左边则代表越早之前的时间轴啦。由图我们可以清楚的知道:

+4代表大于等于5天前的档名:ex> find /var -mtime +4
-4代表小于等于4天内的档案档名:ex> find /var -mtime -4
4则是代表4-5那一天的档案档名:ex> find /var -mtime 4

find /usr -mtime -4 查找文件更新日时在距现在时刻4天以内的文件

find /usr -mtime +4 查找文件更新日时在距现在时刻5天以上的文件

find /usr -mtime 4 查找文件更新日时在距现在时刻4天以上5天以内的文件

示例:

查找文件更新日期在距现在时刻4天以内的文件

[root@localhost etc]$find . -mtime -4           
.
./resolv.conf
./selinux
./selinux/config
./tuned/active_profile
./tuned/profile_mode
./cups
./cups/subscriptions.conf.O
./cups/subscriptions.conf

查找文件更新日时在距现在时刻5天以上的文件

[root@localhost etc]$find . -mtime +4 | head -n10
./fstab
./crypttab
./mtab
./fonts
./fonts/conf.d
./fonts/conf.d/65-0-lohit-bengali.conf
./fonts/conf.d/20-unhint-small-dejavu-sans.conf
./fonts/conf.d/57-dejavu-sans.conf
./fonts/conf.d/65-0-lohit-kannada.conf
./fonts/conf.d/10-scale-bitmap-fonts.conf

查找文件更新日时在距现在时刻4天以上5天以内的文件

[root@localhost etc]$find . -mtime 4 

三.处理动作

动作说明
-print默认的处理动作,显示至屏幕
-ls类似于对查找到的文件执行“ls -l”命令
-delete删除查找到的文件
-fls file查找到的所有文件的长格式信息保存至指定文件中
-quit一旦匹配成功便退出
-ok COMMAND {} ;对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认(也就是会执行之前询问)
-exec COMMAND {} ;对查找到的每个文件执行由COMMAND指定的命令(不询问)

-print是默认选项,意即:

[root@localhost etc]$ find .
#相当于
[root@localhost etc]$ find . -print

-delete选项,例如find查找.bak文件,查找到后就删除

[root@localhost etc]$ find . -type f -name '*.bak' -delete

先写到这,后续再补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值