linux find 命令详解

本文介绍了在Linux系统中使用find命令进行高效文件查找的方法,包括无错误查找、根据部分文件名查找、根据文件特征查询及混合查找方式,并提供了常用的find命令选项、查找文件并显示文件信息的参数,以及如何在查找文件时结合执行命令和打印文件信息。

1. 无错误查找技巧:

  在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但是普通用户使用“find”命令时也有可能遇到这样的问题,那就是Linux系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有权限用“find”命令来查询这些目录或者文件。当普通用户使用“find”命令来查询这些文件目录是,往往会出现"Permissiondenied."(禁止访问)字样。系统将无法查询到你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,

输入
find / -name access_log 2>/dev/null

  这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误的信息就直接输送到stderrstream 2 中,access_log 2就是表明系统将把错误信息输送到stderrstream 2中,/dev/null是一个特殊的文件,表明空的或者错误的信息,这样查询到的错误信息将被转移了,不会再显示了。

2. 根据部分文件名查找方法:

  这个方法和在WINDOWS中查找已知的文件名方法是一样的。不过在Linux中根据部分文件名查找文件的方法要比在WINDOWS中的同类查找方法要强大得多。例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现的,输入:

  find /etc -name '*srm*'

3.  根据文件的特征查询方法:

如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和WINDOWS系统中的"搜索"功能是基本相同的。

  例如我们知道一个Linux文件大小为1,500 bytes,那么我们可是使用如下命令来查询find / -size 1500c,字符 c 表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式来解决。例如我们输入find/ -size +10000000c 这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系统只列出大于指定大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Linux使用不同“ find"命令后系统所要作出的查找动作,从中我们很容易看出在Linux中使用“find"命令的方式是很多的,“ find"命令查找文件只要灵活应用,丝毫不必在WINDOWS中查找能力差。

  find / -amin -10 # 查找在系统中最后10分钟访问的文件
  find / -atime -2 # 查找在系统中最后48小时访问的文件
  find / -empty # 查找在系统中为空的文件或者文件夹
  find / -group cat # 查找在系统中属于 groupcat的文件
  find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
  find / -mtime -1 #查找在系统中最后24小时里修改过的文件
  find / -nouser #查找在系统中属于作废用户的文件
  find / -user fred #查找在系统中属于FRED这个用户的文件

  下面的列表就是对find命令所可以指定文件的特征进行查找的部分条件。在这里并没有列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。
  -amin n
  查找系统中最后N分钟访问的文件
  -atime n
  查找系统中最后n*24小时访问的文件
  -cmin n
  查找系统中最后N分钟被改变状态的文件
  -ctime n
  查找系统中最后n*24小时被改变状态的文件
  -empty
  查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
  -false
  查找系统中总是错误的文件
  -fstype type
  查找系统中存在于指定文件系统的文件,例如:ext2 .
  -gid n
  查找系统中文件数字组 ID 为 n的文件
  -group gname
  查找系统中文件属于gnam文件组,并且指定组和ID的文件

4. Find命令的控制选项说明:
  Find命令也提供给用户一些特有的选项来控制查找操作。下表就是我们总结出的最基本,最常用的find命令的控制选项及其用法。 
  选项
  用途描述
  -daystart
  .测试系统从今天开始24小时以内的文件,用法类似-amin
  -depth
  使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容
  -follow
  遵循通配符链接方式查找; 另外,也可忽略通配符链接方式查询
  -help
  显示命令摘要
  -maxdepth levels
  在某个层次的目录中按照递减方法查找
  -mount
  不在文件系统目录中查找, 用法类似 -xdev.
  -noleaf
  禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找
  -version
  打印版本数字

  使用-follow选项后,find命令则遵循通配符链接方式进行查找,除非你指定这个选项,否则一般情况下find命令将忽略通配符链接方式进行文件查找。
  -maxdepth选项的作用就是限制find命令在目录中按照递减方式查找文件的时候搜索文件超过某个级别或者搜索过多的目录,这样导致查找速度变慢,查找花费的时间过多。例如,我们要在当前(.)目录技巧子目录中查找一个名叫fred的文件,我们可以使用如下命令

  find . -maxdepth 2 -name fred

  假如这个fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找很容易成功。假如,这个文件在./sub1/sub2/fred目录中,那么这个命令就无法查找到。因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的文件。这样做的目的就是为了让find命令更加精确的定位文件,如果你已经知道了某个文件大概所在的文件目录级数,那么加入-maxdepth n 就很快的能在指定目录中查找成功。 5. 使用混合查找方式查找文件

  find命令可以使用混合查找的方法,例如我们想在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件,我们可以使用-and 来把两个查找选项链接起来组合成一个混合的查找方式。
  find /tmp -size +10000000c -and -mtime +2

  学习过计算机语言的朋友都知道,在计算机语言里,使用and ,or 分别表示“与”和“或”的关系。在Linux系统的查找命令中一样通用。
  还有这样的例子,
  
