Linux文件查找的四个指令亚洲城ca88手机版官网,Linux命令之find命令详解

亚洲城ca88手机版官网 3
亚洲城ca88手机版官网

文件查找,用户高级权限,IP地址配置,条件测试;

Linux命令之find命令详解

概览:在Linux中使用文件系统时,经常会有这查找文件的需要。那么如何按照我们的需求去找出相应的文件。在这里我推荐两个命令,locate命令和find命令。此篇博文主要向大家介绍find命令的用法。

那么为什么不讲locate而只讲find命令?在这里,我有必要解释一下这两个命令的工作机制。

一、locate命令工作机制

在linux系统中会事先构建好一个文件索引数据库用于给locate查询,来找到符合用户需求的文件。这个数据库是由Linux系统自动进行为维护和更新的。所以这不是实时查找,举个例子,当你在使用过程中新建了一个文件,而工作了一段时间你忘了这个文件具体在哪里放着,你想找到这个文件,那么就需要查找,如果用locate来查找的话,此时数据库并没有实时更新。当然你也可以用updatedb命令来手动更新系统的数据库,但更新数据库的代价比较大,会增加系统消耗。此时,我们就推荐另一个查找命令——find命令。

二、find命令工作机制

find命令是Linux系统中的实时查找文件工具,它是通过遍历用户指定起始路径下文件系统层级结构来完成文件查找,即查找你指定目录下的所有文件及其子目录的文件。

三、find命令的工作特性

1、查找速度略慢。

2、实现精确查找。

3、实时查找。

四、find命令使用方法

使用格式:find [OPTIONS] [查找起始路径] [查找条件] [处理动作]

查找起始路径:指定具体搜索目标地起始路径;默认为当前目录。

查找条件:用户指定的查找标准(表达式),例如文件的文件名、大小、类型、从属

关系、权限等;如不指定,则查找出当前目录下的所有文件。

处理动作:对符合查找条件做出的操作,例如删除等处理操作;如不指定,默认为输

出至标准输出。

查找条件规范:

表达式:选项和测试

·1、测试:结果是布尔型(“true”,“false”)

(1)根据文件名查找:

选项:

-name “pattern”:根据被模式匹配到的文件名进行查找。

-iname “pattern”:根据被模式匹配到的文件名进行查找。忽略字符大

小写。

注意:此处的模式(pattern)是根据bash的globbing风格来查找。

-regex “pattern”:基于正则表达式模式来查找文件,匹配的是整个路径

而非文件名。

(2)根据文件的从属关系进行查找

选项:

-user USERNAME:查找从属于指定用户的文件

-group GROUPNAME: 查找从属于指定用户组的文件

-uid UID:查找属主指定的UID的所有文件

-gid GID:查找属组指定的GID的所有文件

-nouser :查找没有属主的文件

-nogroup:查找没有属组的文件

注意:针对特定的某一用户被删除之后,从属于这一用户的文件则会变为无属

主、无属组的文件,此时文件从属于原先此用户的用户ID和组ID。

(3)根据文件的类型进行查找。

选项:

-type TYPE:

f:普通文件

d:目录文件

l:符号链接文件

b:块设备文件

c:字符设备文件

p:管道文件

s:套接字文件

(4)根据文件的大小进行查找

选项:

-size [+|-] NUMBER 单位 默认单位为字节

[+|-] NUMBER K

[+|-] NUMBER M

[+|-] NUMBER G

注:+ 表示大于,- 表示小于,无则表示精确

注意:1、精确是指(NUMER-1,NUMBER]的范围,不能比它小太多,不能比它大。

2、- 大于的范围是[0,#-1],即比它小1以下的大小。

3、+ 大于的范围是(NUMBER,∞)。

(5)根据时间戳查找:

选项:

以“天”为单位,向过去的时间倒回。

-atime [+|-] NUMBER:访问时间

NUMBER(精确时间) : [NUMBER,NUMBER-1]

-NUMBER(最近NUMBER天内): (NUMBER,0)

+NUMBER(超过NUMBER天): (∞,NUMBER-1)

-mtime [+|-] NUMBER:修改时间(文件内容)

-ctime [+|-] NUMBER:改变时间(元数据)

以“分钟”为单位: (与上雷同)

-amin [+|-] NUMBER

-mmin [+|-] NUMBER

-cmin [+|-] NUMBER

例如:查找/etc目录下最近一周内其内容修改过的文件

~]# find /etc/ -mtime -7

(6)根据权限查找

选项:

-perm [/|-] mode

mode : 精确权限匹配:

-mode :全部用户(u,g,o)的权限中的每一位(r,w,

x)都符合条件即满足查找条件,9位权限之间是”与”关系。

/mode :任何一类用户(u,g,o)的权限中的任何一位(r,w,

x)符合条件即满足(9位有一位符合即可)9位权限是”或”关系。

例如:1、查找/etc/目录下对于至少有一类用户有执行权限的文件。

~]# find /etc/ -perm /111

2、查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有

写权限的普通文件。

~]# find /etc/init.d/ -perm -113 -type f

