<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Shenshijun&apos;s Blog</title><description>一个分享技术与生活的博客</description><link>https://blog.shenshijun.space/</link><language>zh_CN</language><item><title>VSCode - C/C++ 环境配置、插件配置与使用指南</title><link>https://blog.shenshijun.space/posts/tutorials/vscode-cpp-setup/</link><guid isPermaLink="true">https://blog.shenshijun.space/posts/tutorials/vscode-cpp-setup/</guid><description>Dev-C++ 已过时，过于简陋，Visual Studio / CLion 对于写个小算法程序又稍显臃肿……来试试 VSCode 吧！</description><pubDate>Wed, 25 Mar 2026 20:34:31 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT] 适用范围声明&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;本教程 &lt;strong&gt;仅适用于 Windows 操作系统&lt;/strong&gt; 的用户。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;本教程的目标读者为 &lt;strong&gt;初学者&lt;/strong&gt;，主要用于编写 &lt;strong&gt;算法竞赛/练习题&lt;/strong&gt;（如洛谷、Codeforces、LeetCode 等平台的题目），不涉及复杂项目开发。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;本教程 &lt;strong&gt;不包含 CMake 等构建工具&lt;/strong&gt; 的使用方法，如需进行大型项目开发，请参考其他文档。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h1&gt;一、配置 C/C++ 环境&lt;/h1&gt;
&lt;h2&gt;1. 下载与安装 MSYS2&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;[!INFO] 什么是 MSYS2？&lt;br /&gt;
MSYS2 是一个基于 Cygwin 和 MinGW-w64 构建的现代化 Windows 软件分发与开发平台，核心使用 &lt;code&gt;pacman&lt;/code&gt; 包管理器统一管理类 Unix 工具链与原生 Windows 编译环境。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;前往 MSYS2 官方网站：&lt;a href=&quot;https://www.msys2.org/&quot;&gt;MSYS2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;根据自己设备的处理器架构选择合适的安装包：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE] 如何判断自己的计算机处理器架构？&lt;/p&gt;
&lt;h4&gt;方法一：通过 &quot;设置&quot; 查看处理器架构&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;按键盘快捷键 &lt;code&gt;Win + I&lt;/code&gt; 打开&quot;设置&quot;（或者点击开始菜单 → 设置齿轮图标）；&lt;/li&gt;
&lt;li&gt;在左侧点击 &lt;strong&gt;&quot;系统&quot;&lt;/strong&gt; ，右侧下滑到底部，点击 &lt;strong&gt;&quot;系统信息&quot;&lt;/strong&gt; ；&lt;/li&gt;
&lt;li&gt;在 &lt;strong&gt;&quot;设备规格&quot;&lt;/strong&gt; 区域找到 &lt;strong&gt;&quot;系统类型&quot;&lt;/strong&gt; 一栏：
&lt;ul&gt;
&lt;li&gt;如果显示 &lt;strong&gt;&quot;基于 x64 的处理器&quot;&lt;/strong&gt; ：则为 &lt;strong&gt;x86/x64&lt;/strong&gt; 架构（绝大多数 Intel 或 AMD 芯片）。&lt;/li&gt;
&lt;li&gt;如果显示 &lt;strong&gt;&quot;基于 ARM 的处理器&quot;&lt;/strong&gt; ：则为 &lt;strong&gt;ARM64&lt;/strong&gt; 架构（常见于搭载高通骁龙芯片如 Surface Pro X 等设备）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;例如以下就是一台搭载基于 x86 64 位架构处理器的设备：&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/CPU_Architecture.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;方法二：使用 &quot;命令提示符&quot; 查看处理器架构&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;按下 &lt;strong&gt;&lt;code&gt;Win + R&lt;/code&gt;&lt;/strong&gt;，输入 &lt;code&gt;cmd&lt;/code&gt; 并回车（&lt;strong&gt;注意：不要使用 PowerShell&lt;/strong&gt;）。&lt;/li&gt;
&lt;li&gt;在黑色窗口中输入以下命令并回车：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;echo %PROCESSOR_ARCHITECTURE%
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;查看输出结果：
&lt;ul&gt;
&lt;li&gt;显示 &lt;strong&gt;&lt;code&gt;AMD64&lt;/code&gt;&lt;/strong&gt;：代表 &lt;strong&gt;x64&lt;/strong&gt; 架构（注意：即使是 Intel 处理器也会显示 AMD64，这是历史命名原因）。&lt;/li&gt;
&lt;li&gt;显示 &lt;strong&gt;&lt;code&gt;ARM64&lt;/code&gt;&lt;/strong&gt;：代表 &lt;strong&gt;ARM&lt;/strong&gt; 架构。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;随后，一路&quot;下一步&quot;进行安装，默认安装路径为 &lt;code&gt;C:\msys64&lt;/code&gt;，请牢记此路径。&lt;/p&gt;
&lt;h3&gt;更新 MSYS2&lt;/h3&gt;
&lt;p&gt;如果你在安装时一路&quot;下一步&quot;，安装完成后应该会自动启动 &lt;code&gt;MSYS2 MSYS&lt;/code&gt; 终端。如果没有，请手动在开始菜单中找到 &lt;code&gt;MSYS2 MSYS&lt;/code&gt; 程序并点击打开。&lt;/p&gt;
&lt;p&gt;随后在终端内输入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacman -Syu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行软件包更新，期间确认请输入 &lt;code&gt;y&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;2. 安装 C/C++ 工具链&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;MSYS2 UCRT64&lt;/code&gt; &lt;strong&gt;终端&lt;/strong&gt; 中执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacman -S --needed --noconfirm mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-clang-tools-extra mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE] 命令说明&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mingw-w64-ucrt-x86_64-toolchain&lt;/code&gt;：包含 GCC/G++ 编译器、GDB 调试器等核心工具&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mingw-w64-ucrt-x86_64-clang-tools-extra&lt;/code&gt;：包含 Clangd 语言服务器，用于代码补全和语法检查&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mingw-w64-ucrt-x86_64-cmake&lt;/code&gt; 和 &lt;code&gt;mingw-w64-ucrt-x86_64-ninja&lt;/code&gt;：构建工具（本教程暂不深入使用）&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3&gt;验证安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;clangd --version  # 显示版本即成功
where clangd      # 应显示路径而不是提示未找到文件
where g++         # 应显示路径而不是提示未找到文件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以下为正确安装后的输出截图（版本号可能随时间发展而变动，请以实际安装显示为准）：&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/Verification-01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;配置环境变量&lt;/h3&gt;
&lt;p&gt;将 &lt;code&gt;C:\msys64\ucrt64\bin&lt;/code&gt; 添加到系统环境变量中。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br /&gt;
若你在安装 MSYS2 时更改了安装路径，请自行将 &lt;code&gt;C:\msys64&lt;/code&gt; 替换为你的实际安装路径。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE] Windows 系统下如何配置环境变量？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;按 &lt;code&gt;Win + I&lt;/code&gt; 打开设置（或在开始菜单找到设置打开）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在左侧点击 &lt;strong&gt;&quot;系统&quot;&lt;/strong&gt; ，右侧下滑到底部，点击 &lt;strong&gt;&quot;系统信息&quot;&lt;/strong&gt; ；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;strong&gt;&quot;设备规格&quot;&lt;/strong&gt; 区域 &lt;strong&gt;下方&lt;/strong&gt; 找到 &lt;strong&gt;&quot;高级系统设置&quot;&lt;/strong&gt; ；&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/Path-01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;&quot;环境变量&quot;&lt;/strong&gt; → &lt;strong&gt;&quot;系统变量&quot;&lt;/strong&gt; → &lt;strong&gt;&quot;Path&quot;&lt;/strong&gt; ；&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/Path-02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;&quot;浏览&quot;&lt;/strong&gt; ，或 &lt;strong&gt;&quot;新建&quot;&lt;/strong&gt; ，将上述路径添加到 Path 中。&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/Path-03.png&quot; alt=&quot;Path 配置页面&quot; width=&quot;400&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;Path 配置页面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;&quot;确定&quot;&lt;/strong&gt; 保存设置。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;验证环境变量：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 Windows Terminal（终端）（CMD 或 PowerShell）中，执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clangd --version
g++ --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;正确配置后输出（版本号可能随时间发展而变动，请以实际安装显示为准）：&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/Verification-02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;二、安装与配置 VSCode&lt;/h1&gt;
&lt;h2&gt;1. 下载与安装 VSCode&lt;/h2&gt;
&lt;h3&gt;下载 VSCode&lt;/h3&gt;
&lt;p&gt;前往 VSCode 官网下载网站：&lt;a href=&quot;https://code.visualstudio.com/Download&quot;&gt;Download Visual Studio Code - Mac, Linux, Windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;根据 CPU 架构，下载 &lt;code&gt;System Installer&lt;/code&gt;：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Download.png&quot; alt=&quot;VSCode 下载页面&quot; width=&quot;150&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;VSCode 下载页面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;h3&gt;安装 VSCode&lt;/h3&gt;
&lt;p&gt;双击安装包，若有 UAC 弹窗，请点击 &lt;strong&gt;&quot;允许&quot;&lt;/strong&gt; 或 &lt;strong&gt;&quot;是&quot;&lt;/strong&gt; 。&lt;/p&gt;
&lt;p&gt;随后，一路&quot;下一步&quot;安装，根据自己磁盘与程序存储路径偏好，选择合适的安装路径，并请牢记。&lt;/p&gt;
&lt;p&gt;安装时，推荐勾选以下选项（是否创建快捷方式请按个人需求勾选）：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Installer.png&quot; alt=&quot;VSCode 安装界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;VSCode 安装界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;h2&gt;2. 配置 VSCode&lt;/h2&gt;
&lt;h3&gt;安装并切换简体中文语言包&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[!INFO] 观前提示&lt;br /&gt;
若具有一定的英语阅读能力，且无需更换程序语言为简体中文，可跳过此步。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;搜索并安装：&lt;code&gt;Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code&lt;/code&gt; 插件。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-LP.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;随后，点击 &lt;code&gt;Change Language And Restart&lt;/code&gt; 按钮，VSCode 会自动重启并切换为简体中文。&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-LP-R.png&quot; alt=&quot;VSCode 重启弹窗&quot; width=&quot;400&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;VSCode 重启弹窗&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;h3&gt;安装 C/C++ 相关插件&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[!INFO] 弹窗提示&lt;br /&gt;
安装过程中，若遇到 &lt;strong&gt;&quot;是否信任发布者&quot;&lt;/strong&gt; 弹窗，请点击 &lt;strong&gt;&quot;信任发布者并安装&quot;&lt;/strong&gt; 。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;搜索并安装：&lt;code&gt;C/C++&lt;/code&gt;、&lt;code&gt;C/C++ Compile Run&lt;/code&gt; 插件。&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-01.png&quot; alt=&quot;VSCode 插件安装界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;VSCode 插件安装界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;搜索并安装：&lt;code&gt;clangd&lt;/code&gt;、&lt;code&gt;Clang-Format&lt;/code&gt; 插件。&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-02.png&quot; alt=&quot;clangd 插件安装界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;clangd 插件安装界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-03.png&quot; alt=&quot;Clang-Format 插件安装界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;Clang-Format 插件安装界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;h3&gt;配置相关插件&lt;/h3&gt;
&lt;h4&gt;关闭 IntelliSense&lt;/h4&gt;
&lt;p&gt;首先，打开或新建任意 &lt;code&gt;.cpp&lt;/code&gt; 后缀的文件，推荐写一个小程序，方便后续配置。&lt;/p&gt;
&lt;p&gt;此时，通常情况下，&lt;code&gt;clangd&lt;/code&gt; 插件会提示功能冲突，如下图：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-04.png&quot; alt=&quot;clangd 插件功能冲突弹窗&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;clangd 插件功能冲突弹窗&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;请点击 &lt;code&gt;Disable IntelliSense&lt;/code&gt; 按钮，关闭微软 C/C++ 插件的 IntelliSense 功能（代码自动补全、语法检查等），以避免与 &lt;code&gt;clangd&lt;/code&gt; 冲突。&lt;/p&gt;
&lt;p&gt;若错误点击，请依次点击以下按钮，打开 &lt;code&gt;VSCode 用户设置（JSON）&lt;/code&gt;：&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-05.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;随后在文件末尾添加如下内容（请务必遵循 JSON 语法规范）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;C_Cpp.intelliSenseEngine&quot;: &quot;disabled&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br /&gt;
若上一行有配置项，请在末尾加上 &lt;code&gt;,&lt;/code&gt;（英文半角逗号）。&lt;br /&gt;
如下图所示：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-06.png&quot; alt=&quot;VSCode 用户设置（JSON）&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;VSCode 用户设置（JSON）&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;配置 Clang-Format 插件&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE] Clang-Format 插件是什么？&lt;br /&gt;
Clang-Format 是一款专用于 C/C++/Objective-C 等代码的自动格式化工具，可统一代码风格，提高可读性。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可以通过 &lt;strong&gt;&quot;右键 → 格式化文档&quot;&lt;/strong&gt; 或按默认键盘快捷键 &lt;strong&gt;&lt;code&gt;Shift + Alt + F&lt;/code&gt;&lt;/strong&gt; 进行格式化操作。&lt;/p&gt;
&lt;p&gt;初次操作，可能会出现如下弹窗，提示选择一个格式化程序：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/Clang-Format-01.png&quot; alt=&quot;Clang-Format 格式化程序选择弹窗&quot; width=&quot;400&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;Clang-Format 格式化程序选择弹窗&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;点击 &lt;strong&gt;&quot;配置&quot;&lt;/strong&gt;，选择 &lt;strong&gt;Clang-Format&lt;/strong&gt;，如图所示：&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/Clang-Format-02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;随后，代码会被自动格式化。&lt;/p&gt;
&lt;p&gt;若不喜欢默认的格式化风格，可前往 &lt;a href=&quot;https://clang-format-configurator.site/&quot;&gt;Clang-format configurator&lt;/a&gt; 网站，可视化定制自己喜欢的风格方案，生成相应的 &lt;code&gt;.clang-format&lt;/code&gt; 文件。&lt;/p&gt;
&lt;p&gt;将生成的 &lt;code&gt;.clang-format&lt;/code&gt; 文件放置到一个固定的位置，推荐为用户主目录，如：&lt;code&gt;C:\Users\SSJ_VMdemo\&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!CAUTION] 注意&lt;br /&gt;
&quot;SSJ_VMdemo&quot; 是我在虚拟机中的用户名，请自行替换为你自己的用户名。若不清楚用户名，请前往 &lt;code&gt;C:\Users\&lt;/code&gt; 目录下查看。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;随后，在 Clang-Format 插件设置中，指定格式化文件的绝对路径：&lt;code&gt;file:C:/Users/SSJ_VMdemo/.clang-format&lt;/code&gt;。如下图：&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/Clang-Format-03.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;最后，附上SSJ习惯的格式化风格文件，仅供参考：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基础风格
BasedOnStyle: LLVM

