linux中find命令的使用

Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。下面通过介绍一些常用的选项。


目录:

1、locate命令
2、find命令
3、xargs命令
4、示例说明

1、locate命令:

(1)使用方法及常见选项

locate - find files by name

usage:locate [OPTION]… PATTERN…

option:
-i:不区分大小写;
-n N :只列举前N个匹配结果;
-r :使用regex来搜索文件

(2)locate命令选项的优缺点

    1、locate命令搜索速度快;
    2、搜索的是文件的全路径,不仅仅是文件名;
    3、可能只搜索用户具备读取和执行权限的目录;  
    4、模糊搜索非实时搜索,它是以文件索引数据库进行搜索的/var/lib/mlocate/mlocate.db。  
    此索引库是在系统较为空闲的情况下进行自动进行更新,管理员可以直接手动更新,使用命令updatedb;
    [root@centos7 ~]#updatedb
    注意:locate搜索需要遍历整个跟文件系统,极其消耗资源。

2、find命令:

(1) 实时查找工具,通过遍历整个指定路径完成文件查找;

(2)工作特点:

    •查找速度略慢
    •精确查找
    •实时查找
    •可能只搜索用户具备读取和执行权限的目录

(3)usage:

find [OPTION]… [查找路径] [查找条件] [处理动作]

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

查找条件:

-maxdepth LEVEL:最大的搜索目录深度;
-mixdepth LEVEL:最小的搜索目录深度;

示例:
find -maxdepth 2 -mindepth 3 -name “*.conf”

-name “文件名称” :支持使用通配符;
-iname “文件名称”:忽略字符大小写;
-inum n:按节点数查找;
-samefile name:相同inode号的文件;
-link n 连接数为n的文件;
-regex “PATTERN”:以pattern匹配整个文件路径字符串,而不仅仅是文件名称;

根据文件从属关系查找:

-user USERNAME:查找属主为指定用户的文件;
-group GROUPNAME:查找属组为指定组的文件;
-uid USERID:查找属主为指定UID的文件;
-gid GOURPID:查找属组为指定GID的文件;
-nouser:查找没有属主的文件;
-nogroup:查找没有属组的文件;
注意:查找条件默认为并且的关系;

根据文件类型进行查找

-type TYPE:
-f: 普通文件
-d: 目录文件
-l: 符号链接文件
-s:套接字文件
-b: 块设备文件
-c: 字符设备文件
-p: 管道文件

根据文件大小来查找:

-size [+|-]#UNIT
常用单位:k, M, G,c(byte) #UNIT: (#-1, #]
如:6k 表示(5k,6k] -#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)

组合条件测试

-a 与
-o 或
! -not 非
德· 摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)

根据文件大小查找:

-size [+|-] #
-size # (#-1,#]
-size +# (#,无穷)
-size -# [0,#-1]

根据时间戳查找:

-atime [+|-] #
-atime # [#+1,#)
-atime +# [#+1,无穷]
-atime -# [0,#)

根据文件权限查找:

-perm [/|+] MODE
MODE 精确查找
/MODE 任何一类用户的权限属于就能匹配;
-MODE 每一类用户必须拥有指定权限就能匹配;
注意:在-或/情况下,0表示不关心有没有权限;


处理动作

-print :默认的处理动作,显示至屏幕上;
-ls:列出搜索到的详细信息;类似于“ls -l”命令的结果;
-delete:删除查找到的文件;
-fls file :查找的长格式信息输出在file文件中,相当于重定向;
-ok COMMAND {}\; :对查找到的每个文件执行COMMAND命令;此命令会交互式要求用户每次确认是否执行命令;
-exec COMMAND {}\; :对查找的文件执行COMMAND命令,但不会让用户确认是否执行此命令;
{}:用于引用查找到的文件名称自身;

    注意:由于find命令查找的符合条件的文件一次性的传递给后面的命令;由于有时候执行的结果过于长,达到系统的限定值,所有就有了xargs命令的诞生;

3、xargs

    由于很多命令不支持管道来传递参数,而时常有这个必要这样的操作,所有xargs命令就诞生;
    作用:xargs用于产生某个命令的参数,可以读入stdin的数据,并且以空格符或者回车将stdin的数据分割成参数;

例如:如果想创建1000000个文件:
[root@centos7 ~]#touch f{1..1000000}
-bash: /usr/bin/touch: Argument list too long
如果这样操作的话,系统会告诉你参数太长。利用xargs这个命令很好的解决了这个问题;
[root@centos7 ~]#echo f{1..1000000} |xargs touch
[root@centos7 ~]#echo $?
0
利用这个命令就解决了刚刚的问题,对于一些数据量大的就很好的解决了。


4、示例:

介绍了这么多的命令,通过一些示例让大家进行深刻的理解:

1、查找/var目录下属主为root,且属组为mail的所有文件
[root@centos7 ~]#find /var -user root -a -group mail #find命令中默认是有-a的功能;
/var/spool/mail
/var/spool/mail/root

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

3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
[root@centos7 ~]#find /var -mtime -7 -not -user root -a -not -user postfix

4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
[root@centos7 ~]#find -nouser -o -nogroup -a -atime -7

5、查找/etc目录下大于1M且类型为普通文件的所有文件
[root@centos7 ~]#find /etc -size +1 -type f -ls

6、查找/etc目录下所有用户都没有写权限的文件
[root@centos7 ~]#find /etc/ -not -perm /222

7、查找/etc目录下至少有一类用户没有执行权限的文件
[root@centos7 ~]#find /etc/ -not -perm /111

8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
[root@centos7 ~]#find /etc/init.d/ -perm -111 -a -perm -002

补充:
如果不想查找某一个路径,方法如下:
find /etc -path ‘/etc/sane.d’ -a -prune -o -name “*.conf”
-prune 删除
find /etc \(–path ‘/etc/sane.d’ –o –path ’/etc/fonts’ \) -a prune –o name “*.conf”

如果 -path “test” 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path “test” -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值