Linux文件查找命令详解

Linux在文件系统上查找符合条件的文件,实现工具有locate和find

locate

1.它是依赖于事先索引构建好的数据库进行查找的。更新它的数据库有两种方式,一种是系统定期自动更新,另一种是执行命令updatedb手动更新数据库。

注意:索引构建过程需要遍历整个根文件系统,极消耗资源

2.它的工作特性:

1.因为是基于数据库实现的,所以查找速度快(实际生产中find也不必locate慢多少

2.模糊查找,路径中任何一部分包含关键字都显示

3.因为是基于数据库实现的,所以非实时查找。如果新建了一个文件却没有更新数据库,则用locate是找不到的。

3.它的使用方法:

locate [OPTION]…PATTERN…

-b:只匹配路径中的基名,但仍是模糊查找

-c:统计出共有多少个符合条件的文件

-r:基于BRE基本正则表达式来编写模式

例:[root@pxe49 ~]# locate  -r  “\<passwd$”

/etc/passwd

/etc/pam.d/passwd

/usr/bin/passwd

/usr/share/bash-completion/completions/passwd

 

 

find

1.它是实时查找工具,通过遍历指定起始路径下文件系统层级结构来完成文件查找。

2.它的工作特性:

1.查找速度略慢,但实际生产中服务器配置都很高,所以查找速度并不比locate慢多少。

2.由于每次查找都相当于遍历最新的整个文件系统,所以是精确查找。

3.由于每次查找都相当于遍历最新的整个文件系统,所以又是实时查找。

 

3.它的使用方法

find [OPTIONS] [查找起始路径] [查找条件] [处理动作,如删除移动显示]

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

查找条件:指定的查找标准,可以根据文件名(通配),大小,类型,从属关系,权限等等标准进行,默认为找出指定路径下的所有文件

处理动作:对符合查找条件的文件作出的操作,例如删除等操作,默认为输出至标准输出。

find查找条件详解:

1.根据文件名查找:

-name “pattern”

-iname “pattern” //不区分大小写

注:此处的pattern不是正则表达式,是支持glob风格的通配符:*?[],[^]

-regex pattern:基于正则表达式模式查找文件,查找方式是根据整个路径(类似于locate),而非基名,很少用到。

 

2.根据文件从属关系查找:

-user USERNAME:查找属主为指定用户的所有文件

-group GRPNAME:查找属组为指定组的所有文件

 

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

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

 

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

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

 

3.根据文件类型查找:

-type TYPE:

f:普通文件

d:目录文件

l:符号链接文件(软链接文件)

b:块设备文件

c:字符设备文件

p:管道文件

s:套接字文件

 

4.根据文件的大小查找:

-size[+|-]#UNIT

常用单位:k,M,G

~]find /tmp 174k

#UNIT:(#-1#]开区间内,准确的说是找到(173k,174k]

-#UNIT:[0,#-1] [0,173k]

+#UNIT:(#,oo)  (174,oo)

5.根据时间戳查找:

“天”为单位:

-atime [+|-]#

#:[#,#-1)

-#:(#,0]

+#:(oo,#-1]

//比如,查找距离现在3天为打开的文件,则实际上是[3,4)天,+#是距今[4,oo],-#是距今少于3

-mtime

[root@localhost ~]# find /etc -mtime -1

-ctime

分钟为单位

-amin

-mmin

-cmin

6.根据权限查找:

-perm[/|-]mode

mode:精确权限匹配

[root@localhost test]# touch a b c d e f g

[root@localhost test]# ll

总用量 0

-rw-r–r–. 1 root root 0 3月  15 21:53 a

-rw-r–r–. 1 root root 0 3月  15 21:53 b

-rw-r–r–. 1 root root 0 3月  15 21:53 c

-rw-r–r–. 1 root root 0 3月  15 21:53 d

-rw-r–r–. 1 root root 0 3月  15 21:53 e

-rw-r–r–. 1 root root 0 3月  15 21:53 f

-rw-r–r–. 1 root root 0 3月  15 21:53 g

[root@localhost test]# chmod 640 a

[root@localhost test]# chmod 666 b

[root@localhost test]# chmod 440 c

[root@localhost test]# chmod 775 d

[root@localhost test]# chmod 777 e

[root@localhost test]# ll

总用量 0

-rw-r—–. 1 root root 0 3月  15 21:53 a

-rw-rw-rw-. 1 root root 0 3月  15 21:53 b

-r–r—–. 1 root root 0 3月  15 21:53 c

-rwxrwxr-x. 1 root root 0 3月  15 21:53 d

-rwxrwxrwx. 1 root root 0 3月  15 21:53 e

-rw-r–r–. 1 root root 0 3月  15 21:53 f

-rw-r–r–. 1 root root 0 3月  15 21:53 g

[root@localhost test]# find ./ -perm 644 -ls

2230844    0 -rw-r–r–   1 root     root            0 315 21:53 ./f

2230845    0 -rw-r–r–   1 root     root            0 315 21:53 ./g

 

 

/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足。(用于找至少有一个用户有某个权限的)  存在或者的关系。即9位权限有1位符合就OK

