<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux 基础 on Breaking Dawn</title><link>https://breaking-dawn.cn/categories/linux-%E5%9F%BA%E7%A1%80/</link><description>Recent content in Linux 基础 on Breaking Dawn</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 21 Jul 2026 10:45:00 +0800</lastBuildDate><atom:link href="https://breaking-dawn.cn/categories/linux-%E5%9F%BA%E7%A1%80/index.xml" rel="self" type="application/rss+xml"/><item><title>update-alternatives：在 Linux 中管理同一命令的多个实现</title><link>https://breaking-dawn.cn/p/linux-update-alternatives/</link><pubDate>Tue, 21 Jul 2026 10:45:00 +0800</pubDate><guid>https://breaking-dawn.cn/p/linux-update-alternatives/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;适用环境&lt;/strong&gt;：Ubuntu 22.04 LTS / Debian 系。&lt;code&gt;update-alternatives&lt;/code&gt; 管理的是系统级符号链接，不等同于语言版本管理器或 PATH 顺序。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;同一个命令名可能有多种实现，例如 &lt;code&gt;editor&lt;/code&gt;、&lt;code&gt;java&lt;/code&gt;、&lt;code&gt;cc&lt;/code&gt;。Debian 系统用 alternatives 链接组决定默认目标，避免用户直接手改 &lt;code&gt;/usr/bin&lt;/code&gt; 下的链接。&lt;/p&gt;
&lt;h2 id="查看与交互选择"&gt;查看与交互选择
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;update-alternatives --display editor
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo update-alternatives --config editor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;第一条会显示当前链接、可选项和优先级；第二条提供编号选择。切换前先确认候选程序来自可信软件包，并在切换后核对版本：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;command&lt;/span&gt; -v editor
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;readlink -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; -v editor&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="创建自定义链接组时要非常具体"&gt;创建自定义链接组时要非常具体
&lt;/h2&gt;&lt;p&gt;只有当软件本身没有注册 alternatives 且确有系统级需求时，才使用 &lt;code&gt;--install&lt;/code&gt;。下面是占位示例，路径、名称、优先级都必须换成实际值：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo update-alternatives --install /usr/local/bin/example-tool example-tool /opt/example-v2/bin/example-tool &lt;span class="m"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo update-alternatives --config example-tool
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;不要用 alternatives 直接管理 &lt;code&gt;python&lt;/code&gt;、&lt;code&gt;pip&lt;/code&gt;、Node.js、CMake 等开发工具的全部生态。它们通常还牵涉虚拟环境、包管理器、IDE 与项目级版本要求；更适合使用 &lt;code&gt;venv&lt;/code&gt;、nvm、容器或项目工具链。&lt;/p&gt;
&lt;h2 id="取消手工加入的候选项"&gt;取消手工加入的候选项
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo update-alternatives --remove example-tool /opt/example-v2/bin/example-tool
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;移除前先切换到另一个有效候选项。由 APT 安装的软件包应优先通过 APT 卸载，让软件包维护脚本处理对应 alternatives。&lt;/p&gt;
&lt;h2 id="出处"&gt;出处
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;原始参考：&lt;a class="link" href="https://developer.aliyun.com/article/1578188" target="_blank" rel="noopener"
 &gt;update-alternatives 命令使用方法与软件多版本管理&lt;/a&gt;（阿里云开发者社区）&lt;/li&gt;
&lt;li&gt;手册参考：&lt;a class="link" href="https://manpages.ubuntu.com/manpages/jammy/man1/update-alternatives.1.html" target="_blank" rel="noopener"
 &gt;Ubuntu Jammy：update-alternatives(1)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文将原始资料整理为“查看—切换—谨慎注册—移除”的可回退流程。&lt;/p&gt;</description></item><item><title>Linux 的 .profile、.bashrc、.bash_profile：该把配置写到哪里</title><link>https://breaking-dawn.cn/p/bash-startup-files/</link><pubDate>Tue, 21 Jul 2026 10:00:00 +0800</pubDate><guid>https://breaking-dawn.cn/p/bash-startup-files/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;适用环境&lt;/strong&gt;：Ubuntu 22.04 LTS 默认 Bash。先用 &lt;code&gt;echo &amp;quot;$SHELL&amp;quot;&lt;/code&gt; 确认自己使用的是 Bash；Zsh、Fish 有不同的加载规则。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;最简原则：&lt;strong&gt;交互式终端行为放 &lt;code&gt;.bashrc&lt;/code&gt;，登录后只需执行一次的环境设置放 &lt;code&gt;.profile&lt;/code&gt;&lt;/strong&gt;。不要把同一段初始化同时复制到多个文件，否则每打开一个终端都可能重复追加 PATH 或启动工具。&lt;/p&gt;
