当前位置: 首页 > article >正文

Linux基础命令which 和 find 简明指南

🎯 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 中 whichfind 命令,涵盖其本质、基础用法、进阶技巧和实际应用。通过精炼的示例和实践建议,带你快速掌握这两个命令,助你在 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/lswhich cd
输出: 

对,你没看错,当查询到cd 命令的时候 ,输出为空!!!!???

✅ 关键原因:cd 不是外部命令,而是 Shell 内建命令(builtin)
cd 是 bash(或者你当前使用的 Shell)自带的一个内建命令,它不会在 /bin 或 /usr/bin 里以独立程序的形式存在

而which查询的是 「PATH 路径下的可执行文件」 ,但 cd 不是文件,而是 Shell 内部的函数或机制,所以 which 查不到它

which touch
输出:/usr/bin/touchwhich mkdir
输出:/usr/bin/mkdirwhich 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++ 开发知识,敬请关注后续更新!

http://www.lryc.cn/news/2403769.html

相关文章:

  • 【学习记录】在 Ubuntu 中将新硬盘挂载到 /home 目录的完整指南
  • 思尔芯携手Andes晶心科技,加速先进RISC-V 芯片开发
  • kafka消息积压排查
  • drawio 开源免费的流程图绘制
  • YOLOv8 升级之路:主干网络嵌入 SCINet,优化黑暗环境目标检测
  • 传输层:udp与tcp协议
  • centos7.9源码安装zabbix7.12,求赞
  • 亚远景科技助力东风日产通过ASPICE CL2评估
  • Go语言进阶④:Go的数据结构和Java的有啥不一样
  • 基于JWT+SpringSecurity整合一个单点认证授权机制
  • IDEA 打开文件乱码
  • 第2章:Neo4j安装与配置
  • Shell 命令及运行原理 + 权限的概念(7)
  • 抽奖系统核心——抽奖管理
  • Android 蓝牙通信
  • 任务调度器-关于中心化调度 vs 去中心化调度的核心区别
  • 二、【ESP32开发全栈指南:ESP32 GPIO深度使用】
  • 力扣刷题(第四十九天)
  • 机器学习:集成学习概念和分类、随机森林、Adaboost、GBDT
  • 基于J2EE架构的在线考试系统设计与实现【源码+文档】
  • tpc udp http
  • 联想拯救者R9000P 网卡 Realtek 8852CE Ubuntu/Mint linux 系统睡眠后,无线网卡失效
  • Python训练营打卡 Day46
  • 解决微软应用商店 (Microsoft store) 打不开,无网络连接的问题!
  • 《影像引导下骨盆创伤手术的术前骨折复位规划:基于学习的综合流程》|文献速递-深度学习医疗AI最新文献
  • 如何使用Webhook触发器,在 ONLYOFFICE 协作空间构建智能工作流
  • 跟我学c++中级篇——理解类型推导和C++不同版本的支持
  • 什么是DevOps智能平台的核心功能?
  • Windows账户管理,修改密码,创建帐户...(无需密码)
  • 软件功能模块归属论证方法