find ./ -perm /222 -ls,查找至少有一类用户有写权限

find ./ -perm /111 -ls,查找至少有一类用户有可执行权限

find ./ -perm /001 -ls,查找其他用户是否有可执行权限

 

 

-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足。

find ./ -perm -222 -ls //查找每一类用户都有w权限

find ./ -not -perm -222 -ls//至少有一个用户没有w权限

 

注意:出现0表示不管它

find ./ -perm /002 -ls

find ./ -perm -002 -ls 它们是一样的。

 

 

 

组合测试(加在两个查找条件之间)(将多个条件以与或非连接起来):

与:-a,与是默认组合逻辑

或:-o,

非:-not,!

 

例:~]# find /tmp -not -type f -ls  //查找tmp目录下的非普通文件并显示。

[root@localhost ~]# find /etc -name “passwd” //查找etc目录下基名为passwd的文件。

/etc/pam.d/passwd

/etc/passwd

德摩根定律:

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

 

 

 

 

 

find处理动作详解:

-print:将查找到的文件的路径输出至标准输出,默认的动作

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

-delete:删除查找的文件,危险操作,请勿尝试

-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式(详细)信息保存至指定文件中

-ok COMMAND {} \; (固定格式): 对查找到的每个文件执行由COMMAND表示的命令,每次操作都由用户确认

-exec COMMAND{} \;  :对查找到的每个文件执行由COMMAND表示的命令,不与用户交互。

find ./ -perm /002 -exec mv {} {}.danger \; 

注意:{}表示你查找到的文件的文件名。

上一条命令表示将找到的权限为/002文件的文件名后面加上.danger

 

注意:find传递查找到的文件路径至后面的命令时,是查找出所有符合条件的文件路径,并一次性传递给后面的命令。但是有些命令不能接受过长的参数,此时命令执行会失败。另一种方式可规避此问题。用xargs

find | xargs COMMAND 通过管道送给xargs,由xargs调用命令

 

 

原创文章,作者:3,如若转载,请注明出处:http://www.178linux.com/73050

(0)
33
上一篇 2017-04-09
下一篇 2017-04-10

相关推荐

  • N26-博客作业-week15

    1、总结sed和awk的详细用法 sed: 语法结构 sed [OPTION]…’script’ [input-file]…[action] -r:支持扩展正则表达式 -n:不输出模式空间中的内容至屏幕 -e script1 -e script2 -e script3:指定多脚本运行 -f /path/to/script_file:从指定的文件中读取…

    Linux干货 2017-07-14
  • btrfs文件系统常用命令使用

    Btrfs,也可称为B-tree,Butter FS,Better FS,是CentOS7中一种新型的文件系统。 核心特性: 1.多物理卷支持,可由多个物理卷(pv)组成,支持raid,以联机添加删除 2.支持写实复制(Copy on Write,Cow) 复制一份修改,改好之后用指针替换,出错时指回原本文件。而不是就地修改 3.数据及元数据校验码:chec…

    Linux干货 2016-03-07
  • Linux作业管理和并发执行

    概述 本章将为大家介绍一些进程管理的补充部分作业管理和任务的并发执行,同时也将介绍一下Linux系统上计划任务的相关内容,具体分为:1、Linux作业管理2、任务的并发执行 第一章 Linxu作业管理 1、前台作业和后台作业    前台作业:通过中断启动,且启动后一直占据终端    后台作业:可通过终端启动,但启动后即…

    Linux干货 2016-09-28
  • Linux系统终端类型

    引言 终端(Terminal)也称终端设备,是计算机网络中处于网络最外围的设备,主要用于用户信息的输入以及处理结果的输出等。在早期计算机系统中,由于计算机主机昂贵,因此一个主机一般会配置多个终端,这些终端本身不具备计算能力,仅仅承担信息输入输出的工作,运算和处理均由主机来完成,在个人计算机时代,个人计算机可以运行称为终端仿真器的程序来模仿一个终端的工作。 &…

    Linux干货 2016-10-19
  • Nginx的安装及其一些配置

    nginx的编译安装    tar xf nginx-1.12.2.tar.gz   cd nginx-1.12.2     yum install pcre-devel  ./configure –help   groupadd -r nginx     useradd -g nginx -r nginx    id nginx     ./c…

    Linux干货 2017-10-25
  • Linux计算机基础-入门2016-07-19

    Linux计算机基础-入门2016-07-19 计算机系统的组成部分 计算机系统由硬件系统和软件系统两大部分组成 硬件系统 冯.诺依曼体系结构: 1946年数学家冯.诺依曼提出运算器,控制器,存储器,输入设备,输出设备。 具体变现为一下硬件: 运算器,控制器  ——>  CPU 存储器  …

    Linux干货 2016-08-04

评论列表(2条)

  • renjin
    renjin 2017-04-12 13:37

    详细介绍了linux系统下的查找类(locate,find)命令的使用,内容介绍的非常详细,但需要注意一下排版问题。

    • Janay
      Janay 2017-04-24 10:22

      @renjinGood point. I hadn’t thhugot about it quite that way. :)