# 大括号风格
BreakBeforeBraces: Attach

# 宏对齐
AlignConsecutiveMacros: AcrossEmptyLinesAndComments

# 括号前的空格
SpaceBeforeParens: ControlStatements

# 赋值运算符前的空格
SpaceBeforeAssignmentOperators: true

# 最大空行数
MaxEmptyLinesToKeep: 1

# 尾部注释对齐
AlignTrailingComments: true
SpacesBeforeTrailingComments: 1

# 转义换行符对齐
AlignEscapedNewlines: Left

# 声明参数换行
AllowAllParametersOfDeclarationOnNextLine: true
BinPackParameters: true

# 缩进设置
UseTab: Never
TabWidth: 4
IndentWidth: 4
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;常见问题预案&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;弹窗提示报错：&lt;code&gt;The &apos;clangd&apos; language server was not found on your PATH.&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解决方式一：检查是否正确配置环境变量；&lt;/li&gt;
&lt;li&gt;解决方式二：在 &lt;code&gt;clangd&lt;/code&gt; 插件设置中，设置 &lt;code&gt;clangd&lt;/code&gt; 可执行文件的绝对路径。如图所示：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-07.png&quot; alt=&quot;clangd 插件设置&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;clangd 插件设置&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;打开 &lt;code&gt;.cpp&lt;/code&gt; 文件，提示 &lt;code&gt;fatal error: &apos;iostream&apos; file not found&lt;/code&gt; 或其他头文件无法找到&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检查一：是否正确配置环境变量；&lt;/li&gt;
&lt;li&gt;检查二：是否按照本指南正确安装并配置 C/C++ 环境。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. 运行与调试 C/C++ 程序&lt;/h2&gt;
&lt;h3&gt;编译与运行 C/C++ 程序&lt;/h3&gt;
&lt;p&gt;若按上述步骤正确配置后，可直接通过右上角按钮，一键编译与运行 C/C++ 程序（默认快捷键 &lt;code&gt;F6&lt;/code&gt;），如图：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/CPP-demo-02.png&quot; alt=&quot;编译与运行界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;编译与运行界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;截图中的示例程序（供后续配置使用）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// hello.cpp
#include &amp;lt;iostream&amp;gt;

