linux 查找

locate  abc/def      根据路径名匹配

locate  abc  |  grep  def    

updatedb程序每天运行一次,更新locate的数据库,所以locate的数据不是实时的

 

whereis    搜索可执行文件、源代码文件、帮助文件     只在部分目录里查找

 

find 直接在硬盘中搜索   速度比较慢

find  ~  搜索HOME目录

find  ~  |  wc  -l   使用wc统计文件的数量

find ~ -type d | wc -l   搜索目录  列出数量

 

-type 后面的文件类型参数:

文件类型

描述

b

块设备文件

c

字符设备文件

d

目录

f

普通文件

l

符号链接

 

 

find ~ -type f -name "*.JPG" -size +1M | wc -l    文件名匹配*.JPG  大于1M的文件

表示文件大小的字符:

字符

单位

b

512 个字节块。如果没有指定单位,则这是默认值。

c

字节

w

两个字节的字

k

千字节(1024个字节单位)

M

兆字节(1048576个字节单位)

G

千兆字节(1073741824个字节单位)

 

 

find 命令支持大量不同的测试条件。在需要数值参数的 情况下,可以应用以上讨论的“+””-“符号表示法:

测试条件

描述

-cmin n

匹配的文件和目录的内容或属性最后修改时间正好在 n 分钟之前。 指定少于 n 分钟之前,使用 -n,指定多于 n 分钟之前,使用 +n

-cnewer file

匹配的文件和目录的内容或属性最后修改时间早于那些文件。

-ctime n

匹配的文件和目录的内容和属性最后修改时间在 n*24小时之前。

-empty

匹配空文件和目录。

-group name

匹配的文件和目录属于一个组。组可以用组名或组 ID 来表示。

-iname pattern

就像-name 测试条件,但是不区分大小写。

-inum n

匹配的文件的 inode 号是 n。这对于找到某个特殊 inode 的所有硬链接很有帮助。

-mmin n

匹配的文件或目录的内容被修改于 n 分钟之前。

-mtime n

匹配的文件或目录的内容被修改于 n*24小时之前。

-name pattern

用指定的通配符模式匹配的文件和目录。

-newer file

匹配的文件和目录的内容早于指定的文件。当编写 shell 脚本,做文件备份时,非常有帮助。 每次你制作一个备份,更新文件(比如说日志),然后使用 find 命令来决定自从上次更新,哪一个文件已经更改了。

-nouser

匹配的文件和目录不属于一个有效用户。这可以用来查找 属于删除帐户的文件或监测攻击行为。

-nogroup

匹配的文件和目录不属于一个有效的组。

-perm mode

匹配的文件和目录的权限已经设置为指定的 modemode 可以用 八进制或符号表示法。

-samefile name

相似于-inum 测试条件。匹配和文件 name 享有同样 inode 号的文件。

-size n

匹配的文件大小为 n

-type c

匹配的文件类型是 c

-user name

匹配的文件或目录属于某个用户。这个用户可以通过用户名或用户 ID 来表示。

 

find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)

逻辑操作符:     (遵循短路原则)

操作符

描述

-and

如果操作符两边的测试条件都是真,则匹配。可以简写为 -a。 注意若没有使用操作符,则默认使用 -and

-or

若操作符两边的任一个测试条件为真,则匹配。可以简写为 -o

-not

若操作符后面的测试条件是真,则匹配。可以简写为一个感叹号(!)。

()

把测试条件和操作符组合起来形成更大的表达式。这用来控制逻辑计算的优先级。 默认情况下,find 命令按照从左到右的顺序计算。经常有必要重写默认的求值顺序,以得到期望的结果。 即使没有必要,有时候包括组合起来的字符,对提高命令的可读性是很有帮助的。注意 因为圆括号字符对于 shell 来说有特殊含义,所以在命令行中使用它们的时候,它们必须 用引号引起来,才能作为实参传递给 find 命令。通常反斜杠字符被用来转义圆括号字符。

 

找到文件或目录之后的预定义行为:

操作

描述

-delete

删除当前匹配的文件。

-ls

对匹配的文件执行等同的 ls -dils 命令。并将结果发送到标准输出。

-print

把匹配文件的全路径名输送到标准输出。如果没有指定其它操作,这是 默认操作。

-quit

一旦找到一个匹配,退出。

find ~ -print

find ~ -type f -name ‘*.BAK‘ -delete      删除备份文件

 

自定义行为:

-exec command {} ;        command 就是指一个命令的名字,{}是当前路径名的符号      

表示,分号是要求的界定符 表明命令结束。

-exec rm ‘{}‘ ‘;‘   相当于预定义的-delete行为  {}和; 要用引号括起来或被转义

find ~ -type f -name ‘foo*‘ -ok ls -l ‘{}‘ ‘;‘     在对每个匹配的文件执行ls之前,会询

                                                   问用户

把末尾的分号改为加号,就激活了 find 命令的一个功能,把搜索结果结合为一个参数列表, 然后执行一次所期望的命令。

find ~ -type f -name ‘foo*‘ -exec ls -l ‘{}‘ +     只会执行一次ls命令

 

选项

描述

-depth

指导 find 程序先处理目录中的文件,再处理目录自身。当指定-delete 行为时,会自动 应用这个选项。

-maxdepth levels

当执行测试条件和行为的时候,设置 find 程序陷入目录树的最大级别数

-mindepth levels

在应用测试条件和行为之前,设置 find 程序陷入目录数的最小级别数。

-mount

指导 find 程序不要搜索挂载到其它文件系统上的目录。

-noleaf

指导 find 程序不要基于搜索类 Unix 的文件系统做出的假设,来优化它的搜索。

 

 

 

 

 

 

 

stat,是一款加大马力的 ls 命令版本。这个 stat 命令会展示系统对 某个文件及其属性所知道的所有信息

 

linux 查找

上一篇:shell 基本语法介绍


下一篇:通过nginx + lua来统计nginx上的监控网络请求和性能