加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

LINUX学习:find命令详解

发布时间:2020-12-13 17:49:55 所属栏目:Linux 来源:网络整理
导读:《LINUX学习:find命令详解》要点: 本文介绍了LINUX学习:find命令详解,希望对您有用。如果有疑问,可以联系我们。 前言 我们的系统中有很多文件,在我们日常使用过程中,经常必要查找一些符合某条件的文件,如果一个一个文件夹翻下来的话,无疑效率是很慢的,

《LINUX学习:find命令详解》要点:
本文介绍了LINUX学习:find命令详解,希望对您有用。如果有疑问,可以联系我们。

前言

我们的系统中有很多文件,在我们日常使用过程中,经常必要查找一些符合某条件的文件,如果一个一个文件夹翻下来的话,无疑效率是很慢的,接下来,就给大家介绍两个命令,能让我们在系统中快速的查找到我们所必要的文件.

两个命令分离为locate和find,locate很简单,我们就简单介绍一下,本文主要还是介绍find的具体用法.

一、locate命令

locate命令实际上是查询数据库中的内容,所以搜索的速度很快,但是想要使用locate命令查询,我们就要事先构建好索引,索引的构建过程必要遍历整个根文件系统,极消耗资源.下面我们来说一下locate的具体用法和特点

1.1 locate用法

敕令:locate

格局:locate KEYWORD

选项:? -i? 不区分年夜小写的搜索

? ? ? ? -n N? ? 只列举前N个匹配项目

? ? ? ? -r? 支持正则表达式

1.2 locate特点

  • ? 查找速度快
  • ? 模糊查找
  • ? 非实时查找
  • ? 搜索的是文件的全路径,不仅仅是文件名
  • ? 可能只搜索用户具备读取和执行权限的目录

1.3 locate查询弥补

使用locate查询,实际是对数据库储存内容的列出,在查找前会判定目录有没rx权限,如果没有权限,依然不列出.此操作在数据库中进行,而非实时查询.如果我们想在不退出登录的情况下更新数据库,则要用到updatedb命令,该命令更新很慢,具体时间视你的系统中有多少文件而定.

二、find命令

由于locate的非精确查找和非实时查找的特性,导致locate用的不多.而find命令支持实时查找,拥有众多查找选项,是linux上查找最常用的,但是缺点也是比拟明显: 如果文件数量很多的话,查找起来很慢.但那又如何,find依然是最有用且最常用的Linux查找命令.

2.1 find命令特点

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

2.2 find用法

命令:find

格式:find [OPTION]... [查找路径] [查找条件] [处置动作]

查找路径:指定具体目的路径;默认为当前目录?

查找条件:指定的查找尺度,可以文件名、大小、类型、权限等尺度进行;默认为找出指定路径下的所有文件

处置动作:对符合条件的文件做操作,默认输出至屏幕

2.3 find选项

2.3.1指搜索层级查找

-maxdepth level 最年夜搜索深度

-mindepth level? 最小搜刮深度

Example:

?
 1  [root@ keer app]#find -maxdepth 7
 2 
 3 .
 4 
 5 ./dev1
 6 
 7 ./dev1/dev2
 8 
 9 ./dev1/dev2/dev3
10 
11 ./dev1/dev2/dev3/dev4
12 
13 ./dev1/dev2/dev3/dev4/dev5
14 
15 ./dev1/dev2/dev3/dev4/dev5/dev6
16 
17 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
18 
19 [root@ keer app]#find -mindepth 7
20 
21 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
?

2.3.2 按文件名和inode号查找

-name “文件名称”? 基于名称的准确查找

-iname? 基于名称忽略年夜小写的精确查找

-inum n? 基于inode号查找(只显示名称,长列出则加-ls)

-samefile? 基于雷同inode号的查找(查找硬链接)

-links n? 硬链接为n的文件

-regex “PATTERN”? 支持正则(默认只支持规模,不支持通配符)

-regextype egrep -regex ? ?支持egrep同尺度的正则

Example:

?
 1 [root@ keer app]#find -name hello
 2 
 3 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
 4 
 5 [root@ keer app]#find -iname HELLO
 6 
 7 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
 8 
 9 [root@ keer app]#find -inum 1310721
