Linux - 搜索查找篇
在 Linux 系统中,搜索查找类命令主要用于帮助用户快速定位文件、目录、命令以及特定的文本内容。以下是一些常用的搜索查找类命令:
- grep:这是一个强大的文本搜索工具,它可以根据指定的关键字在文件中进行搜索,并输出包含该关键字的行。当配合
-r(递归搜索)和-l(只列出文件名)选项使用时,可用来查找包含特定关键字的文件名及其路径。例如,grep -rl "关键字" /搜索的起始路径/会递归地搜索指定路径及其所有子目录,列出所有包含 “关键字” 的文件的完整路径。 - find:功能非常强大的文件搜索命令,它可以根据文件名、文件类型、文件大小、文件时间戳等多种条件进行搜索。例如,
find /path/to/search -name "*关键字*"会在指定目录下查找文件名包含 “关键字” 的所有文件;find /path/to/search -type d会查找指定目录下的所有目录;find /path/to/search -size +100M会查找指定目录下大于 100MB 的文件。 - locate:通过搜索一个预先构建的数据库来快速查找文件,这个数据库包含了文件系统中所有文件的路径,因此
locate的搜索速度非常快,但结果可能不是实时的,因为它依赖于一个定期更新的数据库。使用updatedb命令可以手动更新数据库。例如,locate 关键字会输出所有文件名或路径中包含 “关键字” 的文件。 - whereis:用于定位命令的二进制文件、源代码和手册页的位置,主要用来查找系统命令和相关的文件。例如,
whereis ls会输出ls命令的二进制文件、源代码和手册页的路径。 - which:用于在用户的
PATH环境变量所定义的目录中搜索可执行文件,并返回其完整路径,通常用来确认某个命令的具体位置。例如,which python会输出python命令的完整路径。
1)grep 文本搜索和过滤的核心工具
grep(Global Regular Expression Print,全局正则表达式打印)是 Linux/Unix 系统中文本搜索与过滤的核心工具,核心作用是:在文件或命令输出中,按「关键词/正则表达式」匹配文本行,并输出匹配到的内容(或反向过滤不匹配的内容)。
简单说:你想从一堆文本(文件、命令输出)中“揪出”包含某个关键词的行,就用 grep。
一、核心用法(最常用,优先掌握)
| 参数 | 作用 | 常用场景 |
|---|---|---|
-i |
忽略大小写匹配 | 模糊查找关键词(不区分大小写) |
-n |
显示匹配行的行号 | 定位文件中关键词的位置 |
-v |
反向匹配(显示不包含关键词的行) | 过滤日志中的无用信息 |
-c |
统计匹配行数 | 统计关键词出现的次数 |
-r |
递归搜索子目录下的所有文件 | 查找目录中所有文件的关键词 |
-w |
匹配完整单词(避免部分匹配) | 精确匹配单词(不匹配单词片段) |
-E |
支持扩展正则表达式 | 复杂匹配(或、至少一次等逻辑) |
--include |
只搜索指定类型的文件(如 *.txt) |
过滤文件类型,提高搜索效率 |
1. 基础用法:在文件中搜索关键词
格式:grep "关键词" 文件名
功能:从指定文件中,查找包含「关键词」的所有行,并输出这些行。
示例:
# 从 test.txt 中查找包含 "hello" 的行(关键词区分大小写)
grep "hello" test.txt
# 从 /etc/passwd 中查找包含 "root" 的行(比如 root 用户的配置)
grep "root" /etc/passwd
# 同时搜索多个文件:从 file1.txt、file2.txt 中查找 "test"
grep "test" file1.txt file2.txt

