Linux:搜索命令which、whereis、loacte和find详解
相关文章Linux专栏https://blog.csdn.net/weixin_45791458/category_12234591.html目录1、which2、whereis3、locate4、find1、whichwhich命令通常被用来搜索拥有可执行状态的文件命令因为它在环境变量$PATH指定的目录中搜索命令且搜索的文件对使用which命令的用户来说一定要具有可执行权限还需要注意的是这个搜索并不会搜索子目录而且不会解析符号链接软链接。用法 which [-a] filename... 选项 -a 显示所有搜索结果而不是在搜索到一个结果就停止例1 $which python /opt/miniconda3/bin/python $which -a python /opt/miniconda3/bin/python /usr/bin/python在一些Linux发行版中which命令还可以查询命令别名(alias)以及原命令所在的位置此时对不要求可执行如下例所示原因在于使用了alias定义了which为一个别名并将alias的输出传递给了which命令。例2 $which ll alias llls -l --colorauto /usr/bin/ls $which l. alias l.ls -d .* --colorauto /usr/bin/ls $which which alias whichalias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde /usr/bin/alias /usr/bin/whichwhich命令显示的第一个搜索结果也就是使用纯名字不使用绝对路径和相对路径时Bash在$PATH中搜索到的第一个搜索结到并执行的命令。2、whereiswhereis命令只在特定目录下搜索文件因此搜索速度较快。在进行搜索前whereis命令会把filename的完整路径名和.c数字之类的后缀剥离所以搜索结果也可能带有类似.c数字之类的后缀。三类目录在搜索范围内由$PATH环境变量指定的bin类目录由$MANPATH环境变量指定的manual类目录和源代码source类目录。用法 $whereis [-bmsul] [-BMS directory... -f] filename... 选项 -b 只显示bin类目录中搜索到的文件所以一般用于搜索命令 -m 只显示manual类目录中搜索到的文件所以一般用于搜索帮助文档 -s 只显示source类目录中搜索到的文件 -u 只显示搜索结果大于1个的文件 -l 列出搜索的全部目录当指定了-BMS后须要放在-f选项后 -B 人为指定bin类的搜索目录 -M 人为指定manual类的搜索目录 -S 人为指定source类的搜索目录 -f 如果有-BMS中的任何一个则需要-f来分隔directory与filename例3 $whereis -l bin: /usr/bin ... man: /usr/share/man/man0p ... src: /usr/src/debug src: /usr/src/kernels $whereis python python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz //可以看到搜索结果可能有后缀 $whereis /home/python //搜索结果一致在搜索前会把绝对路径剥离 python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz $whereis python.1111 //搜索结果一致在搜索前会把后缀剥离 python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz $whereis -b perl perl: /usr/bin/perl //只有一个搜索结果 $whereis -b -u perl //无搜索结果 $whereis -b -B /usr/bin -f python //-f切记不能少 python: /usr/bin/python /usr/bin/python2.7 //限制bin类目录为/usr/bin $whereis -b -B /usr/bin -f -l //-l要放在-f后面否则会显示错误的搜索路径 man: /usr/share/man/man0p //可以看到即使指定了-b仍然显示了所有类的搜索路径只是bin类的被修改了 ... src: /usr/src/debug src: /usr/src/kernels bin: /usr/bin3、locatelocate命令可以根据模式串匹配查找所以只要给出目标文件名的一部分即可locate命令是在updatedb命令维护的数据库/var/lib/mlocate/mlocate.db中搜索的所以可能会出现新建立的文件搜索不到或已删除的文件仍然搜索得到。如果想要更精确的搜索结果可以在locate搜索前先调用updatedb命令。用法 $locate [-AbwcilSr] patterns... 选项 -A 在匹配时要求满足所有patterns而不只是其中之一 -b 只根据文件的基本名称匹配没有路径 -w 根据文件的完整名称匹配有绝对路径这是默认的 -c 输出匹配成功的条目数而不是文件名。 -i 在匹配时忽略大小写区分 -l number在找到指定数量的条目后停止搜索 -S 输出数据库的统计信息此时不允许参数里有patterns -r 使用正则表达式匹配$locate -l 5 ython //搜索到5条结果后停止搜索 /etc/python /etc/abrt/plugins/python.conf /etc/libreport/events.d/python_event.conf /etc/python/cert-verification.cfg //默认搜索完整路径名 /etc/rpm/macros.python-srpm $locate -b -l 5 python //搜索文件基本名搜索到5条结果后停止搜索 /etc/python /etc/abrt/plugins/python.conf /etc/libreport/events.d/python_event.conf /etc/rpm/macros.python-srpm /usr/bin/abrt-action-analyze-python $locate -A python rpm etc //要求同时满足三个模式 /etc/rpm/macros.python-srpm $locate -c Make 2020 $locate -i -l 5 Make //忽略大小写 /etc/makedumpfile.conf.sample /etc/pki/tls/certs/Makefile /etc/pki/tls/certs/make-dummy-cert /usr/bin/automake /usr/bin/automake-1.13 $locate -S //显示数据库信息 数据库 /var/lib/mlocate/mlocate.db: 15,634 文件夹 162,678 文件 8,431,153 文件名中的字节数 3,836,413 字节用于存储数据库 $locate -b -l 5 -r \.txt$ //使用正则表达式匹配基本名以.txt结尾的文件搜索到5条结果后停止搜索 /etc/brltty/brl-ba-all.txt /etc/brltty/brl-bd-all.txt /etc/brltty/brl-bl-18.txt /etc/brltty/brl-bl-40_m20_m40.txt /etc/brltty/brl-ec-all.txt4、findfind命令在硬盘中搜索文件因此耗费的时间较久但它拥有强大的搜索能力。用法 $find [path...] [expressions]1、描述find命令搜索目录树上的每一个文件名它从左至右运算给定的表达式按照优先规则见运算符OPERATORS一节进行匹配直到得出结果左边运算在“与”操作中得出假在“或”操作中得出真然后find移向下一个文件名。第一个以-、(、)、,或!这些字符起始的参数是表达式的开始;在它之前的任何参数是要搜索的路径在它之后的任何参数都是表达式的余下部分。如果没有路径参数缺省用当前工作目录。如果没有表达式缺省表达式用“-print”。当所有文件都成功处理时find退出并返回状态值0。如果发生错误则返回一个大于0的值。2、表达式表达式是由选项(选项总是影响所有的操作而不仅仅是一个指定的文件的处理而且总是返回真值)测试测试返回一个真值或一个假值还有动作动作有side effects比如-print动作是在标准输出打印文件全名返回一个真值或假值组成。它们都以运算符分开忽略运算符的时候默认使用-and即“与”连接。如果表达式没有包含 -prune以外的动作当表达式为真时会执行-print动作。3、选项所有的选项总是返回真值因此一般情况下选项都会被执行除非被放在了表达式执行不到的位置因此最好将选项全部放在表达式开头的位置并且不要使用!、-not连接选项否则会强制终止表达式的执行。选项 -daystart 在计算时间时使用当天0点作为参考点而不是当前时间作为参考。 -depth 在对目录进行处理时首先处理目录中的文件最后处理目录本身。 -follow 不检索符号链接类文件而是直接检索链接指向的文件隐含了-noleaf选项。 -help 列出find命令的用法并退出。 -maxdepth [levels] 进入命令行指定的目录下层目录时最深不超过levels层-maxdepth 0和-maxdepth代表不进入下层目录 -mindepth [levels] 不在levels层之内执行任何测试和动作-mindepth 1表示不在命令行指定的目录下处理文件而只在子目录之内处理。 -mount 不进入处于其他文件系统之上的目录。可以用-xdev代替从而和一些其他版本的find兼容。 -noleaf 不为“目录中子目录数量比硬连接数少2”这种假设做优化。这个选项在搜索那些不遵循UNIX文件系统链接约定的文件系统时用比如CD-ROMMS-DOS文件系统或AFS卷的加载点。在普通的UNIX文件系统中每个目录至少有两个硬连接它的名字和它.子目录。另外它的其他子目录(假如有)还会各有一个..链接到它。在find检索一个目录时发现子目录数比它的连接数少二时它就知道目录中的其他条目并非目录(而是目录树中的叶(leaf)节点)。除非需要检索的是这个叶节点否则没必要去处理它。这样可以带来很大的搜索速度提升。 -version 打印find的版本号然后退出。 -xdev 不进入处于其他文件系统之上的目录。4、测试测试 -amin [n|-n|n] 对文件的访问时间是在第n分钟内第n分钟后、第n分钟前。 默认情况下第0分钟指的是当前时间的的1分钟前这一时刻所以假设当前时间为15分 -amin 0指的是14分到15分-amin 0指的是14分以前-amin 1指的是13分到14分 -amin 1指的是13分以前-amin -1指的是14分后对于后面的-mtime也是如此 -anewer file 对文件的最近一次访问时间比file的内容修改时间要晚。 -atime [n|-n|n] 对文件的访问时间是在第n天内第n天后、第n天前。 -cmin [n|-n|n] 对文件状态的修改时间是在第n分钟内第n分钟后、第n分钟前。 -cnewer file 对文件状态的修改时间比file的内容修改时间要晚。 -ctime n 对文件状态的修改时间是在第n天内第n天后、第n天前。 -empty 文件是空的普通文件或者空目录。 -false 总是false。 -true 总是true。 -gid n 文件的数字形式的组ID是n。 -group gname 文件属于gname (也允许使用数字形式的组ID)。 -link n 文件有 n 个链接。 -mmin n [n|-n|n] 对文件内容的修改时间是在第n分钟内第n分钟后、第n分钟前。 -mtime n [n|-n|n] 对文件内容的修改时间是在第n天内第n天后、第n天前。 -newer file 对文件内容的修改时间比file的内容修改时间要晚。 -name pattern 基本的文件名(将路径去掉了前面的目录)与pattern相匹配如需使用通配符*等需要用引号包围pattern。 -nouser 没有符合文件的数字形式的用户ID的用户。 -nogroup 没有符合文件的数字形式的组ID的组。 -path pattern 完整文件名与pattern相匹配如需使用通配符*等需要用引号包围pattern。 -regex pattern 文件名与正则表达式pattern匹配pattern需要用引号包围且必须整个文件完全匹配即est无法匹配/test。 -type c 文件是 c 类型的。类型可取值如下 b 特殊块文件(缓冲的) c 特殊字符文件(不缓冲) d 目录 p 命名管道 (FIFO) f 普通文件 l 符号链接 s 套接字 D 门 (Solaris 特有) -uid n 文件的数字形式的用户ID是 n 。 -user uname 文件的所有者是 uname (也可以使用数字形式的用户ID)。5、动作动作 -exec command \; 执行 command如果命令返回状态值0那么exec返回true。所有find其余的命令行参数将作为提供给命令的参数直到遇到一个由;组成的参数为止。 命令的参数中字符串{}将以正在处理的文件名替换。所有的{}都会被替换不仅是在单独的一个参数中。有些版本的find不是这样做的。 这些参数可能需要用\来escape或者用括号括住防止它们被shell展开。命令是从当前工作目录执行的。 -print 返回true在标准输出打印文件全名然后是一个换行符。6、运算符以优先级高低顺序排列 ( expr ) 强制为优先 ! expr 如果expr是false则返回true -not expr 与!expr相同 expr1 expr2 与(隐含的默认运算符)如果expr1为false则不会执行expr2 expr1 -a expr2 与expr1 expr2 相同 expr1 -and expr2 与expr1 expr2 相同 expr1 -o expr2 或如果expr1为true则不会执行expr2 expr1 -or expr2 与expr1 -o expr2相同 expr1 , expr2 列表expr1和expr2都会被执行。expr1的值被忽略列表的值是expr2的值