int main(void) {
	std::string hello = {&quot;Hello, VSCode!&quot;};
	for (char c : hello) {
		std::cout &amp;lt;&amp;lt; c;
	}
	std::cout &amp;lt;&amp;lt; std::endl;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;调试 C/C++ 程序&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[!INFO] 调试前提示&lt;br /&gt;
调试前，请务必 &lt;strong&gt;添加（设置）断点&lt;/strong&gt; ！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;若按上述步骤正确配置后，可直接通过右上角按钮进行调试（默认快捷键 &lt;code&gt;F5&lt;/code&gt;），如图：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/CPP-demo-03.png&quot; alt=&quot;调试界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;调试界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;h3&gt;常见问题预案&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;无法正常编译运行/调试程序&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检查一：是否正确配置环境变量；&lt;/li&gt;
&lt;li&gt;检查二：是否按照本指南正确安装并配置 C/C++ 环境。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;对示例程序的疑问&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;示例程序为何如此复杂？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为演示后续调试功能，将简单的 &lt;code&gt;Hello, VSCode&lt;/code&gt; 程序复杂化，其输出效果与直接打印相同。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;示例中的 &lt;code&gt;for&lt;/code&gt; 循环为何与常见写法不同？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用了 C++11 引入的范围 for 循环（Range-based for loop），可缩减代码量，提高可读性。与下述传统写法功能一致：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;// hello.cpp
#include &amp;lt;iostream&amp;gt;

int main(void) {
	std::string hello = &quot;Hello, VSCode!&quot;;
	for (std::string::iterator c = hello.begin(); c != hello.end(); c++) {
		std::cout &amp;lt;&amp;lt; *c;
	}
	std::cout &amp;lt;&amp;lt; std::endl;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输出中文字符“乱码”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;请在 &lt;code&gt;C/C++ Compile Run&lt;/code&gt; 插件设置中，添加编译与运行的参数：&lt;code&gt;-fexec-charset=GBK&lt;/code&gt;。如下图：&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-10.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1&gt;三、Extras&lt;/h1&gt;
&lt;h2&gt;1. Competitive Programming Helper (CPH) 插件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 VSCode 中搜索并安装 &lt;code&gt;CPH&lt;/code&gt; 插件。如下图：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-08.png&quot; alt=&quot;CPH 插件安装界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;CPH 插件安装界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在浏览器中安装 &lt;code&gt;Competitive Companion&lt;/code&gt; 插件。如下图：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Google Chrome 浏览器：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/CPH-01.png&quot; alt=&quot;Google Chrome 安装界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;Google Chrome 安装界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Microsoft Edge 浏览器：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/CPH-02.png&quot; alt=&quot;Microsoft Edge 安装界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;Microsoft Edge 安装界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mozilla Firefox 浏览器：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/CPH-03.png&quot; alt=&quot;Mozilla Firefox 安装界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;Mozilla Firefox 安装界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;使用方法&lt;/h3&gt;
&lt;p&gt;随后，在绝大多数 OJ 平台（如洛谷、LeetCode、Codeforces 等，不支持头歌平台），在开启 VSCode 并打开任意文件夹（推荐新建一个空文件夹存放相关文件）的前提下，点击浏览器插件的&quot;加号&quot;图标，即可将题目信息提取到 VSCode 中。&lt;/p&gt;
&lt;p&gt;同时可通过该插件设置，配置默认的语言文件格式与模板，如将默认语言指定为 &lt;code&gt;cpp&lt;/code&gt; ，指定新建文件的模板文件路径，如下图：&lt;br /&gt;
&lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-11.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
默认模板文件示例（仅供参考，可按自己需求修改）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

int main(void) {
    
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2. Luogu 插件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;在 VSCode 中搜索并安装 &lt;code&gt;vscode-luogu&lt;/code&gt; 插件。如下图：&lt;br /&gt;
&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/vscode-cpp-setup/VSCode-Extension-09.png&quot; alt=&quot;Luogu 插件安装界面&quot; width=&quot;500&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;Luogu 插件安装界面&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;使用方法&lt;/h3&gt;
&lt;p&gt;使用前，请在侧边栏或按 &lt;code&gt;Ctrl + Alt + G&lt;/code&gt; 再按 &lt;code&gt;L&lt;/code&gt;，在 VSCode 内登录洛谷账号。&lt;/p&gt;
&lt;p&gt;按 &lt;code&gt;Ctrl + Shift + P&lt;/code&gt; 打开命令面板，输入 &lt;code&gt;luogu&lt;/code&gt; 即可查看所有用法。&lt;/p&gt;
&lt;p&gt;常用快捷键：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;Ctrl + Alt + G&lt;/code&gt; + &lt;code&gt;T&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;打开题单广场&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + G&lt;/code&gt; + &lt;code&gt;P&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;输入题号/比赛编号，打开对应题目/比赛&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + G&lt;/code&gt; + &lt;code&gt;S&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;提交代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + G&lt;/code&gt; + &lt;code&gt;F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;打卡&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;3. VSCode 主题美化&lt;/h2&gt;
&lt;h3&gt;GitHub Theme&lt;/h3&gt;
&lt;p&gt;项目 GitHub 地址：&lt;a href=&quot;https://github.com/primer/github-vscode-theme&quot;&gt;GitHub&apos;s VS Code themes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;SSJ个人很喜欢 &lt;code&gt;GitHub Theme&lt;/code&gt; 插件提供的 &lt;code&gt;GitHub Dark Colorblind (Beta)&lt;/code&gt; 样式主题。&lt;/p&gt;
&lt;h3&gt;One Dark Pro&lt;/h3&gt;
&lt;p&gt;项目 GitHub 地址：&lt;a href=&quot;https://github.com/Binaryify/OneDark-Pro&quot;&gt;Atom&apos;s iconic One Dark theme for Visual Studio Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;也可以安装 &lt;code&gt;One Dark Pro&lt;/code&gt; 插件，它提供的多款样式也十分美观。&lt;/p&gt;
&lt;h2&gt;4. VSCode 推荐设置&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;[!INFO] 提示&lt;br /&gt;
以下内容，均可在设置中搜索配置名称进行调整。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;控制字体大小&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;配置名称：&lt;code&gt;Editor: Font Size&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置值：&lt;code&gt;16&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ctrl + 滚轮调整字体大小&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;配置名称：&lt;code&gt;Editor: Mouse Wheel Zoom&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置值：&lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;平滑光标移动动画&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;配置名称：&lt;code&gt;Editor: Cursor Smooth Caret Animation&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置值：&lt;code&gt;on&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;平滑滚动&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;配置名称：&lt;code&gt;Editor: Smooth Scrolling&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置值：&lt;code&gt;on&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;保存时自动格式化&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;配置名称：&lt;code&gt;Editor: Format On Save&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置值：&lt;code&gt;on&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;粘贴后自动格式化&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;配置名称：&lt;code&gt;Editor: Format On Paste&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置值：&lt;code&gt;on&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[Note - Missing Semester] Ch1 Shell基础 - Introduction to the Shell</title><link>https://blog.shenshijun.space/posts/notes/mit-missingsemester/01-shell-basics/</link><guid isPermaLink="true">https://blog.shenshijun.space/posts/notes/mit-missingsemester/01-shell-basics/</guid><description>笔记 - 计算机教育中缺失的一课 | 这是一篇基于 MIT 开设的一门旨在填补计算机专业教育中“工具技能”空白的课程的笔记。</description><pubDate>Sun, 08 Mar 2026 20:24:31 GMT</pubDate><content:encoded>&lt;p&gt;:::note[前言]
本文档旨在记录观看 MIT Missing Semester 课程时的核心笔记，涵盖 Shell 基础概念、常用命令、现代替代工具与 Shell 编程。
:::&lt;/p&gt;
&lt;h1&gt;1. Shell 概述&lt;/h1&gt;
&lt;h2&gt;1.1 什么是 Shell？&lt;/h2&gt;
&lt;p&gt;Shell 是位于操作系统内核与用户之间的外围薄层程序。它为用户提供了一个直接访问系统功能的接口，允许用户通过文本命令与操作系统进行交互。Shell 通常以&lt;strong&gt;命令行界面 (CLI)&lt;/strong&gt; 的形式存在。&lt;/p&gt;
&lt;h2&gt;1.2 如何启动？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt;: 按下 &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;Alt&lt;/code&gt; + &lt;code&gt;T&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt;: 按下 &lt;code&gt;Cmd&lt;/code&gt; + &lt;code&gt;Space&lt;/code&gt;，搜索 &quot;Terminal&quot; 并打开。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;: 建议安装并使用 &lt;strong&gt;适用于 Linux 的 Windows 子系统 (WSL)&lt;/strong&gt;，或使用 Linux 虚拟机。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1&gt;2. 基础命令&lt;/h1&gt;
&lt;h2&gt;2.1 &lt;code&gt;echo&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;echo&lt;/code&gt; 是一个基础命令，用于将参数文本输出到&lt;strong&gt;标准输出&lt;/strong&gt;（通常是终端屏幕），或将其重定向到文件中。&lt;br /&gt;
&lt;strong&gt;基本语法&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo [选项] &amp;lt;字符串&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.1.1 直接输出字符串&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;echo Hello, Shell!
# 或
echo &quot;Hello, Shell!&quot;
# 输出: Hello, Shell!
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.1.2 常用选项 (&lt;code&gt;Options&lt;/code&gt;)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt;：禁止在输出末尾自动换行。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-e&lt;/code&gt;：启用反斜杠转义字符的解释（在 Linux/GNU 环境下通常默认开启）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.1.3 高级用法&lt;/h3&gt;
&lt;h4&gt;A. 变量替换&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;echo&lt;/code&gt; 会自动展开环境变量和 Shell 变量：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME=&quot;Alice&quot;
echo &quot;Hello, $NAME&quot;
# 输出: Hello, Alice
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;B. 命令替换&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;echo&lt;/code&gt; 可以输出其他命令的执行结果：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Current date is: $(date)&quot;
# 输出示例: Current date is: Tue Mar 10 19:54:54 CST 2026
# 注：具体时间取决于命令执行时的系统时间。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;C. 重定向到文件&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;echo&lt;/code&gt; 常用于创建文件或向文件追加内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;覆盖写入 (&lt;code&gt;&amp;gt;&lt;/code&gt;)&lt;/strong&gt;：若文件存在则清空后重写；若不存在则创建。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;First line&quot; &amp;gt; file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;追加写入 (&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;)&lt;/strong&gt;：在文件末尾添加内容，保留原有内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Second line&quot; &amp;gt;&amp;gt; file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建空文件&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo -n &amp;gt; emptyfile.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;D. 输出特殊字符&lt;/h4&gt;
&lt;p&gt;若需输出 &lt;code&gt;$&lt;/code&gt;、&lt;code&gt;!&lt;/code&gt; 等特殊字符且不被 Shell 解释，请使用&lt;strong&gt;单引号&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &apos;Price is $100&apos;
# 输出: Price is $100
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;2.2 &lt;code&gt;cd&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;cd&lt;/code&gt; (&lt;strong&gt;C&lt;/strong&gt;hange &lt;strong&gt;D&lt;/strong&gt;irectory) 用于改变当前工作目录。&lt;/p&gt;
&lt;h3&gt;2.2.1 相对路径与绝对路径&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;相对路径&lt;/strong&gt;：基于当前目录的位置。
&lt;ul&gt;
&lt;li&gt;示例：&lt;code&gt;cd projects/missing-semester&lt;/code&gt;（假设当前位于 &lt;code&gt;/home/ssj&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;适用场景&lt;/em&gt;：在当前目录附近移动时更为便捷。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;绝对路径&lt;/strong&gt;：从根目录 &lt;code&gt;/&lt;/code&gt; 开始的完整路径。
&lt;ul&gt;
&lt;li&gt;示例：&lt;code&gt;cd /home/ssj/projects/missing-semester&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;适用场景&lt;/em&gt;：需要从深层子目录跳转至完全无关的其他目录时。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.2.2 快速切换目录 (&lt;code&gt;cd -&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;利用 &lt;code&gt;cd -&lt;/code&gt; 可在最近两个访问过的目录间快速切换。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd /var/log          # 进入日志目录
$ cd /etc/nginx        # 进入配置目录
$ cd -                 # 瞬间返回 /var/log
$ cd -                 # 再次瞬间返回 /etc/nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2.3 其他基础用法&lt;/h3&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;cd ..&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;返回&lt;strong&gt;上一级&lt;/strong&gt;目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;..&lt;/code&gt; 代表父目录。例如在 &lt;code&gt;/home/user/docs&lt;/code&gt; 执行后变为 &lt;code&gt;/home/user&lt;/code&gt;。  &amp;lt;br&amp;gt;可叠加使用，如 &lt;code&gt;cd ../..&lt;/code&gt; 返回上两级。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd .&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;留在&lt;strong&gt;当前&lt;/strong&gt;目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.&lt;/code&gt; 代表当前目录。通常用作占位符或脚本中的空操作。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd&lt;/code&gt; 或 &lt;code&gt;cd ~&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;回到 &lt;strong&gt;Home 目录&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;直接输入 &lt;code&gt;cd&lt;/code&gt; 等价于 &lt;code&gt;cd ~&lt;/code&gt;，将返回当前用户的家目录（如 &lt;code&gt;/home/ssj&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;2.2.4 利用 &lt;code&gt;Tab&lt;/code&gt; 键自动补全&lt;/h3&gt;
&lt;p&gt;Shell 支持通过 &lt;code&gt;Tab&lt;/code&gt; 键自动补全路径，提高效率。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;操作&lt;/strong&gt;：输入 &lt;code&gt;cd Doc&lt;/code&gt; 后按下 &lt;code&gt;Tab&lt;/code&gt; 键。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;效果&lt;/strong&gt;：若目录下唯一匹配项为 &lt;code&gt;Documents&lt;/code&gt;，Shell 会自动补全为 &lt;code&gt;cd Documents/&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多匹配项&lt;/strong&gt;：若存在多个匹配项，连续按两次 &lt;code&gt;Tab&lt;/code&gt; 将显示所有可选列表。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;2.3 &lt;code&gt;man&lt;/code&gt; &amp;amp; &lt;code&gt;tldr&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;当遗忘命令的具体用法或参数时，可使用以下两种工具：传统的 &lt;strong&gt;&lt;code&gt;man&lt;/code&gt;&lt;/strong&gt; (Manual Pages) 与现代社区驱动的 &lt;strong&gt;&lt;code&gt;tldr&lt;/code&gt;&lt;/strong&gt; (Too Long; Didn&apos;t Read)。&lt;/p&gt;
&lt;h3&gt;2.3.1 &lt;code&gt;man&lt;/code&gt; (手册页)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;常见用法&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;man &amp;lt;command&amp;gt;&lt;/code&gt;：查看指定命令的详细手册。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/keyword&lt;/code&gt;：在手册中搜索关键词（按 &lt;code&gt;n&lt;/code&gt; 查找下一个匹配项，按 &lt;code&gt;q&lt;/code&gt; 退出）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.3.2 &lt;code&gt;tldr&lt;/code&gt; (简化手册)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;tldr&lt;/code&gt; 是一个开源社区项目，旨在提供精简的、基于示例的命令帮助页面。对于复杂命令（如 &lt;code&gt;tar&lt;/code&gt;, &lt;code&gt;ffmpeg&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt;），&lt;code&gt;man&lt;/code&gt; 手册往往篇幅过长，而 &lt;code&gt;tldr&lt;/code&gt; 则更加直观实用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;常见用法&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tldr &amp;lt;command&amp;gt;&lt;/code&gt;：查看指定命令的简化帮助页及常用示例。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tldr --update&lt;/code&gt;：从 GitHub 拉取最新的社区贡献页面以更新本地缓存。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tldr --random&lt;/code&gt;：随机显示一个命令的用法，适合碎片化学习。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;2.4 &lt;code&gt;ls&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; (&lt;strong&gt;L&lt;/strong&gt;i&lt;strong&gt;s&lt;/strong&gt;t) 用于列出目录内容。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ls&lt;/code&gt;：默认列出当前目录下的非隐藏文件和文件夹。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ls -a&lt;/code&gt; (&lt;strong&gt;All&lt;/strong&gt;)：列出&lt;strong&gt;所有&lt;/strong&gt;文件，包括以 &lt;code&gt;.&lt;/code&gt; 开头的隐藏文件（如 &lt;code&gt;.bashrc&lt;/code&gt;, &lt;code&gt;.git&lt;/code&gt;）。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ls -A&lt;/code&gt;：列出隐藏文件，但排除 &lt;code&gt;.&lt;/code&gt; (当前目录) 和 &lt;code&gt;..&lt;/code&gt; (上级目录)。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ls &amp;lt;PATH&amp;gt;&lt;/code&gt;：列出指定路径下的所有内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;2.5 &lt;code&gt;which&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;which&lt;/code&gt; 命令用于在系统的 &lt;code&gt;PATH&lt;/code&gt; 环境变量指定的目录中查找并返回指定可执行文件的完整路径。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;基本用法&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;which &amp;lt;command_name&amp;gt;
# 示例:
$ which date
# 输出: /usr/sbin/date
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查找所有匹配项&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;which -a &amp;lt;command_name&amp;gt;
# 示例:
$ which -a sh
# 输出:
# /home/jon/.nix-profile/bin/sh
# /run/current-system/sw/bin/sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;2.6 &lt;code&gt;cat&lt;/code&gt; &amp;amp; &lt;code&gt;bat&lt;/code&gt;&lt;/h2&gt;
&lt;h3&gt;2.6.1 &lt;code&gt;cat&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;cat&lt;/code&gt; (&lt;strong&gt;Cat&lt;/strong&gt;enate) 是 Linux/Unix 的标准命令，用于查看文件内容、连接文件或重定向输出。其功能简单直接，但输出无格式高亮。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法&lt;/strong&gt;：&lt;code&gt;cat &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/mit-missingsemester/01_Shell_Basics.png&quot; alt=&quot;cat 样式示例&quot; width=&quot;600&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;cat 样式示例&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.6.2 &lt;code&gt;bat&lt;/code&gt; (现代替代品)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;bat&lt;/code&gt; (常被称为 &lt;code&gt;batcat&lt;/code&gt;) 是 &lt;code&gt;cat&lt;/code&gt; 的现代化增强版，主要特性包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;语法高亮&lt;/strong&gt;：支持多种编程语言。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;行号显示&lt;/strong&gt;：自动显示行号。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自动分页&lt;/strong&gt;：长文件自动调用分页器（类似 &lt;code&gt;less&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git 集成&lt;/strong&gt;：侧边栏显示 Git 修改状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主题定制&lt;/strong&gt;：支持多种颜色主题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用法&lt;/strong&gt;：&lt;code&gt;bat &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;figure style=&quot;text-align: center; margin: 0 auto;&quot;&amp;gt;
&amp;lt;img src=&quot;/assets/mit-missingsemester/01_Shell_Basics-1.png&quot; alt=&quot;bat 样式示例&quot; width=&quot;600&quot; style=&quot;display: block; margin: 0 auto;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;bat 样式示例&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;h3&gt;其他相关命令&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sort &amp;lt;file&amp;gt;&lt;/code&gt;：将文件内容按行排序后输出。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uniq &amp;lt;file&amp;gt;&lt;/code&gt;：移除文件中&lt;strong&gt;连续&lt;/strong&gt;的重复行（通常需先排序）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;head &amp;lt;file&amp;gt;&lt;/code&gt;：查看文件开头（默认前 10 行）。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;head -n 20 &amp;lt;file&amp;gt;&lt;/code&gt;：查看前 20 行。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tail &amp;lt;file&amp;gt;&lt;/code&gt;：查看文件结尾（默认后 10 行）。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tail -f &amp;lt;file&amp;gt;&lt;/code&gt;：&lt;strong&gt;实时追踪&lt;/strong&gt;文件的新增内容，查看日志文件时的必备工具。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;2.7 &lt;code&gt;grep&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;grep&lt;/code&gt; 用于在文件中按指定模式（正则表达式）搜索并匹配内容。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;基本用法&lt;/strong&gt;：&lt;code&gt;grep [选项] &amp;lt;pattern&amp;gt; &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;常用参数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-r&lt;/code&gt;：递归搜索目录。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt;：忽略大小写。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;：反向匹配（显示&lt;strong&gt;不&lt;/strong&gt;包含该模式的行）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-E&lt;/code&gt;：使用扩展正则表达式。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-l&lt;/code&gt;：仅打印匹配的文件名。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&gt;：仅打印匹配的行数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grep &quot;ERROR&quot; logfile.txt
# 在 logfile.txt 中搜索包含 &quot;ERROR&quot; 的行并完整打印。
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;:::note[💡 现代工具推荐：&lt;code&gt;ripgrep&lt;/code&gt; (&lt;code&gt;rg&lt;/code&gt;)]
比 &lt;code&gt;grep&lt;/code&gt; 速度更快，默认忽略 &lt;code&gt;.gitignore&lt;/code&gt; 中的文件，默认递归搜索，用户体验更佳。
:::&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;2.8 &lt;code&gt;find&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;find&lt;/code&gt; 用于按指定条件在目录树中查找文件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;基本用法&lt;/strong&gt;：&lt;code&gt;find &amp;lt;path&amp;gt; [条件]&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;常用条件&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-name &quot;*.py&quot;&lt;/code&gt;：按文件名匹配。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-type f&lt;/code&gt;：仅查找普通文件（排除目录）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-mtime +30&lt;/code&gt;：查找 30 天前被修改过的文件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-size +100M&lt;/code&gt;：查找大于 100 MB 的文件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-exec &amp;lt;cmd&amp;gt; {} \;&lt;/code&gt;：对找到的每个文件执行指定命令。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find . -name &quot;*.log&quot; -mtime +7 -exec rm {} \;
# 删除当前目录及其子目录下 7 天前修改过的 .log 文件。
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;:::note[💡 现代工具推荐：&lt;code&gt;fd&lt;/code&gt;]
&lt;code&gt;find&lt;/code&gt; 的现代替代品。默认彩色输出，默认忽略隐藏文件和 &lt;code&gt;.gitignore&lt;/code&gt;，语法更简洁（例如 &lt;code&gt;fd pattern&lt;/code&gt; 等同于 &lt;code&gt;find . -name &apos;*pattern*&apos;&lt;/code&gt;）。
:::&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;2.9 &lt;code&gt;sed&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sed&lt;/code&gt; (&lt;strong&gt;S&lt;/strong&gt;tream &lt;strong&gt;Ed&lt;/strong&gt;itor) 是一款流编辑器，常用于对文件内容进行筛选、替换等操作。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;基本用法&lt;/strong&gt;：&lt;code&gt;sed [选项] &apos;脚本&apos; &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;常用参数与指令&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt;：直接修改文件内容（In-place）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt; / &lt;code&gt;--quiet&lt;/code&gt; / &lt;code&gt;--silent&lt;/code&gt;：仅显示经脚本处理后的行（配合 &lt;code&gt;p&lt;/code&gt; 指令使用）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;s&lt;/code&gt;：替换指令 (Substitution)。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g&lt;/code&gt;：全局替换标志（否则每行仅替换第一个匹配项）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p&lt;/code&gt;：打印指令，通常与 &lt;code&gt;-n&lt;/code&gt; 连用以输出特定行。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;全局替换：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sed &apos;s/old/new/g&apos; &amp;lt;file&amp;gt;
# 将文件中所有的 &quot;old&quot; 替换为 &quot;new&quot; 并输出结果。
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打印特定行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sed -n &apos;10,20p&apos; &amp;lt;file&amp;gt;
# 仅打印文件的第 10 到 20 行。
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;2.10 &lt;code&gt;awk&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;awk&lt;/code&gt; 是一种强大的文本分析与数据提取语言，支持数学运算、变量定义及 &lt;code&gt;BEGIN&lt;/code&gt;/&lt;code&gt;END&lt;/code&gt; 块处理。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;基本用法&lt;/strong&gt;：&lt;code&gt;awk [选项] &apos;模式 {动作}&apos; &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用法示例&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;打印第二列：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;awk &apos;{print $2}&apos; file
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;指定分隔符（如 CSV 文件）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;awk -F&apos;,&apos; &apos;{print $2}&apos; file.csv
# 以逗号为分隔符，打印第二列。
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;条件逻辑：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;awk &apos;$2 &amp;gt; 100 {print $1}&apos; file
# 仅当第二列数值大于 100 时，打印第一列。
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;3. Shell 编程&lt;/h1&gt;
&lt;h2&gt;3.1 管道 (Pipes &lt;code&gt;|&lt;/code&gt;)&lt;/h2&gt;
&lt;p&gt;管道&lt;code&gt;|&lt;/code&gt;，它将前一个命令的&lt;strong&gt;标准输出 (stdout)&lt;/strong&gt; 直接作为后一个命令的&lt;strong&gt;标准输入 (stdin)&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;用法示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 统计当前目录下出现频率最高的5个文件扩展名
find . -type f | sed &apos;s/.*\.//&apos; | sort | uniq -c | sort -rn | head -n 5

# 解析 SSH 日志，提取断开连接的用户名并统计 Top 10
ssh myserver &apos;journalctl -u sshd -b-1 | grep &quot;Disconnected from&quot;&apos; \
  | sed -E &apos;s/.*Disconnected from .* user (.*) [^ ]+ port.*/\1/&apos; \
  | sort | uniq -c \
  | sort -nk1,1 | tail -n10 \
  | awk &apos;{print $2}&apos; | paste -sd,
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3.2 重定向 (Redirections)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;gt; file&lt;/code&gt;: 将 stdout 写入文件（覆盖）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;gt;&amp;gt; file&lt;/code&gt;: 将 stdout 追加到文件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt; file&lt;/code&gt;: 从文件读取 stdin。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2&amp;gt; file&lt;/code&gt;: 将 stderr (错误输出) 写入文件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;&amp;gt; file&lt;/code&gt; 或 &lt;code&gt;&amp;gt; file 2&amp;gt;&amp;amp;1&lt;/code&gt;: 将 stdout 和 stderr 都写入同一文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;tee&lt;/code&gt; 命令&lt;/strong&gt;: 既将输出打印到屏幕，又写入文件。
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;用法&lt;/em&gt;: &lt;code&gt;verbose_command | tee log.txt | grep &quot;ERROR&quot;&lt;/code&gt; (既能看日志又能存盘还能过滤)。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3.3 控制流与脚本&lt;/h2&gt;
&lt;p&gt;Shell 是一门完整的编程语言，支持变量、循环和条件判断。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;条件判断&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if [ -f &quot;config.txt&quot; ]; then
    echo &quot;File exists&quot;
else
    echo &quot;File missing&quot;
fi
# 推荐使用 [[ ]] 而非 [ ]，因为它更安全且支持更多特性
if [[ &quot;$var&quot; == &quot;hello&quot; ]]; then …; fi
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;循环&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;For 循环&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 遍历文件
for file in *.txt; do
    echo &quot;Processing $file&quot;
done

# 命令替换生成序列
for i in $(seq 1 5); do
    echo &quot;Iteration $i&quot;
done
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;While 循环&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;while [[ condition ]]; do
    # 执行操作
    sleep 1
done
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;编写一个健壮的脚本&lt;/strong&gt;:&lt;br /&gt;
在脚本开头加入 &lt;code&gt;set&lt;/code&gt; 标志以避免常见错误：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
set -euo pipefail

# -e: 任何命令失败立即退出脚本
# -u: 使用未定义变量时报错
# -o pipefail: 管道中任何命令失败视为整个管道失败
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;后台运行&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command &amp;amp;&lt;/code&gt;: 在后台运行命令。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$!&lt;/code&gt;: 获取最后一个后台进程的 PID。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kill $PID&lt;/code&gt;: 终止进程。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Code Server 搭建与配置C/C++基础编程环境指南</title><link>https://blog.shenshijun.space/posts/tutorials/codeserver-tutorial/</link><guid isPermaLink="true">https://blog.shenshijun.space/posts/tutorials/codeserver-tutorial/</guid><description>学校机房又没有好用的IDE？现下现配又十分麻烦……来试试自己部署一个 Code Server 吧！</description><pubDate>Fri, 27 Feb 2026 18:38:31 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;[!NOTE] 前言&lt;br /&gt;
基于系统：Ubuntu 24.04 LTS&lt;br /&gt;
配置环境：C/C++ &amp;amp; clang&lt;br /&gt;
使用的 docker 镜像：&lt;a href=&quot;https://github.com/linuxserver/docker-code-server&quot;&gt;linuxserver/docker-code-server&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING] 安全警告&lt;br /&gt;
本文配置&lt;strong&gt;仅供学习与算法练习使用&lt;/strong&gt;，请勿作为生产环境或 Linux 操作系统的使用规范参考。&lt;br /&gt;
文中涉及以 root 用户运行容器、修改系统配置等操作，存在安全风险。请勿在生产服务器或暴露于公网的环境中采用此类配置。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h1&gt;系统配置&lt;/h1&gt;
&lt;h2&gt;零 · docker-compose 修改&lt;/h2&gt;
&lt;p&gt;将 &lt;code&gt;PUID&lt;/code&gt; 和 &lt;code&gt;PGID&lt;/code&gt; 均设置为 &lt;code&gt;0&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;environment:
  - PUID=0
  - PGID=0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样配置后，容器内的进程将以 root 用户身份运行，避免在 code-server 中修改文件时出现权限不足的问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!CAUTION] 风险提示&lt;br /&gt;
以 root 身份运行容器意味着容器内的进程拥有最高权限。如果 code-server 被攻击者利用，可能导致宿主机被入侵。请注意：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不要将 code-server &lt;strong&gt;直接&lt;/strong&gt;部署在云服务器上，请部署在 docker 容器内&lt;/li&gt;
&lt;li&gt;如需更高安全性，请使用非 root 用户并正确配置文件权限&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一 · 换源&lt;/h2&gt;
&lt;h3&gt;code-server 插件仓库换源&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;更改后需重启容器！&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;linuxserver/code-server&lt;/em&gt; 容器的路径：&lt;code&gt;/app/code-server/lib/vscode/product.json&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;找到文件中的 &lt;code&gt;extensionsGallery&lt;/code&gt; 字段，替换为以下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;linkProtectionTrustedDomains&quot;: [
    &quot;https://marketplace.visualstudio.com&quot;,
    &quot;https://open-vsx.org&quot;
  ],
  &quot;extensionsGallery&quot;: {
    &quot;serviceUrl&quot;: &quot;https://marketplace.visualstudio.com/_apis/public/gallery&quot;,
    &quot;cacheUrl&quot;: &quot;https://vscode.blob.core.windows.net/gallery/index&quot;,
    &quot;itemUrl&quot;: &quot;https://marketplace.visualstudio.com/items&quot;,
    &quot;controlUrl&quot;: &quot;&quot;,
    &quot;recommendationsUrl&quot;: &quot;&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;apt 软件换源&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;修改前请备份！&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;
系统原 apt 源文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deb http://archive.ubuntu.com/ubuntu/ noble main restricted
deb-src http://archive.ubuntu.com/ubuntu/ noble main restricted
deb http://archive.ubuntu.com/ubuntu/ noble-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu/ noble-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ noble universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ noble universe multiverse
deb http://archive.ubuntu.com/ubuntu/ noble-updates universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ noble-updates universe multiverse
deb http://archive.ubuntu.com/ubuntu/ noble-security main restricted
deb-src http://archive.ubuntu.com/ubuntu/ noble-security main restricted
deb http://archive.ubuntu.com/ubuntu/ noble-security universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ noble-security universe multiverse
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;路径：&lt;code&gt;/etc/apt/sources.list&lt;/code&gt;&lt;br /&gt;
也可使用容器自带的命令行文本编辑器 &lt;code&gt;nano&lt;/code&gt; 进行修改：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nano /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP] 提示&lt;br /&gt;
由于本文配置以 root 用户运行容器，因此无需使用 &lt;code&gt;sudo&lt;/code&gt;。如果你使用的是非 root 用户配置，请在命令前添加 &lt;code&gt;sudo&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;以下为换到腾讯源的配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deb https://mirrors.cloud.tencent.com/ubuntu/ noble main restricted universe multiverse
# deb-src https://mirrors.cloud.tencent.com/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.cloud.tencent.com/ubuntu/ noble-updates main restricted universe multiverse
# deb-src https://mirrors.cloud.tencent.com/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.cloud.tencent.com/ubuntu/ noble-backports main restricted universe multiverse
# deb-src https://mirrors.cloud.tencent.com/ubuntu/ noble-backports main restricted universe multiverse
deb https://mirrors.cloud.tencent.com/ubuntu/ noble-security main restricted universe multiverse
# deb-src https://mirrors.cloud.tencent.com/ubuntu/ noble-security main restricted universe multiverse
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后需要执行以下命令，更新软件包索引：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt update
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二 · 配置代理&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;[!INFO] 说明&lt;br /&gt;
本节配置代理是为了加速从 GitHub 等境外网站下载资源。如果你无需代理即可正常访问，可跳过此节。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;安装 Wget 软件包&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;apt install -y wget
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;验证安装：&lt;/strong&gt; &lt;code&gt;wget --version&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;下载 mihomo（Clash Meta）.deb 安装包&lt;/h3&gt;
&lt;p&gt;前往 &lt;a href=&quot;https://github.com/MetaCubeX/mihomo/releases&quot;&gt;Releases · MetaCubeX/mihomo&lt;/a&gt; 下载对应版本。&lt;br /&gt;
下载的文件名应为 &lt;code&gt;mihomo-linux-amd64-v版本号.deb&lt;/code&gt;（根据你的 CPU 架构选择，amd64 适用于大多数 x86_64 服务器）。&lt;/p&gt;
&lt;p&gt;如果无法直接访问 GitHub，可以使用 &lt;a href=&quot;https://gh-proxy.com/&quot;&gt;GitHub 加速下载代理&lt;/a&gt; 获取下载链接。&lt;/p&gt;
&lt;h3&gt;安装 mihomo&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;apt install ./mihomo-linux-amd64-v版本号.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置 mihomo&lt;/h3&gt;
&lt;p&gt;将你的 Clash 订阅配置文件保存到 &lt;code&gt;~/.config/mihomo/config.yaml&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP] 提示&lt;br /&gt;
确保配置文件中的 &lt;code&gt;mixed-port&lt;/code&gt; 或 &lt;code&gt;socks-port&lt;/code&gt;/&lt;code&gt;http-port&lt;/code&gt; 设置为 &lt;code&gt;7897&lt;/code&gt;，以与本文后续的代理配置保持一致。如果你的配置使用其他端口，请相应修改后续命令中的端口号。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;运行与终止 mihomo&lt;/h3&gt;
&lt;p&gt;前台运行（用于测试配置是否正确）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mihomo -d ~/.config/mihomo
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE] 参数说明&lt;br /&gt;
&lt;code&gt;-d&lt;/code&gt; 参数指定配置文件目录，而非&quot;后台运行&quot;。mihomo 默认会读取该目录下的 &lt;code&gt;config.yaml&lt;/code&gt; 文件。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;后台运行 · 方法一：&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;nohup mihomo -d . &amp;gt; mihomo.log 2&amp;gt;&amp;amp;1 &amp;amp;  # 日志输出到 mihomo.log
pgrep mihomo                            # 查看 mihomo PID
kill &amp;lt;PID&amp;gt;                              # 终止运行
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;后台运行 · 方法二：&lt;/h4&gt;
&lt;p&gt;使用 &lt;code&gt;screen&lt;/code&gt; 工具管理会话：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install -y screen           # 安装 screen
screen -S mihomo                # 创建名为 mihomo 的会话
mihomo -d ~/.config/mihomo      # 在会话中运行
# 按 Ctrl+A 然后按 D           # 脱离该会话（程序继续运行）
screen -r mihomo                # 重新连接该会话
screen -S mihomo -X quit        # 终止会话（或在会话中按 Ctrl+C）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置终端环境变量&lt;/h3&gt;
&lt;p&gt;打开 &lt;code&gt;~/.bashrc&lt;/code&gt; 文件进行编辑：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nano ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在文件底部添加以下函数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# --- Proxy Control for Clash (port 7897) ---
auto_proxy() {
    if timeout 1 bash -c &apos;cat &amp;lt; /dev/null &amp;gt; /dev/tcp/127.0.0.1/7897&apos; 2&amp;gt;/dev/null; then
        export http_proxy=http://127.0.0.1:7897
        export https_proxy=http://127.0.0.1:7897
        export HTTP_PROXY=http://127.0.0.1:7897
        export HTTPS_PROXY=http://127.0.0.1:7897
        echo &apos;Acquire::http::Proxy &quot;http://127.0.0.1:7897&quot;;&apos; | sudo tee /etc/apt/apt.conf.d/80proxy &amp;gt;/dev/null
        echo &apos;Acquire::https::Proxy &quot;http://127.0.0.1:7897&quot;;&apos; | sudo tee -a /etc/apt/apt.conf.d/80proxy &amp;gt;/dev/null
        echo &quot;✅ Apt proxy enabled&quot;
        echo &quot;✅ Proxy enabled (Clash detected on :7897)&quot;
    else
        unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
        sudo rm -f /etc/apt/apt.conf.d/80proxy
        echo &quot;⚠️ Clash not running on :7897 – proxy disabled&quot;
    fi
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP] 提示&lt;br /&gt;
由于本文配置以 root 用户运行容器，&lt;code&gt;~/.bashrc&lt;/code&gt; 即为 &lt;code&gt;/root/.bashrc&lt;/code&gt;，无需重复添加。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最后执行以下命令让配置立即生效：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;使用代理&lt;/h3&gt;
&lt;p&gt;每次使用前需先启动 mihomo（参见 [[#运行与终止 mihomo]]）。&lt;br /&gt;
然后在 shell 中执行 &lt;code&gt;auto_proxy&lt;/code&gt;，该函数会自动检测 mihomo 是否运行并相应地设置或取消代理环境变量。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE] 工作原理&lt;br /&gt;
&lt;code&gt;auto_proxy&lt;/code&gt; 函数会尝试连接 &lt;code&gt;127.0.0.1:7897&lt;/code&gt;，如果连接成功则设置代理环境变量，否则清除代理设置。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;三 · 更换 shell&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fishshell.com/&quot;&gt;fish&lt;/a&gt;（friendly interactive shell）提供了更好的自动补全、语法高亮和用户友好的交互体验。&lt;/p&gt;
&lt;h3&gt;安装 fish-shell&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
sudo apt install -y fish
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;验证安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;fish --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;将 fish-shell 设置为默认 shell&lt;/h3&gt;
&lt;h4&gt;添加 &lt;code&gt;/usr/bin/fish&lt;/code&gt; 到 Shell 列表&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;grep -q &apos;/usr/bin/fish&apos; /etc/shells || echo &apos;/usr/bin/fish&apos; &amp;gt;&amp;gt; /etc/shells
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;更改当前用户的默认 shell&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;chsh -s /usr/bin/fish
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP] 提示&lt;br /&gt;
更改默认 shell 后，需要重新登录或重启容器才能生效。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;修改 code-server 默认终端配置文件&lt;/h4&gt;
&lt;p&gt;打开 &lt;code&gt;/config/data/User/settings.json&lt;/code&gt; 文件，添加以下配置项：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;terminal.integrated.defaultProfile.linux&quot;: &quot;fish&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING] 注意&lt;br /&gt;
如果该文件中已有其他配置项，请确保在上一行末尾添加逗号 &lt;code&gt;,&lt;/code&gt; 以保持 JSON 格式正确。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;为 fish-shell 配置代理&lt;/h3&gt;
&lt;p&gt;将以下内容保存为：&lt;strong&gt;&lt;code&gt;~/.config/fish/functions/auto_proxy.fish&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ~/.config/fish/functions/auto_proxy.fish
# Auto-detect Clash on 127.0.0.1:7897 and toggle proxy for terminal + apt
function auto_proxy
    # Use Bash&apos;s /dev/tcp to test port (works in most containers)
    if bash -c &apos;timeout 1 cat &amp;lt; /dev/null &amp;gt; /dev/tcp/127.0.0.1/7897&apos; 2&amp;gt;/dev/null
        # Enable terminal proxy
        set -gx http_proxy http://127.0.0.1:7897
        set -gx https_proxy http://127.0.0.1:7897
        set -gx HTTP_PROXY http://127.0.0.1:7897
        set -gx HTTPS_PROXY http://127.0.0.1:7897
        # Enable apt proxy
        echo &apos;Acquire::http::Proxy &quot;http://127.0.0.1:7897&quot;;&apos; | sudo tee /etc/apt/apt.conf.d/80proxy &amp;gt;/dev/null
        echo &apos;Acquire::https::Proxy &quot;http://127.0.0.1:7897&quot;;&apos; | sudo tee -a /etc/apt/apt.conf.d/80proxy &amp;gt;/dev/null
        echo &quot;✅ Proxy enabled (Clash detected on :7897)&quot;
        echo &quot;✅ Apt proxy enabled&quot;
    else
        # Disable terminal proxy
        set -e http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

        # Disable apt proxy
        sudo rm -f /etc/apt/apt.conf.d/80proxy
        echo &quot;⚠️ Clash not running on :7897 – proxy disabled&quot;
    end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后在 fish-shell 中执行 &lt;code&gt;auto_proxy&lt;/code&gt; 即可自动设置代理。&lt;/p&gt;