&lt;h2 id="ubuntu-2204-中三个文件的角色"&gt;Ubuntu 22.04 中三个文件的角色
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;文件&lt;/th&gt;
					&lt;th&gt;通常何时读取&lt;/th&gt;
					&lt;th&gt;合适内容&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~/.bashrc&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;每个交互式 Bash 终端&lt;/td&gt;
					&lt;td&gt;别名、提示符、补全、交互工具初始化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~/.profile&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;图形登录，或 Bash 没有前两个登录配置时的登录 shell&lt;/td&gt;
					&lt;td&gt;PATH、登录环境变量；Ubuntu 默认模板通常让它加载 &lt;code&gt;.bashrc&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~/.bash_profile&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Bash 登录 shell；优先级高于 &lt;code&gt;.profile&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;仅在自己明确需要 Bash 专用登录配置时创建&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;系统级配置应单独看待：&lt;code&gt;/etc/profile&lt;/code&gt; 负责登录 shell 的全局环境设置，并可能加载 &lt;code&gt;/etc/profile.d/&lt;/code&gt; 下的脚本；Ubuntu 的交互式 Bash 全局配置通常是 &lt;code&gt;/etc/bash.bashrc&lt;/code&gt;，&lt;strong&gt;不是&lt;/strong&gt;一些教程中写的 &lt;code&gt;/etc/bashrc&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="bash-登录时的优先顺序"&gt;Bash 登录时的优先顺序
&lt;/h2&gt;&lt;p&gt;Bash 作为登录 shell 时，依次尝试读取：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;~/.bash_profile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;不存在时读取 &lt;code&gt;~/.bash_login&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;前两者都不存在时读取 &lt;code&gt;~/.profile&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;三者只会命中其中一个。Ubuntu 的默认 &lt;code&gt;~/.profile&lt;/code&gt; 通常会在交互式 Bash 环境中加载 &lt;code&gt;~/.bashrc&lt;/code&gt;；一旦自行新建 &lt;code&gt;.bash_profile&lt;/code&gt;，Bash 就不再自动读取 &lt;code&gt;.profile&lt;/code&gt;。如果确实要创建它，通常应显式加载 &lt;code&gt;.profile&lt;/code&gt;，避免丢失系统默认的 PATH 设置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -f ~/.profile &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; . ~/.profile
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="修改后的即时验证"&gt;修改后的即时验证
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;%s\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;command&lt;/span&gt; -v 需要检查的命令
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;source&lt;/code&gt; 只影响当前终端。对图形登录环境变量、输入法或桌面程序，应该注销再登录，不要仅凭当前终端的结果判断成功。&lt;/p&gt;
&lt;h2 id="常见误区"&gt;常见误区
&lt;/h2&gt;&lt;p&gt;不要把需要用户交互的命令、会输出大量文字的命令或启动 GUI 程序写进 &lt;code&gt;.profile&lt;/code&gt;。它们可能在登录管理器、远程会话或脚本中被调用，造成登录变慢或环境异常。&lt;/p&gt;
&lt;p&gt;另一个常见误解是“每个 shell 脚本都会读取 &lt;code&gt;.bashrc&lt;/code&gt;”。默认的非交互式 Bash 不会读取 &lt;code&gt;~/.bashrc&lt;/code&gt;；只有显式 &lt;code&gt;source&lt;/code&gt;，或设置了 &lt;code&gt;BASH_ENV&lt;/code&gt; 时才可能读取额外配置。因此，脚本所需的环境变量应在脚本、systemd 单元或项目环境中明确声明。对于 nvm、conda 等工具，优先复制其官方安装器给出的单一初始化片段，并放到对应 shell 的推荐文件。&lt;/p&gt;
&lt;h2 id="出处"&gt;出处
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;原始参考：&lt;a class="link" href="https://zhuanlan.zhihu.com/p/405174594" target="_blank" rel="noopener"
 &gt;Linux 文件 profile、bashrc、bash_profile 区别&lt;/a&gt;（linux技术栈，知乎）&lt;/li&gt;
