linux的查找匹配方式


                grep    "test"   test.txt在文件test.txt查找匹配内容test     

• 1> :是将正确的数据输出到指定的地方去 例如 find / -name test.txt 1>test.txt当前窗口显示错误信息(一般用户有的文件夹没权限访问),而test.txt中则是正确信息,查找到的信息
• 2> :是将错误的数据输出到指定的地方去
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索。这些是从网上找到的资料,因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用。
which       查看可执行文件的位置 
whereis    查看文件的位置 
locate       配 合数据库查看文件位置 
find          实际搜寻硬盘查询文件名称 

1、which 
语法: 
[root@redhat ~]# which 可执行文件名称 
例如: 
[root@redhat ~]# which passwd 
/usr/bin/passwd 
which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件 

2、whereis 
语法: 
[root@redhat ~]# whereis [-bmsu] 文件或者目录名称 
参数说 明: 
-b : 只找二进制文件 
-m: 只找在说明文件manual路径下的文件 
-s : 只找source源文件 
-u : 没有说明文档的文件 
例如: 
[root@redhat ~]# whereis passwd 
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz 
将和passwd文件相关的文件都查找出来 

[root@redhat ~]# whereis -b passwd 
passwd: /usr/bin/passwd /etc/passwd 
只将二进制文件 查找出来 

和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。 
但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。 

3、 locate 
语法: 
[root@redhat ~]# locate 文件或者目录名称 
例 如: 
[root@redhat ~]# locate passwd 
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp 
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp 
/lib/security/pam_unix_passwd.so 
/lib/security/pam_passwdqc.so 
/usr/include/rpcsvc/yppasswd.x 
/usr/include/rpcsvc/yppasswd.h 
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph 
/usr/lib/kde3/kded_kpasswdserver.la 
/usr/lib/kde3/kded_kpasswdserver.so 
/usr/lib/ruby/1.8/webrick/httpauth/htpasswd.rb 
/usr/bin/vncpasswd 
/usr/bin/userpasswd 
/usr/bin/yppasswd 
………… 

4、 find 
语法: 
[root@redhat ~]# find 路径 参数 
参 数说明: 
时间查找参数: 
-atime n :将n*24小时内存取过的的文件列出来 
-ctime n :将n*24小时内改变、新增的文件或者目录列出来 
-mtime n :将n*24小时内修改过的文件或者目录列出来 
-newer file :把比file还要新的文件列出来 
名称查找参数: 
-gid n       :寻找群组ID为n的文件 
-group name  :寻找群组名称为name的文件 
-uid n       :寻找拥有者ID为n的文件 
-user name   :寻找用户者名称为name的文件 
-name file   :寻找文件名为file的文件(可以使用通配符) 
例 如: 
[root@redhat ~]# find / -name zgz 
/home/zgz 
/home/zgz/zgz 
/home/weblogic/bea/user_projects/domains/zgz 
/home/oracle/product/10g/cfgtoollogs/dbca/zgz 
/home/oracle/product/10g/cfgtoollogs/emca/zgz 
/home/oracle/oradata/zgz 

[root@redhat ~]# find / -name '*zgz*' 
/home/zgz 
/home/zgz/zgz1 
/home/zgz/zgzdirzgz 
/home/zgz/zgz 
/home/zgz/zgzdir 
/home/weblogic/bea/user_projects/domains/zgz 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005 