相关新闻

SQLDelight 类型系统实战指南:SQLite 类型映射、自定义列类型(ColumnAdapter)与 Value 类型

SQLDelight 类型系统实战指南:SQLite 类型映射、自定义列类型(ColumnAdapter)与 Value 类型

后端ORM 【免费下载链接】sqldelight SQLDelight - Generates typesafe Kotlin APIs from SQL 项目地址: https://gitcode.com/gh_mirrors/sq/sqldelight 点击查看 免费下载 导读 本文以 SQLDelight 官方文档中的 SQLite 类型章节为核心,系统讲解 SQLD…

2026/10/9 1:16:53 阅读更多 →
将FME拓展到ArcMap中

将FME拓展到ArcMap中

我们付出一些成本,时间的或者其他,最终总能收获一些什么。 主要参考的使用FME拓展ArcGIS和将FME集成到ArcGIS中 本人电脑上安装的为Arcmap10.8和FME2020 首先,将安装的FME中的FME integration Console 以管理员身份打开 点击下面的位置是一…

2026/10/9 1:16:53 阅读更多 →
游戏设计梦工厂 C1(完结) 游戏的核心是体验

游戏设计梦工厂 C1(完结) 游戏的核心是体验

书里的干货实在是太多了,第一章奔着5000字去了,后续会考虑适当的拆分便于阅读; 本书总共分了三个篇章: 一、游戏设计基础 二、设计一款游戏 三、像一名游戏设计师一样工作 本章C1(第一章 游戏设计师的角色)属于书里第一篇: 游戏设计基础。 0 序和综述 1 游戏设计师的…

