IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 操作系统 > LINUX > Linux Find命令精通指南

Linux Find命令精通指南

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

  Linux find 命令是所有 Linux 命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他 Linux 命令的标准语法不同。但是,它很强大,因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用 find 命令,您不但可以找到具这些属性任意组合的文件,还可以对它找到的文件执行操作。

  本文的目的是,通过概述 find 命令的用途和潜能,简化该命令的学习和使用。同时,它将针对 find 命令的某些最强大但最混乱的方面提供一个基本的指南和参考。

  [注意:本文使用的 find 版本是 GNU 版本,因此,某些细节可能与其他版本的 find 有所不同。]

  基本格式

  开始之前,我们先来看一下 find 命令的基本结构:

  find   start_directory  test  options   criteria_to_matchaction_to_perform_on_results

  在以下命令中,find 将开始在当前目录(用&.&表示)中查找任何扩展名为&java&的文件:

  find . -name  &*.java&

  下面是该命令所找到的命令的缩略清单:

  find . -name  &*.java&./REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java./REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java..

  [注意:如果您从本文剪切并粘贴来运行该 find 命令,您可能需要使用自己的键盘替换双引号 (&&) 才能得出正确的结果。]

  以下命令将执行相同的操作。在这两种情况下,您都需要对通配符进行转义以确保它传递到 find 命令并且不由 shell 解释。因此,请将您的搜索字符串放到引号里,或者在它前面加上反斜线:

  find . -name  *.java

  尽管 find 的所有参数均为可选,但是如果您未指定从哪里开始搜索,搜索默认将在当前目录中开始。如果您不指定要匹配的测试连接、选项或值,您的结果将不完整或者无区别。

  运行以下三个 find 命令将得出同样的结果 — 当前目录和所有子目录中的所有文件(包括隐藏文件)的完整清单:

  find find .find . -print

  这类似于运行一个带 -la 选项的 ls 命令。如果您希望上述命令的输出包含完整的路径名(或许是为了备份),您将需要指定起始目录的完整路径:

  find /home/bluher -name *.java/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java/...

  您还可以在搜索字符串中指定多个起始目录。如果以具有相应权限的用户身份运行,以下命令将下到 /usr、/home /tmp 目录查找所有 jar 文件:

  find /usr /home  /tmp -name &*.jar&

  但是,如果您没有相应的权限,您在开始浏览许多系统目录时将生成错误消息。以下是一个示例:

  find:  /tmp/orbit-root: Permission denied

  您可以通过附加您的搜索字符串来避免混乱的输出,如下所示:

  find /usr /home  /tmp -name &*.jar& 2>/dev/null

  这会将所有错误消息发送到空文件,因此提供清理器输出。

  默认情况下,find 是区分大小写的。对于不区分大小写的 find,将 -iname 测试替换为 -name 测试。

  find downloads  -iname &*.gif&downloads/.xvpics/Calendar05_enlarged.gifdownloads/lcmgcfexsmall.GIF

  除文件名外,您还可以按类型搜索文件。例如,您可以使用以下命令查找一个目录中的所有子目录:

  find . -type d

  您可以使用以下命令查找您的/usr 目录中的所有符号链接:

  find /usr -type l

  这可能会列出 3,000 多个链接。以下的任何一个命令使用根权限运行都将列出 /usr 目录中的链接以及它所指向的文件:

  # find /usr/bin  -type l  -name &z*& -exec ls  -l {} ;lrwxrwxrwx 1 root  root 8 Dec 12 23:17 /usr/bin/zsh -> /bin/zshlrwxrwxrwx 1 root  root 5 Dec 12 23:17 /usr/bin/zless -> zmorelrwxrwxrwx 1 root  root 9 Dec 12 23:17 /usr/bin/zcat -> /bin/zcat

  find /usr/bin -type  l  -name &z*& -ls

  但是,第二个更短的命令将列出更多的文件,以及目录和 inode 信息:在本文后面的部分中,我们将讨论 -exec 和 -ls 操作的用法。

  其他 find 可以找到的文件类型包括:

  * b — 块(缓存)特殊

  * c — 字符(未缓存)特殊

  * p — 命名管道 (FIFO)

  * s — 套接字