find / -user fred -or -user george

  我们可以解释为在/tmp目录中查找属于fred或者george这两个用户的文件。
  在find命令中还可以使用“非”的关系来查找文件,如果我们要在/tmp目录中查找所有不属于panda的文件,使用一个简单的
  find /tmp ! -user panda 
  命令就可以解决了。很简单。

  查找并显示文件的方法
  查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性,如果我们采取现查找文件,在使用LS命令来查看文件信息是相当繁琐的,现在我们也可以把这两个命令结合起来使用。

  find / -name "httpd.conf" -ls

  系统查找到httpd.conf文件后立即在屏幕上显示httpd.conf文件信息。
  12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf

  下面的表格就是一些常用的查找文件并显示文件信息的参数和使用方法
  选项
  用途描述
  
-exec command;
  查找并执行命令
  -fprint file
  打印文件完整文件名
  -fprint0 file
  打印文件完整文件名包括空的文件
  -fprintf file format
  打印文件格式
  -ok command;
  给用户命令执行操作,根据用户的Y 确认输入执行
  -printf format
  打印文件格式
  -ls
  打印同种文件格式的文件.

  总结:到这里为止我们已经学习了这名多关于find命令的使用方法,也列出了很多常用的find命令的选项,如果我们能熟练掌握在Linux中find命令的使用方法,那么在Linux中查找文件也不是一件困难的事情。还想了解更详细的内容请参考:

http://blog.youkuaiyun.com/whz_zb/article/details/7075890

