find命令

 
---------------------------------------------------------------------------------
归纳:
文件名查找:
find ./ -name "passwd" 查找 当前目录下的passwd 文件 (名字得完全匹配,包括后缀)
find / -name "*passwd" 根目录下的以passwd结尾,开头未知的 文件
find /etc -name "shadow*" /etc目录下的以shadow开头,结尾未知的 文件
find / var -name "*nginx*" /var目录下的文件名中含有nginx字符串的 文件

根据文件的属主属组查找:
自测 -group 和 -user 后边的 “=”都不需要
find ./ -group zhangpf -user zhangpf 当前目录下属主属组都为zhangpf的文件
find /home/zhangpf -user=zhangpf -group=root -name "*passwd*" /home/zhangpf目录下属主为zhangpf属组为root,文件名中包 含passwd的文件
find / -nouser -nogroup 根目录下没有属组和属主的文件

根据文件类型进行查找:
find /tmp -type s 查找/tmp下的套接字文件
find /var -type s -name "*sock*" 查找/var下的套接字文件,且文件名中含有sock
find /etc/ -type l 查找/etc下的符号链接文件

根据文件大小进行查找:
# 查找/root下大于 100 M的文件并用 'ls -lh' 命令显示其属性 find /root -size +100M -print | xargs ls -lh ?????????????????????????????
# 查找/root下大于50M且小于100M的文件并列出其属性信息 find /root -size +50M -a -size -100M -print | xargs ls -lh ?????????????????????????????

根据文件的时间进行查找:
find / -mtime 0 从现在开始到24小时之前(24小时内)有过改动的文件全部列出来
find /var -mtime 4 寻找四天前的那一天被改动的文件
find /var -mtime -4 四天之内被改动过的文件
find . -cmin +10 -print | xargs ls -cl 查找当前文件夹下10分钟之内被修改的文件,并列出ctime信息
find /etc -newer /etc/passwd 寻找/etc下面的文件日期(mtime)比/etc/passwd新的文件
find ~ -newer file1 !-newer file2 -print 查找某个比文件file1新且比file2旧 的文件 ( ~代表家目录,命令有问题 )

根据文件所属的权限查找:
find . -perm /u+w,g+w 文件属主属组都有写权限的,只要匹配一项就可以
find . -perm /u=w,g=w 文件属主权限为读,或属组权限为读的文件
find . -perm / 220 文件属性为220(属组或属主为可执行)的文件 # find . -perm - 444 -perm / 222 ! -perm / 111 find . -perm -a+r -perm /a+w ! -perm /a+x

其它相关:
未详细查看

----------------------------------------------------------------------------------


find命令

1. find命令特点
  • 实时查找
  • 文件遍历
  • 精确匹配
  • 可以使用正则表达式模糊查询
  • 速度较慢(缺点)
2. 根据文件名查找
可以使用正则匹配的方式进行模糊查询,查找指定文件夹下的匹配的文件或文件夹。
# 当前目录下的passwd 文件 find ./ -name "passwd" (名字得完全匹配,包括后缀)
# 根目录下的以passwd结尾,开头未知的 文件 find / -name "*passwd"
# /etc目录下的以shadow开头,结尾未知的 文件 find /etc -name "shadow*"
# /var目录下的文件名中含有nginx字符串的 文件 find / var -name "*nginx*"


3. 根据文件的属主属组查找
可以根据文件或文件夹的属主属组查找文件,还可以查找没有属主属组的文件然后进行处理。
  • -user:属主
  • -group:属组
  • -uid:根据文件的uid实现精确查找
  • -gid:根据文件的gid实现精确查找
  • -nouser,-nogroup:对于已经被删除用户名或用户组的文件,系统只会保留相应的gid,uid号码用以标识,而如果此时新建一个用户名就用可能取得某些文件的管理权限,出于安全的考虑,所以要对这些文件进行查找,保证安全

# 当前目录下属主属组都为zhangpf的文件 find ./ -group=zhangpf -user=zhangpf
# /home/zhangpf目录下属主为zhangpf属组为root,文件名中包含passwd的文件 find /home/zhangpf -user=zhangpf -group=root -name "*passwd*"