&lt;h4&gt;在 Fish 提示符中显示代理状态&lt;/h4&gt;
&lt;p&gt;编辑 &lt;code&gt;~/.config/fish/config.fish&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ~/.config/fish/config.fish
# ----------------------------
# Auto Proxy + Prompt Indicator
# ----------------------------

# 定义一个函数，在提示符前更新代理状态
function __update_proxy_status --on-variable PWD --on-event fish_prompt
    # 只检查当前环境变量
    if set -q http_proxy
        and string match -q &quot;*7897*&quot; $http_proxy
        set -g __proxy_active yes
    else
        set -e __proxy_active
    end
end

# 触发一次初始化
__update_proxy_status

# 注入代理状态到提示符
function fish_right_prompt
    if set -q __proxy_active
        set_color yellow
        echo -n &quot;🐟[PROXY]&quot;
        set_color normal
    end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;安装 fisher（可选）&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jorgebucaran/fisher&quot;&gt;fisher&lt;/a&gt; 是 fish 的插件管理器。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &amp;amp;&amp;amp; fisher install jorgebucaran/fisher
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING] 注意&lt;br /&gt;
该命令需要在 fish-shell 中执行。如果当前仍在 bash 中，请先输入 &lt;code&gt;fish&lt;/code&gt; 切换到 fish-shell。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;验证安装：&lt;/strong&gt; &lt;code&gt;fisher --version&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;配置 C/C++ 环境&lt;/h1&gt;
&lt;h2&gt;一、安装工具链&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;apt install -y clangd-18 clang-format-18 cmake gdb build-essential
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!INFO] 包说明&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;clangd-18&lt;/code&gt;：C/C++ 语言服务器，提供代码补全、错误诊断等功能&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clang-format-18&lt;/code&gt;：代码格式化工具&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmake&lt;/code&gt;：跨平台构建系统&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gdb&lt;/code&gt;：GNU 调试器&lt;/li&gt;
&lt;li&gt;&lt;code&gt;build-essential&lt;/code&gt;：包含 gcc、g++、make 等基础编译工具&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3&gt;创建符号链接&lt;/h3&gt;
&lt;p&gt;Ubuntu 24.04 中的 &lt;code&gt;clangd&lt;/code&gt; 包名为 &lt;code&gt;clangd-18&lt;/code&gt;，需要创建符号链接以便直接使用 &lt;code&gt;clangd&lt;/code&gt; 命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-18 100
update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-18 100
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;验证安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;clangd --version
clang-format --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二、在 code-server 中安装 clangd 扩展&lt;/h2&gt;
&lt;p&gt;在 code-server 的扩展市场中搜索并安装 &lt;code&gt;clangd&lt;/code&gt; 扩展（作者为 &lt;strong&gt;LLVM&lt;/strong&gt;）。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP] 提示&lt;br /&gt;
安装扩展后，clangd 会自动检测项目中的 &lt;code&gt;compile_commands.json&lt;/code&gt; 文件以提供准确的代码补全和错误诊断。对于简单的单文件项目，clangd 也能正常工作。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;三、仿 CS50 &lt;code&gt;make&lt;/code&gt; 命令&lt;/h2&gt;
&lt;p&gt;在 CS50 课程中，可以使用 &lt;code&gt;make hello&lt;/code&gt; 快速编译 &lt;code&gt;hello.c&lt;/code&gt; 并生成可执行文件。以下配置实现类似功能。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING] 适用范围&lt;br /&gt;
此 Makefile &lt;strong&gt;仅适用于学习阶段的小型算法程序&lt;/strong&gt;（单文件或简单结构）。对于复杂项目，请使用标准的项目级 Makefile 或 CMake。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;全局 Makefile&lt;/h3&gt;
&lt;p&gt;将以下内容保存为 &lt;code&gt;~/.makefile&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# =============================================================================
# CS50-style Global Makefile for C/C++
# Usage: make target      (e.g., make hello → compiles hello.c or hello.cpp)
# Place this at ~/.makefile and set MAKEFLAGS=--file=~/.makefile
# =============================================================================
MAKEFLAGS += --no-builtin-rules
.SUFFIXES:

# Compilers
CC      = gcc
CXX     = g++

# Flags
CFLAGS   = -g -O0 -std=c11 -Wall -Wextra -Werror
CXXFLAGS = -g -O0 -std=c++17 -Wall -Wextra -Werror

# Determine source: prefer .cpp over .c
SOURCE =
ifneq ($(wildcard $(@).cpp),)
    SOURCE = $(@).cpp
    REAL_CC = $(CXX)
    REAL_FLAGS = $(CXXFLAGS)
else ifneq ($(wildcard $(@).c),)
    SOURCE = $(@).c
    REAL_CC = $(CC)
    REAL_FLAGS = $(CFLAGS)
endif

# Default rule: build any target if source exists
%:
ifeq ($(SOURCE),)
    $(error No source file found for target &quot;$(@)&quot;. Expected $(@).c or $(@).cpp)
endif
    @echo &quot;clang $(SOURCE) -&amp;gt; $(@)&quot;
    @$(REAL_CC) $(REAL_FLAGS) -o $@ $(SOURCE)

# Clean: remove all files that are executable and match a .c/.cpp name
clean:
    @for src in *.c *.cpp; do \
        if [ -f &quot;$$src&quot; ]; then \
            target=&quot;$$(basename &quot;$$src&quot; .c | sed &apos;s/\.cpp$$//&apos;)&quot;; \
            if [ -f &quot;$$target&quot; ] &amp;amp;&amp;amp; [ -x &quot;$$target&quot; ]; then \
                rm -v &quot;$$target&quot;; \
            fi; \
        fi; \
    done 2&amp;gt;/dev/null || true
    @echo &quot;All compiled programs removed.&quot;
.PHONY: clean
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;让 &lt;code&gt;make&lt;/code&gt; 自动使用这个全局 Makefile&lt;/h3&gt;
&lt;p&gt;在 fish-shell 中设置环境变量：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set -Ux MAKEFLAGS --file=$HOME/.makefile
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!INFO] 说明&lt;br /&gt;
&lt;code&gt;-Ux&lt;/code&gt; 参数表示将变量设置为全局导出环境变量，重启后仍然有效。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;验证是否生效：&lt;/strong&gt; &lt;code&gt;echo $MAKEFLAGS&lt;/code&gt; 应输出 &lt;code&gt;--file=/root/.makefile&lt;/code&gt;（或你的实际 home 路径）。&lt;/p&gt;
&lt;h3&gt;防止错误使用 &lt;code&gt;make&lt;/code&gt;（可选）&lt;/h3&gt;
&lt;p&gt;创建一个包装脚本，当用户错误地输入 &lt;code&gt;make hello.c&lt;/code&gt; 时给出提示：&lt;/p&gt;
&lt;p&gt;将以下内容保存为 &lt;code&gt;~/bin/make&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# ~/bin/make — 智能包装器，防止 .c/.cpp 错误

