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 |
匹配的文件和目录的权限已经设置为指定的 mode。mode 可以用 八进制或符号表示法。 |
-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 命令。并将结果发送到标准输出。 |
|
把匹配文件的全路径名输送到标准输出。如果没有指定其它操作,这是 默认操作。 |
-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 命令会展示系统对 某个文件及其属性所知道的所有信息