# 根目录下没有属组和属主的文件 find / -nouser -nogroup
- 没有属组属主的文件,如果当有新的用户添加进来之后,如果新用户的gid或uid跟这些文件原来的gid或uid一样,那么这些文件就会属于这个新的用户,这也是一个安全隐患,一定要注意


4. 根据文件类型进行查找
根据文件类型进行查找:-type [文件类型]
f:普通文件 
d:目录文件 
l:符号链接文件 
s:套接字文件 
b:块处理设备文件 
c:字符设备文件 
p:管道文件

# 查找/tmp下的套接字文件 find /tmp -type s
# 查找/var下的套接字文件,且文件名中含有sock find /var -type s -name "*sock*"
# 查找/etc下的符号链接文件
find /etc/ -type l


5. 根据文件大小进行查找
-size [+或-] [文件大小] 
查找比SIZE还要大(+)或者小(-)的文件
文件大小的表示: 
c:代表byte,k:代表1024bytes,M:代表1024k,G:表示1024M

# 查找/root下大于 100 M的文件并用 'ls -lh' 命令显示其属性 find /root -size +100M -print | xargs ls -lh ?????????????????????????????
# 查找/root下大于 50 M且小于 100 M的文件并列出其属性信息 find /root -size +50M -a -size -100M -print | xargs ls -lh ?????????????????????????????


6. 根据文件的时间进行查找
文件的时间有3种,
mtime (Modify time,文件内容变更)、
ctime (Change time,文件属性变更)、
atime (Access time,文件 被访问 ),
以下详细介绍
mtime:当文件的“内容数据” 更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性与权限 
ctime:当文件的状态发生变化时,就会更新这个数据,比如:权限与属性发生变化 
atime:当文件的 内容被读取 时,就会更新这个时间

以天为单位查找:-ctime,-atime,-mtime 
以分钟为单位查找:-cmin,-amin,-mmin

-newer用在分辨两个文件之间的新旧关系,默认以mtime为准 
对比文件的新旧程度查找:-newer,-anewer,-cnewer
+4:代表大于等于五天前的文件名:find /var -mtime +4 
-4: 代表小于等于四天内的文件名 
4:代表4~5天那一天的文件
示例:
# 从现在开始到24小时之前有过改动的文件全部列出来 find / -mtime 0
# 寻找四天前的那一天被改动的文件 find /var -mtime 4
# 四天之内被改动过的文件 find /var -mctime -4
# 查找当前文件夹下10分钟之内被修改的文件,并列出ctime信息 find . -cmin +10 -print | xargs ls -cl # 寻找/etc下面的文件日期(mtime)比/etc/passwd新的文件 find /etc -newer /etc/passwd
#查找某个比文件file1新且比file2旧 的文件 find ~ -newer test1 !-newer test2 -print (~表示家目录)


7. 根据文件所属的权限查找
根据文件权限进行查询:-perm [option] permission :权限
  1. -perm mode 
精确查找,文件权限正好等于mode,mode为类似于chmod的属性值
  1. -perm -mode 
每一类对象都必须拥有其指定的权限标准
  1. -perm /mode 
任何一类(u,g,o)对象的权限只要有一位匹配即可
示例:
# 文件属主属组都有写权限的,只要匹配一项就可以 find . -perm /u+w,g+w
# 文件属主权限为读,或属组权限为读的文件 find . -perm /u=w,g=w
# 文件属性为220(属组或属主为可执行)的文件 find . -perm / 220 # find . -perm - 444 -perm / 222 ! -perm / 111 find . -perm -a+r -perm /a+w ! -perm /a+x


8. 多条件查找
命令的组合用法 
- 与:-a 
- 或:-o 
- 非:-not,-!
下方没有详细学习

9. 其它相关
对于find查找出来的文件或文件夹,有时候需要做一些处理,下面介绍一下相关的命令
9.1. | xargs command ;
例:somecommand |xargs -item command 
不带command ,默认的使用echo 输出
用途: 
- 1.构造参数列表并运行命令,即将接收的参数传递给后面的command 命令执行 
- 2.将多行输入转换为单行 (特殊功效) 
优点: 
- 1.将输入参数整理后,去除换行符,以一个列表形式处理 
- 2.避免参数过长引发的问题,使用xargs -n 参数适当控制,对于经常产生大量输出的命令如find、locate和grep来说非常有用
XARGS 一般是和管道一起使用:
XXcomand | xargs -x comand initial-args