2026/10/9 1:16:53 阅读更多 →

最新新闻

AI日报从0到1:筛选逻辑、工具链配置与90分钟生产流程

AI日报从0到1:筛选逻辑、工具链配置与90分钟生产流程

1. AI日报这个栏目到底在做什么做AI日报这件事,我从2024年底开始坚持到现在,中间断更过两次,一次是因为信息源太杂导致筛选成本失控,一次是因为写得太像新闻通稿自己都不想看。后来我把整个流程重新拆了一遍,才找到可持…

2026/10/9 1:47:12 阅读更多 →
GEPA 实验追踪指南:用 TrackingConfig 把优化过程接入 WandB 与 MLflow

GEPA 实验追踪指南:用 TrackingConfig 把优化过程接入 WandB 与 MLflow

AI Agent提示工程模型优化 【免费下载链接】gepa Optimize prompts, code, and more with AI-powered Reflective Optimization 项目地址: https://gitcode.com/gh_mirrors/ge/gepa 点击查看 免费下载 本篇指南聚焦 GEPA 仓库中 optimize_anything 流程的**实验追踪…

2026/10/9 1:47:12 阅读更多 →
PWM脉宽调制原理与实战:从LED调光到电机调速的完整指南

PWM脉宽调制原理与实战:从LED调光到电机调速的完整指南