<think> 我们根据用户的要求,需要提供Linux系统中find命令的详细解释和使用说明。参考之前的引用内容,我们可以整理出以下信息: 1. find命令的基本功能:在指定目录下查找文件和目录。 2. 基本语法:`find [路径] [选项] [表达式]` 3. 如果没有指定路径,默认在当前目录及其子目录下查找。 4. 常用选项和表达式: - `-name`:按文件名查找 - `-type`:按文件类型查找(f表示文件,d表示目录等) - `-maxdepth`:限制搜索深度 - 逻辑运算符:`-a`(与),`-o`(或),`!`或`-not`(非) - 其他条件:权限、用户、组、时间、大小等 此外,我们还可以补充一些常用的用法和高级用法。 下面我们将详细说明find命令的使用。 ### 一、基本语法 ```bash find [搜索路径] [选项] [表达式] ``` ### 二、常用选项 1. **按文件名查找 (-name)** - 查找当前目录及其子目录下所有以.txt结尾的文件: ```bash find . -name "*.txt" ``` - 注意:文件名模式要用引号括起来,防止shell扩展。 2. **按文件类型查找 (-type)** - 查找当前目录下的所有目录: ```bash find . -type d ``` - 常用类型: - `f`:普通文件 - `d`:目录 - `l`:符号链接 3. **限制搜索深度 (-maxdepth, -mindepth)** - 只在当前目录(不进入子目录)查找: ```bash find . -maxdepth 1 -name "*.txt" ``` - 查找深度至少为2的目录(即至少包含一级子目录): ```bash find . -mindepth 2 -type f ``` 4. **按时间查找** - `-atime`:访问时间(天) - `-mtime`:修改时间(天) - `-ctime`:状态改变时间(天) - 查找7天内被访问过的文件: ```bash find . -atime -7 ``` - 注意:`-7`表示7天以内,`+7`表示7天以前。 5. **按大小查找 (-size)** - 查找大于1MB的文件: ```bash find . -size +1M ``` - 单位:`c`(字节),`k`(千字节),`M`(兆字节),`G`(吉字节) 6. **逻辑运算符** - 与(-a,默认可以省略): ```bash find . -name "*.txt" -type f ``` - 或(-o): ```bash find . -name "*.txt" -o -name "*.sh" ``` - 非(! 或 -not): ```bash find . ! -name "*.txt" ``` ### 三、执行操作 find命令可以对查找到的文件执行操作,使用`-exec`或`-ok`(询问确认)。 - 删除当前目录下所有.txt文件: ```bash find . -type f -name "*.txt" -exec rm {} \; ``` 其中,`{}`表示匹配到的文件名,`\;`表示命令结束。 - 也可以使用`-delete`选项直接删除(不需要`-exec`): ```bash find . -type f -name "*.txt" -delete ``` ### 四、其他常用选项 - **按权限查找 (-perm)** ```bash find . -perm 644 # 查找权限为644的文件 find . -perm /u=x # 查找用户有执行权限的文件 ``` - **按用户和组查找** ```bash find . -user root # 查找属主为root的文件 find . -group www # 查找属组为www的文件 ``` ### 五、高级用法 - **忽略大小写 (-iname)** ```bash find . -iname "*.TXT" # 匹配.txt, .TXT等 ``` - **结合xargs** 当处理大量文件时,使用`xargs`可以提高效率: ```bash find . -name "*.log" | xargs rm ``` 但注意,如果文件名包含空格或特殊字符,推荐使用`-print0`和`xargs -0`: ```bash find . -name "*.log" -print0 | xargs -0 rm ``` ### 六、注意事项 1. 在使用`-exec`或`-delete`等有破坏性的操作时,建议先运行不加这些操作的命令确认结果。 2. 当使用通配符时,使用引号避免shell提前展开。 通过上述说明,用户可以全面了解find命令的使用方法。下面我们生成相关问题。 </think> ### Linux `find` 命令详细使用说明 `find` 是 Linux/Unix 系统中用于**递归搜索文件和目录**的核心工具,支持丰富的过滤条件和操作。以下是详细说明: --- #### **一、基础语法** ```bash find [搜索路径] [选项] [表达式] ``` - 若省略路径,默认从当前目录递归搜索 - 表达式支持逻辑组合(`-a` 与, `-o` 或, `!` 非) --- #### **二、核心功能** 1. **按名称搜索** ```bash find /home -name "*.txt" # 搜索.txt文件(区分大小写) find . -iname "*.PDF" # 忽略大小写搜索 ``` 2. **按类型过滤** ```bash find /var -type f # 只搜文件 find ~ -type d # 只搜目录 find . -type l # 只搜符号链接 ``` > 类型标识:`f`=文件, `d`=目录, `l`=软链接, `b`=块设备 3. **限制搜索深度** ```bash find . -maxdepth 1 -name "*.log" # 仅当前目录(不递归) find /etc -mindepth 2 -type f # 至少2层子目录 ``` 4. **按时间筛选** ```bash find /tmp -mtime -7 # 7天内修改的文件 find ~ -atime +30 # 30天前访问的文件 ``` > `-mtime`=修改时间, `-atime`=访问时间, `-ctime`=状态变更时间 > `+n`=n天前, `-n`=n天内 5. **按大小过滤** ```bash find /var -size +10M # >10MB的文件 find . -size -100k # <100KB的文件 ``` > 单位:`c`=字节, `k`=KB, `M`=MB, `G`=GB --- #### **三、高级用法** 1. **逻辑组合筛选** ```bash find . \( -name "*.sh" -o -name "*.py" \) ! -user root # 搜sh或py文件且非root用户 ``` 2. **权限过滤** ```bash find /etc -perm 644 # 精确匹配644权限 find . -perm /u=x # 用户有执行权限 ``` 3. **执行操作** ```bash find ~/Downloads -name "*.tmp" -delete # 删除临时文件 find /var/log -size +50M -exec rm {} \; # 删除>50MB日志 find . -type f -print0 | xargs -0 chmod 644 # 处理含空格文件名 ``` > `{}` 代表匹配的文件名,`\;` 结束命令 4. **处理特殊字符** ```bash find . -print0 | xargs -0 command # 安全处理空格/换行符文件名 ``` --- #### **四、实用示例** ```bash # 查找7天内修改的PHP文件并备份 find /var/www -name "*.php" -mtime -7 -exec cp {} {}.bak \; # 搜索空目录 find /data -type d -empty # 查找SUID权限文件 find / -perm /4000 -type f ``` --- #### **注意事项** 1. 对系统目录搜索需 `sudo` 权限 2. 破坏性操作(`-delete`, `-exec rm`)建议先用 `-print` 测试 3. 复杂条件用 `()` 明确优先级,如 `\( cond1 -o cond2 \) -a cond3` > 引用说明:搜索深度限制[^2]、逻辑运算符[^3]、基础功能[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值