-x 代表选项 
选项: 
-p:操作具有可交互性,每次执行comand都交互式提示用户选择 
-i:-i选项告诉 xargs 可以使用{}代替传递过来的参数, 建议使用-I,其符合POSIX标准 
# 查找当前文件夹下10分钟之内被修改的文件,并列出ctime信息 find . -cmin + 10 - print | xargs ls -cl

9.2. -delete:删除查找到的文件
# 查找后显示,然后删除查找到的文件 find . -cmin - 10 - print - delete


9.3. -fls /path/to/somefile
查找到的文件的长格式信息保存至指定的文件夹
find / var / log -ctime - 4 -fls /tmp/test/abc

9.4. -ok command {} \ ;
对查找的文件执行由command指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认,与下面的-exec类似。
9.5. -exec command {} \;
对查找到的每个文件执行由command执行的命令 
{}:用于引用查找到的文件名称自身;
注意:find传递查找到的文件至后面指定的命令时,查找到的所有符合的文件一次性传递给后面的命令
find -exec 与xargs 区别  
例:
find . -name "*.txt" -exec rm {} \ ;find . -name "*.txt" | xargs rm {}


-exec 
1.参数是一个一个传递的,传递一个参数执行一次rm 
2.文件名有空格等特殊字符也能处理 
-xargs 
1.一次将参数传给命令,可以使用-n控制参数个数 
2.处理特殊文件名需要采用如下方式:
find . -name "*.txt" print0 |xargs - 0 rm {}

示例
1.查找/var 目录下属主为root,且属组为mail的所有文件或目录并列出
find /var -user root -group mail -ls
2.查找/usr 目录下不属于root、bin、hadoop的所有文件或目录
find /usr -not -user root -not -user hadoop -not -user bin -lsfind /usr -not \( -user root -o -user hadoop -o -not -user bin \) -ls
3.查找/etc目录下最近一周内其内容修改过,同时属主不为root,也不为hadoop的文件或目录
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
4.查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
find / -ctmie -7 -a -nouser -a nogroup
5.查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc -size +1M -a -type f -ls
6.查找/etc目录下所有用户都没有写权限的文件
find /etc -not -perm /222 -ls
7.查找/etc目录下至少有一类用户没有执行权限的文件
find /etc -not -perm -111 -ls
8.查找/etc/init.d/目录下,所有用户都有执行权限,且其他用户有写权限的文件
find /etc/init.d -prem /113 -ls
9.查找/tmp/test/y目录下在100分钟内修改过的文件,并删除
find /tmp/test/y -cmin -100 -print | xargs /bin/rm -frfind /tmp/test/y -cmin -100 -deletefind /tmp/test/y -cmin -100 -ok rm -fr '{}' \; #需要询问find /tmp/test/y -cmin -100 -exec rm -fr '{}' \;
10.查找/var/log目录下为文件类型且在10分钟内被修改过的文件,并列出
find /var/log -type f -cmin -10 -exec ls -l '{}' \;
11.查找/var/log下的在四天内被修改过的文件并把它们的长格式信息保存至/tmp/test/abc
find /var/log -ctime -4 -fls /tmp/test/abc
12.查找test.c并备份为test.c.bak
find . -name "text.c" -exec cp {} {}.bak \;
13.查找文件名为[]中的任意字符的文件
使用了通配符进行正则匹配
find ./ -name "[ab]"
14.查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)
find ./ -type d -ok ls {} \;
15.查找空文件或空目录
find ./ -empty
16.查找空文件并删除
find ./ -empty -type f -print -delete
17.查找名字符合正则表达式的文件,注意前面的‘.*’(查找到的文件带有目录)
find ./ -regex .*so.*\.gz
18.查找时忽略一个目录或者多个目录
find ./ ! -path "./output/*" ! -path "./output1/*" -type f | xargs grep ""
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值