#p#副标题#e#

  使用根作为 find 命令的起点会极大地降低系统的速度。如果您必须运行这样一个命令,您可以在非高峰时段或晚上运行它。您可以使用以下语法将输出重定向到一个文件:

  find  /   -print > masterfilelist.out

  如果您错误地输入一个 find 命令,生成大量不必要的输出,只需按 CTRL-C 中断该命令,这将停止最近执行的命令。

  在具多个文件系统的企业网络上,限制 find 查找的文件也是一个特别好用的方法。尽可能多地使用选项和测试以减少系统上的负载。用于此目的的两个最有用的选项是 -xdev 和 -mount。它们通过阻止 find 下到其他文件系统(如 MS-DOS、CD-ROM 或 AFS)上的目录中缩短了搜索范围。这将搜索限制为同一类型的文件系统作为起始目录。

  如果运行 mount 命令,双引导系统上的用户可以使用这些选项。假设涉及 Windows 分区,您可以使用类似以下的命令安装它:

  mount -t vfat  /dev/sda1 /mnt/msdos

  您使用的实际命令取决于您的系统设置。您可以通过运行 df 或执行以下命令验证该分区已安装:

  find /mnt/msdos  -name &*.txt& 2> /dev/null

  您应该看到 MS Windows 分区上列出了很多的文件。现在,运行以下带 -mount 或 -xdev 选项的命令:

  find / -name  &*.txt& -mount 2> /dev/null

  或者

  find / -name  &*.txt& -xdev 2> /dev/null

  还可以使用 -fstype 测试明确告知 find 在哪个文件系统中查找,如以下示例中所示:

  find / -name  &*.txt& -fstype vfat 2> /dev/null

  查找时间

  find 命令有几个用于根据您系统的时间戳搜索文件的选项。这些时间戳包括

  * mtime — 文件内容上次修改时间

  * atime — 文件被读取或访问的时间

  * ctime — 文件状态变化时间

  mtime 和 atime 的含义都是很容易理解的,而 ctime 则需要更多的解释。由于 inode 维护着每个文件上的元数据,因此,如果与文件有关的元数据发生变化,则 inode 数据也将变化。这可能是由一系列操作引起的,包括创建到文件的符号链接、更改文件权限或移动了文件等。由于在这些情况下,文件内容不会被读取或修改,因此 mtime 和 atime 不会改变,但 ctime 将发生变化。

  这些时间选项都需要与一个值 n 结合使用,指定为 -n、n 或 +n。

  * -n 返回项小于 n

  * +n 返回项大于 n

  * n 返回项正好与 n 相等

  下面,我们来看几个例子,以便于理解。以下命令将查找在最近 1 小时内修改的所有文件:

  find . -mtime -1./plsql/FORALLSample./plsql/RegExpDNASample/plsql/RegExpSample

  用 1 取代 -1 运行同一命令将查找恰好在 1 小时以前修改的所有文件:

  find . -mtime 1

  上述命令不会生成任何结果,因为它要求完全吻合。以下命令查找 1 个多小时以前修改的所有文件:

  find . -mtime +1

  默认情况下,-mtime、-atime 和 -ctime 指的是最近 24 小时。但是,如果它们前面加上了开始时间选项,则 24 小时的周期将从当日的开始时间算起。您还可以使用 mmin、amin 和 cmin 查找在不到 1 小时的时间内变化了的时间戳。

  如果您在登录到您的帐户后立即运行以下命令,您将找到在不到 1 分钟以前读取的所有文件:

  find . -amin -1./.bashrc/.bash_history./.xauthj5FCx1

  应该注意的是,使用 find 命令查找文件本身将更改该文件的访问时间作为其元数据的一部分。

  您还可以使用 -newer、-anewer 和 –cnewer 选项查找已修改或访问过的文件与特定的文件比较。这类似于 -mtime、-atime 和 –ctime。

  * -newer 指内容最近被修改的文件

  * -anewer 指最近被读取过的文件

  * -cnewer 指状态最近发生变化的文件

  要查找您的主目录中自上一个 tar 文件以来以某种方式编辑过的所有文件,使用以下命令:

  find . -newer  backup.tar.gz

  按大小查找文件

  -size 选项查找满足指定的大小条件的文件。要查找所有大于 5MB 的用户文件,使用

  find / -size  +5000000c 2> /dev/null/var/log/lastlog/var/log/cups/access_log.4/var/spool/mail/bluher

  结尾的&c&以字节为单位报告我们的结果。默认情况下,find 以 512 字节块的数量报告大小。如果我们将&c&替换为&k&,我们还会看到以千

关键词标签:Linux,Find命令

相关阅读 安装红帽子RedHat Linux9.0操作系统教程 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 多种操作系统NTP客户端配置 Linux操作系统修改IP Linux实现SCSI硬盘热插拔及在线识别 Linux下用CDMA modem拨号上网

文章评论
发表评论

热门文章 安装红帽子RedHat Linux9.0操作系统教程 安装红帽子RedHat Linux9.0操作系统教程 Linux服务器:设计高性能网站架构-LLMP Linux服务器:设计高性能网站架构-LLMP 使用Clonezilla迁移到虚拟Linux环境 使用Clonezilla迁移到虚拟Linux环境 Linux上的MRTG流量监控中心 Linux上的MRTG流量监控中心 Linux 双网卡绑定一个IP原理及实现 Linux 双网卡绑定一个IP原理及实现 linux和windows等系统远程控制ubuntu桌面 linux和windows等系统远程控制ubuntu桌面

相关下载

人气排行 Linux下获取CPUID、硬盘序列号与MAC地址 dmidecode命令查看内存型号 linux tc实现ip流量限制 安装红帽子RedHat Linux9.0操作系统教程 linux下解压rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 关机、重启、注销 命令 查看linux服务器硬盘IO读写负载 linux命令行浏览器的使用方法 Linux NFS服务固定端口及防火墙配置 U盘安装Ubuntu 10.04 Linux清除用户登录记录和命令历史方法