2. 不区分大小写匹配
参数:-i(ignore case)
功能:匹配时忽略大小写(比如 "Hello"、"HELLO"、"hello" 都能匹配到)。
示例:
# 从 test.txt 中查找包含 "hello" 的行,忽略大小写
grep -i "hello" test.txt
3. 显示匹配行的行号
参数:-n(line number)
功能:输出匹配到的行时,同时显示该行在文件中的行号。
示例:
# 查找 test.txt 中包含 "python" 的行,并显示行号
grep -n "python" test.txt
4. 反向匹配:显示不包含关键词的行
参数:-v(invert match)
功能:输出不包含关键词的所有行(过滤掉包含关键词的行)。
示例:
# 从 test.txt 中输出所有不包含 "error" 的行(过滤错误日志)
grep -v "error" test.txt
# 从 /etc/passwd 中输出非 root 用户的配置(过滤 root 行)
grep -v "root" /etc/passwd
5. 统计匹配行数
参数:-c(count)
功能:不输出匹配内容,只统计包含关键词的行的总数。
示例:
# 统计 test.txt 中包含 "warning" 的行数
grep -c "warning" test.txt
# 统计 /var/log/messages 中包含 "info" 的行数(日志统计)
grep -c "info" /var/log/messages
6. 搜索子目录下的所有文件
参数:-r 或 -R(recursive,递归)
功能:递归搜索指定目录下的所有文件(包括子目录),查找包含关键词的行。
示例:
# 递归搜索 /home 目录下所有文件,查找包含 "tangge" 的行
grep -r "tangge" /home
# 递归搜索当前目录(. 表示当前)下所有 .txt 文件,查找 "test"
grep -r "test" . --include="*.txt" # --include 过滤文件类型
7. 匹配整个单词(避免部分匹配)
参数:-w(word match)
功能:只匹配「完整单词」,不匹配单词的一部分(比如关键词 "test" 不会匹配 "test123"、"atest")。
示例:
# 从 test.txt 中只匹配完整的 "test" 单词,不匹配部分包含的情况
grep -w "test" test.txt
二、进阶用法:正则表达式匹配(强大灵活)
grep 支持正则表达式(默认基础正则,加 -E 支持扩展正则),能实现复杂匹配(比如匹配邮箱、IP、特定格式的字符串)。
1. 基础正则示例(无需加 -E)
-
匹配以某个字符开头的行:
^关键词(^表示行首)
示例:查找 test.txt 中以 "user" 开头的行grep "^user" test.txt -
匹配以某个字符结尾的行:
关键词$($表示行尾)
示例:查找 test.txt 中以 "end" 结尾的行grep "end$" test.txt -
匹配任意单个字符:
.(点号,匹配除换行外的任意一个字符)
示例:查找包含 "he?lo"(? 是任意字符,比如 "hello"、"hulo"、"hxlo")的行grep "he.lo" test.txt -
匹配零个或多个前导字符:
*(星号,匹配前面的字符出现 0 次或多次)
示例:查找包含 "ho"、"hlo"、"hllo"、"hhhhlo" 等的行grep "h*lo" test.txt
2. 扩展正则示例(加 -E,简化语法)
扩展正则支持 +(至少一次)、?(零次或一次)、|(或)等符号,无需转义,更简洁。
参数:-E(extended regexp),等价于 egrep 命令。
示例:
# 匹配 "hello" 或 "world"(用 | 表示“或”)
grep -E "hello|world" test.txt
# 匹配 "he" 后面跟至少一个 "l"(用 + 表示“至少一次”),比如 "hell"、"heell"
grep -E "hel+l" test.txt
# 匹配 "http" 或 "https"(s 可选,用 ? 表示“零次或一次”)
grep -E "https?" test.txt
三、常用组合:与其他命令管道(|)配合
grep 常和其他命令(比如 ls、ps、cat)用管道 | 连接,过滤命令输出的结果(这是 Linux 中最强大的用法之一)。
示例:
# 过滤当前目录下的 .txt 文件(ls 输出中包含 .txt 的行)
ls | grep ".txt"
# 查找系统中运行的 nginx 进程(ps 输出中包含 nginx 的行)
ps aux | grep "nginx"
# 查看日志文件 /var/log/nginx/access.log,只显示包含 "404" 错误的行
cat /var/log/nginx/access.log | grep "404"
# 查找 /home 目录下所有 .log 文件,统计包含 "error" 的总行数
grep -r "error" /home --include="*.log" | wc -l # wc -l 统计行数
四、常见注意事项
-
关键词包含空格/特殊字符:需要用单引号
'或双引号"包裹(单引号更安全,避免 Shell 解析特殊字符)。
示例:查找包含 "hello world"(带空格)的行grep 'hello world' test.txt -
匹配特殊字符(如
.、*、^):需要用反斜杠\转义(基础正则中)。
示例:查找包含www.baidu.com的行(.是特殊字符,需转义)grep "www\.baidu\.com" test.txt -
大文件搜索:
grep效率很高,但大文件(比如几十GB日志)建议结合head/tail先截取部分内容,再过滤:tail -1000 /var/log/nginx/access.log | grep "404" # 只看最后1000行的404错误
总结
grep 是 Linux 文本处理的“瑞士军刀”,核心用法就是「搜索关键词/正则 + 过滤输出」,配合管道 | 能解决大部分文本处理场景。
最常用的组合:
# 1. 文件中查找关键词(忽略大小写+显示行号)
grep -in "关键词" 文件名
# 2. 管道过滤命令输出
命令 | grep "关键词"
# 3. 递归查找目录中所有文件的关键词
grep -r "关键词" 目录名 --include="*.文件类型"
2)find 搜索文件和目录
find 是 Linux 中 最强大的文件/目录搜索命令——支持按文件名、类型、大小、时间、权限、所有者等多种条件精准查找,还能对找到的文件直接执行操作(如删除、复制),日常运维必备。以下是极简实用的用法总结,覆盖90%高频场景:
一、核心语法(通用格式)
find 搜索路径 搜索条件 操作动作(可选)
- 搜索路径:默认是当前目录(
.),可指定绝对路径(如/home、/data); - 搜索条件:最常用
(-name 文件名)、(-type 类型)、(-size 大小)、(-mtime 时间)等; - 操作动作:默认是“列出找到的文件”,可加
-delete(删除)、-exec(执行命令)等。
二、高频搜索场景(表格+示例)
| 分类 | 参数 | 核心作用 | 用法示例 |
|---|---|---|---|
| 文件名筛选 | -name |
匹配文件名,*模糊匹配 |
|
-iname |
忽略大小写 | ||
| 🔍 按文件类型筛选 | -type |
区分文件 / 目录 / 软链接等 | -type f(普通文件)、-type d(目录)、-type l(软链接)find /usr/bin -type f -name "*.sh" |
| 📏 按文件大小筛选 | -size |
按大小匹配(支持 b/k/M/G) | -size +100M(大于 100MB)、-size -10k(小于 10KB)、-size 5M(等于 5MB)find /tmp -size +500M |
| ⏰ 按时间筛选 | -mtime |
按文件内容修改时间(天) | -mtime -7(7 天内修改)、-mtime +30(超过 30 天未修改)find /var/log -type f -mtime +7 -delete(清理 7 天前日志) |
-atime |
按文件访问时间(天) | -atime +10(超过 10 天未访问) |
|
-ctime |
按文件属性修改时间(天) | -ctime -1(1 天内修改过权限 / 所有者) |
|
-mmin/-amin |
按时间(分钟)筛选 | -mmin -60(1 小时内修改) |
|
| 👤 按所有者 / 组筛选 | -user |
按文件所有者(用户名 / UID) | find /home -user tangge(查找 tangge 的文件) |
-group |
按文件所属组(组名 / GID) | find /data -group dev(查找 dev 组的文件) |
|
-nouser |
查找无所有者的文件(孤儿文件) | find / -nouser(清理系统垃圾常用) |
|
-nogroup |
查找无所属组的文件 | find / -nogroup |
|
| 🔐 按权限筛选 | -perm |
按文件权限(数字 / 符号)匹配 | -perm 777(权限为 777 的文件)、-perm -u+x(所有者有执行权限)find / -type f -perm 777(查找危险权限文件) |
📁 路径筛选(不含 i 前缀) |
-path |
按完整路径匹配(区分大小写) | find / -path "*/etc/nginx/*"(匹配 /etc/nginx 下的所有文件) |
-regex |
按正则匹配路径 / 文件名(区分大小写) | find /etc -regex ".*\.conf$"(匹配所有 .conf 结尾的文件) |
|
-prune |
排除指定目录(不递归进入) | find /home -path "/home/tangge/tmp" -prune -o -name "*.txt"(排除 tmp 目录,查找其他 .txt 文件) |
|
| 🚀 找到后操作 | -delete |
直接删除找到的文件(谨慎!) | find /tmp -type f -name "*.tmp" -delete |
-exec |
对找到的文件执行命令 | find /home -type f -name "*.sh" -exec chmod u+x {} \;(添加执行权限) |
|
-ok |
执行命令前先确认(比 -exec 安全) |
find /tmp -type f -mtime +30 -ok rm {} \;(删除前确认) |
|
-print |
输出找到的文件路径(默认动作,可省略) | find /etc -name "nginx.conf" -print |
1. 按文件名搜索(最常用)
| 需求 | 命令 | 说明 |
|---|---|---|
| 精确匹配文件名 | find /home -name "test.txt" |
查找 /home 下名为 test.txt 的文件(区分大小写) |
| 模糊匹配(包含关键字) | find /data -name "*report*" |
查找 /data 下文件名包含 report 的文件(如 2024_report.pdf) |
| 忽略大小写 | find /etc -iname "nginx.conf" |
查找 /etc 下名为 nginx.conf 的文件(不区分大小写,如 Nginx.conf 也会匹配) |
2. 按文件类型搜索
| 类型符号 | 含义 | 命令示例 |
|---|---|---|
f |
普通文件(文档、脚本等) | find /usr/bin -type f -name "*.sh"(查找 /usr/bin 下的 .sh 脚本文件) |
d |
目录 | find /data -type d -name "backup"(查找 /data 下名为 backup 的目录) |
l |
软链接(快捷方式) | find /home -type l -name "link*"(查找 /home 下名为 link 开头的软链接) |
3. 按文件大小搜索
单位:b(字节)、k(KB)、M(MB)、G(GB);+=大于,-=小于,无符号=等于。
| 需求 | 命令 |
|---|---|
| 查找大于 100MB 的文件 | find / -size +100M(搜索整个系统,慎用,可能较慢) |
| 查找小于 10KB 的文件 | find /home -size -10k |
| 查找等于 5MB 的文件 | find /data -size 5M |
4. 按修改时间搜索
单位:d(天)、h(小时)、m(分钟);+=超过,-=以内。
| 需求 | 命令 |
|---|---|
| 查找 7 天内修改过的文件 | find /var/log -type f -mtime -7(查找 /var/log 下7天内修改的日志文件) |
| 查找超过 30 天未修改的文件 | find /home -type f -mtime +30(可用于清理旧文件) |
| 查找 1 小时内修改过的目录 | find /data -type d -mmin -60 |
5. 按所有者/所属组搜索
| 需求 | 命令 |
|---|---|
查找所有者为 tangge 的文件 |
find /home -user tangge |
查找所属组为 dev 的目录 |
find /data -group dev -type d |
6. 按权限搜索
用数字权限(如 755、644)指定,精准匹配文件权限。
| 需求 | 命令 |
|---|---|
查找权限为 777 的文件(危险权限,需清理) |
find / -type f -perm 777 |
| 查找所有者有执行权限的脚本 | find /usr/local -type f -perm -u+x(-u+x 表示所有者有执行权限) |
三、找到文件后的操作(实用!)
1. 直接删除找到的文件(谨慎!)
# 删除 /tmp 下超过 30 天的日志文件(先不加 -delete 预览,确认后再加)
find /tmp -type f -name "*.log" -mtime +30 -delete
- 建议:先执行
find /tmp -type f -name "*.log" -mtime +30预览要删除的文件,确认无误后再加-delete。
2. 对找到的文件执行命令(-exec)
语法:find ... -exec 命令 {} \;({} 代表找到的每个文件,\; 是命令结束标记)。
| 需求 | 命令 |
|---|---|
查找所有 .sh 脚本并添加执行权限 |
find /home -type f -name "*.sh" -exec chmod u+x {} \; |
查找 tangge 所有文件并复制到 /backup |
find /home -user tangge -exec cp {} /backup/ \; |
四、关键注意事项
-
搜索整个系统(
find / ...)时,可能会遇到“权限不够”的报错,可加-prune跳过无权限目录,或用sudo提升权限:sudo find / -name "nginx.conf" # 避免权限报错 -
模糊匹配时,文件名必须加引号(如
"*report*"),否则通配符(*)会被系统提前解析,导致搜索失败; -
-delete是危险操作,删除前务必预览; -
搜索速度:指定的路径越具体(如
/home/tangge而非/),搜索越快。
总结
find 核心用法:指定路径 + 精准条件 + 可选操作,日常高频场景:
- 找文件:
find 路径 -name "文件名"; - 找目录:
find 路径 -type d -name "目录名"; - 清理旧文件:
find 路径 -type f -mtime +天数 -delete; - 批量操作文件:
find 路径 -exec 命令 {} \;。
简单记:find 是“文件搜索瑞士军刀”,需要什么条件就加什么参数,灵活且强大。
3)locate 快速定位文件/目录
locate 是 Linux/Unix 系统中快速查找文件/目录的命令,核心优势是「速度极快」——因为它不实时遍历磁盘,而是查询系统预建的「文件路径数据库」(默认是 /var/lib/mlocate/mlocate.db)。
一、核心原理
- 系统会定期(通常是每天,由
cron任务触发updatedb命令)扫描磁盘,将所有文件/目录的路径记录到数据库中; locate命令直接查询这个数据库,而非实时扫描磁盘,因此查找速度远快于find(find是实时遍历)。
二、基本用法(最常用)
1. 基础查找:直接匹配文件名/路径
格式:locate [文件名/关键词]
功能:查找所有路径中包含「关键词」的文件/目录(默认不区分大小写,模糊匹配)。
示例:
# 查找所有路径中包含 "test.txt" 的文件(比如 /home/xxx/test.txt、/tmp/test.txt 等)
locate test.txt
# 查找所有 .txt 后缀的文件(模糊匹配,包含路径中带 .txt 的情况)
locate .txt
# 查找路径中包含 "tangge" 的目录/文件(比如 /home/tangge、/home/xxx/tangge.doc 等)
locate tangge
2. 精确匹配:只匹配完整文件名(避免模糊匹配)
参数:-b(全称 --basename,只匹配文件名,不匹配路径中的关键词)
示例:
# 只查找「文件名 exactly 是 test.txt」的文件(不会匹配 /home/test.txt.bak 这类)
locate -b test.txt
# 只查找「文件名以 .txt 结尾」的文件(避免匹配路径中带 .txt 的情况)
locate -b "*.txt"
3. 区分大小写匹配
参数:-i(默认,不区分大小写)、-I(大写 i,强制区分大小写)
示例:
# 只匹配文件名包含 "Test.txt"(大写 T)的文件,不匹配 "test.txt"
locate -I Test.txt
4. 限制查找结果数量
参数:-n [数字](只输出前 N 条结果)
示例:
# 只显示前 5 个包含 "test.txt" 的文件
locate -n 5 test.txt
5. 显示文件路径的详细信息(类似 ls -l)
参数:-l(全称 --long)
示例:
# 查找 test.txt 并显示权限、大小、修改时间等信息
locate -l test.txt
三、关键注意事项(避坑重点)
1. 找不到刚创建的文件?—— 更新数据库!
因为 locate 依赖预建数据库,刚创建/删除的文件不会实时同步到数据库中,导致查找不到。
解决:手动更新数据库(需要 root 权限,因为扫描磁盘需要权限):
sudo updatedb # 执行后会重新扫描所有磁盘,更新数据库(耗时根据磁盘大小而定)
2. locate 与 find 的核心区别(选择哪个?)
| 特性 | locate |
find |
|---|---|---|
| 查找速度 | 极快(查询数据库) | 较慢(实时遍历磁盘) |
| 实时性 | 差(依赖数据库更新) | 强(实时扫描,能找到刚创建的文件) |
| 查找条件 | 主要按「文件名/路径关键词」匹配 | 支持复杂条件(大小、权限、修改时间等) |
| 权限要求 | 普通用户即可(查询数据库) | 遍历目录需要对应权限(比如 /root 需 sudo) |
使用场景:
- 快速查找已知文件名的文件(比如
locate nginx.conf)→ 用locate; - 复杂条件查找(比如「/home 下 24 小时内修改的、大于 100M 的 .log 文件」)→ 用
find。
3. 排除某些目录查找
参数:-e(结合 /etc/updatedb.conf 配置)
默认情况下,updatedb 会跳过一些目录(比如 /tmp、/proc、/sys 等临时/虚拟文件系统),配置文件在 /etc/updatedb.conf 中。如果想让 locate 不查找某些目录,可修改该文件的 PRUNEPATHS 字段(需 root 权限)。
四、其他常用参数
| 参数 | 作用 | 示例 |
|---|---|---|
-r |
按正则表达式匹配(替代模糊匹配) | locate -r "^/home/.*\.txt$"(查找 /home 下的 .txt 文件) |
-c |
只统计匹配到的文件数量(不显示路径) | locate -c test.txt(统计有多少个 test.txt) |
-w |
完全匹配关键词(避免部分匹配) | locate -w "test.txt"(同 -b,但更严格) |
总结
locate 是「快速查找文件」的工具,核心用法就是 locate 关键词,配合 -b(精确匹配)、-n(限制数量)、sudo updatedb(更新数据库)就能满足大部分场景。如果需要复杂条件(比如按文件大小、修改时间查找),再用 find。
4)which 查找可执行命令路径
which 是 Linux/Unix 系统中查找可执行命令路径的工具,核心作用是:根据当前用户的 PATH 环境变量(系统查找可执行文件的路径列表),找到指定命令的绝对路径(比如 ls、cd、locate 等命令安装在哪里)。
简单说:你想知道一个命令“藏在系统的哪个文件夹里”,就用 which。
一、核心用法(超简单,常用就1种)
1. 基础查找:直接跟命令名
格式:which [命令名]
功能:返回该命令在 PATH 中的绝对路径(找到第一个匹配的路径)。
示例:
# 查找 ls 命令的路径(通常是 /bin/ls)
[root@node01 /]which ls
alias ls='ls --color=auto'
/usr/bin/ls
# 查找 locate 命令的路径(安装后通常是 /usr/bin/locate)
[root@node01 /]which locate
/usr/bin/locate
# 查找 yum 命令的路径(CentOS 系统通常是 /usr/bin/yum)
[root@node01 /]which yum
/usr/bin/yum
# 查找 python 命令的路径(可能是 /usr/bin/python 或 /usr/bin/python3)
[root@node01 /]which python
/usr/bin/python
执行结果示例(以 which ls 为例):
/bin/ls
2. 查找所有匹配的路径(不止第一个)
参数:-a(全称 --all)
默认 which 只返回第一个匹配的路径,-a 会列出 PATH 中所有符合的路径。
示例:
# 查找所有 python 相关的可执行路径(比如同时有 python2 和 python3 时)
which -a python
# 查找所有 ls 相关的路径(通常只有1个,但部分系统可能有别名对应的路径)
which -a ls
二、关键特性(和其他查找命令的区别)
-
只找“可执行命令”:
which仅查找PATH环境变量中记录的、能直接运行的命令(比如ls、cat),不查找普通文件(比如.txt、.log)或目录——这是它和find、locate的核心区别。 -
不查找内置命令:
系统中有两类命令:- 外部命令:独立的可执行文件(比如
ls、locate,存在于/bin、/usr/bin等目录)→which能找到; - 内置命令:Shell 自带的命令(比如
cd、echo、alias,没有独立文件)→which找不到,会提示“无此命令”。
示例(
cd是内置命令,which找不到):which cd # 输出:which: no cd in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin) - 外部命令:独立的可执行文件(比如
-
遵循
PATH顺序:
which会按PATH环境变量中路径的顺序查找,返回第一个匹配的路径。比如PATH是/usr/local/bin:/bin:/usr/bin,which python会先找/usr/local/bin/python,找不到再找/bin/python。
三、常见使用场景
-
确认命令是否安装:
比如你安装了locate后,想确认是否安装成功(且能被系统找到),可以用which locate——如果输出路径,说明安装成功;如果提示“no locate in ...”,说明没安装或路径没加入PATH。 -
区分同名命令:
系统中可能有多个同名命令(比如不同版本的python),用which -a python可以列出所有可用的路径,避免用错版本。 -
查看命令的实际执行路径:
比如你设置了命令别名(alias ls='ls --color=auto'),用which ls能看到别名对应的原始命令路径(依然是/bin/ls)。
四、和 whereis、find 的区别(避免用混)
| 命令 | 核心作用 | 查找范围 | 适用场景 |
|---|---|---|---|
which |
查找可执行命令的路径 | 仅 PATH 环境变量中的路径 |
确认命令是否安装、找命令路径 |
whereis |
查找命令的可执行文件、源码、手册页 | 系统默认的命令安装目录 | 同时找命令+源码+手册(比如 whereis ls) |
find |
查找任意文件/目录(支持复杂条件) | 整个磁盘(指定目录) | 查找普通文件、按大小/时间等条件查找 |
示例对比:
which ls # 只返回 /bin/ls(可执行路径)
whereis ls # 返回 ls: /bin/ls /usr/share/man/man1/ls.1.gz(可执行+手册)
find / -name ls # 查找全系统所有叫 ls 的文件(包括非可执行文件)
总结
which 是“命令专属查找工具”,用法简单、速度快,核心就是找可执行命令的路径。日常用得最多的场景:确认命令是否安装、区分同名命令版本。
常用命令就2个:
which 命令名 # 找第一个匹配的路径
which -a 命令名 # 找所有匹配的路径

浙公网安备 33010602011771号