~]# find /etc/init.d/ -perm -222 -a -perm 002 -type f

·2、组合测试:

与(and):-a, 默认组合多个条件时的逻辑

或(or):-o

非:-not

例如:1、查找/etc目录下超过一周其内容被修改过,且文件大小不超过5M.

~]# find /etc/ -mtime -7 -a -not -size -5M

2、查找/etc目录下所有用户都没有写权限的普通文件。

思路:反向解析题意即至少有一类用户有写权限;

~]# find /etc/ -not -perm /222 -type f

3、查找/etc目录下至少有一类用户都没有写权限的普通文件。

思路:反向解析题意即所有用户有写权限

~]# find /etc/ -not -perm -222 -type f

处理动作:

-print:输出至标准输出,默认动作

-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息

-delete:删除查到的文件

-file 文件路径:把查找到的所有文件的长格式信息保存至指定文件中;

-ok COMMAND {} \; :
对查找到的每个文件执行由COMMAND表示的命令;每次操作都得

由用户进行确认;

-exec COMMAND {} \; : 对查找到的每个文件执行由COMMAND表示的命令。

注意:find传递查找到的文件路径传至后面的命令时,实现查找出所有符合条件的文件路

径,并一次传递给后面的命令;但是有些命令不能接受过长的参数,此时命令会执行

失败;另一种方式可规避此问题:

~]# find | xargs COMMAND

总结:find命令的众多查找选项和条件的组合可以更好地为用户的查找文件的需求服务,但是对于根据文件大小的具体大小范围以及时间戳部分的时间范围需要深刻理解,才能找到你符合你需求的文件。另外权限部分的理解也很重要,初学者很容易会绕晕,建议查看文件权限相关基础内容。让find命令成为你使用Linux的一把利器。

Linux find 命令用法总结 

Linux下查找文件find命令 

Linux下find命令详解

文本查找利器find的使用

功能强大的find命令

Linux系统find命令详解

本文永久更新链接地址:

概览:在Linux中使用文件系统时,经常会有这查找文件的需要。那么如何按照我们的需求去找出相应的文件。在这里…

目录

文件查找:查找目录中的文件
文本过滤:查找文本中的行

前言

文件查找:
 locate: 非实时查找  在建好的数据库中查找
   非精确查找
   速度快
  locate updatedb 手动执行建立数据库
 locate 要查找到文件
  
  
 find:实时查找
   精确超找
   速度慢

一、locate命令

 find [path] [ceriteria,…] [action]
    目录  标准    操作
   
 超找条件
  -name “”
  -iname “” 忽略名字的大小写
  -user       属于
  -uid
  -gid
  -nouser
  -nogroup
  -type
   f
   d
   l
   b
   c
   s
   p
  -siza
   -N 小于
   +N 大雨
   K,M,G 默认是字节B
  -amin 访问时间  分钟
  -mmin
  -cmin
  -atime   天
  -mtimi
  -ctime
   N 这个时间点
   – 这个时间之内
   +这个时间之外
  -perm
   mode 权限的精确匹配
   /mode,+mode(+mod过时了)  任意一类用户有这个 权限都行
   -mode 必须有这三个个权限   0 表示忽略这个位置上的权限
  -ls
   | -exec  command {} \;              查找到文件后执行
   | -ok 有提示

1.1 locate用法

亚洲城ca88手机版官网 1

1.2 locate特点

1.3 locate查询补充

二、find命令

2.1 find命令特点

2.2 find用法

2.3 find选项

2.3.1 指搜索层级查找

2.3.2 按文件名和inode号查找

2.3.3 根据属主查找

2.3.4 根据属组查找

2.3.5根据文件类型查找

2.3.6组合查找

2.3.7 按文件大小查找

2.3.8 按时间戳查找

2.3.9 按权限查找

2.4 find补充

2.4.1 处理动作

三、小练习

 

前言

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

两个命令分别为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
表示[亚洲城ca88手机版官网,0,5k]

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

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

亚洲城ca88手机版官网 2

 

 

2.3.8 按时间戳查找

  •   
    以“天”为单位

-atime [+|-]#

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

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

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

-mtime

-ctime

  •      以“分钟”为单位

-amin

-mmin

-cmin

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

亚洲城ca88手机版官网 3

 

 

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扩展名

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

 

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

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

 

 

 

2.4.2 参数替换xargs

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

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

Example:

1、寻找以f开头的文件,并删除。

1 ls f* |xargs     rm

 

2、寻找/sbin下所属者权限位为满的文件,并长列出。

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

 

 

三、小练习

  说了这么多,我们来做一些练习练练手吧~活学活用才能更好的掌握喏٩(๑❛ᴗ❛๑)۶

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

1 find /var -user root -group mail -ls

 

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

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

 

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

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

 

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

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

 

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

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

 

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

1 find /etc/ ! -perm /222 -ls

 

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

1 find /etc/ ! -perm -111 -ls

 

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

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

 

  以上。如有不足之处还请大家多多指教喏٩(๑>◡<๑)۶

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图