🎯 Linux which 和 find 命令简明指南:从入门到实用
📅 更新时间:2025年6月7日
🏷️ 标签:Linux | which | find | 命令行 | 文件查找
文章目录
- 前言
- 🌟 一、Linux 命令的本质与 which、find 的作用
- 1.Linux 命令的本质
- 2.which 和 find 的核心价值
- 📌 二、which 命令:定位可执行程序
- 1.基本用法
- 2.示例
- 🧭 三、find 命令:灵活搜索文件
- find命令按文件名查找
- 1.基础语法
- 2.示例
- 3.搭配通配符进行搜索
- find命令按文件大小查找
- 1.基础语法
- 2.示例:
- 📚四、总结
前言
本文将循序渐进地介绍 Linux 中 which 和 find 命令,涵盖其本质、基础用法、进阶技巧和实际应用。通过精炼的示例和实践建议,带你快速掌握这两个命令,助你在 Linux 系统中高效定位可执行程序和文件
🌟 一、Linux 命令的本质与 which、find 的作用
1.Linux 命令的本质
在 Linux 中,命令本质上是一个个二进制可执行程序
,存储在文件系统中的特定目录(如 /bin, /usr/bin)。这些程序通过 PATH 环境变量被 shell 找到并执行。which 和 find 是两款用于定位程序和文件的强大工具
2.which 和 find 的核心价值
which:查找 PATH 中可执行文件的路径,确认命令
位置。
find:在文件系统中搜索文件或目录
价值:快速定位命令或文件,提升效率,避免手动搜索,支持多种条件
📌 二、which 命令:定位可执行程序
1.基本用法
which 查找 PATH 环境变量中的命令路径,返回第一个匹配的可执行文件路径
which 要查找的命令
2.示例
比如我们之前学过的一些命令
ls
cd
touch
mkdir
rm
我们来试试看,分别输入下面的查询
which ls
输出:/usr/bin/ls
which cd
输出:
对,你没看错,当查询到cd 命令的时候 ,输出为空!!!!???
✅ 关键原因:cd 不是外部命令,而是 Shell 内建命令(builtin)
cd 是 bash(或者你当前使用的 Shell)自带的一个内建命令,它不会在 /bin 或 /usr/bin 里以独立程序的形式存在
而which查询的是 「PATH 路径下的可执行文件」 ,但 cd 不是文件,而是 Shell 内部的函数或机制,所以 which 查不到它
which touch
输出:/usr/bin/touch
which mkdir
输出:/usr/bin/mkdir
which rm
输出:/usr/bin/rm
🧭 三、find 命令:灵活搜索文件
在windows系统中,我们也有文件搜索功能
那么在Linux中,我们通过find命令去搜索文件
find命令按文件名查找
1.基础语法
find 起始路径 -name "被查找文件名"
这个起始路径比如我写一个 /
就代表从根目录开始搜索
2.示例
比如我此时有一个问题
需要全盘搜索本机名为test的文件地址
那么命令如下
find / -name "test"
输出:
/usr/share/alsa/init/test
/usr/lib/python3.8/test
/usr/lib/modules/5.15.0-119-generic/kernel/drivers/ntb/test
/usr/lib/modules/5.15.0-119-generic/kernel/drivers/firmware/efi/test
/usr/lib/modules/5.15.0-139-generic/kernel/drivers/ntb/test
/usr/lib/modules/5.15.0-139-generic/kernel/drivers/firmware/efi/test
/usr/lib/python3/dist-packages/future/backports/test
/usr/lib/python3/dist-packages/future/moves/test
/usr/lib/python3/dist-packages/systemd/test
/usr/bin/test
/usr/src/linux-hwe-5.15-headers-5.15.0-139/tools/testing/nvdimm/test
/usr/src/linux-hwe-5.15-headers-5.15.0-139/lib/raid6/test
/usr/src/linux-hwe-5.15-headers-5.15.0-139/drivers/base/test
/usr/src/linux-hwe-5.15-headers-5.15.0-139/drivers/iio/test
/usr/src/linux-hwe-5.15-headers-5.15.0-139/drivers/ntb/test
/usr/src/linux-hwe-5.15-headers-5.15.0-139/drivers/firmware/efi/test
/usr/src/linux-hwe-5.15-headers-5.15.0-119/tools/testing/nvdimm/test
/usr/src/linux-hwe-5.15-headers-5.15.0-119/lib/raid6/test
/usr/src/linux-hwe-5.15-headers-5.15.0-119/drivers/base/test
/usr/src/linux-hwe-5.15-headers-5.15.0-119/drivers/iio/test
/usr/src/linux-hwe-5.15-headers-5.15.0-119/drivers/ntb/test
/usr/src/linux-hwe-5.15-headers-5.15.0-119/drivers/firmware/efi/test
我们会发现有非常多的名为test的文件就被搜索出来了
3.搭配通配符进行搜索
根据语法
find 起始路径 -name "被查找文件名"
被查找的文件名,支持使用通配符*
来做模糊查询
1.符号 *
表示通配符,即匹配任意内容(包含空) 示例:
2.test*
表示匹配任何以test开头的内容
3.*test
表示匹配任何以test结尾的内容
4.*test*
表示匹配任何包含test的内容
基于通配符的含义,可以结合find命令做文件的模糊查询
问题示例1:
要求找以test开头的文件
输入:
find / -name "test*"
输出:
//仅列出部分!!!!!!!!!!!!!!!
/usr/share/perl/5.30.0/ExtUtils/testlib.pm
/usr/share/perl5/Mail/Mailer/testfile.pm
/usr/share/man/man1/test.1.gz
/usr/share/sounds/speech-dispatcher/test.wav
/usr/share/doc/binutils/test-summary-amd64.gz
/usr/share/doc/docbook-xml/examples/test-4.1.2.xml
/usr/share/doc/docbook-xml/examples/test-si-url-docbook.org-4.1.2.xml
/usr/share/doc/docbook-xml/examples/test-si-url-oasis-4.3.xml
/usr/share/doc/docbook-xml/examples/test-si-url-docbook.org-4.4.xml
/usr/share/doc/docbook-xml/examples/test-si-url-oasis-4.1.2.xml
/usr/share/doc/docbook-xml/examples/test-legacy-si-4.3.xml
/usr/share/doc/docbook-xml/examples/test-si-url-docbook.org-4.2.xml
/usr/share/doc/docbook-xml/examples/test-si-url-docbook.org-4.3.xml
我们会发现,都是以test开头的文件名
问题示例2:
要求找以test结尾的文件
输入:
find / -name "*test"
输出:
//仅列出部分!!!!!!!!!!!!!!!
/usr/share/bash-completion/completions/py.test
/usr/share/bash-completion/completions/pytest
/usr/share/im-config/data/21_ibus.conf.pretest
/usr/share/im-config/data/78_none.rc.pretest
/usr/share/im-config/data/90_bogus.rc.pretest
我们会发现,都是以test结尾的文件名
问题示例3:
要求找包含test的文件
输入:
find / -name "*test*"
输出:
//仅列出部分!!!!!!!!!!!!!!!
/usr/src/linux-hwe-5.15-headers-5.15.0-139/tools/perf/arch/x86/tests
/usr/src/linux-hwe-5.15-headers-5.15.0-139/tools/perf/tests
/usr/src/linux-hwe-5.15-headers-5.15.0-139/tools/perf/tests/shell/test_uprobe_from_different_cu.sh
/usr/src/linux-hwe-5.15-headers-5.15.0-139/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh
我们会发现,都是包含test的文件名
find命令按文件大小查找
1.基础语法
find 起始路径 -size +/- 数字 k/M/G
+ -
表示大于和小于
k
表示kb
M
表示MB
G
表示GB
2.示例:
查找小于10kb的文件
find / -size -10k
查找大于100MB的文件
find / -size +100M
查找大于1GB的文件
find / -size +1G
📚四、总结
which
快速定位命令路径,find
灵活搜索文件,二者是 Linux 文件管理的核心工具。掌握它们能大幅提升效率,适合日常操作和脚本开发
❤️ 如果你觉得本文对你有帮助,欢迎点赞、评论与收藏。更多 Linux 与 C++ 开发知识,敬请关注后续更新!