10 
11 ./dev1
12 
13 [root@ keer app]#find -inum 1310721 -ls
14 
15 1310721    4 drwxr-xr-x   3 root     root         4096 Aug  8 16:47 ./dev1
16 
17 #因为find -regex匹配的是整个路径,所以前面必需加.*才可以
18 
19 [root@ keer app]#find . -regex ".*[a-z].*"
20 
21 ./dev1
22 
23 ./dev1/dev2
24 
25 ./dev1/dev2/dev3
26 
27 ./dev1/dev2/dev3/dev4
28 
29 ./dev1/dev2/dev3/dev4/dev5
30 
31 ./dev1/dev2/dev3/dev4/dev5/dev6
32 
33 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
34 
35 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
?

2.3.3 根据属主查找

-user 用户名? 基于文件owner的查找

-uid userid 基于文件uid的查找

-nouser 查找没有owner的文件

Example:

?
 1 [root@ keer app]#find -user root
 2 
 3 .
 4 
 5 ./dev1
 6 
 7 ./dev1/dev2
 8 
 9 ./dev1/dev2/dev3
10 
11 ./dev1/dev2/dev3/dev4
12 
13 ./dev1/dev2/dev3/dev4/dev5
14 
15 ./dev1/dev2/dev3/dev4/dev5/dev6
16 
17 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
18 
19 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
20 
21 [root@ keer app]#find -uid 0
22 
23 .
24 
25 ./dev1
26 
27 ./dev1/dev2
28 
29 ./dev1/dev2/dev3
30 
31 ./dev1/dev2/dev3/dev4
32 
33 ./dev1/dev2/dev3/dev4/dev5
34 
35 ./dev1/dev2/dev3/dev4/dev5/dev6
36 
37 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
38 
39 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
40 
41 [root@ keer app]#find -nouser
42 
43 ./aaa
?

2.3.4 依据属组查找

-group 组名 基于文件group的查找

-gid groupid 基于文件gid的查找

-nogroup 查找没有group的文件

Example:

?
 1 [root@ keer app]#find -group root
 2 
 3 .
 4 
 5 ./dev1
 6 
 7 ./dev1/dev2
 8 
 9 ./dev1/dev2/dev3
10 
11 ./dev1/dev2/dev3/dev4
12 
13 ./dev1/dev2/dev3/dev4/dev5
14 
15 ./dev1/dev2/dev3/dev4/dev5/dev6
16 
17 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
18 
19 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
20 
21 [root@ keer app]#find -gid 0
22 
23 .
24 
25 ./dev1
26 
27 ./dev1/dev2
28 
29 ./dev1/dev2/dev3
30 
31 ./dev1/dev2/dev3/dev4
32 
33 ./dev1/dev2/dev3/dev4/dev5
34 
35 ./dev1/dev2/dev3/dev4/dev5/dev6
36 
37 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
38 
39 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
40 
41 [root@ keer app]#find -nogroup
42 
43 ./aaa
?

2.3.5依据文件类型查找

-type TYPE:

f: 通俗文件

d: 目次文件

l: 符号链接文件

s:套接字文件

b: 块装备文件

c: 字符装备文件

p: 管道文件

Example:

?
 1 [root@ keer app]#find -type f
 2 
 3 ./aaa
 4 
 5 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
 6 
 7 [root@ keer app]#find -type d
 8 
 9 .
10 
11 ./dev1
12 
13 ./dev1/dev2
14 
15 ./dev1/dev2/dev3
16 
17 ./dev1/dev2/dev3/dev4
18 
19 ./dev1/dev2/dev3/dev4/dev5
20 
21 ./dev1/dev2/dev3/dev4/dev5/dev6
22 
23 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
?

2.3.6组合查找

  • ? 查找前提:

与:-a(可省略)

或:-o? 非:-not,!

  • ? 德·摩根定律:

(非 A) 或 (非 B) = 非(A 且 B)

(非 A) 且 (非 B) = 非(A 或 B)

Example:

1 !A -a !B = !(A -o B)
2 
3 !A -o !B = !(A -a B)

2.3.7 按文件年夜小查找

-size [+|-]#UNIT 根据文件年夜小来查找

常用单元:k,M,G,c(byte)

#UNIT: (#-1,#]如:6k 表现(5k,6k]

-#UNIT:[0,#-1]如:-6k 表现[0,5k]

+#UNIT:(#,∞)如:+6k 表现(6k,∞)

更直观的可以从下图中看出:

?

2.3.8 按时间戳查找

  • ? 以“天”为单元

-atime [+|-]#

#UNIT: [#,#+1) 例:3 表现前3天到4天

-#UNIT:[#+1,∞]? 例:-3 表现4天以前

+#UNIT:[0,#)? 例:+3 表现三天之内

-mtime

-ctime

  • ? ? 以“分钟”为单元

-amin

-mmin

-cmin

? ? 更直观的可以从下图中看出:

2.3.9 按权限查找

-perm

mode:准确权限匹配

? ? ? ? ? +mode[/mode] 任何一类(u,g,o)工具的权限中只要能一位匹配即可(或关系).(“+”从CentOS7开始淘汰)

? ? ? ? ? -mode 每一类对象都必需同时拥有指定权限(与关系).

注:0 表现不关注.

Example:

?? find -perm 755会匹配权限模式正好是755的文件

?? 只要当随意率性人有写权限时,find -perm /222就会匹配

?? 只有当每小我都有写权限时,find -perm -222才会匹配

?? 只有当其它人(other)有写权限时,find -perm -002才会匹配(/002也可)? ??

2.4 find弥补

2.4.1 处理动作

? ? -print 默认

? ? -delete 直接删除所查找到的文件,不扣问.

? ? -ls 长列出所查找到的文件

? ? -fls file 将查找到的文件长列出导入到指定文件.

? ? ? ? 共同重定向使用(> file)

? ? -ok command ; 对查找到的文件当做下一敕令的参数去执行(交互式确认)

-exec command ; 对查找到的文件当做下一敕令的参数去执行(非交互式)

注:使用-ok和-exec时,必需以“ ;”结尾

Example:

1、备份以“.conf”结尾的文件,并添加.orig扩大名

 find-name “*.conf” -exec cp {} {}.orig ;

2、在你的主目录中寻找可被其它用户写入的文件,并撤消这些文件其他用户的写权限

 find ~ -perm -002   -exec chmodo-w {} ;

2.4.2 参数替换xargs

在我们使用的过程中,由于很多命令不支持管道符“|”来传递参数,但是在我们的日常工作中有这个需要,于是,就出现了xargs命令.xargs用于产生某个命令的参数,可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分割成为 arguments.在这里我们需要注意的是,文件名或者其他意义的名词内含有空格符的情况.

当然,有些命里不能接受过多参数,这样命令可能会执行失败,这种情况也可以用xargs来办理.

Example:

1、寻找以f开首的文件,并删除.

 ls f* |xargs     rm

2、探求/sbin下所属者权限位为满的文件,并长列出.

 find /sbin -perm +700 | xargs ls –l

?

三、小练习

  说了这么多,我们来做一些练习练练手吧~活学活用能力更好的掌握喏?(?????)?

1、查找/var目录部属主为root,且属组为mail的所有文件

 find /var -user root -group mail -ls

2、查找/var目次下不属于root、lp、gdm的所有文件

 find /var ! ( -user root -o -user lp -o -user gdm ) -ls

3、查找/var目录下最近一周内其内容改动过,同时属主不为root、也不是postfix的文件

 find /var -mtime +7 ! ( -user root -user postfix ) -ls

4、查找当前系统上没有属主或属组,且最近一个周内曾被拜访过的文件

 find / -nouser -o -nogroup -atime +7 -ls

5、查找/etc目录下年夜于1M且类型为普通文件的所有文件

 find /etc/ -size +1M -type f -ls

6、查找/etc目次下所有用户都没有写权限的文件

 find /etc/ ! -perm /222 -ls

7、查找/etc目次下至少有一类用户没有执行权限的文件

 find /etc/ ! -perm -111 -ls

8、查找/etc/init.d目次下,所有用户都有执行权限,且其它用户有写权限的文件

 find /etc/init.d/ -perm -113 -ls

  以上.如有不敷之处还请大家多多指教喏?(?>?<?)?

Linux查找find敕令详解?

Linux下的文件查找敕令——find?

Linux文件查找敕令之locate与find?

Linux文件搜索敕令 find?

5分钟学会find敕令

find命令根本使用一览

Linux根基知识:find命令的使用

本文永远更新链接地址

欢迎参与《LINUX学习:find命令详解》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读