args=&quot;&quot;
invalid_args=0

for arg; do
    case &quot;$arg&quot; in
        (*.c|*.cpp)
            arg=&quot;${arg%.*}&quot;
            invalid_args=1
            ;;
    esac
    args=&quot;$args $arg&quot;
done

if [ &quot;$invalid_args&quot; -eq 1 ]; then
    echo &quot;💡 Did you mean &apos;make$args&apos;?&quot; &amp;gt;&amp;amp;2
    exit 1
fi

# 禁止传入目录
if [[ -d &quot;$1&quot; ]]; then
    echo &quot;❌ &apos;$1&apos; is a directory.&quot; &amp;gt;&amp;amp;2
    exit 1
fi

# 调用系统 make（会自动加载 ~/.makefile）
exec /usr/bin/make &quot;$@&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后执行以下步骤：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/bin                           # 创建 bin 目录
chmod +x ~/bin/make                      # 设置可执行权限
set -U fish_user_paths ~/bin $fish_user_paths  # 将 ~/bin 添加到 PATH
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;验证&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;which make
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;应输出：&lt;code&gt;/config/bin/make&lt;/code&gt;（或 &lt;code&gt;/root/bin/make&lt;/code&gt;，取决于你的 home 路径）。&lt;/p&gt;
</content:encoded></item></channel></rss>