&lt;li&gt;手册参考：&lt;a class="link" href="https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html" target="_blank" rel="noopener"
 &gt;GNU Bash Manual：Bash Startup Files&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文已依据补充提供的原始 HTML 核对其登录配置顺序，并修正了 &lt;code&gt;/etc/bashrc&lt;/code&gt; 路径和“.bashrc 会被所有脚本读取”等不适用于 Ubuntu 22.04 的表述。&lt;/p&gt;</description></item><item><title>Linux 中查找命令与文件：which、whereis、locate、find 怎么选</title><link>https://breaking-dawn.cn/p/linux-command-search/</link><pubDate>Tue, 21 Jul 2026 09:30:00 +0800</pubDate><guid>https://breaking-dawn.cn/p/linux-command-search/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;适用环境&lt;/strong&gt;：Ubuntu 22.04 LTS。命令搜索与文件搜索是两件不同的事，先明确目标会少走很多弯路。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;想找什么&lt;/th&gt;
					&lt;th&gt;优先命令&lt;/th&gt;
					&lt;th&gt;特点&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;当前 shell 实际会执行哪个命令&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;command -v 名称&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;能识别 shell 内建命令、别名和函数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;PATH 中的可执行文件&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;which 名称&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;简单，但不适合判断别名或函数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;二进制、源码、手册的大致位置&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;whereis 名称&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;快，搜索范围有限&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;已建立索引的文件名&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;locate 关键词&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;非常快，结果可能不是最新&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;在真实目录树中精确查找&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;find 路径 条件&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;最可靠，但大范围搜索较慢&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="找我现在运行的是谁"&gt;找“我现在运行的是谁”
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;command&lt;/span&gt; -v python
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;type&lt;/span&gt; -a python
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;command -v&lt;/code&gt; 最适合脚本与日常判断；&lt;code&gt;type -a&lt;/code&gt; 会列出所有同名候选项。若安装了多个 Node、Python 或 CMake，这比单独使用 &lt;code&gt;which&lt;/code&gt; 更能说明实际调用顺序。&lt;/p&gt;
&lt;p&gt;原始资料用“复制 &lt;code&gt;ls&lt;/code&gt; 到家目录”的实验说明了一个关键差异：&lt;code&gt;which&lt;/code&gt; 只会返回位于 &lt;code&gt;$PATH&lt;/code&gt; 中、且具有可执行权限的候选文件。需要列出全部候选项时可使用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;which -a ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;但不要把个人家目录为了测试而长期加入全局 &lt;code&gt;PATH&lt;/code&gt;；这会让同名程序覆盖系统命令，增加排障与安全风险。&lt;/p&gt;
&lt;h2 id="whereis快速定位软件相关文件"&gt;&lt;code&gt;whereis&lt;/code&gt;：快速定位软件相关文件
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;whereis ls
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;whereis -b ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;whereis&lt;/code&gt; 查找预定义系统目录中的二进制文件、源码和手册页，适合快速了解软件安装位置。&lt;code&gt;-b&lt;/code&gt; 只显示二进制文件。它不是“遍历整个硬盘”的工具；找不到结果不代表文件一定不存在。&lt;/p&gt;
&lt;h2 id="按文件名找文件"&gt;按文件名找文件
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -type f -iname &lt;span class="s1"&gt;&amp;#39;*report*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find /etc -type f -name &lt;span class="s1"&gt;&amp;#39;*.conf&amp;#39;&lt;/span&gt; 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;-iname&lt;/code&gt; 忽略大小写；第二个示例把权限错误重定向掉，避免干扰结果。搜索全盘前先限制目录，例如从 &lt;code&gt;$HOME&lt;/code&gt;、&lt;code&gt;/etc&lt;/code&gt; 或项目目录开始。&lt;/p&gt;
&lt;h2 id="使用-locate-前先理解索引"&gt;使用 locate 前先理解“索引”
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;locate ssh_config
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;locate -r &lt;span class="s1"&gt;&amp;#39;\bls$&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo updatedb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;locate&lt;/code&gt; 查询的是文件名数据库，并不实时遍历磁盘；刚创建或删除的文件可能还没反映出来。Ubuntu 22.04 常使用 &lt;code&gt;plocate&lt;/code&gt; 提供该功能，&lt;code&gt;updatedb&lt;/code&gt; 会刷新索引，耗时与磁盘内容有关。原始资料的 &lt;code&gt;locate -r '\bls$'&lt;/code&gt; 示例展示了用正则把宽泛的文件名匹配缩小到以 &lt;code&gt;ls&lt;/code&gt; 结尾的路径。&lt;/p&gt;
&lt;h2 id="find在指定目录中精确搜索"&gt;&lt;code&gt;find&lt;/code&gt;：在指定目录中精确搜索
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; /bin -type f -name &lt;span class="s1"&gt;&amp;#39;ls&amp;#39;&lt;/span&gt; 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -type f -iname &lt;span class="s1"&gt;&amp;#39;*report*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find /etc -type f -name &lt;span class="s1"&gt;&amp;#39;*.conf&amp;#39;&lt;/span&gt; 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;find&lt;/code&gt; 直接遍历目录树，是最可靠也最灵活的工具。必须明确写出起始路径：未提供路径时，&lt;code&gt;find&lt;/code&gt; 默认从当前目录 &lt;code&gt;.&lt;/code&gt; 开始，而不是从根目录 &lt;code&gt;/&lt;/code&gt; 开始。搜索全盘前先限制目录，例如从 &lt;code&gt;$HOME&lt;/code&gt;、&lt;code&gt;/etc&lt;/code&gt; 或项目目录开始。&lt;/p&gt;
&lt;h2 id="出处"&gt;出处
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;原始参考：&lt;a class="link" href="https://zhuanlan.zhihu.com/p/35727707" target="_blank" rel="noopener"
 &gt;linux 命令 which、whereis、locate、find 的区别&lt;/a&gt;（splinzer，知乎）&lt;/li&gt;
&lt;li&gt;手册参考：&lt;a class="link" href="https://www.gnu.org/software/findutils/manual/html_mono/find.html" target="_blank" rel="noopener"
 &gt;GNU findutils 文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文已依据补充提供的原始 HTML 重新核对，并保留其“复制 &lt;code&gt;ls&lt;/code&gt;、修改权限、刷新索引”的对比思路；具体行为仍以 Ubuntu 22.04 本机命令输出为准。&lt;/p&gt;</description></item></channel></rss>