Linux文件查找之find详解

一、简介

文件查找:在文件系统上查找符合条件的文件。

实现工具:find,locate,which,whereis

实现方式:whereislocate是通过数据库查找文件,which是通过PATH环境变量规定的路径查找文件,find则是通过指定路径下遍历文件系统。

 

find的工作特性

实时查找工具,遍历指定起始路径下文件系统层级结构完成文件查找。

工作特性:精确查找,速度略慢,实时查找

 

二、find命令具体用法

1、find命令 

# NAME  find - search for files in a directory hierarchy

SYNOPSIS  find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

用法:find 选项 [查找起始路径][查找条件][处理动作]

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

查找条件:根据文件名、大小、类型、从属关系、权限等查找标准进行;默认找出指定路径下的所有文件;

处理动作:对符合查找条件的文件做出的操作;默认为输出至标准输出;

 

查找条件

  表达式:选项和测试

  测试:

  根据文件名查找:

name pattern :支持glob风格的通配符

-iname pattern不区分大小写

-regex pattern:基于正则表达式模式查找文件,匹配是整个路径,而非其名;不常用。

根据文件从属关系查找:

-user username:根据用户属性指定用户的文件;

-group GRPNAME:指定所有用户组的文件;

-uid UID:用户指定的UID的所有文件;

-gid GID :用户组指定的GID的所有文件;

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

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

根据文件的类型查找:

-type TYPE:

  f: 普通文件

  d: 目录文件

  l:符号链接文件

  b:块设备 文件

  c:字符设备文件

  p:管道文件

  s:套接字文件


根据文件的大小查找:

-size[+][-]#unit

常用单位:k,M,G

#UNIT:(#-1,#]  -#UNIT:[0,#-1] +#UNIT:(#,oo)

 

  根据时间戳查找:

   为单位

   -atime #:(#-1#] 某天访问  表示为#天之前的“一天之内”访问过的文件

   -atime  -#(#,0] 某天内     

   -atime + #(oo,#-1] 多于某天

   -ctime   change  修改:文件内容;用法与 -atime 类似;

   -mtime   modification 修改:用户属性、用户组属性、文件名、;

                    用法与 -atime 类似;

   分钟为单位 :

-amin -cmin -mmin  用法与上面类似;

 

  根据权限来查找:

  -perm[/][-]mode

  mode:精确权限匹配

  /mode:任何一类用户的权限的任何一位符合条件即满足9位权限的或关系

  -mode:任何一类用户的权限的任何一位同时都要符合条件即满足9位权限的关系

 

组合测试:与:-a 不加连接符默认组合逻辑   或:-o       非:-not!

 

 

 

处理动作:

-print  :输出至标准输出

-ls    :类似 “ls-l

-delete  :删除查找到的文件

-fls     /path/to/somefile

-ok COMMAND {}\; :对查找到文件,等用户确认

-exec COMMAND {}\; :由命令执行更改。

 

三、练习

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

wKiom1Z1EbOTVKmUAAAPrb-xTGk999.png

2、查找/usr目录下不属于root, binhadoop的所有文件或目录;用两种方法;

wKiom1Z1EhzD_lICAAAXtZcT64k331.png

 

wKioL1Z1FE2SFbdVAAAUFk_ViwM499.png

 

3、查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录;

wKiom1Z1EknBHwPrAAAPRwoFyS4445.png 

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

wKioL1Z1EoSRJzXQAAAOrTXcyDk117.png

wKioL1Z1EoWgU0_9AAAbHbEdhWo919.png

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

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

 wKiom1Z1EyfwKzpTAAAViiSZVLc828.png



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

 wKiom1Z1EwDRRpRYAAAHRzqyMTo308.png

 

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

wKioL1Z1EyPhmUjcAAAHBgnxeZU859.png 

 


四、总结

1、组合测试需注意:-a:组合逻辑与(默认);-o:组合逻辑或;-not!:组合逻辑非。

2、文件大小、时间戳用法比较特别

3、权限查找易混淆:/mode:相当于9位权限的逻辑或关系;-mode9位权限的逻辑与的关系。

 


你可能感兴趣的:(linux,search,表达式,Files)