当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查 找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。 
locate 是在数据库里查找,数据库大至每天更新一次。 
whereis 可以找到可执行命令和man page 
find 就是根据条件查找文件。 
which 可以找到可执行文件和别名(alias)
<think>好的,用户让我介绍一下Linux下的模糊匹配查找文件。首先,我需要回忆常见的命令,比如find、locate、grep这些工具。不过用户提到的是模糊匹配,可能指的是根据文件名的一部分来查找,所以重点应该在文件名模式匹配上。 我应该先解释基本概念,比如通配符的使用,比如*和?,这些在shell中的用法。然后,可能需要介绍find命令的基本用法,因为它功能强大,可以按名称、类型、时间等查找,并且支持通配符。例如,find /path -name "*.txt"这样的例子。 接下来,用户可能对locate命令感兴趣,因为它更快,但需要更新数据库。这里要提醒用户注意updatedb的问题,避免结果过时。 另外,可能需要提到在查找文件内容时,grep也可以结合通配符,比如grep "pattern" *.log,但这不是文件名的模糊匹配,所以需要区分清楚。 还要考虑用户的实际使用场景,比如他们可能不记得全名,或者需要更复杂的模式,比如正则表达式。这时候需要说明find的正则表达式选项,比如-regex和-iregex的区别,大小写敏感的问题。 另外,可能需要给出一些实用例子,比如忽略大小写查找,按修改时间查找,结合多个条件等。这些例子能帮助用户更好地理解和应用。 用户可能的误区是混淆通配符和正则表达式,所以需要指出两者的不同,比如在find中使用-name时用通配符,而-regex用正则表达式。 最后,总结一下各个命令的适用场景,帮助用户根据具体情况选择最合适的工具。可能还需要提醒权限问题,比如某些目录需要sudo才能访问,或者locate数据库不包括临时文件等。</think>在 Linux 系统中,模糊匹配查找文件主要通过通配符和专用命令实现,以下是详细说明: --- ### **一、通配符基础** 在 shell 中可直接使用的特殊符号: - `*` 匹配任意长度字符(包括0个) ```bash ls *.txt # 列出所有 txt 文件 ``` - `?` 匹配单个字符 ```bash ls file?.log # 查找 file1.log, fileA.log 等 ``` - `[]` 匹配指定范围 ```bash ls image[0-9].jpg # 匹配 image0.jpg 到 image9.jpg ``` --- ### **二、find 命令(最强大的文件搜索工具)** 基础格式:`find [路径] [选项] [操作]` #### 1. 按名称查找 ```bash find ~/Documents -name "report*.pdf" # 精确匹配名称模式 find /var/log -iname "*.LOG" # -i 忽略大小写 ``` #### 2. 按类型查找 ```bash find . -type d -name "temp*" # 查找目录 find /home -type f -name "*.conf" # 查找普通文件 ``` #### 3. 按时间查找 ```bash find / -mtime -7 # 7天内修改过的文件 find . -amin +30 # 30分钟前访问过的文件 ``` #### 4. 组合条件 ```bash find ~/ -size +100M -a -name "*.mp4" # -a 表示 AND find /opt \( -name "*.bak" -o -name "*.tmp" \) # -o 表示 OR ``` --- ### **三、locate 命令(快速查找)** 基于预建数据库的闪电搜索: ```bash locate passwd # 查找所有含"passwd"的文件路径 sudo updatedb # 手动更新数据库(默认每天自动更新) ``` --- ### **四、正则表达式进阶** #### 1. find + 正则 ```bash find . -regex ".*/config[0-9]{3}\.yml" # 匹配 config001.yml 等 ``` #### 2. grep 辅助搜索 ```bash find . -type f | grep "2023.*\.log" # 管道组合使用 ``` --- ### **五、实用场景示例** 1. **查找并删除临时文件** ```bash find /tmp -name "*.temp" -delete ``` 2. **查找指定用户的文件** ```bash find /home -user alice -name "*.docx" ``` 3. **查找空目录** ```bash find . -type d -empty ``` --- ### **注意事项** 1. 使用 `find` 时: - 搜索系统目录需要 `sudo` - `-maxdepth 2` 可限制搜索深度 - `-exec` 参数可执行后续操作 2. 使用 `locate` 时: - 新建文件需要先执行 `updatedb` - 不搜索 `/proc` 等虚拟文件系统 通过灵活组合这些工具,可以高效实现各种复杂文件搜索需求。建议先使用 `locate` 快速定位,需要精确控制时切换到 `find`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值