1. 内容整体设计与思路拆解1.1 从一个"闪灯"的现象说起很多人第一次接触 PWM,都是被 LED 调光这个场景带进来的。Arduino 上一个analogWrite(),51 单片机上一个定时器中断翻转 IO,灯就从全亮变成了"半亮"。但如果你直接拿…

2026/10/9 1:47:12 阅读更多 →
Apache CouchDB Nouveau:基于 Lucene 的库级全文搜索从入门到源码剖析

Apache CouchDB Nouveau:基于 Lucene 的库级全文搜索从入门到源码剖析

数据库文档数据库后端 【免费下载链接】couchdb Seamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability 项目地址: https://gitcode.com/gh_mirrors/co/couchdb 点击查看 免费下载 Nouveau 是 Apache CouchDB 中用于…

2026/10/9 1:47:12 阅读更多 →
Trellis 中 Skills、Commands、Prompts 与 Workflows 的差异、路径与本地化改造指南

Trellis 中 Skills、Commands、Prompts 与 Workflows 的差异、路径与本地化改造指南

桌面应用开发工具 【免费下载链接】EcoPaste 🎉跨平台的剪贴板管理工具 | Cross-platform clipboard management tool 项目地址: https://gitcode.com/gh_mirrors/ec/EcoPaste 点击查看 免费下载 在本仓库(EcoPaste,一个已由 tre…

2026/10/9 1:47:12 阅读更多 →
使用 VS Code Cache Explorer 诊断提示词缓存:定位 Cache Miss、Token 成本与延迟问题

使用 VS Code Cache Explorer 诊断提示词缓存:定位 Cache Miss、Token 成本与延迟问题

文档教程 【免费下载链接】vscode-docs Public documentation for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-docs 点击查看 免费下载 在 Visual Studio Code 的 GitHub Copilot Chat 与 Agent 工作流中,语言模型提供商会…

2026/10/9 1:46:12 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →