<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>火花花的领地</title><description>Huohuahua&apos;s Realm</description><link>https://emilia520.icu/</link><language>zh_CN</language><item><title>Linux命令速查手册</title><link>https://emilia520.icu/posts/linux-commands-cheatsheet/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-commands-cheatsheet/</guid><description>Linux常用命令速查大全，按分类整理，方便快速查阅。点击命令可跳转到详细教程。</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux命令速查手册&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文整理了Linux常用命令，按功能分类，方便快速查阅。&lt;strong&gt;点击命令可跳转到详细教程&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;📚 配套教程：&lt;a href=&quot;/tags/Linux/&quot;&gt;Linux操作大全（十篇完整教程）&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📁 1. 文件管理&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#ls&quot;&gt;ls&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;列出目录内容&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ls -la&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#cd&quot;&gt;cd&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;切换目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd /home&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#pwd&quot;&gt;pwd&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示当前目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#cp&quot;&gt;cp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;复制文件/目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cp -r dir1 dir2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#mv&quot;&gt;mv&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;移动/重命名&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mv file1 file2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#rm&quot;&gt;rm&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;删除文件/目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rm -rf dir&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#mkdir&quot;&gt;mkdir&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;创建目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mkdir -p dir1/dir2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#touch&quot;&gt;touch&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;创建空文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;touch file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#ln&quot;&gt;ln&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;创建链接&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ln -s file link&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#find&quot;&gt;find&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查找文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;find / -name &quot;*.txt&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#locate&quot;&gt;locate&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;快速查找文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;locate file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#file&quot;&gt;file&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;识别文件类型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;file image.jpg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#stat&quot;&gt;stat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示文件状态&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stat file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#tree&quot;&gt;tree&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;树状显示目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tree -L 2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#tar&quot;&gt;tar&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;打包压缩&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tar -czf file.tar.gz dir&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#zip&quot;&gt;zip&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;压缩文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;zip -r file.zip dir&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#unzip&quot;&gt;unzip&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;解压zip文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;unzip file.zip&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#gzip&quot;&gt;gzip&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;gzip压缩&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gzip file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#which&quot;&gt;which&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查找命令路径&lt;/td&gt;
&lt;td&gt;&lt;code&gt;which python&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#whereis&quot;&gt;whereis&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查找命令/源码/手册&lt;/td&gt;
&lt;td&gt;&lt;code&gt;whereis ls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;📝 2. 文档编辑&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#cat&quot;&gt;cat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示文件内容&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cat file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#less&quot;&gt;less&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;分页查看文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;less file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#more&quot;&gt;more&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;分页查看文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;more file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#head&quot;&gt;head&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示文件开头&lt;/td&gt;
&lt;td&gt;&lt;code&gt;head -n 20 file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#tail&quot;&gt;tail&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示文件结尾&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tail -f file.log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#grep&quot;&gt;grep&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;文本搜索&lt;/td&gt;
&lt;td&gt;&lt;code&gt;grep &quot;keyword&quot; file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#sed&quot;&gt;sed&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;流编辑器&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sed &apos;s/old/new/g&apos; file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#awk&quot;&gt;awk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;文本处理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;awk &apos;{print $1}&apos; file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#sort&quot;&gt;sort&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;排序&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sort file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#uniq&quot;&gt;uniq&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;去重&lt;/td&gt;
&lt;td&gt;&lt;code&gt;uniq file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#wc&quot;&gt;wc&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;统计行数/字数&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wc -l file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#diff&quot;&gt;diff&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;比较文件差异&lt;/td&gt;
&lt;td&gt;&lt;code&gt;diff file1 file2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/#echo&quot;&gt;echo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;输出字符串&lt;/td&gt;
&lt;td&gt;&lt;code&gt;echo &quot;hello&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/#sh&quot;&gt;sh&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Shell解释器&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sh script.sh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/&quot;&gt;Shell编程&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/#bash&quot;&gt;bash&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bash Shell&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bash script.sh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/&quot;&gt;Shell编程&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#vi&quot;&gt;vi/vim&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;文本编辑器&lt;/td&gt;
&lt;td&gt;&lt;code&gt;vim file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#nano&quot;&gt;nano&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;简单编辑器&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nano file.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;⚙️ 3. 系统管理&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#ps&quot;&gt;ps&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示进程状态&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ps aux&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#top&quot;&gt;top&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;实时进程监控&lt;/td&gt;
&lt;td&gt;&lt;code&gt;top&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#htop&quot;&gt;htop&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;增强版top&lt;/td&gt;
&lt;td&gt;&lt;code&gt;htop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#kill&quot;&gt;kill&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;终止进程&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kill -9 PID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#pkill&quot;&gt;pkill&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;按名称终止进程&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pkill nginx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#killall&quot;&gt;killall&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;按名称终止所有进程&lt;/td&gt;
&lt;td&gt;&lt;code&gt;killall nginx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#pgrep&quot;&gt;pgrep&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;按名称查找进程&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pgrep nginx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#pidof&quot;&gt;pidof&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查找进程ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pidof nginx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#systemctl&quot;&gt;systemctl&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;服务管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl start nginx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#service&quot;&gt;service&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;服务管理（旧）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;service nginx start&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#useradd&quot;&gt;useradd&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;创建用户&lt;/td&gt;
&lt;td&gt;&lt;code&gt;useradd -m user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#usermod&quot;&gt;usermod&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;修改用户&lt;/td&gt;
&lt;td&gt;&lt;code&gt;usermod -aG sudo user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#userdel&quot;&gt;userdel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;删除用户&lt;/td&gt;
&lt;td&gt;&lt;code&gt;userdel -r user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#passwd&quot;&gt;passwd&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;设置密码&lt;/td&gt;
&lt;td&gt;&lt;code&gt;passwd user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#chmod&quot;&gt;chmod&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;修改权限&lt;/td&gt;
&lt;td&gt;&lt;code&gt;chmod 755 file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/#chown&quot;&gt;chown&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;修改所有者&lt;/td&gt;
&lt;td&gt;&lt;code&gt;chown user:group file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-02-files/&quot;&gt;文件与目录&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#sudo&quot;&gt;sudo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;以root权限执行&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sudo command&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#su&quot;&gt;su&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;切换用户&lt;/td&gt;
&lt;td&gt;&lt;code&gt;su - user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#who&quot;&gt;who&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示登录用户&lt;/td&gt;
&lt;td&gt;&lt;code&gt;who&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#w&quot;&gt;w&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示登录用户详情&lt;/td&gt;
&lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#id&quot;&gt;id&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示用户ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/#groups&quot;&gt;groups&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示用户组&lt;/td&gt;
&lt;td&gt;&lt;code&gt;groups&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-03-users/&quot;&gt;用户与权限&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#crontab&quot;&gt;crontab&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;定时任务&lt;/td&gt;
&lt;td&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#at&quot;&gt;at&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一次性定时任务&lt;/td&gt;
&lt;td&gt;&lt;code&gt;at 10:00 PM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#uname&quot;&gt;uname&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示系统信息&lt;/td&gt;
&lt;td&gt;&lt;code&gt;uname -a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#hostname&quot;&gt;hostname&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示/设置主机名&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hostname&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#date&quot;&gt;date&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示/设置日期&lt;/td&gt;
&lt;td&gt;&lt;code&gt;date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#history&quot;&gt;history&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;命令历史&lt;/td&gt;
&lt;td&gt;&lt;code&gt;history&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#clear&quot;&gt;clear&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;清屏&lt;/td&gt;
&lt;td&gt;&lt;code&gt;clear&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#reboot&quot;&gt;reboot&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;重启系统&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sudo reboot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#shutdown&quot;&gt;shutdown&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;关机&lt;/td&gt;
&lt;td&gt;&lt;code&gt;shutdown -h now&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#61-journalctl&quot;&gt;journalctl&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查看系统日志&lt;/td&gt;
&lt;td&gt;&lt;code&gt;journalctl -f&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;💾 4. 磁盘管理&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#df&quot;&gt;df&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示磁盘使用&lt;/td&gt;
&lt;td&gt;&lt;code&gt;df -h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#du&quot;&gt;du&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示目录大小&lt;/td&gt;
&lt;td&gt;&lt;code&gt;du -sh /path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#fdisk&quot;&gt;fdisk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;磁盘分区&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fdisk /dev/sdb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#mkfs&quot;&gt;mkfs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;格式化分区&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mkfs.ext4 /dev/sdb1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#mount&quot;&gt;mount&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;挂载文件系统&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mount /dev/sdb1 /mnt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#umount&quot;&gt;umount&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;卸载文件系统&lt;/td&gt;
&lt;td&gt;&lt;code&gt;umount /mnt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#lsblk&quot;&gt;lsblk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;列出块设备&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lsblk&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#parted&quot;&gt;parted&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;磁盘分区（GPT）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;parted /dev/sdb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#blkid&quot;&gt;blkid&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示块设备UUID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;blkid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#free&quot;&gt;free&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示内存使用&lt;/td&gt;
&lt;td&gt;&lt;code&gt;free -h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#uptime&quot;&gt;uptime&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;系统运行时间&lt;/td&gt;
&lt;td&gt;&lt;code&gt;uptime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#vmstat&quot;&gt;vmstat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;系统资源统计&lt;/td&gt;
&lt;td&gt;&lt;code&gt;vmstat 1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#iostat&quot;&gt;iostat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;磁盘IO统计&lt;/td&gt;
&lt;td&gt;&lt;code&gt;iostat -x 1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#sar&quot;&gt;sar&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;系统活动报告&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sar -u 1 3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#swapon&quot;&gt;swapon&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;启用swap&lt;/td&gt;
&lt;td&gt;&lt;code&gt;swapon /swapfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/#dd&quot;&gt;dd&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;磁盘复制&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dd if=/dev/sda of=disk.img&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-08-disk/&quot;&gt;磁盘管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;📡 5. 网络通讯&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#ping&quot;&gt;ping&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;测试连通性&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ping google.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#curl&quot;&gt;curl&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;HTTP请求&lt;/td&gt;
&lt;td&gt;&lt;code&gt;curl https://example.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#wget&quot;&gt;wget&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;下载文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wget https://example.com/file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#ssh&quot;&gt;ssh&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;远程登录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ssh user@host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#scp&quot;&gt;scp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;远程复制&lt;/td&gt;
&lt;td&gt;&lt;code&gt;scp file user@host:/path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#rsync&quot;&gt;rsync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;远程同步&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rsync -avz dir user@host:/path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#ifconfig&quot;&gt;ifconfig&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;网络接口配置&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ifconfig&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#ip&quot;&gt;ip&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;网络配置&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ip addr show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#netstat&quot;&gt;netstat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;网络状态&lt;/td&gt;
&lt;td&gt;&lt;code&gt;netstat -tuln&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#ss&quot;&gt;ss&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;套接字统计&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ss -tuln&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#traceroute&quot;&gt;traceroute&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;路由追踪&lt;/td&gt;
&lt;td&gt;&lt;code&gt;traceroute google.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#nslookup&quot;&gt;nslookup&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;DNS查询&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nslookup google.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#dig&quot;&gt;dig&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;DNS查询&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dig google.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#ufw&quot;&gt;ufw&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;防火墙（Ubuntu）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ufw enable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#iptables&quot;&gt;iptables&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;防火墙（底层）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;iptables -L&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#53-mtr&quot;&gt;mtr&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;网络诊断工具&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mtr google.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#57-nmap&quot;&gt;nmap&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;网络扫描&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nmap 192.168.1.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;🖥️ 6. 文件传输&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#ftp&quot;&gt;ftp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;FTP客户端&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ftp host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#sftp&quot;&gt;sftp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;安全FTP&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sftp user@host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;🔧 7. 设备管理&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#lspci&quot;&gt;lspci&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;列出PCI设备&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lspci&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#lsusb&quot;&gt;lsusb&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;列出USB设备&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lsusb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#lscpu&quot;&gt;lscpu&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;显示CPU信息&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lscpu&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#sensors&quot;&gt;sensors&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;硬件温度&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sensors&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/#dmesg&quot;&gt;dmesg&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;内核日志&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dmesg | tail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-09-monitor/&quot;&gt;系统监控&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;📦 8. 软件包管理&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/#apt&quot;&gt;apt&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Debian/Ubuntu包管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install nginx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-05-network/&quot;&gt;网络配置&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/#yum&quot;&gt;yum&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CentOS/RHEL包管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yum install nginx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/&quot;&gt;软件包管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/#dnf&quot;&gt;dnf&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fedora包管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dnf install nginx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/&quot;&gt;软件包管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/#snap&quot;&gt;snap&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Snap包管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;snap install code&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/&quot;&gt;软件包管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/#flatpak&quot;&gt;flatpak&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Flatpak包管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;flatpak install flathub org.gimp.GIMP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/&quot;&gt;软件包管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/#rpm&quot;&gt;rpm&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;RPM包管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rpm -ivh package.rpm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/&quot;&gt;软件包管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/#dpkg&quot;&gt;dpkg&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Debian包管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dpkg -i package.deb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/&quot;&gt;软件包管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/#pip&quot;&gt;pip&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Python包管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pip install requests&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/&quot;&gt;软件包管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/#npm&quot;&gt;npm&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Node.js包管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm install express&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-04-packages/&quot;&gt;软件包管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;🐳 9. Docker容器&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-10-docker/#docker&quot;&gt;docker&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Docker命令&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run -d nginx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-10-docker/&quot;&gt;Docker容器&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-10-docker/#docker-compose&quot;&gt;docker-compose&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;编排多容器&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker-compose up -d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-10-docker/&quot;&gt;Docker容器&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;🔀 10. Git版本控制&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-init&quot;&gt;git init&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;初始化仓库&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-clone&quot;&gt;git clone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;克隆远程仓库&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git clone url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-add&quot;&gt;git add&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;添加到暂存区&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git add .&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-commit&quot;&gt;git commit&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;提交更改&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git commit -m &quot;msg&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-status&quot;&gt;git status&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查看状态&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-diff&quot;&gt;git diff&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查看差异&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git diff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-log&quot;&gt;git log&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查看历史&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git log --oneline&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-branch-basics&quot;&gt;git branch&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;分支管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git branch feature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-branch-basics&quot;&gt;git checkout&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;切换分支&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git checkout feature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-branch-basics&quot;&gt;git switch&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;切换分支（新）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git switch feature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-merge&quot;&gt;git merge&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;合并分支&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git merge feature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-rebase&quot;&gt;git rebase&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;变基&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git rebase main&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-remote&quot;&gt;git remote&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;远程仓库管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git remote -v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-push-pull&quot;&gt;git push&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;推送到远程&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git push origin main&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-push-pull&quot;&gt;git pull&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;拉取更新&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git pull origin main&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-push-pull&quot;&gt;git fetch&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;获取远程更新&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git fetch origin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-tag-ops&quot;&gt;git tag&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;标签管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git tag v1.0.0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-stash&quot;&gt;git stash&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;暂存工作&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git stash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-reset&quot;&gt;git reset&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;回退提交&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git reset --hard HEAD~1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-revert&quot;&gt;git revert&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;安全回退&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git revert HEAD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-cherry-pick&quot;&gt;git cherry-pick&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;选择提交&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git cherry-pick abc123&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-reflog&quot;&gt;git reflog&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;操作历史&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git reflog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/#git-config&quot;&gt;git config&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;配置管理&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git config --global user.name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-11-git/&quot;&gt;Git完全指南&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;🔍 11. 其他常用&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;th&gt;详细教程&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#man&quot;&gt;man&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查看手册&lt;/td&gt;
&lt;td&gt;&lt;code&gt;man ls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/#alias&quot;&gt;alias&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;命令别名&lt;/td&gt;
&lt;td&gt;&lt;code&gt;alias ll=&apos;ls -la&apos;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/#export&quot;&gt;export&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;设置环境变量&lt;/td&gt;
&lt;td&gt;&lt;code&gt;export PATH=$PATH:/new&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/#source&quot;&gt;source&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;执行配置文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;source ~/.bashrc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;基础入门&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/#xargs&quot;&gt;xargs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;参数传递&lt;/td&gt;
&lt;td&gt;&lt;code&gt;find . -name &quot;*.txt&quot; | xargs rm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/&quot;&gt;Shell脚本&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/#tee&quot;&gt;tee&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;输出到文件和屏幕&lt;/td&gt;
&lt;td&gt;&lt;code&gt;command | tee log.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/&quot;&gt;Shell脚本&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/#watch&quot;&gt;watch&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;定时执行命令&lt;/td&gt;
&lt;td&gt;&lt;code&gt;watch -n 1 df -h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-07-shell/&quot;&gt;Shell脚本&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#nohup&quot;&gt;nohup&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;后台运行&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nohup command &amp;amp;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#screen&quot;&gt;screen&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;终端复用&lt;/td&gt;
&lt;td&gt;&lt;code&gt;screen -S name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/#tmux&quot;&gt;tmux&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;终端复用（推荐）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tmux new -s name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/linux-manual-06-process/&quot;&gt;进程管理&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;📖 &lt;strong&gt;点击命令名称&lt;/strong&gt;可跳转到对应的详细教程章节！&lt;/p&gt;
&lt;p&gt;🔗 配套教程：&lt;a href=&quot;/tags/Linux/&quot;&gt;Linux操作大全（十一篇完整教程）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📝 &lt;strong&gt;实用配置&lt;/strong&gt;：&lt;a href=&quot;https://gist.github.com/Emi-Emi-Liu/a18f82679dd0e0f4801b6c90c6492012&quot;&gt;Linux常用别名配置&lt;/a&gt; — 将常用别名添加到 &lt;code&gt;~/.bashrc&lt;/code&gt; 中，提高操作效率&lt;/p&gt;
&lt;p&gt;🔗 配套教程：&lt;a href=&quot;/tags/Linux/&quot;&gt;Linux操作大全（十篇完整教程）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📝 &lt;strong&gt;实用配置&lt;/strong&gt;：&lt;a href=&quot;https://gist.github.com/Emi-Emi-Liu/a18f82679dd0e0f4801b6c90c6492012&quot;&gt;Linux常用别名配置&lt;/a&gt; — 将常用别名添加到 &lt;code&gt;~/.bashrc&lt;/code&gt; 中，提高操作效率&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>🎉 火花花的领地，开张啦！</title><link>https://emilia520.icu/posts/blog-opening-2026/</link><guid isPermaLink="true">https://emilia520.icu/posts/blog-opening-2026/</guid><description>这里是一个记录日常、分享技术、写写画画的小角落～欢迎来玩！</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;🎉 开张大吉！&lt;/h1&gt;
&lt;p&gt;你好呀，这里是 &lt;strong&gt;火花花&lt;/strong&gt; 的小博客～&lt;/p&gt;
&lt;p&gt;2026年5月18日，这个小小的角落正式开张了！🎊
以后会在这里记录一些日常、技术笔记、生活感悟，还有各种乱七八糟想写的东西。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;📝 这里有什么？&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;📖 博客文章&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;技术笔记、生活记录、各种想法&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;📓 日记&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;日常碎碎念，看看我在干嘛&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;🎬 番剧&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;看过的动画、评分和感想&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;💻 项目&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;折腾过的一些代码项目&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;🛠 技能&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;我掌握的一些技能汇总&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;📸 相册&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;随手拍的照片、喜欢的图片&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;内容会慢慢丰富起来，不定期更新～&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;💬 关于评论&lt;/h2&gt;
&lt;p&gt;每篇文章下面都可以留言，欢迎来聊聊天！
有什么想说的、想问的，或者想分享的，都可以写下来。
我会看的～虽然不一定每条都回，但看到有意思的评论会很开心！😊&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;🔗 关于友链&lt;/h2&gt;
&lt;p&gt;以后会开友链页面，欢迎互相链接！
如果你想跟我的博客交换友链，可以在评论区留言或者联系我～&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;🚀 最后&lt;/h2&gt;
&lt;p&gt;感谢你来到这里。
不管你是偶然路过，还是特地来的，都欢迎～&lt;/p&gt;
&lt;p&gt;希望这个小小的博客，能给你带来一些有趣的内容、一点温暖，或者只是一个让你放松一下的地方。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;那么，接下来就慢慢更新起来吧！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;—— 火花花 💕&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>LaTeX语法完全指南：从入门到精通</title><link>https://emilia520.icu/posts/latex%E8%AF%AD%E6%B3%95%E5%AE%8C%E5%85%A8%E6%8C%87%E5%8D%97/</link><guid isPermaLink="true">https://emilia520.icu/posts/latex%E8%AF%AD%E6%B3%95%E5%AE%8C%E5%85%A8%E6%8C%87%E5%8D%97/</guid><description>全面讲解LaTeX排版系统的语法和使用方法，涵盖数学公式、文档结构、表格、图片等核心内容</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;LaTeX语法完全指南：从入门到精通&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;LaTeX是一种高质量的排版系统，特别适合科技文档和数学公式的排版。本文将全面介绍LaTeX的语法和使用方法。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📚 目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%AE%80%E4%BB%8B&quot;&gt;一、LaTeX简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BB%93%E6%9E%84&quot;&gt;二、文档结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%96%87%E6%9C%AC&quot;&gt;三、文本格式化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%95%B0%E5%AD%A6&quot;&gt;四、数学公式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%97%E8%A1%A8&quot;&gt;五、列表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%A1%A8%E6%A0%BC&quot;&gt;六、表格&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%9B%BE%E7%89%87&quot;&gt;七、图片插入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%BC%95%E7%94%A8&quot;&gt;八、引用与参考文献&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BB%A3%E7%A0%81&quot;&gt;九、代码排版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%AB%98%E7%BA%A7&quot;&gt;十、高级功能&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%AE%8F%E5%8C%85&quot;&gt;十一、常用宏包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%AE%9E%E6%88%98&quot;&gt;十二、实战技巧&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;简介&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;一、LaTeX简介&lt;/h2&gt;
&lt;h3&gt;1.1 什么是LaTeX？&lt;/h3&gt;
&lt;p&gt;LaTeX（读作&quot;拉泰赫&quot;或&quot;莱特克斯&quot;）是一种基于TeX的排版系统，由Leslie Lamport在1984年开发。它的设计目标是让作者能够专注于内容，而将排版工作交给系统自动完成。&lt;/p&gt;
&lt;h3&gt;1.2 为什么使用LaTeX？&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;专业排版&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自动生成高质量的文档，特别适合学术论文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;数学公式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;数学公式排版能力无与伦比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;交叉引用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自动生成章节、公式、图表的编号和引用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;稳定性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文档格式稳定，不受软件版本影响&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;免费开源&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;完全免费，跨平台支持&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.3 LaTeX vs Word&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;对比项&lt;/th&gt;
&lt;th&gt;LaTeX&lt;/th&gt;
&lt;th&gt;Word&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;学习曲线&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;一般&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;长文档&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;困难（二进制）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;协作&lt;/td&gt;
&lt;td&gt;需要Git等工具&lt;/td&gt;
&lt;td&gt;实时协作&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;结构&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;二、文档结构&lt;/h2&gt;
&lt;h3&gt;2.1 基本文档结构&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\documentclass[选项]{文档类}

% 导言区：加载宏包、定义命令
\usepackage{宏包名}

% 正文开始
\begin{document}

% 文档内容
这里是正文内容

\end{document}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 文档类&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;article&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;短文、报告、论文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;报告&lt;/td&gt;
&lt;td&gt;长报告、学位论文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;book&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;书籍&lt;/td&gt;
&lt;td&gt;书籍、教材&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;letter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;信件&lt;/td&gt;
&lt;td&gt;书信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;beamer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;演示文稿&lt;/td&gt;
&lt;td&gt;幻灯片&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;2.3 文档类选项&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 字体大小选项
\documentclass[12pt]{article}  % 12号字体

% 纸张大小选项
\documentclass[a4paper]{article}  % A4纸

% 双面打印
\documentclass[twoside]{article}  % 双面

% 组合选项
\documentclass[12pt,a4paper,twoside]{article}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.4 页面设置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\usepackage{geometry}
\geometry{
    a4paper,
    left=2.5cm,
    right=2.5cm,
    top=2.5cm,
    bottom=2.5cm
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;文本&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;三、文本格式化&lt;/h2&gt;
&lt;h3&gt;3.1 字体样式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 直立字体
\textup{直立字体}

% 意大利体（斜体）
\textit{意大利体}

% 粗体
\textbf{粗体}

% 等宽字体
\texttt{等宽字体}

% 小型大写字母
\textsc{小型大写}

% 下划线
\underline{下划线}

% 删除线（需要ulem宏包）
\sout{删除线}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 字体大小&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 从小到大
{\tiny 极小}
{\scriptsize 脚本大小}
{\footnotesize 脚注大小}
{\small 小}
{\normalsize 正常}
{\large 大}
{\Large 更大}
{\LARGE 再大}
{\huge 巨大}
{\Huge 最大}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 文本对齐&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 居中环境
\begin{center}
居中文本
\end{center}

% 右对齐环境
\begin{flushright}
右对齐文本
\end{flushright}

% 左对齐环境
\begin{flushleft}
左对齐文本
\end{flushleft}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.4 特殊字符&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\#    % 井号
\$    % 美元符号
\%    % 百分号
\^    % 脱字符
\&amp;amp;    % 和号
\_    % 下划线
\{    % 左花括号
\}    % 右花括号
\~    % 波浪号
\\    % 反斜杠
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.5 段落控制&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 换行（不新起段落）
第一行内容\\
第二行内容

% 新段落
第一段内容

第二段内容

% 强制换页
\newpage

% 无缩进
\noindent 这段没有缩进

% 设置段落缩进
\setlength{\parindent}{2em}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;数学&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;四、数学公式&lt;/h2&gt;
&lt;p&gt;LaTeX最强大的功能之一就是数学公式排版。&lt;/p&gt;
&lt;h3&gt;4.1 行内公式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 使用 $...$ 或 \(...\)
爱因斯坦的质能方程 $E=mc^2$ 是物理学的基础。
爱因斯坦的质能方程 \(E=mc^2\) 是物理学的基础。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.2 行间公式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 使用 \[...\] 或 equation 环境
\[
E = mc^2
\]

% 带编号的公式
\begin{equation}
E = mc^2
\end{equation}

% 不带编号
\begin{equation*}
E = mc^2
\end{equation*}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.3 基本数学符号&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 运算符
+ - * /          % 基本运算
\times           % 乘号 ×
\div             % 除号 ÷
\pm              % 正负 ±
\mp              % 负正 ∓
\cdot            % 点乘 ·

% 关系符
=                % 等号
\neq             % 不等号 ≠
&amp;lt; &amp;gt;              % 小于大于
\leq             % 小于等于 ≤
\geq             % 大于等于 ≥
\approx          % 约等于 ≈
\equiv           % 恒等于 ≡
\sim             % 相似 ~
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.4 上下标&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 上标
x^2              % x的平方
x^{2n}           % x的2n次方（多字符需要用花括号）

% 下标
a_1              % a下标1
a_{n+1}          % a下标n+1

% 组合
x_i^2            % x下标i，上标2
x_{i}^{2}        % 同上，更清晰
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.5 分数与根号&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 分数
\frac{分子}{分母}
\frac{1}{2}      % 二分之一
\frac{a+b}{c+d}  % 分数

% 根号
\sqrt{x}         % 平方根
\sqrt[3]{x}      % 立方根
\sqrt[n]{x}      % n次根
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.6 求和与积分&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 求和
\sum_{i=1}^{n} x_i       % 求和符号
\sum_{i=1}^{\infty} x_i  % 无穷求和

% 积分
\int_{a}^{b} f(x) dx     % 定积分
\int f(x) dx              % 不定积分
\iint f(x,y) dxdy        % 二重积分
\iiint f(x,y,z) dxdydz   % 三重积分

% 极限
\lim_{x \to \infty} f(x) % 极限
\lim_{x \to 0} \frac{\sin x}{x} = 1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.7 矩阵&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 基本矩阵
\begin{matrix}
a &amp;amp; b \\
c &amp;amp; d
\end{matrix}

% 带括号的矩阵
\begin{pmatrix}
a &amp;amp; b \\
c &amp;amp; d
\end{pmatrix}

% 方括号矩阵
\begin{bmatrix}
a &amp;amp; b \\
c &amp;amp; d
\end{bmatrix}

% 花括号矩阵
\begin{Bmatrix}
a &amp;amp; b \\
c &amp;amp; d
\end{Bmatrix}

% 行列式
\begin{vmatrix}
a &amp;amp; b \\
c &amp;amp; d
\end{vmatrix}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.8 多行公式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% align 环境（对齐等号）
\begin{align}
f(x) &amp;amp;= (x+1)^2 \\
     &amp;amp;= x^2 + 2x + 1
\end{align}

% 不带编号
\begin{align*}
f(x) &amp;amp;= (x+1)^2 \\
     &amp;amp;= x^2 + 2x + 1
\end{align*}

% cases 环境（分段函数）
f(x) = \begin{cases}
x^2 &amp;amp; \text{if } x \geq 0 \\
-x  &amp;amp; \text{if } x &amp;lt; 0
\end{cases}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.9 希腊字母&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 小写希腊字母
\alpha \beta \gamma \delta \epsilon \zeta \eta \theta
\iota \kappa \lambda \mu \nu \xi \pi \rho \sigma \tau
\upsilon \phi \chi \psi \omega

% 大写希腊字母
\Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma \Phi \Psi \Omega
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.10 数学字体&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 粗体（向量、矩阵）
\mathbf{ABC}        % 粗体
\boldsymbol{ABC}    % 粗斜体

% 花体
\mathcal{ABC}       % 花体字母

% 黑板粗体
\mathbb{R}          % 实数集 ℝ
\mathbb{N}          % 自然数集 ℕ
\mathbb{Z}          % 整数集 ℤ
\mathbb{Q}          % 有理数集 ℚ
\mathbb{C}          % 复数集 ℂ

% 罗马字体
\mathrm{ABC}        % 直立字体

% 斜体
\mathit{ABC}        % 斜体

% 等宽
\mathtt{ABC}        % 等宽字体
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;列表&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;五、列表&lt;/h2&gt;
&lt;h3&gt;5.1 无序列表&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\begin{itemize}
  \item 第一项
  \item 第二项
  \item 第三项
\end{itemize}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.2 有序列表&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\begin{enumerate}
  \item 第一项
  \item 第二项
  \item 第三项
\end{enumerate}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 描述列表&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\begin{description}
  \item[术语1] 解释1
  \item[术语2] 解释2
  \item[术语3] 解释3
\end{description}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.4 嵌套列表&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\begin{enumerate}
  \item 第一层
    \begin{enumerate}
      \item 第二层
      \item 第二层
    \end{enumerate}
  \item 第一层
\end{enumerate}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;表格&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;六、表格&lt;/h2&gt;
&lt;h3&gt;6.1 基本表格&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\begin{table}[h]
\centering
\caption{表格标题}
\begin{tabular}{|l|c|r|}
\hline
左对齐 &amp;amp; 居中 &amp;amp; 右对齐 \\
\hline
数据1 &amp;amp; 数据2 &amp;amp; 数据3 \\
数据4 &amp;amp; 数据5 &amp;amp; 数据6 \\
\hline
\end{tabular}
\end{table}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.2 列格式说明&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;l&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;左对齐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;居中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;r&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;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;`&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;6.3 复杂表格&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\begin{table}[h]
\centering
\caption{学生成绩表}
\begin{tabular}{|l|c|c|c|}
\hline
\textbf{姓名} &amp;amp; \textbf{语文} &amp;amp; \textbf{数学} &amp;amp; \textbf{英语} \\
\hline
张三 &amp;amp; 85 &amp;amp; 92 &amp;amp; 78 \\
李四 &amp;amp; 90 &amp;amp; 88 &amp;amp; 95 \\
王五 &amp;amp; 78 &amp;amp; 95 &amp;amp; 82 \\
\hline
\end{tabular}
\end{table}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.4 合并单元格&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 合并列
\begin{tabular}{|l|c|c|}
\hline
\multicolumn{2}{|c|}{合并两列} &amp;amp; 单独列 \\
\hline
A &amp;amp; B &amp;amp; C \\
\hline
\end{tabular}

% 合并行（需要multirow宏包）
\begin{tabular}{|l|c|}
\hline
\multirow{2}{*}{合并两行} &amp;amp; 第一行 \\
                          &amp;amp; 第二行 \\
\hline
\end{tabular}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.5 跨页长表格&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\usepackage{longtable}

\begin{longtable}{|l|c|r|}
\caption{长表格标题} \\
\hline
\textbf{列1} &amp;amp; \textbf{列2} &amp;amp; \textbf{列3} \\
\hline
\endfirsthead

\hline
\textbf{列1} &amp;amp; \textbf{列2} &amp;amp; \textbf{列3} \\
\hline
\endhead

\hline
\endfoot

数据1 &amp;amp; 数据2 &amp;amp; 数据3 \\
数据4 &amp;amp; 数据5 &amp;amp; 数据6 \\
...更多数据...
\end{longtable}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;图片&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;七、图片插入&lt;/h2&gt;
&lt;h3&gt;7.1 基本图片插入&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\usepackage{graphicx}

\begin{figure}[h]
\centering
\includegraphics[width=0.8\textwidth]{image.png}
\caption{图片标题}
\label{fig:myimage}
\end{figure}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.2 图片选项&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;width&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;宽度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;height&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;高度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scale&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;缩放比例&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;angle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;旋转角度&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre&gt;&lt;code&gt;% 设置宽度
\includegraphics[width=5cm]{image.png}

% 设置高度
\includegraphics[height=3cm]{image.png}

% 缩放
\includegraphics[scale=0.5]{image.png}

% 旋转
\includegraphics[angle=45]{image.png}

% 组合
\includegraphics[width=0.8\textwidth, angle=0]{image.png}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;here，当前位置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;t&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;top，页面顶部&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;bottom，页面底部&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;page，单独一页&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;忽略内部参数&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre&gt;&lt;code&gt;\begin{figure}[htbp]
% 尝试放在当前位置，不行就放顶部、底部、单独页
\end{figure}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.4 并排图片&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\begin{figure}[h]
\centering
\begin{minipage}{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{image1.png}
\caption{图片1}
\end{minipage}
\hfill
\begin{minipage}{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{image2.png}
\caption{图片2}
\end{minipage}
\end{figure}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;引用&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;八、引用与参考文献&lt;/h2&gt;
&lt;h3&gt;8.1 交叉引用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 标签
\label{标签名}

% 引用
\ref{标签名}      % 引用编号
\pageref{标签名}  % 引用页码

% 示例
如图\ref{fig:myimage}所示...
如公式\ref{eq:einstein}所示...
见第\pageref{sec:intro}页...
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.2 脚注&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;这是正文内容\footnote{这是脚注内容}。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.3 参考文献（BibTeX）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 在导言区
\bibliographystyle{plain}
\bibliography{references}

% 在正文中引用
\cite{引用键}

% references.bib 文件
@article{einstein1905,
  author = {Einstein, Albert},
  title = {On the Electrodynamics of Moving Bodies},
  journal = {Annalen der Physik},
  year = {1905},
  volume = {322},
  pages = {891--921}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.4 natbib宏包&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\usepackage{natbib}

% 引用格式
\citet{einstein1905}    % Einstein (1905)
\citep{einstein1905}    % (Einstein, 1905)
\citep[see][]{einstein1905}  % (see Einstein, 1905)
\citep[p.~10]{einstein1905}  % (Einstein, 1905, p. 10)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;代码&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;九、代码排版&lt;/h2&gt;
&lt;h3&gt;9.1 行内代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;使用\texttt{print()}函数输出。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.2 代码块（listings宏包）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\usepackage{listings}
\usepackage{xcolor}

\lstset{
    language=Python,
    basicstyle=\ttfamily\small,
    keywordstyle=\color{blue}\bfseries,
    commentstyle=\color{green!60!black},
    stringstyle=\color{red},
    numbers=left,
    numberstyle=\tiny\color{gray},
    frame=single,
    breaklines=true,
    captionpos=b
}

\begin{lstlisting}[caption={Python示例}]
def hello():
    print(&quot;Hello, LaTeX!&quot;)

hello()
\end{lstlisting}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.3 minted宏包（代码高亮）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\usepackage{minted}

\begin{minted}{python}
def fibonacci(n):
    if n &amp;lt;= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)
\end{minted}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;高级&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;十、高级功能&lt;/h2&gt;
&lt;h3&gt;10.1 自定义命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 简单命令
\newcommand{\R}{\mathbb{R}}          % 实数集
\newcommand{\N}{\mathbb{N}}          % 自然数集
\newcommand{\norm}[1]{\|#1\|}        % 范数

% 带默认参数
\newcommand{\person}[2]{#1 #2}       % 姓名
\person{张}{三}                       % 输出：张三
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;10.2 自定义环境&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;% 定义定理环境
\newtheorem{theorem}{定理}
\newtheorem{lemma}[theorem]{引理}
\newtheorem{corollary}[theorem]{推论}

% 使用
\begin{theorem}
这是定理内容。
\end{theorem}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;10.3 条件编译&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\newif\ifdraft
\drafttrue    % 启用草稿模式
% \draftfalse  % 关闭草稿模式

\ifdraft
草稿模式：显示草稿标记
\else
正式模式：隐藏草稿标记
\fi
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;10.4 循环&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\usepackage{pgffor}

\foreach \x in {1,2,...,10} {
    数字：\x
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;宏包&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;十一、常用宏包&lt;/h2&gt;
&lt;h3&gt;11.1 文档类相关&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;geometry&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;页面设置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fancyhdr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;页眉页脚&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;titlesec&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;章节标题格式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tocloft&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;目录格式&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;11.2 数学相关&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;amsmath&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数学公式增强&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;amssymb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数学符号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mathtools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数学工具&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;粗体数学符号&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;11.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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graphicx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;图片插入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;booktabs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;专业表格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;multirow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;表格合并行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;longtable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;长表格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;subcaption&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;子图&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;11.4 代码相关&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;代码排版&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;minted&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;代码高亮&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;algorithm2e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;算法排版&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;11.5 中文支持&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ctex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;中文支持（推荐）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xeCJK&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;XeLaTeX中文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CJK&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;传统中文支持&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;实战&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;十二、实战技巧&lt;/h2&gt;
&lt;h3&gt;12.1 学术论文模板&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\documentclass[12pt,a4paper]{article}
\usepackage[UTF8]{ctex}
\usepackage{geometry}
\usepackage{amsmath,amssymb}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{hyperref}

\geometry{left=2.5cm, right=2.5cm, top=2.5cm, bottom=2.5cm}

\title{论文标题}
\author{作者姓名}
\date{\today}

\begin{document}
\maketitle

\begin{abstract}
这是摘要内容。
\end{abstract}

\tableofcontents
\newpage

\section{引言}
正文内容...

\section{方法}
\subsection{数据收集}
具体内容...

\section{结论}
结论内容...

\bibliographystyle{plain}
\bibliography{references}
\end{document}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;12.2 数学笔记模板&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\documentclass[12pt]{article}
\usepackage[UTF8]{ctex}
\usepackage{amsmath,amssymb,mathtools}
\usepackage{geometry}
\usepackage{fancyhdr}

\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{数学笔记}
\fancyhead[R]{\thepage}

\newcommand{\R}{\mathbb{R}}
\newcommand{\N}{\mathbb{N}}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\norm}[1]{\|#1\|}

\begin{document}

\section{线性代数}

\subsection{向量空间}

\begin{definition}
向量空间是一个集合 $V$，配备加法和标量乘法运算，满足以下公理...
\end{definition}

\begin{theorem}
设 $V$ 是有限维向量空间，则 $V$ 的任意两个基具有相同的基数。
\end{theorem}

\begin{proof}
设 $B_1$ 和 $B_2$ 是 $V$ 的两个基。由于 $B_1$ 线性无关且 $B_2$ 生成 $V$，故 $|B_1| \leq |B_2|$。同理 $|B_2| \leq |B_1|$，因此 $|B_1| = |B_2|$。
\end{proof}

\end{document}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;12.3 Beamer演示文稿&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;\documentclass{beamer}
\usetheme{Madrid}
\usepackage[UTF8]{ctex}

\title{演示文稿标题}
\author{演讲者}
\date{\today}

\begin{document}

\begin{frame}
\titlepage
\end{frame}

\begin{frame}{大纲}
\tableofcontents
\end{frame}

\section{第一部分}

\begin{frame}{第一页}
\begin{itemize}
\item 要点一
\item 要点二
\item 要点三
\end{itemize}
\end{frame}

\begin{frame}{公式示例}
\begin{equation}
E = mc^2
\end{equation}
\end{frame}

\end{document}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;12.4 常见问题解决&lt;/h3&gt;
&lt;h4&gt;问题1：中文显示问题&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;% 使用ctex宏包
\usepackage[UTF8]{ctex}

% 或者使用xeCJK
\usepackage{xeCJK}
\setCJKmainfont{SimSun}  % 设置中文字体
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;问题2：图片找不到&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;% 设置图片路径
\graphicspath{{images/}{figures/}}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;问题3：公式太长&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;% 使用multiline环境
\begin{multline}
f(x) = a + b + c + d + e + f + g + h + i + j \\
       + k + l + m + n + o + p + q + r + s + t
\end{multline}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;问题4：表格太宽&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;% 使用resizebox
\resizebox{\textwidth}{!}{
\begin{tabular}{...}
...
\end{tabular}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;📝 总结&lt;/h2&gt;
&lt;h3&gt;核心要点&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;文档结构&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;documentclass → 导言区 → document环境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;数学公式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$行内$、[行间]、equation环境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;表格&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;tabular环境、booktabs宏包&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;图片&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;graphicx宏包、figure环境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;引用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;label和ref配合使用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;中文支持&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ctex宏包&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;学习建议&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;从模板开始&lt;/strong&gt;：先用模板，再逐步修改&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多写多练&lt;/strong&gt;：LaTeX需要实践才能熟练&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;善用搜索&lt;/strong&gt;：遇到问题先搜索解决方案&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;参考文档&lt;/strong&gt;：查阅LaTeX官方文档和宏包文档&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;推荐资源&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.overleaf.com/learn&quot;&gt;Overleaf Learn&lt;/a&gt; - 在线LaTeX教程&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/LaTeX&quot;&gt;LaTeX Wikibook&lt;/a&gt; - 完整的LaTeX指南&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ctan.org/&quot;&gt;CTAN&lt;/a&gt; - LaTeX宏包仓库&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tex.stackexchange.com/&quot;&gt;TeX Stack Exchange&lt;/a&gt; - LaTeX问答社区&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;LaTeX让排版变得简单而专业！&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>OS笔记（一）：进程与线程简介</title><link>https://emilia520.icu/posts/os-211212%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B%E7%AE%80%E4%BB%8B/</link><guid isPermaLink="true">https://emilia520.icu/posts/os-211212%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B%E7%AE%80%E4%BB%8B/</guid><description>深入理解操作系统中进程与线程的概念、组成、特征，以及它们在Linux系统中的实际表现</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;OS笔记（一）：进程与线程简介&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是操作系统笔记系列的第一篇，从最基础的概念讲起，帮助大家理解进程和线程到底是什么、有什么区别、在Linux中如何查看和管理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📚 目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%BF%9B%E7%A8%8B&quot;&gt;一、什么是进程？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BB%84%E6%88%90&quot;&gt;二、进程的组成&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%89%B9%E5%BE%81&quot;&gt;三、进程的特征&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BA%BF%E7%A8%8B&quot;&gt;四、什么是线程？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%8C%BA%E5%88%AB&quot;&gt;五、进程与线程的区别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#linux&quot;&gt;六、Linux实战：查看进程和线程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%80%BB%E7%BB%93&quot;&gt;七、本章小结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;进程&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;一、什么是进程？&lt;/h2&gt;
&lt;h3&gt;1.1 程序 vs 进程&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;strong&gt;程序&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;存放在磁盘里的可执行文件&lt;/td&gt;
&lt;td&gt;静态的，是一个文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;进程&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;程序的一次执行过程&lt;/td&gt;
&lt;td&gt;动态的，是一个活动&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;关键理解&lt;/strong&gt;：同一个程序多次执行会对应多个进程。比如你打开两个Chrome浏览器窗口，虽然程序文件是同一个，但它们是两个不同的进程。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;1.2 进程的定义&lt;/h3&gt;
&lt;p&gt;进程（Process）是操作系统进行&lt;strong&gt;资源分配和调度的基本单位&lt;/strong&gt;。每个进程都有自己独立的内存空间、文件描述符、环境变量等。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;组成&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;二、进程的组成&lt;/h2&gt;
&lt;p&gt;一个进程由三部分组成：&lt;/p&gt;
&lt;h3&gt;2.1 PCB（进程控制块）&lt;/h3&gt;
&lt;p&gt;PCB（Process Control Block）是&lt;strong&gt;进程存在的唯一标志&lt;/strong&gt;。进程创建时会创建PCB，进程结束时会回收PCB。&lt;/p&gt;
&lt;p&gt;PCB中存储的信息包括：&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;strong&gt;PID&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进程ID，系统中唯一标识一个进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;进程状态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;运行态、就绪态、阻塞态等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;程序计数器&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;下一条要执行的指令地址&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;寄存器值&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CPU寄存器的当前值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;内存管理信息&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;页表、段表等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;I/O状态信息&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;打开的文件、分配的设备等&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260603210801.webp&quot; alt=&quot;进程组成&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;2.2 程序段&lt;/h3&gt;
&lt;p&gt;程序段存放的是&lt;strong&gt;要执行的代码指令&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;2.3 数据段&lt;/h3&gt;
&lt;p&gt;数据段存放的是&lt;strong&gt;程序运行时使用的数据&lt;/strong&gt;（如全局变量、静态变量等）。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;重点理解&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PCB是给&lt;strong&gt;操作系统&lt;/strong&gt;用的，用于管理和控制进程&lt;/li&gt;
&lt;li&gt;程序段、数据段是给&lt;strong&gt;进程自己&lt;/strong&gt;使用的&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260603212403.webp&quot; alt=&quot;程序运行过程&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;特征&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;三、进程的特征&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;动态性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进程是程序的一次执行过程，有创建、执行、消亡的生命周期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;并发性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多个进程可以同时存在于内存中，并发执行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;独立性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进程是资源分配的基本单位，各进程的地址空间相互独立&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;异步性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进程按各自独立的、不可预知的速度向前推进&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;结构性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进程由程序段、数据段和PCB三部分组成&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260603213921.webp&quot; alt=&quot;进程特征&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;线程&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;四、什么是线程？&lt;/h2&gt;
&lt;h3&gt;4.1 线程的概念&lt;/h3&gt;
&lt;p&gt;线程（Thread）可以理解为&lt;strong&gt;轻量级进程&lt;/strong&gt;。它是&lt;strong&gt;CPU执行的基本单位&lt;/strong&gt;，也是程序执行流的最小单位。&lt;/p&gt;
&lt;h3&gt;4.2 为什么需要线程？&lt;/h3&gt;
&lt;p&gt;引入线程的目的：&lt;/p&gt;
&lt;ol&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;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;4.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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;线程是处理机调度的基本单位&lt;/td&gt;
&lt;td&gt;CPU分配是分配给线程的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&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;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;线程切换开销小&lt;/td&gt;
&lt;td&gt;不需要切换地址空间&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;区别&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;五、进程与线程的区别&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;strong&gt;资源分配&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;资源分配的基本单位&lt;/td&gt;
&lt;td&gt;CPU调度的基本单位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;地址空间&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;每个进程有独立的地址空间&lt;/td&gt;
&lt;td&gt;同一进程的线程共享地址空间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;开销&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;创建、切换、销毁开销大&lt;/td&gt;
&lt;td&gt;创建、切换、销毁开销小&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;通信&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;需要IPC机制（管道、消息队列等）&lt;/td&gt;
&lt;td&gt;可以直接读写共享变量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;崩溃影响&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;一个进程崩溃不影响其他进程&lt;/td&gt;
&lt;td&gt;一个线程崩溃可能导致整个进程崩溃&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;linux&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;六、Linux实战：查看进程和线程&lt;/h2&gt;
&lt;h3&gt;6.1 查看进程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前用户的进程
ps

# 查看所有进程
ps -ef

# 查看进程树
pstree

# 实时监控进程
top
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.2 查看进程详细信息&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看特定进程的详细信息
ps -p &amp;lt;PID&amp;gt; -f

# 查看进程的内存使用
ps -p &amp;lt;PID&amp;gt; -o pid,ppid,cmd,%mem,%cpu

# 查看进程打开的文件
lsof -p &amp;lt;PID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 查看线程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看进程的线程
ps -T -p &amp;lt;PID&amp;gt;

# 查看所有线程
ps -eLf

# 使用top查看线程
top -H
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.4 进程管理命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 启动一个进程
./my_program &amp;amp;

# 终止进程
kill &amp;lt;PID&amp;gt;

# 强制终止进程
kill -9 &amp;lt;PID&amp;gt;

# 查看进程状态
cat /proc/&amp;lt;PID&amp;gt;/status
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.5 实际案例：理解进程和线程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 启动一个Python程序，观察进程和线程
python3 -c &quot;
import threading
import time

def worker():
    time.sleep(60)

# 创建3个线程
for i in range(3):
    t = threading.Thread(target=worker)
    t.start()

time.sleep(60)
&quot; &amp;amp;

# 查看进程
ps -ef | grep python

# 查看线程
ps -T -p &amp;lt;PID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;总结&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;七、本章小结&lt;/h2&gt;
&lt;h3&gt;核心概念&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;进程&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;程序的一次执行过程，资源分配的基本单位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;线程&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CPU执行的基本单位，轻量级进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PCB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进程存在的唯一标志&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;区别&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进程独立、线程共享；进程开销大、线程开销小&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;考研/期末常见考点&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;进程和程序的区别&lt;/strong&gt;（动态vs静态）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进程的组成&lt;/strong&gt;（PCB、程序段、数据段）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PCB的作用&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;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;思考题&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;为什么说PCB是进程存在的唯一标志？&lt;/li&gt;
&lt;li&gt;引入线程后，进程的作用发生了什么变化？&lt;/li&gt;
&lt;li&gt;用户级线程和内核级线程有什么区别？&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;下一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.1.3%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81%E4%B8%8E%E8%BD%AC%E6%8D%A2&quot;&gt;OS笔记（二）：进程的状态与转换&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>OS笔记（二）：进程的状态与转换</title><link>https://emilia520.icu/posts/os-213%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81%E4%B8%8E%E8%BD%AC%E6%8D%A2/</link><guid isPermaLink="true">https://emilia520.icu/posts/os-213%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81%E4%B8%8E%E8%BD%AC%E6%8D%A2/</guid><description>深入理解操作系统中进程的五种状态、状态转换条件，以及在Linux中如何观察进程状态</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;OS笔记（二）：进程的状态与转换&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是操作系统笔记系列的第二篇，详细讲解进程在生命周期中的五种状态、状态之间的转换条件，以及进程的组织方式。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📚 目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%8A%B6%E6%80%81&quot;&gt;一、进程的五种状态&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%BD%AC%E6%8D%A2&quot;&gt;二、状态之间的转换&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BB%84%E7%BB%87&quot;&gt;三、进程的组织方式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#linux&quot;&gt;四、Linux实战：观察进程状态&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%80%BB%E7%BB%93&quot;&gt;五、本章小结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;状态&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;一、进程的五种状态&lt;/h2&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;th&gt;含义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;创建态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New&lt;/td&gt;
&lt;td&gt;进程正在被创建，操作系统分配资源、初始化PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;就绪态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ready&lt;/td&gt;
&lt;td&gt;已具备运行条件，但没有空闲CPU，暂时不能运行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;运行态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Running&lt;/td&gt;
&lt;td&gt;正在CPU上执行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;阻塞态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Blocked/Waiting&lt;/td&gt;
&lt;td&gt;因等待某事件（如I/O完成）而暂停运行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;终止态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Terminated&lt;/td&gt;
&lt;td&gt;进程执行完毕或被强制终止，系统回收资源&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;状态详解&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;创建态 → 就绪态&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;操作系统完成PCB初始化、分配内存等资源后，进程进入就绪队列&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;就绪态 → 运行态&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;进程被调度程序选中，获得CPU使用权&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;运行态 → 就绪态&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;时间片用完，或被更高优先级的进程抢占&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;运行态 → 阻塞态&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;进程主动请求某事件（如等待I/O、等待信号量）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;阻塞态 → 就绪态&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;等待的事件发生（如I/O完成、收到信号）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;运行态 → 终止态&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;进程执行完毕，或遇到致命错误，或被其他进程杀死&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;转换&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;二、状态之间的转换&lt;/h2&gt;
&lt;h3&gt;2.1 状态转换图&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;![状态转换图](/assets/os-notes/Pasted%20image%2020260603215722.webp)

### 2.2 转换条件总结

| 转换 | 触发条件 | 主动/被动 |
|------|----------|-----------|
| 创建→就绪 | PCB初始化完成 | 被动（OS完成） |
| 就绪→运行 | 被调度程序选中 | 被动（OS调度） |
| 运行→就绪 | 时间片用完/被抢占 | 被动 |
| 运行→阻塞 | 进程主动请求（如I/O） | **主动** |
| 阻塞→就绪 | 等待的事件发生 | 被动 |
| 运行→终止 | 执行完毕/被杀死 | 主动或被动 |

&amp;gt; **重点**：只有 **运行→阻塞** 是进程主动的行为，其他都是被动的！

---

&amp;lt;a id=&quot;组织&quot;&amp;gt;&amp;lt;/a&amp;gt;
## 三、进程的组织方式

操作系统需要管理大量进程的PCB，常用以下两种组织方式：

### 3.1 链接方式

把同一状态的PCB组织成一个**链表**，操作系统持有指向各队列的指针。

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260603215959.webp&quot; alt=&quot;链接方式&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;3.2 索引方式&lt;/h3&gt;
&lt;p&gt;为每种状态建立一张&lt;strong&gt;索引表&lt;/strong&gt;，表中存放指向PCB的指针。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![索引方式](/assets/os-notes/Pasted%20image%2020260603220053.webp)

---

&amp;lt;a id=&quot;linux&quot;&amp;gt;&amp;lt;/a&amp;gt;
## 四、Linux实战：观察进程状态

### 4.1 Linux进程状态

Linux中进程状态用字母表示：

| 状态码 | 含义 | 对应OS概念 |
|--------|------|------------|
| **R** | Running/Runnable | 运行态/就绪态 |
| **S** | Sleeping（可中断） | 阻塞态 |
| **D** | Disk Sleep（不可中断） | 阻塞态（等I/O） |
| **T** | Stopped | 暂停态 |
| **Z** | Zombie | 终止态（未回收） |

### 4.2 查看进程状态

```bash
# 查看进程状态
ps aux | head -5
# USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
# root         1  0.0  0.1 169432 13200 ?        Ss   Jun04   0:05 /sbin/init

# STAT列含义：
# S = sleeping (阻塞)
# R = running (运行/就绪)
# D = disk sleep (不可中断阻塞)
# Z = zombie (僵尸)
# s = session leader
# + = foreground process
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.3 观察状态转换&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建一个会阻塞的进程（等待用户输入）
cat &amp;amp;

# 查看其状态（应该是 S = sleeping）
ps -p $! -o pid,stat,cmd

# 终止它
kill $!
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.4 僵尸进程实验&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建一个僵尸进程
python3 -c &quot;
import os, time
pid = os.fork()
if pid == 0:
    # 子进程立即退出
    exit(0)
else:
    # 父进程不回收子进程，变成僵尸
    time.sleep(60)
&quot; &amp;amp;

# 查看僵尸进程（状态为 Z）
ps aux | grep defunct
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.5 查看进程状态变化&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 使用top实时观察进程状态
top -p &amp;lt;PID&amp;gt;

# 使用strace跟踪系统调用
strace -p &amp;lt;PID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;总结&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;五、本章小结&lt;/h2&gt;
&lt;h3&gt;核心概念&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;五种状态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;创建、就绪、运行、阻塞、终止&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;状态转换&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;就绪↔运行（调度）、运行→阻塞（主动）、阻塞→就绪（事件完成）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;进程组织&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;链接方式（链表）、索引方式（索引表）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Linux状态&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R(运行)、S(睡眠)、D(磁盘等待)、Z(僵尸)、T(暂停)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;考研/期末常见考点&lt;/h3&gt;
&lt;ol&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;（有没有CPU）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进程组织的两种方式&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux进程状态码的含义&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;思考题&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;为什么说&quot;运行→阻塞&quot;是进程的主动行为？&lt;/li&gt;
&lt;li&gt;就绪态和阻塞态的本质区别是什么？&lt;/li&gt;
&lt;li&gt;僵尸进程是怎么产生的？如何避免？&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;上一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.1.1+2.1.2%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B%E7%AE%80%E4%BB%8B&quot;&gt;OS笔记（一）：进程与线程简介&lt;/a&gt;
&lt;strong&gt;下一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.1.4%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6&quot;&gt;OS笔记（三）：进程控制&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>OS笔记（三）：进程控制</title><link>https://emilia520.icu/posts/os-214%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/</link><guid isPermaLink="true">https://emilia520.icu/posts/os-214%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/</guid><description>深入理解操作系统中原语的概念、进程的创建/终止/阻塞/唤醒/切换机制，以及Linux中的进程管理实践</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;OS笔记（三）：进程控制&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是操作系统笔记系列的第三篇，详细讲解操作系统如何通过原语来控制进程的创建、终止、阻塞、唤醒和切换。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📚 目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%8E%9F%E8%AF%AD&quot;&gt;一、什么是原语？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%9B%E5%BB%BA&quot;&gt;二、进程创建&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BB%88%E6%AD%A2&quot;&gt;三、进程终止&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%98%BB%E5%A1%9E%E5%94%A4%E9%86%92&quot;&gt;四、进程阻塞与唤醒&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%87%E6%8D%A2&quot;&gt;五、进程切换&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#linux&quot;&gt;六、Linux实战：进程控制&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%80%BB%E7%BB%93&quot;&gt;七、本章小结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;原语&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;一、什么是原语？&lt;/h2&gt;
&lt;h3&gt;1.1 原语的定义&lt;/h3&gt;
&lt;p&gt;原语（Primitive）是操作系统内核中由若干指令组成的&lt;strong&gt;原子操作&lt;/strong&gt;，执行过程&lt;strong&gt;一气呵成，不可中断&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;1.2 如何保证原子性？&lt;/h3&gt;
&lt;p&gt;使用 &lt;strong&gt;关中断指令&lt;/strong&gt; 和 &lt;strong&gt;开中断指令&lt;/strong&gt; 这两个特权指令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;关中断指令    ← 关闭中断响应
  操作1
  操作2
  ...
开中断指令    ← 恢复中断响应
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;：CPU执行关中断指令后，不再检查中断信号，直到执行开中断指令后才恢复。这样中间的指令序列就不可被中断了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;1.3 为什么需要原语？&lt;/h3&gt;
&lt;p&gt;进程控制涉及修改PCB、队列等关键数据结构，如果不原子执行，可能出现数据不一致的错误。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;创建&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;二、进程创建&lt;/h2&gt;
&lt;h3&gt;2.1 创建原语的执行步骤&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;申请空白PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;为新进程分配所需资源（内存、文件等）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;初始化PCB（PID、程序计数器、寄存器等）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;将PCB插入就绪队列&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;2.2 引起进程创建的事件&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;strong&gt;用户登录&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;用户登录系统时创建Shell进程&lt;/td&gt;
&lt;td&gt;SSH登录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;作业调度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;从外存调入作业执行&lt;/td&gt;
&lt;td&gt;批处理系统&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提供服务&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OS为用户请求创建服务进程&lt;/td&gt;
&lt;td&gt;打印请求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;应用请求&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进程主动创建子进程&lt;/td&gt;
&lt;td&gt;fork()系统调用&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;终止&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;三、进程终止&lt;/h2&gt;
&lt;h3&gt;3.1 撤销原语的执行步骤&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;从PCB集合中找到终止进程的PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;若进程正在运行，立即剥夺CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;终止其所有子进程（级联终止）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;将该进程拥有的所有资源归还给父进程或OS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;删除PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;3.2 引起进程终止的事件&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;strong&gt;正常结束&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进程执行完毕&lt;/td&gt;
&lt;td&gt;程序运行结束&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;异常结束&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;遇到致命错误&lt;/td&gt;
&lt;td&gt;段错误、除零错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;外界干预&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;被其他进程或管理员终止&lt;/td&gt;
&lt;td&gt;kill命令&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;阻塞唤醒&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;四、进程阻塞与唤醒&lt;/h2&gt;
&lt;h3&gt;4.1 阻塞原语&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;找到要阻塞的进程对应的PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;保护进程运行现场，将PCB状态设为&lt;strong&gt;阻塞态&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;将PCB插入相应事件的&lt;strong&gt;等待队列&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;4.2 唤醒原语&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;在事件等待队列中找到PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;将PCB从等待队列中移除，设为&lt;strong&gt;就绪态&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;将PCB插入&lt;strong&gt;就绪队列&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：阻塞是进程&lt;strong&gt;主动&lt;/strong&gt;调用的（如等待I/O），唤醒是由&lt;strong&gt;其他进程或OS&lt;/strong&gt;在事件完成时调用的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;切换&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;五、进程切换&lt;/h2&gt;
&lt;h3&gt;5.1 切换原语的执行步骤&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;将运行环境信息（寄存器值等）存入当前进程的PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;将当前PCB移入相应队列（就绪/阻塞）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;选择另一个进程执行，更新其PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;根据新进程的PCB恢复运行环境&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;5.2 引起进程切换的事件&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;时间片用完&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当前进程时间片到，切换到下一个就绪进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;进程阻塞&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当前进程主动阻塞，切换到其他就绪进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;更高优先级进程就绪&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;抢占式调度下，高优先级进程抢占CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260604200546.webp&quot; alt=&quot;原语总结&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;linux&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;六、Linux实战：进程控制&lt;/h2&gt;
&lt;h3&gt;6.1 创建进程：fork()&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 在C语言中使用fork()创建子进程
cat &amp;gt; fork_demo.c &amp;lt;&amp;lt; &apos;EOF&apos;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;

int main() {
    pid_t pid = fork();
    
    if (pid &amp;gt; 0) {
        // 父进程
        printf(&quot;父进程 PID=%d, 子进程 PID=%d\n&quot;, getpid(), pid);
    } else if (pid == 0) {
        // 子进程
        printf(&quot;子进程 PID=%d, 父进程 PID=%d\n&quot;, getpid(), getppid());
    }
    
    return 0;
}
EOF

gcc fork_demo.c -o fork_demo
./fork_demo
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.2 终止进程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 正常终止
kill &amp;lt;PID&amp;gt;

# 发送SIGTERM信号（可被捕获）
kill -15 &amp;lt;PID&amp;gt;

# 强制终止（不可捕获）
kill -9 &amp;lt;PID&amp;gt;

# 按名称终止
pkill -f &quot;python3 my_script.py&quot;

# 终止所有同名进程
killall python3
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 进程状态管理&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 暂停进程（发送SIGSTOP）
kill -STOP &amp;lt;PID&amp;gt;

# 恢复进程（发送SIGCONT）
kill -CONT &amp;lt;PID&amp;gt;

# 实际操作
sleep 100 &amp;amp;
PID=$!
echo &quot;进程 PID=$PID 已启动&quot;

sleep 2
kill -STOP $PID
echo &quot;进程已暂停&quot;

sleep 2
kill -CONT $PID
echo &quot;进程已恢复&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.4 查看进程关系&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看进程树
pstree -p

# 查看特定进程的父进程
ps -p &amp;lt;PID&amp;gt; -o pid,ppid,cmd

# 查看子进程
ps --ppid &amp;lt;PID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.5 Shell中的进程控制&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 前台运行
./my_program

# 后台运行
./my_program &amp;amp;

# 查看后台任务
jobs

# 切换到前台
fg %1

# 继续后台运行
bg %1

# nohup保持运行（退出终端后继续）
nohup ./my_program &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;总结&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;七、本章小结&lt;/h2&gt;
&lt;h3&gt;核心概念&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;原语&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;原子操作，用关中断/开中断保证&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;创建原语&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;申请PCB→分配资源→初始化→插入就绪队列&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;终止原语&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;找PCB→剥夺CPU→终止子进程→回收资源→删除PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;阻塞原语&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;保护现场→设阻塞态→插入等待队列&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;唤醒原语&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;从等待队列移除→设就绪态→插入就绪队列&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;切换原语&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;保存环境→移队列→选新进程→恢复环境&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;考研/期末常见考点&lt;/h3&gt;
&lt;ol&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;/li&gt;
&lt;li&gt;&lt;strong&gt;fork()的工作原理&lt;/strong&gt;（子进程复制父进程）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;思考题&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;为什么原语要用关中断/开中断来保证原子性？&lt;/li&gt;
&lt;li&gt;进程被阻塞后，是谁把它唤醒的？&lt;/li&gt;
&lt;li&gt;fork()之后，父进程和子进程的执行顺序是怎样的？&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;上一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.1.3%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81%E4%B8%8E%E8%BD%AC%E6%8D%A2&quot;&gt;OS笔记（二）：进程的状态与转换&lt;/a&gt;
&lt;strong&gt;下一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.1.5%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1&quot;&gt;OS笔记（四）：进程通信&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>OS笔记（四）：进程通信</title><link>https://emilia520.icu/posts/os-215%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1/</link><guid isPermaLink="true">https://emilia520.icu/posts/os-215%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1/</guid><description>深入理解操作系统中进程间通信的三种方式：共享存储、消息传递、管道通信，以及Linux IPC实战</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;OS笔记（四）：进程通信&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是操作系统笔记系列的第四篇，详细讲解进程间通信（IPC）的三种基本方式，以及Linux中IPC的实际使用方法。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📚 目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%BA%E4%BB%80%E4%B9%88&quot;&gt;一、为什么需要进程通信？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%85%B1%E4%BA%AB%E5%AD%98%E5%82%A8&quot;&gt;二、共享存储&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%B6%88%E6%81%AF%E4%BC%A0%E9%80%92&quot;&gt;三、消息传递&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%AE%A1%E9%81%93&quot;&gt;四、管道通信&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BF%A1%E5%8F%B7&quot;&gt;五、信号&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#linux&quot;&gt;六、Linux实战：进程通信&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%80%BB%E7%BB%93&quot;&gt;七、本章小结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;为什么&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;一、为什么需要进程通信？&lt;/h2&gt;
&lt;h3&gt;1.1 进程的独立性&lt;/h3&gt;
&lt;p&gt;进程是分配系统资源的基本单位，&lt;strong&gt;各进程的内存地址空间相互独立&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![进程地址空间独立](/assets/os-notes/Pasted%20image%2020260604201148.webp)

### 1.2 安全考虑

为了保证安全，**一个进程不能直接访问另一个进程的地址空间**。因此需要操作系统提供专门的通信机制。

### 1.3 IPC的三种方式

| 方式 | 原理 | 特点 |
|------|------|------|
| **共享存储** | 在内存中开辟共享区域 | 速度快，需要同步 |
| **消息传递** | 通过发送/接收消息 | 灵活，开销较大 |
| **管道通信** | 通过管道文件连接 | 简单，单向传输 |

---

&amp;lt;a id=&quot;共享存储&quot;&amp;gt;&amp;lt;/a&amp;gt;
## 二、共享存储

### 2.1 基本原理

操作系统在内存中划出一块**共享存储区**，多个进程可以访问这块区域进行数据交换。

![共享存储](/assets/os-notes/Pasted%20image%2020260604201841.webp)

### 2.2 两种类型

| 类型 | 说明 | 特点 |
|------|------|------|
| **基于数据结构的共享** | 共享固定大小的数据结构（如数组） | 限制多、速度慢、**低级通信** |
| **基于存储区的共享** | 共享原始内存区域，数据形式由进程自定 | 灵活、速度快、**高级通信** |

### 2.3 同步互斥

多个进程访问共享空间时需要**互斥**，通常使用操作系统提供的同步互斥工具（如P、V操作、信号量）。

---

&amp;lt;a id=&quot;消息传递&quot;&amp;gt;&amp;lt;/a&amp;gt;
## 三、消息传递

### 3.1 基本原理

进程间的数据交换以**格式化的消息**为单位，通过操作系统提供的&quot;发送消息/接收消息&quot;原语进行数据交换。

消息结构：
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 两种方式&lt;/h3&gt;
&lt;h4&gt;直接通信方式&lt;/h4&gt;
&lt;p&gt;发送方和接收方&lt;strong&gt;直接指定对方&lt;/strong&gt;，点名道姓的消息传递。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260604203218.webp&quot; alt=&quot;直接通信&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;间接通信方式&lt;/h4&gt;
&lt;p&gt;通过**信箱（Mailbox）**作为中间实体进行消息传递。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260604204244.webp&quot; alt=&quot;间接通信&quot; /&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;th&gt;间接通信&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;寻址&lt;/td&gt;
&lt;td&gt;直接指定进程PID&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;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;灵活性&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;管道&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;四、管道通信&lt;/h2&gt;
&lt;h3&gt;4.1 基本原理&lt;/h3&gt;
&lt;p&gt;管道（Pipe）是连接两个进程的&lt;strong&gt;共享文件&lt;/strong&gt;，一个进程写入数据，另一个进程读取数据。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260604204920.webp&quot; alt=&quot;管道通信&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;4.2 管道的特点&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;半双工&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;某一时间段内只能单向传输&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;互斥访问&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;各进程要互斥地访问管道&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;写满阻塞&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管道写满时，写进程阻塞&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;读空阻塞&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管道读空时，读进程阻塞&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;数据消失&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;数据一旦被读出就消失&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;4.3 读写规则&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; **Linux方案**：一个管道允许**多个写进程**和**一个读进程**，或者**多个写进程**和**多个读进程**。

---

&amp;lt;a id=&quot;信号&quot;&amp;gt;&amp;lt;/a&amp;gt;
## 五、信号

### 5.1 信号的概念

信号（Signal）是用于通知进程某个**特定事件已经发生**的机制。进程收到信号后进行相应处理。

### 5.2 信号的发送与保存

![信号发送](/assets/os-notes/Pasted%20image%2020260604211809.webp)

### 5.3 信号的处理时机

当进程从**内核态**转为**用户态**时，检查是否有待处理信号。

![信号处理时机](/assets/os-notes/Pasted%20image%2020260604212707.webp)

### 5.4 信号的处理方式

| 处理方式 | 说明 |
|----------|------|
| **默认处理** | 执行OS设置的缺省信号处理程序 |
| **自定义处理** | 用户注册的信号处理函数（覆盖默认） |
| **忽略** | 某些信号可以被忽略 |

### 5.5 信号处理规则

1. 处理完信号后，返回进程的下一条指令继续执行
2. 一旦处理了某个信号，pending位重置为0
3. 重复收到的同类信号被丢弃
4. 同时收到多个信号时，先处理序号更小的
5. 某些信号不能被自定义处理或阻塞（如SIGKILL、SIGSTOP）

---

&amp;lt;a id=&quot;linux&quot;&amp;gt;&amp;lt;/a&amp;gt;
## 六、Linux实战：进程通信

### 6.1 管道通信

```bash
# 匿名管道（父子进程间）
ls | grep &quot;.txt&quot;

# 创建命名管道（任意进程间）
mkfifo /tmp/my_pipe

# 写入端
echo &quot;Hello from writer&quot; &amp;gt; /tmp/my_pipe &amp;amp;

# 读取端
cat /tmp/my_pipe
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.2 共享内存&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 使用ipcs查看共享内存
ipcs -m

# Python共享内存示例
python3 &amp;lt;&amp;lt; &apos;EOF&apos;
import multiprocessing
import time

def writer(shm):
    shm.buf[:5] = b&apos;Hello&apos;
    print(&quot;写入完成&quot;)

def reader(shm):
    time.sleep(1)
    print(f&quot;读取: {bytes(shm.buf[:5])}&quot;)

if __name__ == &apos;__main__&apos;:
    shm = multiprocessing.shared_memory.SharedMemory(create=True, size=1024)
    
    p1 = multiprocessing.Process(target=writer, args=(shm,))
    p2 = multiprocessing.Process(target=reader, args=(shm,))
    
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    
    shm.close()
    shm.unlink()
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 消息队列&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看消息队列
ipcs -q

# Python消息队列示例
python3 &amp;lt;&amp;lt; &apos;EOF&apos;
from multiprocessing import Queue, Process

def sender(q):
    q.put(&quot;Hello from sender&quot;)
    q.put(42)

def receiver(q):
    print(f&quot;收到: {q.get()}&quot;)
    print(f&quot;收到: {q.get()}&quot;)

if __name__ == &apos;__main__&apos;:
    q = Queue()
    p1 = Process(target=sender, args=(q,))
    p2 = Process(target=receiver, args=(q,))
    p1.start()
    p1.join()
    p2.start()
    p2.join()
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.4 信号&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有信号
kill -l

# 发送信号
kill -SIGUSR1 &amp;lt;PID&amp;gt;    # 发送用户自定义信号
kill -SIGTERM &amp;lt;PID&amp;gt;    # 请求终止
kill -SIGKILL &amp;lt;PID&amp;gt;    # 强制终止

# Python信号处理
python3 &amp;lt;&amp;lt; &apos;EOF&apos;
import signal
import os

def handler(signum, frame):
    print(f&quot;收到信号 {signum}&quot;)

signal.signal(signal.SIGUSR1, handler)

print(f&quot;PID: {os.getpid()}&quot;)
print(&quot;等待信号 SIGUSR1...&quot;)
signal.pause()
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.5 Socket通信&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 服务器端
python3 -c &quot;
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((&apos;localhost&apos;, 12345))
s.listen(1)
conn, addr = s.accept()
data = conn.recv(1024)
print(f&apos;收到: {data.decode()}&apos;)
conn.send(b&apos;Hello from server&apos;)
conn.close()
&quot; &amp;amp;

# 客户端
python3 -c &quot;
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((&apos;localhost&apos;, 12345))
s.send(b&apos;Hello from client&apos;)
data = s.recv(1024)
print(f&apos;收到: {data.decode()}&apos;)
s.close()
&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;总结&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;七、本章小结&lt;/h2&gt;
&lt;h3&gt;核心概念&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;共享存储&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;开辟共享内存区，需要同步互斥&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;消息传递&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;发送/接收消息，直接或间接（信箱）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;管道通信&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;共享文件连接，半双工，阻塞机制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;信号&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;事件通知机制，内核态→用户态时处理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;IPC方式对比&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;th&gt;适用场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;共享内存&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;最快&lt;/strong&gt;&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;&lt;strong&gt;最高&lt;/strong&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;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;td&gt;事件通知&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;考研/期末常见考点&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;三种IPC方式的原理和特点&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;管道通信的5个特点&lt;/strong&gt;（半双工、互斥、阻塞等）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;直接通信 vs 间接通信&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;基于存储区 vs 基于数据结构的共享&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;信号的处理时机和规则&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;思考题&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;为什么共享存储需要同步互斥机制？&lt;/li&gt;
&lt;li&gt;管道通信中，数据被读取后为什么就消失了？&lt;/li&gt;
&lt;li&gt;直接通信和间接通信各有什么优缺点？&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;上一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.1.4%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6&quot;&gt;OS笔记（三）：进程控制&lt;/a&gt;
&lt;strong&gt;下一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.1.6%E7%BA%BF%E7%A8%8B&quot;&gt;OS笔记（五）：线程&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>OS笔记（五）：线程</title><link>https://emilia520.icu/posts/os-216%E7%BA%BF%E7%A8%8B/</link><guid isPermaLink="true">https://emilia520.icu/posts/os-216%E7%BA%BF%E7%A8%8B/</guid><description>深入理解操作系统中线程的概念、实现方式、多线程模型，以及Linux线程管理实践</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;OS笔记（五）：线程&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是操作系统笔记系列的第五篇，详细讲解线程的概念、用户级线程与内核级线程的区别、多线程模型，以及Linux中的线程管理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📚 目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%A6%82%E5%BF%B5&quot;&gt;一、线程的概念&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%AE%9E%E7%8E%B0&quot;&gt;二、线程的实现方式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%A8%A1%E5%9E%8B&quot;&gt;三、多线程模型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%8A%B6%E6%80%81&quot;&gt;四、线程的状态与控制&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#linux&quot;&gt;五、Linux实战：线程管理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%80%BB%E7%BB%93&quot;&gt;六、本章小结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;概念&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;一、线程的概念&lt;/h2&gt;
&lt;h3&gt;1.1 什么是线程？&lt;/h3&gt;
&lt;p&gt;线程（Thread）可以理解为&lt;strong&gt;轻量级进程&lt;/strong&gt;。它是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU执行的基本单位&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;程序执行流的最小单位&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.2 为什么引入线程？&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;进程间通信复杂&lt;/td&gt;
&lt;td&gt;线程间可以直接共享数据&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.3 进程 vs 线程&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;strong&gt;本质&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;资源分配的基本单位&lt;/td&gt;
&lt;td&gt;CPU执行的基本单位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;资源&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;拥有独立的资源&lt;/td&gt;
&lt;td&gt;几乎不拥有资源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;切换开销&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;大（切换地址空间）&lt;/td&gt;
&lt;td&gt;小（共享地址空间）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;通信方式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;需要IPC机制&lt;/td&gt;
&lt;td&gt;直接读写共享变量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;崩溃影响&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不影响其他进程&lt;/td&gt;
&lt;td&gt;可能导致整个进程崩溃&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.4 线程的属性&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;线程是&lt;strong&gt;处理机调度的单位&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;多CPU计算机中，各线程可占用不同的CPU&lt;/li&gt;
&lt;li&gt;每个线程都有一个&lt;strong&gt;线程ID&lt;/strong&gt;和&lt;strong&gt;TCB&lt;/strong&gt;（线程控制块）&lt;/li&gt;
&lt;li&gt;线程也有&lt;strong&gt;就绪、阻塞、运行&lt;/strong&gt;三种基本状态&lt;/li&gt;
&lt;li&gt;线程几乎不拥有系统资源&lt;/li&gt;
&lt;li&gt;同一进程的线程共享进程资源&lt;/li&gt;
&lt;li&gt;同一线程的线程通信无需系统干预&lt;/li&gt;
&lt;li&gt;同一进程的线程切换不会引起进程切换&lt;/li&gt;
&lt;li&gt;不同进程的线程切换会引起进程切换&lt;/li&gt;
&lt;li&gt;切换同进程内线程的开销很小&lt;/li&gt;
&lt;li&gt;切换进程的开销很大&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;实现&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;二、线程的实现方式&lt;/h2&gt;
&lt;h3&gt;2.1 用户级线程（User-Level Thread）&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260605174743.webp&quot; alt=&quot;用户级线程&quot; /&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;strong&gt;管理者&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;应用程序（线程库）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;切换位置&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;用户态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OS感知&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OS不知道线程存在&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;切换不需要切换到核心态，开销小、效率高&lt;/li&gt;
&lt;/ul&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;无法利用多核CPU&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.2 内核级线程（Kernel-Level Thread）&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260605174810.webp&quot; alt=&quot;内核级线程&quot; /&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;strong&gt;管理者&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;操作系统内核&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;切换位置&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;核心态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OS感知&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OS为每个线程建立TCB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;可以利用多核CPU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;缺点&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;切换需要切换到核心态，开销大&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.3 用户级 vs 内核级&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;strong&gt;切换开销&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;小&lt;/td&gt;
&lt;td&gt;大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;并发能力&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;弱&lt;/td&gt;
&lt;td&gt;强&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;多核利用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;td&gt;能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;阻塞影响&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;整个进程阻塞&lt;/td&gt;
&lt;td&gt;仅当前线程阻塞&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;重点&lt;/strong&gt;：操作系统只能看到&lt;strong&gt;内核级线程&lt;/strong&gt;！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;模型&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;三、多线程模型&lt;/h2&gt;
&lt;h3&gt;3.1 一对一模型&lt;/h3&gt;
&lt;p&gt;一个用户级线程对应一个内核级线程。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260605175632.webp&quot; alt=&quot;一对一模型&quot; /&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;/td&gt;
&lt;td&gt;线程管理成本高&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;3.2 多对一模型&lt;/h3&gt;
&lt;p&gt;多个用户级线程对应一个内核级线程。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260605175708.webp&quot; alt=&quot;多对一模型&quot; /&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;/td&gt;
&lt;td&gt;并发性不好&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;3.3 多对多模型&lt;/h3&gt;
&lt;p&gt;多个用户级线程对应多个内核级线程。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://emilia520.icu/assets/os-notes/Pasted%20image%2020260605175950.webp&quot; alt=&quot;多对多模型&quot; /&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;/td&gt;
&lt;td&gt;折中方案&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;3.4 模型对比&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;th&gt;开销&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;一对一&lt;/td&gt;
&lt;td&gt;1:1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;最强&lt;/strong&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;N:1&lt;/td&gt;
&lt;td&gt;最弱&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;最小&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多对多&lt;/td&gt;
&lt;td&gt;N:M&lt;/td&gt;
&lt;td&gt;较强&lt;/td&gt;
&lt;td&gt;较小&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;状态&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;四、线程的状态与控制&lt;/h2&gt;
&lt;h3&gt;4.1 线程的状态&lt;/h3&gt;
&lt;p&gt;线程也有三种基本状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![线程状态](/assets/os-notes/Pasted%20image%2020260605180138.webp)

### 4.2 线程控制块（TCB）

TCB存储线程的信息：

| 信息 | 说明 |
|------|------|
| 线程ID | 唯一标识 |
| 程序计数器 | 下一条指令地址 |
| 寄存器值 | CPU寄存器状态 |
| 栈指针 | 线程栈的位置 |
| 线程状态 | 就绪/运行/阻塞 |

![线程组织](/assets/os-notes/Pasted%20image%2020260605180515.webp)

---

&amp;lt;a id=&quot;linux&quot;&amp;gt;&amp;lt;/a&amp;gt;
## 五、Linux实战：线程管理

### 5.1 Linux中的线程

Linux中线程被称为**轻量级进程**（LWP），使用 `clone()` 系统调用创建。

### 5.2 查看线程

```bash
# 查看进程的线程
ps -T -p &amp;lt;PID&amp;gt;

# 查看所有线程
ps -eLf

# 使用top查看线程
top -H -p &amp;lt;PID&amp;gt;

# 使用htop（更直观）
htop -H
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 创建线程（C语言）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cat &amp;gt; thread_demo.c &amp;lt;&amp;lt; &apos;EOF&apos;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;pthread.h&amp;gt;

void* thread_func(void* arg) {
    printf(&quot;线程 %ld 运行中\n&quot;, (long)arg);
    return NULL;
}

int main() {
    pthread_t threads[3];
    
    // 创建3个线程
    for (long i = 0; i &amp;lt; 3; i++) {
        pthread_create(&amp;amp;threads[i], NULL, thread_func, (void*)i);
    }
    
    // 等待线程结束
    for (int i = 0; i &amp;lt; 3; i++) {
        pthread_join(threads[i], NULL);
    }
    
    printf(&quot;所有线程执行完毕\n&quot;);
    return 0;
}
EOF

gcc thread_demo.c -lpthread -o thread_demo
./thread_demo
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.4 创建线程（Python）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;python3 &amp;lt;&amp;lt; &apos;EOF&apos;
import threading
import time

def worker(tid):
    print(f&quot;线程 {tid} 开始&quot;)
    time.sleep(1)
    print(f&quot;线程 {tid} 结束&quot;)

# 创建5个线程
threads = []
for i in range(5):
    t = threading.Thread(target=worker, args=(i,))
    threads.append(t)
    t.start()

# 等待所有线程完成
for t in threads:
    t.join()

print(&quot;所有线程执行完毕&quot;)
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.5 线程同步&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;python3 &amp;lt;&amp;lt; &apos;EOF&apos;
import threading

counter = 0
lock = threading.Lock()

def increment():
    global counter
    for _ in range(100000):
        with lock:
            counter += 1

# 创建10个线程并发修改共享变量
threads = []
for _ in range(10):
    t = threading.Thread(target=increment)
    threads.append(t)
    t.start()

for t in threads:
    t.join()

print(f&quot;最终计数: {counter}&quot;)  # 应该是1000000
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.6 线程vs进程性能对比&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;python3 &amp;lt;&amp;lt; &apos;EOF&apos;
import threading
import multiprocessing
import time

def task():
    sum(range(1000000))

# 测试线程
start = time.time()
threads = [threading.Thread(target=task) for _ in range(4)]
for t in threads: t.start()
for t in threads: t.join()
thread_time = time.time() - start

# 测试进程
start = time.time()
processes = [multiprocessing.Process(target=task) for _ in range(4)]
for p in processes: p.start()
for p in processes: p.join()
process_time = time.time() - start

print(f&quot;线程耗时: {thread_time:.3f}s&quot;)
print(f&quot;进程耗时: {process_time:.3f}s&quot;)
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.7 查看线程详细信息&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看线程栈信息
cat /proc/&amp;lt;PID&amp;gt;/task/&amp;lt;TID&amp;gt;/stack

# 查看线程状态
cat /proc/&amp;lt;PID&amp;gt;/task/&amp;lt;TID&amp;gt;/status

# 使用pstack查看线程栈
pstack &amp;lt;PID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;总结&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;六、本章小结&lt;/h2&gt;
&lt;h3&gt;核心概念&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;线程&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CPU执行的基本单位，轻量级进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;用户级线程&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;用户态切换，开销小，并发弱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;内核级线程&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;核心态切换，开销大，并发强&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;一对一模型&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;并发强，开销大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;多对一模型&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;并发弱，开销小&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;多对多模型&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;折中方案&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;线程实现方式对比&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;/td&gt;
&lt;td&gt;用户态&lt;/td&gt;
&lt;td&gt;核心态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS感知&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;并发能力&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;能&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;考研/期末常见考点&lt;/h3&gt;
&lt;ol&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;/li&gt;
&lt;li&gt;&lt;strong&gt;OS只能看到内核级线程&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;线程切换和进程切换的开销对比&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;思考题&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;为什么说线程是&quot;轻量级进程&quot;？&lt;/li&gt;
&lt;li&gt;用户级线程为什么不能利用多核CPU？&lt;/li&gt;
&lt;li&gt;多对多模型是如何兼顾并发性和开销的？&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;上一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.1.5%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1&quot;&gt;OS笔记（四）：进程通信&lt;/a&gt;
&lt;strong&gt;下一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.2.1%E8%B0%83%E5%BA%A6%E7%9A%84%E6%A6%82%E5%BF%B5%E3%80%81%E5%B1%82%E6%AC%A1&quot;&gt;OS笔记（六）：调度的概念、层次&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>OS笔记（六）：调度的概念、层次</title><link>https://emilia520.icu/posts/os-221%E8%B0%83%E5%BA%A6%E7%9A%84%E6%A6%82%E5%BF%B5%E5%B1%82%E6%AC%A1/</link><guid isPermaLink="true">https://emilia520.icu/posts/os-221%E8%B0%83%E5%BA%A6%E7%9A%84%E6%A6%82%E5%BF%B5%E5%B1%82%E6%AC%A1/</guid><description>深入理解操作系统中调度的三个层次、七状态模型，以及Linux进程调度机制</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;OS笔记（六）：调度的概念、层次&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是操作系统笔记系列的第六篇，详细讲解操作系统调度的三个层次（高级调度、中级调度、低级调度）以及七状态模型。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📚 目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%A6%82%E5%BF%B5&quot;&gt;一、什么是调度？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%B1%82%E6%AC%A1&quot;&gt;二、调度的三个层次&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%AF%B9%E6%AF%94&quot;&gt;三、三层调度的对比&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%83%E7%8A%B6%E6%80%81&quot;&gt;四、七状态模型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#linux&quot;&gt;五、Linux实战：调度管理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%80%BB%E7%BB%93&quot;&gt;六、本章小结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;概念&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;一、什么是调度？&lt;/h2&gt;
&lt;h3&gt;1.1 调度的定义&lt;/h3&gt;
&lt;p&gt;调度（Scheduling）是操作系统按照某种策略&lt;strong&gt;从多个可执行的候选中选择一个&lt;/strong&gt;来使用某种资源的过程。&lt;/p&gt;
&lt;h3&gt;1.2 为什么需要调度？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CPU资源有限，进程数量多&lt;/li&gt;
&lt;li&gt;需要决定哪个进程获得CPU&lt;/li&gt;
&lt;li&gt;需要平衡公平性和效率&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;层次&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;二、调度的三个层次&lt;/h2&gt;
&lt;h3&gt;2.1 高级调度（作业调度）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;作业&lt;/strong&gt;：一个具体的任务（用户提交的工作单位）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高级调度&lt;/strong&gt;：按一定原则从&lt;strong&gt;外存的作业后备队列&lt;/strong&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;strong&gt;频率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;每个作业只调入一次，调出一次&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;操作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;调入时建立PCB，调出时撤销PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;目标&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;控制内存中的进程数量&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre&gt;&lt;code&gt;### 2.2 中级调度（内存调度）

**挂起状态**：内存不够时，将某些进程的数据调到外存等待。

**中级调度**：按照某种策略决定将哪个**挂起状态的进程**重新调入内存。

| 特点 | 说明 |
|------|------|
| **目的** | 提高内存利用率和系统吞吐量 |
| **操作** | 将挂起进程调入/调出内存 |
| **频率** | 比高级调度频繁 |

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 低级调度（进程调度）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;低级调度&lt;/strong&gt;：按照某种策略从&lt;strong&gt;就绪队列&lt;/strong&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;strong&gt;频率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;最基本的一种调度&lt;/strong&gt;，频率最高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;操作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;从就绪队列选择进程，分配CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;必要性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;一般OS中必须配置&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre&gt;&lt;code&gt;---

&amp;lt;a id=&quot;对比&quot;&amp;gt;&amp;lt;/a&amp;gt;
## 三、三层调度的对比

| 对比项 | 高级调度 | 中级调度 | 低级调度 |
|--------|----------|----------|----------|
| **别名** | 作业调度 | 内存调度 | 进程调度 |
| **调度对象** | 作业 | 挂起进程 | 就绪进程 |
| **位置** | 外存→内存 | 外存↔内存 | 就绪队列→CPU |
| **频率** | 最低 | 中等 | **最高** |
| **影响** | 控制并发度 | 内存利用率 | CPU利用率 |
| **是否存在** | 批处理系统 | 虚拟内存系统 | 所有OS |

---

&amp;lt;a id=&quot;七状态&quot;&amp;gt;&amp;lt;/a&amp;gt;
## 四、七状态模型

在五状态模型的基础上，增加了**挂起就绪**和**挂起阻塞**两个状态。

![七状态模型](/assets/os-notes/Pasted%20image%2020260605193054.webp)

### 4.1 七种状态

| 状态 | 英文 | 含义 |
|------|------|------|
| **创建态** | New | 进程正在创建 |
| **就绪态** | Ready | 在内存中等待CPU |
| **运行态** | Running | 正在CPU上执行 |
| **阻塞态** | Blocked | 在内存中等待事件 |
| **终止态** | Terminated | 进程结束 |
| **挂起就绪态** | Ready Suspend | 在外存中，但已具备运行条件 |
| **挂起阻塞态** | Blocked Suspend | 在外存中，等待某事件 |

### 4.2 状态转换

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提高内存利用率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;将不活跃进程调出内存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;容纳更多进程&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;外存可以存放更多进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;系统负载调节&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;负载高时挂起低优先级进程&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;linux&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;五、Linux实战：调度管理&lt;/h2&gt;
&lt;h3&gt;5.1 Linux调度器&lt;/h3&gt;
&lt;p&gt;Linux使用&lt;strong&gt;CFS&lt;/strong&gt;（Completely Fair Scheduler，完全公平调度器）：&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;/td&gt;
&lt;td&gt;运行时间少的进程优先&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;5.2 查看调度信息&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看进程调度策略
chrt -p &amp;lt;PID&amp;gt;

# 查看进程优先级
ps -eo pid,ni,comm | head

# 查看调度类
cat /proc/&amp;lt;PID&amp;gt;/sched
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 调整进程优先级&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# nice值范围：-20（最高）到 19（最低）
nice -n 10 ./my_program      # 以较低优先级启动
renice -5 -p &amp;lt;PID&amp;gt;            # 修改运行中进程的优先级

# 实时调度策略
chrt -f 50 ./my_program       # FIFO实时调度，优先级50
chrt -r 50 ./my_program       # Round-Robin实时调度
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.4 CPU亲和性&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看进程在哪个CPU上运行
taskset -p &amp;lt;PID&amp;gt;

# 绑定进程到特定CPU
taskset -c 0,1 &amp;lt;PID&amp;gt;          # 绑定到CPU 0和1
taskset -c 2 ./my_program     # 启动时绑定到CPU 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.5 查看系统调度统计&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看CPU调度统计
cat /proc/schedstat

# 使用mpstat查看CPU使用
mpstat -P ALL 1

# 使用pidstat查看进程调度
pidstat -p &amp;lt;PID&amp;gt; 1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.6 查看进程状态&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看进程状态（R/S/D/Z/T）
ps aux | awk &apos;{print $8}&apos; | sort | uniq -c

# 统计各状态进程数
echo &quot;运行中: $(ps aux | grep &apos; R &apos; | wc -l)&quot;
echo &quot;睡眠中: $(ps aux | grep &apos; S &apos; | wc -l)&quot;
echo &quot;僵尸态: $(ps aux | grep &apos; Z &apos; | wc -l)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.7 cgroup限制CPU&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看cgroup
ls /sys/fs/cgroup/cpu/

# 限制进程CPU使用（50%单核）
mkdir /sys/fs/cgroup/cpu/limited
echo 50000 &amp;gt; /sys/fs/cgroup/cpu/limited/cpu.cfs_quota_us
echo 100000 &amp;gt; /sys/fs/cgroup/cpu/limited/cpu.cfs_period_us
echo &amp;lt;PID&amp;gt; &amp;gt; /sys/fs/cgroup/cpu/limited/tasks
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;总结&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;六、本章小结&lt;/h2&gt;
&lt;h3&gt;核心概念&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;高级调度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;外存→内存，作业级别，频率最低&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;中级调度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;内存↔外存，挂起进程，提高内存利用率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;低级调度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;就绪队列→CPU，频率最高，最基本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;七状态模型&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;五状态 + 挂起就绪 + 挂起阻塞&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;三层调度对比&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;th&gt;低级调度&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;频率&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;高&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;位置&lt;/td&gt;
&lt;td&gt;外存→内存&lt;/td&gt;
&lt;td&gt;内存↔外存&lt;/td&gt;
&lt;td&gt;就绪→CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;目的&lt;/td&gt;
&lt;td&gt;控制并发度&lt;/td&gt;
&lt;td&gt;内存利用率&lt;/td&gt;
&lt;td&gt;CPU利用率&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;考研/期末常见考点&lt;/h3&gt;
&lt;ol&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;/li&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;/ol&gt;
&lt;h3&gt;思考题&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;高级调度和低级调度分别在什么时候发生？&lt;/li&gt;
&lt;li&gt;七状态模型相比五状态模型多了什么？&lt;/li&gt;
&lt;li&gt;挂起状态有什么作用？什么时候会触发挂起？&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;上一篇&lt;/strong&gt;：&lt;a href=&quot;/posts/os-2.1.6%E7%BA%BF%E7%A8%8B&quot;&gt;OS笔记（五）：线程&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>Obsidian完全指南：从入门到精通的知识管理神器</title><link>https://emilia520.icu/posts/obsidian-complete-guide/</link><guid isPermaLink="true">https://emilia520.icu/posts/obsidian-complete-guide/</guid><description>一篇全面的Obsidian教程，涵盖安装、基础使用、Markdown语法、插件系统、多设备同步方案、高级技巧等，助你打造专属的个人知识库。</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Obsidian完全指南：从入门到精通的知识管理神器&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文约5000字，阅读时间约15分钟。适合零基础用户，也包含进阶同步方案和高级技巧。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、Obsidian是什么？&lt;/h2&gt;
&lt;h3&gt;1.1 为什么选择Obsidian？&lt;/h3&gt;
&lt;p&gt;在众多笔记软件中，Obsidian凭借其独特的理念脱颖而出：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;本地存储&lt;/strong&gt;：你的笔记就是普通的Markdown文件，存在你自己的设备上，不依赖任何云服务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;双向链接&lt;/strong&gt;：通过&lt;code&gt;[[]]&lt;/code&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;：超过1000+社区插件，几乎可以实现任何你想要的功能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;完全免费&lt;/strong&gt;：个人使用完全免费，付费的只是可选的云同步服务&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.2 Obsidian vs 其他笔记软件&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th&gt;Obsidian&lt;/th&gt;
&lt;th&gt;Notion&lt;/th&gt;
&lt;th&gt;AFFiNE&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;/td&gt;
&lt;td&gt;本地Markdown&lt;/td&gt;
&lt;td&gt;云端&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;❌ 需联网&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;⚠️ 有限&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;❌ 无&lt;/td&gt;
&lt;td&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;✅ 1000+&lt;/td&gt;
&lt;td&gt;❌ 无&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;❌ 平台托管&lt;/td&gt;
&lt;td&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;~200MB&lt;/td&gt;
&lt;td&gt;~500MB&lt;/td&gt;
&lt;td&gt;~800MB&lt;/td&gt;
&lt;td&gt;~300MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;价格&lt;/td&gt;
&lt;td&gt;免费（个人）&lt;/td&gt;
&lt;td&gt;免费/付费&lt;/td&gt;
&lt;td&gt;免费&lt;/td&gt;
&lt;td&gt;免费/付费&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;：如果你重视数据隐私、需要离线使用、喜欢折腾自定义，Obsidian是最佳选择。如果你需要团队协作、不想折腾，Notion可能更适合。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、安装与初始设置&lt;/h2&gt;
&lt;h3&gt;2.1 下载安装&lt;/h3&gt;
&lt;p&gt;Obsidian支持全平台：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows/macOS/Linux&lt;/strong&gt;：访问 &lt;a href=&quot;https://obsidian.md&quot;&gt;obsidian.md&lt;/a&gt; 下载安装包&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Android/iOS&lt;/strong&gt;：在应用商店搜索&quot;Obsidian&quot;下载&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网页版&lt;/strong&gt;：官方不提供，但可以通过服务器部署code-server实现&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.2 创建第一个Vault（仓库）&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;打开Obsidian，点击&quot;Create new vault&quot;&lt;/li&gt;
&lt;li&gt;输入仓库名称（建议用英文，如&quot;my-notes&quot;）&lt;/li&gt;
&lt;li&gt;选择存储位置（建议放在容易备份的位置）&lt;/li&gt;
&lt;li&gt;点击&quot;Create&quot;完成创建&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;小贴士&lt;/strong&gt;：一个Vault就是一个普通的文件夹，里面包含你的所有笔记（.md文件）和配置（.obsidian文件夹）。你可以随时用文件管理器打开它。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;2.3 界面布局&lt;/h3&gt;
&lt;p&gt;Obsidian的界面主要分为：&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;/li&gt;
&lt;li&gt;&lt;strong&gt;底部状态栏&lt;/strong&gt;：字数、阅读时间、当前模式&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.4 基础设置优化&lt;/h3&gt;
&lt;p&gt;进入设置（Ctrl+,），建议调整：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;外观 → 基础颜色：根据喜好选择浅色/深色
编辑器 → 行号：开启
编辑器 → 显示当前行高亮：开启
文件与链接 → 默认新建笔记位置：选择&quot;当前文件所在的文件夹&quot;
文件与链接 → 使用Wiki链接：开启（推荐）
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、Markdown语法速查&lt;/h2&gt;
&lt;p&gt;Obsidian使用标准Markdown语法，并扩展了一些独特功能。&lt;/p&gt;
&lt;h3&gt;3.1 基础语法&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 一级标题
## 二级标题
### 三级标题

**加粗文本**
*斜体文本*
~~删除线~~
`行内代码`

- 无序列表
1. 有序列表
- [ ] 任务列表（未完成）
- [x] 任务列表（已完成）

&amp;gt; 引用块

---

| 表头1 | 表头2 |
|:---|:---|
| 单元格 | 单元格 |
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 Obsidian扩展语法&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;双向链接&lt;/strong&gt;（核心功能）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[笔记标题]]          → 链接到其他笔记
[[笔记标题|显示文字]]  → 自定义显示文字
[[笔记标题#标题]]     → 链接到笔记的特定章节
![[图片.png]]         → 嵌入图片
![[笔记标题]]         → 嵌入整个笔记
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;标签&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#标签
#父标签/子标签
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Callout提示框&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!note] 提示
&amp;gt; 这是一个提示框

&amp;gt; [!warning] 警告
&amp;gt; 这是一个警告框

&amp;gt; [!tip] 小贴士
&amp;gt; 这是一个小贴士
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;高亮&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;==高亮文本==
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;数学公式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;行内公式：$E = mc^2$
块级公式：
$$
\sum_{i=1}^{n} x_i = x_1 + x_2 + ... + x_n
$$
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、插件系统：让Obsidian更强大&lt;/h2&gt;
&lt;h3&gt;4.1 安装插件&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;设置 → 第三方插件 → 关闭&quot;安全模式&quot;&lt;/li&gt;
&lt;li&gt;点击&quot;浏览&quot;进入社区插件市场&lt;/li&gt;
&lt;li&gt;搜索并安装你需要的插件&lt;/li&gt;
&lt;li&gt;启用插件并配置&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;4.2 必装插件推荐&lt;/h3&gt;
&lt;h4&gt;效率提升类&lt;/h4&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;strong&gt;QuickAdd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;快速添加笔记、模板&lt;/td&gt;
&lt;td&gt;提高笔记效率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Templater&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;高级模板系统&lt;/td&gt;
&lt;td&gt;自动化笔记结构&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Calendar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;日历视图&lt;/td&gt;
&lt;td&gt;快速创建日记&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Periodic Notes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;周记/月记/年记&lt;/td&gt;
&lt;td&gt;建立笔记习惯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Commander&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自定义工具栏&lt;/td&gt;
&lt;td&gt;提升操作效率&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;外观美化类&lt;/h4&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;strong&gt;Minimal Theme&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;简洁主题&lt;/td&gt;
&lt;td&gt;最受欢迎的主题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Style Settings&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主题自定义&lt;/td&gt;
&lt;td&gt;微调主题细节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hider&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;隐藏界面元素&lt;/td&gt;
&lt;td&gt;极简界面&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Icon Folder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文件夹图标&lt;/td&gt;
&lt;td&gt;文件夹更直观&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Custom Frames&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;嵌入网页&lt;/td&gt;
&lt;td&gt;集成其他工具&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;知识管理类&lt;/h4&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;strong&gt;Dataview&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;数据查询&lt;/td&gt;
&lt;td&gt;将笔记变成数据库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Excalidraw&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手绘白板&lt;/td&gt;
&lt;td&gt;可视化思考&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kanban&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;看板视图&lt;/td&gt;
&lt;td&gt;项目管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mind Map&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;思维导图&lt;/td&gt;
&lt;td&gt;自动生成导图&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Outline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;增强大纲&lt;/td&gt;
&lt;td&gt;更好的导航&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;同步与发布类&lt;/h4&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;strong&gt;Remotely Save&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;云端同步&lt;/td&gt;
&lt;td&gt;支持S3/WebDAV/坚果云&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Git&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Git同步&lt;/td&gt;
&lt;td&gt;版本控制+同步&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Syncthing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;P2P同步&lt;/td&gt;
&lt;td&gt;免费、无服务器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Obsidian Publish&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;官方发布&lt;/td&gt;
&lt;td&gt;付费但简单&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quartz&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;静态站点生成&lt;/td&gt;
&lt;td&gt;免费自托管&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;4.3 插件配置示例：Dataview&lt;/h3&gt;
&lt;p&gt;Dataview可以将你的笔记变成数据库：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 列出所有未完成的任务
TASK
WHERE !completed
LIMIT 10

// 列出最近修改的笔记
TABLE file.mtime AS &quot;修改时间&quot;
FROM &quot;&quot;
SORT file.mtime DESC
LIMIT 10

// 统计每个标签的笔记数量
TABLE length(rows) AS &quot;数量&quot;
FROM #标签
GROUP BY tags
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、多设备同步方案&lt;/h2&gt;
&lt;p&gt;这是很多用户最关心的问题。下面介绍几种主流方案。&lt;/p&gt;
&lt;h3&gt;5.1 方案对比&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;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;Obsidian Sync&lt;/td&gt;
&lt;td&gt;$8/月&lt;/td&gt;
&lt;td&gt;⭐&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;懒人、预算充足&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remotely Save + 坚果云&lt;/td&gt;
&lt;td&gt;免费&lt;/td&gt;
&lt;td&gt;⭐⭐&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;国内用户首选&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git + GitHub&lt;/td&gt;
&lt;td&gt;免费&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️ 需手动&lt;/td&gt;
&lt;td&gt;程序员&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Syncthing&lt;/td&gt;
&lt;td&gt;免费&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;有服务器的用户&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;5.2 方案一：Remotely Save + 坚果云（推荐国内用户）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;：通过WebDAV协议将笔记同步到坚果云。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;步骤&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;注册坚果云账号&lt;/li&gt;
&lt;li&gt;在坚果云中创建应用：
&lt;ul&gt;
&lt;li&gt;设置 → 安全选项 → 第三方应用管理&lt;/li&gt;
&lt;li&gt;添加应用，获取密码&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;在Obsidian中安装&quot;Remotely Save&quot;插件&lt;/li&gt;
&lt;li&gt;配置插件：&lt;pre&gt;&lt;code&gt;Remote Service: WebDAV
Server Address: https://dav.jianguoyun.com/dav/
Username: 你的坚果云邮箱
Password: 第三方应用密码
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;点击&quot;Check&quot;测试连接&lt;/li&gt;
&lt;li&gt;开启&quot;自动同步&quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;：免费、稳定、国内速度快
&lt;strong&gt;缺点&lt;/strong&gt;：坚果云免费版有流量限制（1GB/月上传，3GB/月下载）&lt;/p&gt;
&lt;h3&gt;5.3 方案二：Git + GitHub（程序员首选）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;：将笔记仓库用Git管理，推送到GitHub。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;步骤&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在GitHub创建私有仓库&lt;/li&gt;
&lt;li&gt;在Obsidian安装&quot;Git&quot;插件&lt;/li&gt;
&lt;li&gt;配置插件：&lt;pre&gt;&lt;code&gt;Auto pull interval: 5
Auto push interval: 5
Pull updates on startup: 开启
Push on backup: 开启
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;初始化仓库并推送：&lt;pre&gt;&lt;code&gt;打开命令面板（Ctrl+P）
输入 &quot;Git: Initialize git repository&quot;
输入 &quot;Git: commit all changes&quot;
输入 &quot;Git: push&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;：免费、有版本历史、可回滚
&lt;strong&gt;缺点&lt;/strong&gt;：需要Git知识、同步有延迟&lt;/p&gt;
&lt;h3&gt;5.4 方案三：Syncthing（注重隐私）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;：P2P直接同步，不经过任何服务器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;步骤&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在所有设备安装Syncthing&lt;/li&gt;
&lt;li&gt;添加设备（扫描二维码或输入设备ID）&lt;/li&gt;
&lt;li&gt;共享笔记文件夹&lt;/li&gt;
&lt;li&gt;等待同步完成&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;：完全免费、无流量限制、隐私安全
&lt;strong&gt;缺点&lt;/strong&gt;：需要设备同时在线、初次配置复杂&lt;/p&gt;
&lt;h3&gt;5.5 方案四：服务器中转（有服务器的用户）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;：在服务器上部署同步服务，所有设备连接到服务器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方案A：Gitea + Git插件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你有Gitea服务器（端口3000），可以：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在Gitea创建私有仓库&lt;/li&gt;
&lt;li&gt;配置Git插件指向Gitea服务器&lt;/li&gt;
&lt;li&gt;享受免费的私有同步&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;方案B：code-server + Foam&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你想在任何设备上通过浏览器使用Obsidian：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在服务器安装code-server&lt;/li&gt;
&lt;li&gt;安装Foam插件（VS Code的Obsidian替代）&lt;/li&gt;
&lt;li&gt;通过浏览器访问 &lt;code&gt;http://服务器IP:8080&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;：随时随地访问、数据完全掌控
&lt;strong&gt;缺点&lt;/strong&gt;：需要服务器、带宽有限（如3M带宽）&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;六、高级技巧&lt;/h2&gt;
&lt;h3&gt;6.1 模板系统&lt;/h3&gt;
&lt;p&gt;使用Templater插件创建模板：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &amp;lt;% tp.file.title %&amp;gt;
date: &amp;lt;% tp.date.now(&quot;YYYY-MM-DD&quot;) %&amp;gt;
tags: [日记]
---

# &amp;lt;% tp.file.title %&amp;gt;

## 今日目标
- [ ] 

## 今日记录

## 今日总结

## 明日计划
- [ ] 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将模板放入模板文件夹，然后通过命令面板插入。&lt;/p&gt;
&lt;h3&gt;6.2 Dataview进阶&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;创建动态笔记索引&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TABLE file.ctime AS &quot;创建时间&quot;, file.size AS &quot;大小&quot;
FROM &quot;&quot;
WHERE file.folder = &quot;项目&quot;
SORT file.ctime DESC
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;统计字数&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TABLE length(file.content) AS &quot;字数&quot;
FROM &quot;&quot;
SORT length(file.content) DESC
LIMIT 10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;任务看板&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TASK
WHERE contains(text, &quot;#重要&quot;) AND !completed
GROUP BY file.link
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 快捷键自定义&lt;/h3&gt;
&lt;p&gt;进入设置 → 快捷键，建议自定义：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Ctrl+N：新建笔记
Ctrl+O：快速打开
Ctrl+P：命令面板
Ctrl+E：切换编辑/预览模式
Ctrl+Shift+F：全局搜索
Ctrl+G：图谱视图
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.4 笔记组织策略&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;PARA方法&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Projects&lt;/strong&gt;：当前进行的项目&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Areas&lt;/strong&gt;：持续关注的领域&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resources&lt;/strong&gt;：感兴趣的资源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Archives&lt;/strong&gt;：已完成或不再活跃的内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Zettelkasten卡片盒笔记法&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;每个笔记只写一个想法&lt;/li&gt;
&lt;li&gt;用自己的话重新表述&lt;/li&gt;
&lt;li&gt;通过双向链接建立关联&lt;/li&gt;
&lt;li&gt;定期回顾和整理&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;七、常见问题解答&lt;/h2&gt;
&lt;h3&gt;Q1：Obsidian免费吗？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;：完全免费！付费的只是可选的云同步服务（Obsidian Sync，$8/月）和官方发布服务（Obsidian Publish，$16/月）。所有核心功能和插件都是免费的。&lt;/p&gt;
&lt;h3&gt;Q2：笔记存在哪里？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;：存在你选择的本地文件夹中，就是普通的.md文件。你可以随时用其他编辑器打开，也可以用文件管理器备份。&lt;/p&gt;
&lt;h3&gt;Q3：如何备份？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;简单备份&lt;/strong&gt;：直接复制整个Vault文件夹&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git备份&lt;/strong&gt;：用Git管理，推送到GitHub/Gitea&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;云备份&lt;/strong&gt;：用Syncthing或坚果云自动同步&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Q4：插件安全吗？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;：社区插件都是开源的，代码可在GitHub查看。但建议只安装知名插件，避免安装来源不明的插件。&lt;/p&gt;
&lt;h3&gt;Q5：Obsidian和AFFiNE哪个好？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;：取决于你的需求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Obsidian&lt;/strong&gt;：本地优先、插件丰富、适合个人知识管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFFiNE&lt;/strong&gt;：云端优先、界面现代、适合团队协作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你是个人用户，且重视数据隐私，推荐Obsidian。如果你的服务器内存有限（如3.6GB），AFFiNE可能会比较吃力。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;八、学习资源&lt;/h2&gt;
&lt;h3&gt;官方资源&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://help.obsidian.md/&quot;&gt;Obsidian官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forum.obsidian.md/&quot;&gt;Obsidian论坛&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://discord.gg/obsidianmd&quot;&gt;Obsidian Discord&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;中文社区&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://forum.obsidian.md/c/zh/&quot;&gt;Obsidian中文论坛&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pkmer.cn/&quot;&gt;PKMer社区&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sspai.com/tag/Obsidian&quot;&gt;少数派Obsidian专题&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;推荐YouTube频道&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Nicole van der Hoeven&lt;/li&gt;
&lt;li&gt;FromSergio&lt;/li&gt;
&lt;li&gt;Bryan Jenks&lt;/li&gt;
&lt;li&gt;Productive Dude&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;九、总结&lt;/h2&gt;
&lt;p&gt;Obsidian不仅仅是一个笔记软件，它是一个&lt;strong&gt;知识管理系统&lt;/strong&gt;。通过双向链接、图谱视图和丰富的插件生态，你可以构建一个真正属于自己的&quot;第二大脑&quot;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;入门建议&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先用基础功能，不要一开始就折腾插件&lt;/li&gt;
&lt;li&gt;养成每日记录的习惯&lt;/li&gt;
&lt;li&gt;慢慢建立笔记之间的链接&lt;/li&gt;
&lt;li&gt;定期回顾和整理&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;进阶建议&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;学习Dataview，将笔记变成数据库&lt;/li&gt;
&lt;li&gt;使用模板系统，提高效率&lt;/li&gt;
&lt;li&gt;选择适合自己的同步方案&lt;/li&gt;
&lt;li&gt;探索社区插件，扩展功能&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;记住，工具只是手段，&lt;strong&gt;真正重要的是你的思考和记录&lt;/strong&gt;。Obsidian提供了一个强大的平台，但最终的价值来自于你持续的输入和整理。&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;关于作者&lt;/strong&gt;：本文由火花花博客整理，如有问题欢迎在评论区留言。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;相关文章推荐&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/posts/linux-manual-01-basics/&quot;&gt;Linux操作大全：从入门到精通&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/posts/markdown-cheatsheet/&quot;&gt;Markdown语法速查手册&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/posts/mermaid-cheatsheet/&quot;&gt;Mermaid图表绘制指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Linux操作大全（十一）：Git版本控制完全指南</title><link>https://emilia520.icu/posts/linux-manual-11-git/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-11-git/</guid><description>Git版本控制从入门到精通，涵盖基础操作、分支管理、远程协作、高级技巧，附带常用命令速查。</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（十一）：Git版本控制完全指南&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本篇是Linux操作大全的第十一篇，专门讲解Git版本控制系统的使用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📚 目录&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#1-git%E7%AE%80%E4%BB%8B%E4%B8%8E%E5%AE%89%E8%A3%85&quot;&gt;Git简介与安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#2-git%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE&quot;&gt;Git基础配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#3-%E5%88%9B%E5%BB%BA%E4%BB%93%E5%BA%93&quot;&gt;创建仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#4-%E5%9F%BA%E6%9C%AC%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B&quot;&gt;基本工作流程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#5-%E5%88%86%E6%94%AF%E7%AE%A1%E7%90%86&quot;&gt;分支管理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#6-%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E6%93%8D%E4%BD%9C&quot;&gt;远程仓库操作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#7-%E6%A0%87%E7%AD%BE%E7%AE%A1%E7%90%86&quot;&gt;标签管理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#8-%E6%9F%A5%E7%9C%8B%E5%8E%86%E5%8F%B2%E4%B8%8E%E5%B7%AE%E5%BC%82&quot;&gt;查看历史与差异&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#9-%E6%92%A4%E9%94%80%E4%B8%8E%E5%9B%9E%E9%80%80&quot;&gt;撤销与回退&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#10-git%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7&quot;&gt;Git高级技巧&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#11-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E4%B8%8E%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88&quot;&gt;常见问题与解决方案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#12-git%E5%91%BD%E4%BB%A4%E9%80%9F%E6%9F%A5%E8%A1%A8&quot;&gt;Git命令速查表&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;1. Git简介与安装&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-intro&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.1 什么是Git？&lt;/h3&gt;
&lt;p&gt;Git是一个分布式版本控制系统，用于跟踪文件的变化，协调多人协作开发。&lt;/p&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;快照式：每次提交都是项目的完整快照&lt;/li&gt;
&lt;li&gt;分支轻量：创建和切换分支几乎瞬间完成&lt;/li&gt;
&lt;li&gt;数据完整：使用SHA-1哈希保证数据完整性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-install&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.2 安装Git&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu/Debian:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
sudo apt install git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;CentOS/RHEL:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo yum install git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 使用Homebrew
brew install git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;验证安装:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git --version
# 输出示例：git version 2.39.2
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;2. Git基础配置&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-config&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.1 用户信息配置&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;设置用户名和邮箱（必须配置）：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global user.name &quot;Your Name&quot;
git config --global user.email &quot;your.email@example.com&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;查看配置：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --list
git config user.name
git config user.email
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-config-level&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.2 配置级别&lt;/h3&gt;
&lt;p&gt;Git配置分为三个级别：&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;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;/td&gt;
&lt;td&gt;&lt;code&gt;--system&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/gitconfig&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;--global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/.gitconfig&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;--local&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.git/config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;当前仓库&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;示例：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 全局配置（推荐）
git config --global user.name &quot;Emilia&quot;

# 仓库级配置（覆盖全局）
git config --local user.name &quot;Project Name&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-config-options&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.3 常用配置项&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 设置默认编辑器
git config --global core.editor vim

# 设置默认分支名
git config --global init.defaultBranch main

# 启用颜色输出
git config --global color.ui auto

# 设置换行符处理（Windows用户）
git config --global core.autocrlf true

# 设置换行符处理（Linux/Mac用户）
git config --global core.autocrlf input

# 设置pull时使用rebase
git config --global pull.rebase true

# 设置推送时推送当前分支
git config --global push.default current
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;3. 创建仓库&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-init&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.1 初始化新仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建项目目录并初始化
mkdir my-project
cd my-project
git init

# 或者在当前目录初始化
git init
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;初始化后会创建 &lt;code&gt;.git&lt;/code&gt; 目录，包含所有版本控制信息。&lt;/p&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-clone&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.2 克隆远程仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# HTTPS克隆
git clone https://github.com/user/repo.git

# SSH克隆（推荐）
git clone git@github.com:user/repo.git

# 克隆到指定目录
git clone https://github.com/user/repo.git my-folder

# 克隆特定分支
git clone -b develop https://github.com/user/repo.git

# 浅克隆（只克隆最近一次提交）
git clone --depth 1 https://github.com/user/repo.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-structure&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.3 仓库结构&lt;/h3&gt;
&lt;p&gt;Git仓库包含三个主要区域：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;工作区 (Working Directory)
    ↓ git add
暂存区 (Staging Area / Index)
    ↓ git commit
本地仓库 (Local Repository)
    ↓ git push
远程仓库 (Remote Repository)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;4. 基本工作流程&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-status&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.1 查看状态&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看工作区状态
git status

# 简洁模式
git status -s
git status --short

# 输出示例：
# M file.txt      # 已修改（未暂存）
# A new.txt       # 新添加（已暂存）
# ?? other.txt    # 未跟踪
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-add&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.2 添加到暂存区&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 添加单个文件
git add file.txt

# 添加多个文件
git add file1.txt file2.txt

# 添加所有修改和新文件
git add .

# 添加所有文件（包括删除）
git add -A

# 交互式添加
git add -p
# 然后选择要添加的代码块
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-commit&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.3 提交更改&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 提交并添加消息
git commit -m &quot;feat: 添加新功能&quot;

# 添加消息的详细描述
git commit -m &quot;feat: 添加用户登录功能&quot; -m &quot;包含密码加密和记住登录状态&quot;

# 自动暂存已跟踪文件的修改并提交
git commit -am &quot;fix: 修复bug&quot;

# 修改最后一次提交
git commit --amend

# 修改最后一次提交的消息
git commit --amend -m &quot;新的提交消息&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-commit-message&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.4 提交消息规范&lt;/h3&gt;
&lt;p&gt;推荐使用约定式提交（Conventional Commits）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;类型&amp;gt;(&amp;lt;范围&amp;gt;): &amp;lt;描述&amp;gt;

[可选正文]

[可选脚注]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用类型：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat&lt;/code&gt;: 新功能&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix&lt;/code&gt;: 修复bug&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docs&lt;/code&gt;: 文档更新&lt;/li&gt;
&lt;li&gt;&lt;code&gt;style&lt;/code&gt;: 代码格式调整&lt;/li&gt;
&lt;li&gt;&lt;code&gt;refactor&lt;/code&gt;: 重构&lt;/li&gt;
&lt;li&gt;&lt;code&gt;perf&lt;/code&gt;: 性能优化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;test&lt;/code&gt;: 测试相关&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chore&lt;/code&gt;: 构建/工具相关&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;示例：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;feat(auth): 添加用户登录功能

- 实现密码加密存储
- 添加记住登录状态选项
- 优化错误提示信息

Closes #123
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;5. 分支管理&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-branch-basics&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.1 分支基础&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看本地分支
git branch

# 查看所有分支（包括远程）
git branch -a

# 查看分支最后提交
git branch -v

# 创建新分支
git branch feature-login

# 切换分支
git checkout feature-login

# 创建并切换到新分支（推荐）
git checkout -b feature-login

# 或使用新命令（Git 2.23+）
git switch feature-login
git switch -c feature-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-branch-ops&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.2 分支操作&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 重命名分支
git branch -m old-name new-name

# 重命名当前分支
git branch -m new-name

# 删除本地分支
git branch -d feature-login

# 强制删除未合并的分支
git branch -D feature-login

# 删除远程分支
git push origin --delete feature-login

# 设置上游分支
git branch --set-upstream-to=origin/main main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-branch-strategy&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.3 分支策略&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Git Flow 模型：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main (生产分支)
  │
  ├── develop (开发分支)
  │     │
  │     ├── feature/* (功能分支)
  │     ├── release/* (发布分支)
  │     └── hotfix/* (热修复分支)
  │
  └── v1.0, v2.0 (标签)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;GitHub Flow 模型（推荐）：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main (主分支，始终可部署)
  │
  └── feature-* (功能分支，合并后删除)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-merge&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.4 合并分支&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 合并分支到当前分支
git merge feature-login

# 合并并创建合并提交
git merge --no-ff feature-login

# 中止合并（出现冲突时）
git merge --abort
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-rebase&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.5 变基&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 将当前分支变基到目标分支
git rebase main

# 交互式变基（整理提交历史）
git rebase -i HEAD~3
# 在编辑器中选择操作：pick, squash, reword, edit, drop

# 继续变基（解决冲突后）
git rebase --continue

# 中止变基
git rebase --abort
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;变基 vs 合并：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;变基：创建线性历史，更清晰&lt;/li&gt;
&lt;li&gt;合并：保留完整历史，更安全&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;6. 远程仓库操作&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-remote&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;6.1 远程仓库管理&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看远程仓库
git remote

# 查看远程仓库详细信息
git remote -v

# 添加远程仓库
git remote add origin https://github.com/user/repo.git

# 修改远程仓库URL
git remote set-url origin https://github.com/user/new-repo.git

# 删除远程仓库
git remote remove origin

# 重命名远程仓库
git remote rename origin upstream
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-push-pull&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;6.2 推送与拉取&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 推送到远程
git push origin main

# 推送并设置上游分支
git push -u origin main

# 推送所有分支
git push --all origin

# 推送标签
git push origin tag v1.0.0

# 推送所有标签
git push origin --tags

# 拉取远程更新
git pull origin main

# 拉取并变基
git pull --rebase origin main

# 获取远程更新（不合并）
git fetch origin

# 获取所有远程更新
git fetch --all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-multi-remote&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;6.3 多远程仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 添加多个远程仓库
git remote add origin https://github.com/user/repo.git
git remote add upstream https://github.com/original/repo.git

# 从上游拉取更新
git fetch upstream

# 合并上游更改
git merge upstream/main

# 推送到不同远程
git push origin main
git push upstream main
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;7. 标签管理&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-tag-types&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.1 标签类型&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;轻量标签（Lightweight Tag）：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git tag v1.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;附注标签（Annotated Tag）：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git tag -a v1.0.0 -m &quot;版本 1.0.0 发布&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-tag-ops&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.2 标签操作&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有标签
git tag

# 查看特定标签信息
git show v1.0.0

# 创建标签
git tag v1.0.0

# 创建附注标签
git tag -a v1.0.0 -m &quot;Release v1.0.0&quot;

# 给特定提交打标签
git tag -a v1.0.0 abc1234 -m &quot;Release v1.0.0&quot;

# 推送标签到远程
git push origin v1.0.0

# 推送所有标签
git push origin --tags

# 删除本地标签
git tag -d v1.0.0

# 删除远程标签
git push origin --delete v1.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;8. 查看历史与差异&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-log&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.1 查看提交历史&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基本日志
git log

# 单行显示
git log --oneline

# 图形化显示
git log --graph --oneline --all

# 显示最近n次提交
git log -5

# 显示特定文件的历史
git log file.txt

# 显示某个作者的提交
git log --author=&quot;Emilia&quot;

# 显示特定日期范围的提交
git log --after=&quot;2026-01-01&quot; --before=&quot;2026-05-26&quot;

# 显示提交的详细变更
git log -p

# 显示统计信息
git log --stat
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-diff&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.2 查看差异&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 工作区与暂存区的差异
git diff

# 暂存区与最新提交的差异
git diff --staged
git diff --cached

# 两个提交之间的差异
git diff commit1 commit2

# 两个分支之间的差异
git diff main feature

# 显示特定文件的差异
git diff file.txt

# 显示统计信息
git diff --stat
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-search&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.3 搜索&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 搜索代码内容
git grep &quot;function name&quot;

# 搜索特定提交中的代码
git grep &quot;function&quot; v1.0.0

# 搜索引入特定字符串的提交
git log -S &quot;function_name&quot;

# 搜索正则表达式
git grep -E &quot;func.*name&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;9. 撤销与回退&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-checkout&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;9.1 撤销工作区修改&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 撤销单个文件的修改
git checkout -- file.txt

# 撤销所有修改
git checkout -- .

# 使用新命令（Git 2.23+）
git restore file.txt
git restore .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-unstage&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;9.2 取消暂存&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 取消暂存文件
git reset HEAD file.txt

# 使用新命令
git restore --staged file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-reset&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;9.3 回退提交&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 回退到指定提交，保留修改在暂存区
git reset --soft HEAD~1

# 回退到指定提交，保留修改在工作区
git reset --mixed HEAD~1

# 回退到指定提交，丢弃所有修改
git reset --hard HEAD~1

# 回退到特定提交
git reset --hard abc1234
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-revert&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;9.4 安全回退&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建新提交来撤销指定提交
git revert HEAD

# 撤销指定提交
git revert abc1234

# 撤销多个提交
git revert HEAD~3..HEAD

# 不自动提交，只暂存
git revert --no-commit HEAD
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-reflog&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;9.5 恢复删除的提交&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看操作历史
git reflog

# 恢复到指定操作
git reset --hard HEAD@{2}

# 恢复删除的分支
git checkout -b recovered-branch HEAD@{5}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;10. Git高级技巧&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-stash&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.1 暂存工作&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 暂存当前修改
git stash

# 暂存并添加描述
git stash push -m &quot;正在开发的功能&quot;

# 暂存特定文件
git stash push file.txt

# 查看暂存列表
git stash list

# 恢复最近的暂存
git stash pop

# 恢复但不删除暂存
git stash apply

# 恢复特定暂存
git stash apply stash@{2}

# 删除暂存
git stash drop stash@{0}

# 清空所有暂存
git stash clear
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-cherry-pick&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.2 Cherry-pick&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 选择特定提交应用到当前分支
git cherry-pick abc1234

# 选择多个提交
git cherry-pick commit1 commit2

# 选择提交范围
git cherry-pick commit1..commit5

# 不自动提交
git cherry-pick --no-commit abc1234
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-submodule&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.3 子模块&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 添加子模块
git submodule add https://github.com/user/repo.git path/to/submodule

# 初始化子模块
git submodule init

# 更新子模块
git submodule update

# 克隆包含子模块的仓库
git clone --recursive https://github.com/user/repo.git

# 或者克隆后初始化
git clone https://github.com/user/repo.git
git submodule init
git submodule update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-hooks&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.4 Git钩子&lt;/h3&gt;
&lt;p&gt;Git钩子位于 &lt;code&gt;.git/hooks/&lt;/code&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;th&gt;常见用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pre-commit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;提交前&lt;/td&gt;
&lt;td&gt;代码检查、测试&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;commit-msg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;提交时&lt;/td&gt;
&lt;td&gt;验证提交消息格式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pre-push&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;推送前&lt;/td&gt;
&lt;td&gt;运行测试&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;post-merge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;合并后&lt;/td&gt;
&lt;td&gt;安装依赖&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;示例：pre-commit钩子&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# .git/hooks/pre-commit

# 运行代码检查
npm run lint

# 如果检查失败，阻止提交
if [ $? -ne 0 ]; then
    echo &quot;代码检查失败，请修复后再提交&quot;
    exit 1
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-lfs&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.5 大文件处理&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装Git LFS
git lfs install

# 跟踪大文件类型
git lfs track &quot;*.psd&quot;
git lfs track &quot;*.zip&quot;

# 查看跟踪的文件类型
git lfs ls-files

# 提交.gitattributes
git add .gitattributes
git commit -m &quot;chore: 添加LFS跟踪规则&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;11. 常见问题与解决方案&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-conflict&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;11.1 合并冲突&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;解决步骤：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;执行合并/变基&lt;/li&gt;
&lt;li&gt;查看冲突文件：&lt;code&gt;git status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;编辑冲突文件，解决冲突标记&lt;/li&gt;
&lt;li&gt;添加解决后的文件：&lt;code&gt;git add file.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;完成合并：&lt;code&gt;git commit&lt;/code&gt; 或 &lt;code&gt;git rebase --continue&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;冲突标记：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD
当前分支的内容
=======
要合并的分支的内容
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feature-branch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-recover-file&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;11.2 误删文件恢复&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 恢复删除的文件
git checkout HEAD -- file.txt

# 或者
git restore --source=HEAD file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-rewrite-history&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;11.3 修改历史提交&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 交互式变基（修改最近3次提交）
git rebase -i HEAD~3

# 修改作者信息
git commit --amend --author=&quot;Name &amp;lt;email&amp;gt;&quot;

# 修改全局历史（谨慎使用）
git filter-branch --env-filter &apos;
if [ &quot;$GIT_AUTHOR_EMAIL&quot; = &quot;old@email.com&quot; ]; then
    export GIT_AUTHOR_EMAIL=&quot;new@email.com&quot;
fi
&apos; --tag-name-filter cat -- --all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-clean&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;11.4 清理仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看要删除的文件
git clean -n

# 删除未跟踪的文件
git clean -f

# 删除未跟踪的目录
git clean -fd

# 删除未跟踪和忽略的文件
git clean -fx
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;12. Git命令速查表&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-basic&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;12.1 基础命令&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;初始化新仓库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git clone &amp;lt;url&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;克隆远程仓库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git add &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;添加文件到暂存区&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git commit -m &quot;msg&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;提交更改&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git diff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看差异&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看历史&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-branch&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;12.2 分支命令&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git branch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出分支&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git branch &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;创建分支&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git checkout &amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换分支&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git checkout -b &amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;创建并切换分支&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git merge &amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;合并分支&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git branch -d &amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;删除分支&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-remote-cmd&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;12.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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git remote add &amp;lt;name&amp;gt; &amp;lt;url&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;添加远程仓库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git push &amp;lt;remote&amp;gt; &amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;推送到远程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git pull &amp;lt;remote&amp;gt; &amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;拉取远程更新&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git fetch &amp;lt;remote&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;获取远程更新&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-undo&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;12.4 撤销命令&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git checkout -- &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;撤销工作区修改&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git reset HEAD &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;取消暂存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git reset --soft HEAD~1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;回退提交（保留修改）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git reset --hard HEAD~1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;回退提交（丢弃修改）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git revert &amp;lt;commit&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;安全回退&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;git-advanced&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;12.5 高级命令&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git stash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;暂存工作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git cherry-pick &amp;lt;commit&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;选择提交&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git rebase &amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;变基&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git tag &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;创建标签&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git reflog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看操作历史&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;📖 实用配置推荐&lt;/h2&gt;
&lt;h3&gt;全局配置模板&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# ~/.gitconfig

[user]
    name = Your Name
    email = your.email@example.com

[core]
    editor = vim
    autocrlf = input

[alias]
    st = status
    co = checkout
    br = branch
    ci = commit
    lg = log --graph --oneline --all
    last = log -1 HEAD
    unstage = reset HEAD --

[pull]
    rebase = true

[push]
    default = current

[color]
    ui = auto
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;常用别名设置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg &quot;log --graph --oneline --all&quot;
git config --global alias.last &quot;log -1 HEAD&quot;
git config --global alias.unstage &quot;reset HEAD --&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;🔗 相关资源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/doc&quot;&gt;Git官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.liaoxuefeng.com/wiki/896043488029600&quot;&gt;Git教程 - 廖雪峰&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/book/zh/v2&quot;&gt;Pro Git中文版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learngitbranching.js.org/&quot;&gt;Git练习平台&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;📚 &lt;strong&gt;下一篇预告&lt;/strong&gt;：&lt;a href=&quot;/posts/linux-manual-12-shell-advanced/&quot;&gt;Linux操作大全（十二）：Shell脚本编程进阶&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🔙 &lt;strong&gt;返回&lt;/strong&gt;：&lt;a href=&quot;/tags/Linux/&quot;&gt;Linux操作大全目录&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📖 &lt;strong&gt;配套速查&lt;/strong&gt;：&lt;a href=&quot;/posts/linux-commands-cheatsheet/&quot;&gt;Linux命令速查手册&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>Linux操作大全（一）：基础入门完全指南</title><link>https://emilia520.icu/posts/linux-manual-01-basics/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-01-basics/</guid><description>从零开始认识Linux，了解什么是Linux、主流发行版对比、安装方法、桌面环境选择，适合纯小白的入门教程</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（一）：基础入门完全指南&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第一篇，从最基础的概念讲起，让完全没有Linux经验的同学也能看懂、学会、直接用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、什么是Linux？&lt;/h2&gt;
&lt;h3&gt;1.1 Linux的定义&lt;/h3&gt;
&lt;p&gt;Linux是一个&lt;strong&gt;开源的、免费的操作系统内核&lt;/strong&gt;，由芬兰程序员**林纳斯·托瓦兹（Linus Torvalds）**在1991年首次发布。&lt;/p&gt;
&lt;p&gt;简单来说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;操作系统&lt;/strong&gt; = 管理电脑硬件和软件的&quot;大管家&quot;&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;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.2 Linux和Windows的区别&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th&gt;Windows&lt;/th&gt;
&lt;th&gt;Linux&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;价格&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;开源，全球开发者共同维护&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;使用方式&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;几乎没有病毒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;定制性&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;服务器、嵌入式、超级计算机&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.3 为什么要学Linux？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 服务器领域霸主&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全球90%以上的服务器运行Linux&lt;/li&gt;
&lt;li&gt;阿里云、腾讯云、AWS等云服务器默认都是Linux&lt;/li&gt;
&lt;li&gt;学会Linux才能做后端开发、运维、DevOps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. 开发者必备技能&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大部分开发工具在Linux上运行更好&lt;/li&gt;
&lt;li&gt;Docker、Kubernetes等容器技术基于Linux&lt;/li&gt;
&lt;li&gt;很多开源项目只支持Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. 薪资优势&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;会Linux的开发者平均薪资更高&lt;/li&gt;
&lt;li&gt;运维工程师、DevOps工程师必须精通Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4. 免费且自由&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不用花钱买系统&lt;/li&gt;
&lt;li&gt;可以自由定制，不受厂商限制&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;二、Linux发行版介绍&lt;/h2&gt;
&lt;h3&gt;2.1 什么是发行版？&lt;/h3&gt;
&lt;p&gt;Linux内核本身只是&quot;心脏&quot;，要让它能用，还需要搭配各种软件（桌面环境、浏览器、办公软件等）。&lt;strong&gt;不同的组织把Linux内核 + 各种软件打包在一起，就形成了不同的&quot;发行版&quot;（Distribution，简称distro）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;就像安卓系统，华为、小米、OPPO都用安卓内核，但各自做了不同的定制UI。&lt;/p&gt;
&lt;h3&gt;2.2 主流发行版对比&lt;/h3&gt;
&lt;h4&gt;Ubuntu（推荐新手使用）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;特点&lt;/strong&gt;：最流行的桌面Linux，社区活跃，教程多&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;适合&lt;/strong&gt;：Linux入门、日常办公、开发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包管理&lt;/strong&gt;：apt（基于Debian）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;官网&lt;/strong&gt;：https://ubuntu.com&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;CentOS / Rocky Linux&lt;/h4&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;：yum / dnf（基于Red Hat）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt;：CentOS已停止维护，推荐使用Rocky Linux替代&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Debian&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;特点&lt;/strong&gt;：Ubuntu的&quot;父亲&quot;，极其稳定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;适合&lt;/strong&gt;：服务器、追求稳定的用户&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包管理&lt;/strong&gt;：apt&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Arch Linux&lt;/h4&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;：pacman&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Fedora&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;特点&lt;/strong&gt;：Red Hat的&quot;试验田&quot;，新技术尝鲜&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;适合&lt;/strong&gt;：开发者、喜欢新功能的用户&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包管理&lt;/strong&gt;：dnf&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.3 新手推荐选择&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;如果你是纯新手&lt;/strong&gt;：选 &lt;strong&gt;Ubuntu 22.04 LTS&lt;/strong&gt; 或 &lt;strong&gt;Ubuntu 24.04 LTS&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LTS = Long Term Support（长期支持版），有5年更新&lt;/li&gt;
&lt;li&gt;教程最多，遇到问题容易搜到解决方案&lt;/li&gt;
&lt;li&gt;界面友好，接近Windows的使用习惯&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;如果你要做服务器&lt;/strong&gt;：选 &lt;strong&gt;Rocky Linux 9&lt;/strong&gt; 或 &lt;strong&gt;Ubuntu Server 22.04&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;三、安装Linux&lt;/h2&gt;
&lt;h3&gt;3.1 安装方式选择&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;th&gt;适合场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;虚拟机&lt;/td&gt;
&lt;td&gt;不影响现有系统，安全&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;需要分区，有风险&lt;/td&gt;
&lt;td&gt;想长期使用Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WSL2&lt;/td&gt;
&lt;td&gt;Windows内置，方便&lt;/td&gt;
&lt;td&gt;不是完整Linux体验&lt;/td&gt;
&lt;td&gt;Windows开发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;云服务器&lt;/td&gt;
&lt;td&gt;远程访问，24小时运行&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;性能有限&lt;/td&gt;
&lt;td&gt;嵌入式学习&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;3.2 虚拟机安装（推荐新手）&lt;/h3&gt;
&lt;h4&gt;步骤1：下载VirtualBox&lt;/h4&gt;
&lt;p&gt;VirtualBox是免费的虚拟机软件，下载地址：
https://www.virtualbox.org/&lt;/p&gt;
&lt;h4&gt;步骤2：下载Ubuntu镜像&lt;/h4&gt;
&lt;p&gt;到Ubuntu官网下载ISO文件：
https://ubuntu.com/download/desktop&lt;/p&gt;
&lt;p&gt;选择 &lt;strong&gt;Ubuntu 24.04 LTS&lt;/strong&gt;，文件约4GB。&lt;/p&gt;
&lt;h4&gt;步骤3：创建虚拟机&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;打开VirtualBox，点击&quot;新建&quot;&lt;/li&gt;
&lt;li&gt;名称输入&quot;Ubuntu&quot;，类型选&quot;Linux&quot;，版本选&quot;Ubuntu (64-bit)&quot;&lt;/li&gt;
&lt;li&gt;内存建议分配 &lt;strong&gt;4096MB&lt;/strong&gt;（4GB）以上&lt;/li&gt;
&lt;li&gt;硬盘选择&quot;创建虚拟硬盘&quot;，大小建议 &lt;strong&gt;50GB&lt;/strong&gt; 以上&lt;/li&gt;
&lt;li&gt;硬盘类型选&quot;VDI&quot;，存储方式选&quot;动态分配&quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;步骤4：安装Ubuntu&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;选中创建好的虚拟机，点击&quot;设置&quot; → &quot;存储&quot;&lt;/li&gt;
&lt;li&gt;在&quot;控制器:IDE&quot;下，点击光盘图标，选择下载好的ISO文件&lt;/li&gt;
&lt;li&gt;启动虚拟机，会自动进入Ubuntu安装界面&lt;/li&gt;
&lt;li&gt;选择&quot;Install Ubuntu&quot;&lt;/li&gt;
&lt;li&gt;语言选&quot;中文（简体）&quot;&lt;/li&gt;
&lt;li&gt;键盘布局选&quot;English (US)&quot;&lt;/li&gt;
&lt;li&gt;安装类型选&quot;正常安装&quot;，勾选&quot;安装第三方软件&quot;&lt;/li&gt;
&lt;li&gt;安装类型选&quot;清除整个磁盘并安装Ubuntu&quot;（这只会清除虚拟机的虚拟硬盘，不影响真实系统）&lt;/li&gt;
&lt;li&gt;设置用户名和密码&lt;/li&gt;
&lt;li&gt;等待安装完成，重启即可&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3.3 WSL2安装（Windows用户推荐）&lt;/h3&gt;
&lt;p&gt;WSL2（Windows Subsystem for Linux 2）是微软官方的Linux子系统，不用虚拟机就能在Windows上运行Linux。&lt;/p&gt;
&lt;h4&gt;步骤1：开启WSL功能&lt;/h4&gt;
&lt;p&gt;以管理员身份打开PowerShell，运行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果报错，手动开启功能：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启电脑后，设置WSL2为默认版本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --set-default-version 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;步骤2：安装Ubuntu&lt;/h4&gt;
&lt;p&gt;打开Microsoft Store，搜索&quot;Ubuntu&quot;，选择 &lt;strong&gt;Ubuntu 24.04 LTS&lt;/strong&gt;，点击&quot;获取&quot;安装。&lt;/p&gt;
&lt;p&gt;安装完成后，从开始菜单打开Ubuntu，设置用户名和密码即可。&lt;/p&gt;
&lt;h3&gt;3.4 云服务器购买&lt;/h3&gt;
&lt;p&gt;如果你想长期使用Linux，或者要部署项目，建议购买云服务器。&lt;/p&gt;
&lt;h4&gt;推荐选择&lt;/h4&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;/td&gt;
&lt;td&gt;新用户99元/年&lt;/td&gt;
&lt;td&gt;国内访问快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;腾讯云&lt;/td&gt;
&lt;td&gt;新用户99元/年&lt;/td&gt;
&lt;td&gt;学生优惠多&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;华为云&lt;/td&gt;
&lt;td&gt;新用户99元/年&lt;/td&gt;
&lt;td&gt;企业用户&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS&lt;/td&gt;
&lt;td&gt;免费12个月&lt;/td&gt;
&lt;td&gt;国际访问&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;搬瓦工&lt;/td&gt;
&lt;td&gt;$49.99/年&lt;/td&gt;
&lt;td&gt;需要翻墙&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;购买建议&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;配置&lt;/strong&gt;：2核2G内存足够学习用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;系统&lt;/strong&gt;：选择Ubuntu 22.04 LTS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;地域&lt;/strong&gt;：选离你近的地区（如华东、华南）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;带宽&lt;/strong&gt;：1-3Mbps足够&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;四、Linux桌面环境&lt;/h2&gt;
&lt;h3&gt;4.1 什么是桌面环境？&lt;/h3&gt;
&lt;p&gt;桌面环境（Desktop Environment，简称DE）就是Linux的图形界面，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;窗口管理器（拖动、缩放窗口）&lt;/li&gt;
&lt;li&gt;任务栏（显示打开的程序）&lt;/li&gt;
&lt;li&gt;文件管理器（浏览文件）&lt;/li&gt;
&lt;li&gt;系统设置（改壁纸、调音量等）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.2 主流桌面环境&lt;/h3&gt;
&lt;h4&gt;GNOME（Ubuntu默认）&lt;/h4&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;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;KDE Plasma&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;特点&lt;/strong&gt;：功能强大，高度可定制，像Windows&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;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;XFCE&lt;/h4&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;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;LXQt&lt;/h4&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;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.3 如何切换桌面环境？&lt;/h3&gt;
&lt;p&gt;安装其他桌面环境：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装KDE Plasma
sudo apt install kde-plasma-desktop

# 安装XFCE
sudo apt install xfce4

# 安装LXQt
sudo apt install lxqt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完成后，注销账户，在登录界面点击右下角的齿轮图标，选择想用的桌面环境。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;五、Linux目录结构&lt;/h2&gt;
&lt;h3&gt;5.1 为什么重要？&lt;/h3&gt;
&lt;p&gt;在Windows中，我们习惯C盘、D盘、E盘分开存放文件。但在Linux中，&lt;strong&gt;所有东西都在一个根目录 &lt;code&gt;/&lt;/code&gt; 下&lt;/strong&gt;，像一棵倒着的树。&lt;/p&gt;
&lt;p&gt;理解目录结构是学好Linux的基础！&lt;/p&gt;
&lt;h3&gt;5.2 核心目录详解&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;/                    # 根目录，所有目录的起点
├── bin/             # 基础命令（ls, cp, mv等）
├── sbin/            # 系统管理命令（需要root权限）
├── etc/             # 配置文件（非常重要！）
│   ├── hostname     # 主机名
│   ├── hosts        # IP与主机名映射
│   ├── passwd       # 用户信息
│   ├── shadow       # 用户密码（加密）
│   ├── fstab        # 磁盘挂载配置
│   └── ssh/         # SSH配置
├── home/            # 用户目录（你的文件都在这里）
│   └── ubuntu/      # 用户ubuntu的家目录
│       ├── Desktop/ # 桌面
│       ├── Documents/# 文档
│       ├── Downloads/# 下载
│       └── ...      # 其他个人目录
├── root/            # root用户的家目录
├── var/             # 可变数据
│   ├── log/         # 日志文件
│   ├── www/         # 网站文件
│   └── lib/         # 程序数据
├── tmp/             # 临时文件（重启后清空）
├── usr/             # 用户程序
│   ├── bin/         # 用户命令
│   ├── lib/         # 库文件
│   └── share/       # 共享数据
├── opt/             # 第三方软件
├── proc/            # 进程信息（虚拟文件系统）
├── dev/             # 设备文件
│   ├── sda          # 第一块硬盘
│   ├── sdb          # 第二块硬盘
│   └── tty          # 终端设备
├── mnt/             # 临时挂载点
├── media/           # 自动挂载点（U盘、光盘）
├── boot/            # 启动文件
├── lib/             # 系统库文件
└── srv/             # 服务数据
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 重点目录记忆口诀&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/etc&lt;/code&gt;&lt;/strong&gt; → 配置文件放这里（&quot;etc&quot;= etcetera，意思是&quot;等等&quot;，杂七杂八的配置）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/home&lt;/code&gt;&lt;/strong&gt; → 你的家，文件都放这里&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/var&lt;/code&gt;&lt;/strong&gt; → 日志、网站数据放这里（&quot;var&quot;= variable，可变数据）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/tmp&lt;/code&gt;&lt;/strong&gt; → 临时文件放这里（重启就没了）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/usr&lt;/code&gt;&lt;/strong&gt; → 安装的软件放这里（&quot;usr&quot;= Unix System Resources）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/bin&lt;/code&gt;&lt;/strong&gt; → 基础命令放这里（&quot;bin&quot;= binary，二进制文件）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;六、第一次使用Linux&lt;/h2&gt;
&lt;h3&gt;6.1 打开终端&lt;/h3&gt;
&lt;p&gt;在Linux中，&lt;strong&gt;终端（Terminal）&lt;/strong&gt; 是最重要的工具，相当于Windows的CMD或PowerShell。&lt;/p&gt;
&lt;p&gt;打开终端的方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;快捷键&lt;/strong&gt;：&lt;code&gt;Ctrl + Alt + T&lt;/code&gt;（Ubuntu默认）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;右键桌面&lt;/strong&gt;：选择&quot;打开终端&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;应用菜单&lt;/strong&gt;：搜索&quot;终端&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6.2 认识命令提示符&lt;/h3&gt;
&lt;p&gt;打开终端后，你会看到类似这样的内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ubuntu@ubuntu-desktop:~$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;各部分含义：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ubuntu&lt;/strong&gt; → 当前用户名&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;@&lt;/strong&gt; → 分隔符&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ubuntu-desktop&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;/li&gt;
&lt;li&gt;&lt;strong&gt;$&lt;/strong&gt; → 普通用户提示符（root用户是 #）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6.3 第一个命令：查看当前目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;pwd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;pwd&lt;/code&gt; = Print Working Directory（打印工作目录）&lt;/p&gt;
&lt;p&gt;输出示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/home/ubuntu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这表示你当前在 &lt;code&gt;/home/ubuntu&lt;/code&gt; 目录下。&lt;/p&gt;
&lt;h3&gt;6.4 第二个命令：查看目录内容&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ls
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; = list（列出）&lt;/p&gt;
&lt;p&gt;输出示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是你家目录下的默认文件夹。&lt;/p&gt;
&lt;h3&gt;6.5 第三个命令：切换目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cd Documents
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;cd&lt;/code&gt; = Change Directory（切换目录）&lt;/p&gt;
&lt;p&gt;现在你进入了 &lt;code&gt;Documents&lt;/code&gt; 目录。再输入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pwd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/home/ubuntu/Documents
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;返回上一级目录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ..
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;返回家目录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~
# 或者直接
cd
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.6 第四个命令：创建文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;touch test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;touch&lt;/code&gt; 命令会创建一个空文件。用 &lt;code&gt;ls&lt;/code&gt; 验证：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ls
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会看到多了 &lt;code&gt;test.txt&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;6.7 第五个命令：查看文件内容&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cat test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;cat&lt;/code&gt; = concatenate（连接），用于查看文件内容。因为文件是空的，所以没有输出。&lt;/p&gt;
&lt;p&gt;往文件里写点东西：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Hello Linux!&quot; &amp;gt; test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;echo&lt;/code&gt; 是输出文字的命令，&lt;code&gt;&amp;gt;&lt;/code&gt; 是重定向符号，把输出写入文件。&lt;/p&gt;
&lt;p&gt;再查看：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Hello Linux!
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、常用快捷键&lt;/h2&gt;
&lt;h3&gt;7.1 终端快捷键&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + C&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 + D&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 + L&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;清屏（等同于clear命令）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + A&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 + E&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 + U&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 + K&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 + W&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 + R&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;搜索历史命令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Tab&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;自动补全命令/路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;↑&lt;/code&gt; / &lt;code&gt;↓&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;浏览历史命令&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;7.2 系统快捷键&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + 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 + F1~F6&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 + F7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换回图形界面&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Super + D&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示桌面&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Alt + Tab&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换窗口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PrtSc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;截图&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;八、帮助命令&lt;/h2&gt;
&lt;h3&gt;8.1 man命令 &amp;lt;a id=&quot;man&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;man&lt;/code&gt; = manual（手册），是Linux自带的详细帮助文档。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;man ls
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会显示 &lt;code&gt;ls&lt;/code&gt; 命令的完整手册，包括所有参数、用法、示例。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;按 &lt;code&gt;空格&lt;/code&gt; 翻页&lt;/li&gt;
&lt;li&gt;按 &lt;code&gt;q&lt;/code&gt; 退出&lt;/li&gt;
&lt;li&gt;按 &lt;code&gt;/关键词&lt;/code&gt; 搜索&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;8.2 --help参数&lt;/h3&gt;
&lt;p&gt;大部分命令都支持 &lt;code&gt;--help&lt;/code&gt; 参数，显示简要帮助：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ls --help
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.3 whatis命令&lt;/h3&gt;
&lt;p&gt;快速查看命令的简要说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;whatis ls
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ls (1) - list directory contents
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.4 info命令&lt;/h3&gt;
&lt;p&gt;比 &lt;code&gt;man&lt;/code&gt; 更详细的帮助文档：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;info ls
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;九、常用基础命令&lt;/h2&gt;
&lt;h3&gt;9.1 文本编辑器：vi/vim &amp;lt;a id=&quot;vi&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;vi&lt;/code&gt; 是Linux自带的经典文本编辑器，&lt;code&gt;vim&lt;/code&gt; 是其增强版本。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim file.txt        # 打开/创建文件
vim                  # 打开vim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;三种模式&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;普通模式&lt;/strong&gt;：按 &lt;code&gt;Esc&lt;/code&gt; 进入，用于浏览和删除&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;插入模式&lt;/strong&gt;：按 &lt;code&gt;i&lt;/code&gt; 进入，用于输入文字&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;命令模式&lt;/strong&gt;：按 &lt;code&gt;:&lt;/code&gt; 进入，用于保存退出&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;常用操作&lt;/strong&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;/td&gt;
&lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;保存&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:w&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;退出&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:q&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;保存并退出&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:wq&lt;/code&gt; 或 &lt;code&gt;ZZ&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不保存强制退出&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:q!&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;删除当前行&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;复制当前行&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yy&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;粘贴&lt;/td&gt;
&lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;撤销&lt;/td&gt;
&lt;td&gt;&lt;code&gt;u&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;搜索&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/关键词&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;9.2 简单编辑器：nano &amp;lt;a id=&quot;nano&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;nano&lt;/code&gt; 比vim更简单，底部有快捷键提示，适合新手。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nano file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用快捷键&lt;/strong&gt;（&lt;code&gt;^&lt;/code&gt; 表示 &lt;code&gt;Ctrl&lt;/code&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 + O&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 + X&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 + K&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 + U&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 + W&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;搜索&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;9.3 系统信息：uname &amp;lt;a id=&quot;uname&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;查看系统内核信息。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uname -a            # 显示所有信息
uname -r            # 显示内核版本
uname -m            # 显示系统架构（x86_64等）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.4 日期时间：date &amp;lt;a id=&quot;date&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;查看和设置系统日期时间。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;date                # 显示当前日期时间
date +%Y-%m-%d      # 格式化输出：2026-05-25
date -s &quot;2026-05-25 12:00:00&quot;  # 设置时间（需要root）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.5 命令历史：history &amp;lt;a id=&quot;history&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;查看之前执行过的命令。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;history             # 显示所有历史
history 20          # 显示最近20条
!42                 # 执行第42条历史命令
!!                  # 执行上一条命令
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;快捷键&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;↑&lt;/code&gt; / &lt;code&gt;↓&lt;/code&gt;：浏览历史命令&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + R&lt;/code&gt;：反向搜索历史&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9.6 清屏：clear &amp;lt;a id=&quot;clear&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;清除终端屏幕上的内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clear               # 清屏
# 或快捷键 Ctrl + L
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.7 重启：reboot &amp;lt;a id=&quot;reboot&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;重启系统。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo reboot             # 立即重启
sudo reboot -h +5       # 5分钟后重启
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.8 关机：shutdown &amp;lt;a id=&quot;shutdown&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;关闭系统。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo shutdown now       # 立即关机
sudo shutdown -h +10    # 10分钟后关机
sudo shutdown -r now    # 立即重启（等同于reboot）
sudo shutdown -c        # 取消定时关机
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.9 命令别名：alias &amp;lt;a id=&quot;alias&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/h3&gt;
&lt;p&gt;为常用命令创建简短别名。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias ll=&apos;ls -la&apos;       # 设置别名
alias rm=&apos;rm -i&apos;        # 删除前确认
alias                   # 查看所有别名
unalias ll              # 取消别名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;永久生效&lt;/strong&gt;：将alias命令写入 &lt;code&gt;~/.bashrc&lt;/code&gt; 文件。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;十、总结&lt;/h2&gt;
&lt;p&gt;本章学习了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;什么是Linux&lt;/strong&gt; → 开源的操作系统内核&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;为什么要学Linux&lt;/strong&gt; → 服务器霸主、开发者必备&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主流发行版&lt;/strong&gt; → 新手推荐Ubuntu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安装方式&lt;/strong&gt; → 虚拟机、WSL2、云服务器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;目录结构&lt;/strong&gt; → 所有东西都在 &lt;code&gt;/&lt;/code&gt; 下&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;基本命令&lt;/strong&gt; → pwd、ls、cd、touch、cat&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;常用快捷键&lt;/strong&gt; → Ctrl+C终止、Tab补全&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;帮助命令&lt;/strong&gt; → man、--help、whatis&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;下一章预告&lt;/strong&gt;：《Linux操作大全（二）：文件与目录操作详解》，将详细讲解文件的创建、复制、移动、删除、权限等操作。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;本文参考了鸟哥的Linux私房菜等经典教程，结合实际操作经验编写。如有错误，欢迎指正！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux操作大全（二）：文件与目录操作详解</title><link>https://emilia520.icu/posts/linux-manual-02-files/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-02-files/</guid><description>详细讲解Linux文件和目录的各种操作，包括创建、复制、移动、删除、查找、压缩等，每个命令都有实际示例</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（二）：文件与目录操作详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第二篇，详细讲解文件和目录的各种操作，每个命令都会解释&quot;是干什么的&quot;、&quot;怎么用&quot;、&quot;有什么注意事项&quot;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;stat&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;一、文件操作命令&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;touch&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.1 创建文件：touch&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：创建空文件，或者更新文件的修改时间。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基本语法&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;touch [选项] 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 创建单个空文件
touch file.txt

# 创建多个空文件
touch file1.txt file2.txt file3.txt

# 创建带空格的文件名（用引号）
touch &quot;my file.txt&quot;

# 更新文件的修改时间（文件已存在时）
touch existing_file.txt
&lt;/code&gt;&lt;/pre&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;批量创建测试文件&lt;/li&gt;
&lt;li&gt;更新文件时间戳（用于脚本判断文件是否被修改）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;mkdir&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.2 创建目录：mkdir&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：创建新目录（文件夹）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基本语法&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir [选项] 目录名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 创建单个目录
mkdir mydir

# 创建多级目录（-p参数很重要！）
mkdir -p /home/user/projects/2026/code

# 创建多个目录
mkdir dir1 dir2 dir3

# 创建目录并设置权限
mkdir -m 755 mydir
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;参数说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt;：递归创建目录，如果父目录不存在会自动创建&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m&lt;/code&gt;：设置目录权限&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;：显示创建过程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：不加 &lt;code&gt;-p&lt;/code&gt; 时，如果父目录不存在会报错：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir /home/user/a/b/c
# 报错：mkdir: cannot create directory &apos;/home/user/a/b/c&apos;: No such file or directory

mkdir -p /home/user/a/b/c
# 成功！会自动创建所有缺失的父目录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;rm&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.3 删除文件：rm&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：删除文件或目录。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基本语法&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm [选项] 文件/目录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 删除单个文件
rm file.txt

# 删除多个文件
rm file1.txt file2.txt file3.txt

# 强制删除（不提示确认）
rm -f file.txt

# 删除目录（必须加 -r）
rm -r mydir

# 强制删除目录（危险！慎用！）
rm -rf mydir

# 删除前提示确认
rm -i file.txt
&lt;/code&gt;&lt;/pre&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;-f&lt;/code&gt;：强制删除，不提示确认&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt;：删除前提示确认&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;⚠️ 危险操作警告&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 这条命令会删除整个系统！！！绝对不要执行！！！
rm -rf /

# 这条命令会删除当前目录下所有文件！！！
rm -rf *
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;安全建议&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;删除前先用 &lt;code&gt;ls&lt;/code&gt; 确认要删除的内容&lt;/li&gt;
&lt;li&gt;重要文件先备份再删除&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;-i&lt;/code&gt; 参数，让系统在删除前提示你确认&lt;/li&gt;
&lt;li&gt;不要在根目录 &lt;code&gt;/&lt;/code&gt; 下执行 &lt;code&gt;rm -rf&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;a id=&quot;cp&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.4 复制文件：cp&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：复制文件或目录。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基本语法&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cp [选项] 源文件 目标位置
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 复制文件
cp file.txt file_backup.txt

# 复制到另一个目录
cp file.txt /home/user/Documents/

# 复制并重命名
cp file.txt /home/user/Documents/new_name.txt

# 复制目录（必须加 -r）
cp -r mydir mydir_backup

# 保留文件属性（权限、时间等）
cp -p file.txt file_backup.txt

# 覆盖前提示确认
cp -i file.txt /existing/file.txt

# 显示复制过程
cp -v file.txt file_backup.txt
&lt;/code&gt;&lt;/pre&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;-p&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;/li&gt;
&lt;li&gt;&lt;code&gt;-a&lt;/code&gt;：归档复制，等同于 &lt;code&gt;-dpR&lt;/code&gt;，保留所有属性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;mv&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.5 移动/重命名：mv&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：移动文件/目录，或者重命名。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基本语法&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mv [选项] 源文件 目标位置
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 重命名文件
mv old_name.txt new_name.txt

# 移动文件到另一个目录
mv file.txt /home/user/Documents/

# 移动并重命名
mv file.txt /home/user/Documents/new_name.txt

# 移动目录
mv mydir /home/user/Documents/

# 覆盖前提示确认
mv -i file.txt /existing/file.txt

# 不覆盖已存在的文件
mv -n file.txt /existing/file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;参数说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt;：覆盖前提示确认&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt;：不覆盖已存在的文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;：显示移动过程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;cat&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;less&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;more&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;head&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;tail&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.6 查看文件内容：cat、less、more、head、tail&lt;/h3&gt;
&lt;h4&gt;cat命令&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：一次性显示整个文件内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat file.txt

# 显示行号
cat -n file.txt

# 合并多个文件
cat file1.txt file2.txt &amp;gt; combined.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：查看小文件（几十行以内）。&lt;/p&gt;
&lt;h4&gt;less命令&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：分页查看文件内容，适合查看大文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;less large_file.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;操作方式&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;空格&lt;/code&gt;：下一页&lt;/li&gt;
&lt;li&gt;&lt;code&gt;b&lt;/code&gt;：上一页&lt;/li&gt;
&lt;li&gt;&lt;code&gt;↑&lt;/code&gt; / &lt;code&gt;↓&lt;/code&gt;：上下滚动一行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/关键词&lt;/code&gt;：搜索关键词&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n&lt;/code&gt;：下一个搜索结果&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N&lt;/code&gt;：上一个搜索结果&lt;/li&gt;
&lt;li&gt;&lt;code&gt;q&lt;/code&gt;：退出&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;more命令&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：类似less，但功能较少。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;more file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;操作方式&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;空格&lt;/code&gt;：下一页&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Enter&lt;/code&gt;：下一行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;q&lt;/code&gt;：退出&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;head命令&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：查看文件的前几行。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 默认显示前10行
head file.txt

# 显示前20行
head -n 20 file.txt

# 显示前5行
head -5 file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：快速查看文件开头，比如查看日志的前几条记录。&lt;/p&gt;
&lt;h4&gt;tail命令&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：查看文件的最后几行，或者实时监控文件变化。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 默认显示最后10行
tail file.txt

# 显示最后20行
tail -n 20 file.txt

# 实时监控文件变化（非常有用！）
tail -f /var/log/syslog

# 实时监控并显示行号
tail -fn 100 /var/log/syslog
&lt;/code&gt;&lt;/pre&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;实时监控日志输出（&lt;code&gt;tail -f&lt;/code&gt; 是运维最常用的命令之一）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;find&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.7 查找文件：find&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：在目录树中查找文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基本语法&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find [搜索路径] [条件] [动作]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 按名字查找
find /home -name &quot;*.txt&quot;

# 忽略大小写
find /home -iname &quot;*.TXT&quot;

# 按类型查找（f=文件，d=目录）
find /home -type f -name &quot;*.log&quot;
find /home -type d -name &quot;logs&quot;

# 按大小查找
find /home -size +100M        # 大于100MB
find /home -size -10M         # 小于10MB
find /home -size 0            # 空文件

# 按时间查找
find /home -mtime -7          # 7天内修改过的文件
find /home -mtime +30         # 30天前修改过的文件
find /home -mmin -60          # 60分钟内修改过的文件

# 按权限查找
find /home -perm 777          # 权限为777的文件

# 找到后执行动作
find /home -name &quot;*.tmp&quot; -exec rm {} \;      # 找到后删除
find /home -name &quot;*.log&quot; -exec ls -l {} \;   # 找到后列出详情
find /home -name &quot;*.txt&quot; -exec cp {} /backup/ \;  # 找到后备份
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;grep&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.8 搜索文件内容：grep&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：在文件中搜索指定的文本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基本语法&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grep [选项] 搜索内容 文件
&lt;/code&gt;&lt;/pre&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

# 忽略大小写
grep -i &quot;error&quot; logfile.txt

# 显示行号
grep -n &quot;error&quot; logfile.txt

# 递归搜索目录下所有文件
grep -r &quot;error&quot; /var/log/

# 显示匹配行的前后几行
grep -B 3 -A 3 &quot;error&quot; logfile.txt   # 前3行+后3行
grep -C 5 &quot;error&quot; logfile.txt        # 前后各5行

# 反向匹配（显示不包含搜索内容的行）
grep -v &quot;debug&quot; logfile.txt

# 统计匹配行数
grep -c &quot;error&quot; logfile.txt

# 使用正则表达式
grep -E &quot;error|warning&quot; logfile.txt
grep -E &quot;^[0-9]&quot; file.txt            # 以数字开头的行
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;参数说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt;：忽略大小写&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt;：显示行号&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-r&lt;/code&gt;：递归搜索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;：反向匹配&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&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;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;二、目录操作命令&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;cd&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.1 切换目录：cd&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：Change Directory，切换当前工作目录。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 切换到指定目录
cd /home/user/Documents

# 切换到家目录
cd ~
cd

# 切换到上一级目录
cd ..

# 切换到上上一级目录
cd ../..

# 切换到上一次所在的目录（很实用！）
cd -

# 使用绝对路径
cd /var/log

# 使用相对路径
cd Documents
cd ./subdir
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;pwd&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.2 显示当前目录：pwd&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：Print Working Directory，显示当前工作目录的完整路径。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pwd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/home/ubuntu/Documents
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;ls&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.3 列出目录内容：ls&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：list，列出目录中的文件和子目录。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本列表
ls

# 显示详细信息
ls -l

# 显示隐藏文件（以.开头的文件）
ls -a

# 显示详细信息+隐藏文件
ls -la

# 显示文件大小（人类可读格式）
ls -lh

# 按时间排序（最新的在前）
ls -lt

# 按大小排序（最大的在前）
ls -lS

# 递归显示子目录
ls -R

# 只显示目录
ls -d */

# 显示文件的inode号
ls -i
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;ls -l 输出详解&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-rw-r--r-- 1 ubuntu ubuntu 4096 May 25 10:30 file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;各列含义：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-rw-r--r--&lt;/code&gt;：文件权限（后面会详细讲）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1&lt;/code&gt;：硬链接数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ubuntu&lt;/code&gt;：所有者&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ubuntu&lt;/code&gt;：所属组&lt;/li&gt;
&lt;li&gt;&lt;code&gt;4096&lt;/code&gt;：文件大小（字节）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;May 25 10:30&lt;/code&gt;：最后修改时间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;file.txt&lt;/code&gt;：文件名&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;tree&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.4 树状显示目录：tree&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：以树状图显示目录结构。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装tree命令（如果没有）
sudo apt install tree

# 显示目录树
tree

# 只显示2层
tree -L 2

# 显示隐藏文件
tree -a

# 只显示目录
tree -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.
├── Documents
│   ├── file1.txt
│   └── file2.txt
├── Downloads
│   └── image.jpg
└── Pictures
    └── photo.png
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、文件权限详解&lt;/h2&gt;
&lt;h3&gt;3.1 权限的基本概念&lt;/h3&gt;
&lt;p&gt;Linux中的每个文件都有三组权限：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;所有者（Owner）&lt;/strong&gt;：文件的拥有者&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;所属组（Group）&lt;/strong&gt;：文件所属的用户组&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;其他人（Others）&lt;/strong&gt;：除了所有者和组成员以外的人&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每组权限包含三种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读（r）&lt;/strong&gt;：Read，值为4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写（w）&lt;/strong&gt;：Write，值为2&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行（x）&lt;/strong&gt;：eXecute，值为1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.2 权限表示方法&lt;/h3&gt;
&lt;h4&gt;字符表示法&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;-rwxr-xr--
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;第1位：文件类型（&lt;code&gt;-&lt;/code&gt; 普通文件，&lt;code&gt;d&lt;/code&gt; 目录，&lt;code&gt;l&lt;/code&gt; 链接）&lt;/li&gt;
&lt;li&gt;第2-4位：所有者权限（rwx = 可读可写可执行）&lt;/li&gt;
&lt;li&gt;第5-7位：所属组权限（r-x = 可读可执行，不可写）&lt;/li&gt;
&lt;li&gt;第8-10位：其他人权限（r-- = 只读）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;数字表示法&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;rwxr-xr-- = 754
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;计算方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;r = 4&lt;/li&gt;
&lt;li&gt;w = 2&lt;/li&gt;
&lt;li&gt;x = 1&lt;/li&gt;
&lt;li&gt;rwx = 4+2+1 = 7&lt;/li&gt;
&lt;li&gt;r-x = 4+0+1 = 5&lt;/li&gt;
&lt;li&gt;r-- = 4+0+0 = 4&lt;/li&gt;
&lt;/ul&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;th&gt;含义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;777&lt;/td&gt;
&lt;td&gt;rwxrwxrwx&lt;/td&gt;
&lt;td&gt;所有人可读可写可执行（不安全！）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;755&lt;/td&gt;
&lt;td&gt;rwxr-xr-x&lt;/td&gt;
&lt;td&gt;所有者可读写执行，其他人可读执行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;644&lt;/td&gt;
&lt;td&gt;rw-r--r--&lt;/td&gt;
&lt;td&gt;所有者可读写，其他人只读&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;700&lt;/td&gt;
&lt;td&gt;rwx------&lt;/td&gt;
&lt;td&gt;只有所有者可读写执行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;600&lt;/td&gt;
&lt;td&gt;rw-------&lt;/td&gt;
&lt;td&gt;只有所有者可读写&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;chmod&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.3 修改权限：chmod&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：Change Mode，修改文件权限。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 数字方式设置权限
chmod 755 file.sh       # rwxr-xr-x
chmod 644 file.txt      # rw-r--r--
chmod 700 private_dir   # rwx------

# 符号方式设置权限
chmod u+x file.sh       # 给所有者添加执行权限
chmod g+w file.txt      # 给所属组添加写权限
chmod o-r file.txt      # 去掉其他人的读权限
chmod a+r file.txt      # 给所有人添加读权限

# 递归修改目录权限
chmod -R 755 /home/user/public

# 参考其他文件的权限
chmod --reference=file1.txt file2.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;符号说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;u&lt;/code&gt;：所有者（user）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g&lt;/code&gt;：所属组（group）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;o&lt;/code&gt;：其他人（others）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;a&lt;/code&gt;：所有人（all）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+&lt;/code&gt;：添加权限&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-&lt;/code&gt;：去掉权限&lt;/li&gt;
&lt;li&gt;&lt;code&gt;=&lt;/code&gt;：设置权限&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;chown&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.4 修改所有者：chown&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：Change Owner，修改文件的所有者和所属组。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 修改所有者
chown user1 file.txt

# 修改所有者和所属组
chown user1:group1 file.txt

# 只修改所属组
chown :group1 file.txt

# 递归修改目录
chown -R user1:group1 /home/user1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.5 修改所属组：chgrp&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：Change Group，修改文件的所属组。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 修改所属组
chgrp group1 file.txt

# 递归修改
chgrp -R group1 /home/group1_files
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、文件压缩与解压&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;tar&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.1 tar命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：打包和解包文件（tar本身不压缩，只打包）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 打包目录
tar -cvf archive.tar /home/user/Documents

# 打包并gzip压缩
tar -czvf archive.tar.gz /home/user/Documents

# 打包并bzip2压缩
tar -cjvf archive.tar.bz2 /home/user/Documents

# 解包
tar -xvf archive.tar

# 解压tar.gz
tar -xzvf archive.tar.gz

# 解压tar.bz2
tar -xjvf archive.tar.bz2

# 解压到指定目录
tar -xzvf archive.tar.gz -C /home/user/backup/

# 查看压缩包内容（不解压）
tar -tzvf archive.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;参数说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&gt;：创建（create）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-x&lt;/code&gt;：解压（extract）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;：显示过程（verbose）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-f&lt;/code&gt;：指定文件名（file）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-z&lt;/code&gt;：使用gzip压缩&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-j&lt;/code&gt;：使用bzip2压缩&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-C&lt;/code&gt;：指定解压目录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;记忆口诀&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;压缩：&lt;code&gt;tar -czvf&lt;/code&gt;（c=create创建，z=zip压缩，v=verbose显示，f=file文件）&lt;/li&gt;
&lt;li&gt;解压：&lt;code&gt;tar -xzvf&lt;/code&gt;（x=extract解压）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;zip&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;unzip&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;gzip&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.2 gzip / gunzip&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：压缩/解压单个文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 压缩文件（会删除原文件）
gzip file.txt

# 解压文件
gunzip file.txt.gz

# 保留原文件压缩
gzip -k file.txt

# 查看压缩信息
gzip -l file.txt.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;zip&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;unzip&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.3 zip / unzip&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：创建和解压ZIP格式的压缩包（兼容Windows）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 压缩文件
zip archive.zip file1.txt file2.txt

# 压缩目录（-r递归）
zip -r archive.zip /home/user/Documents

# 解压
unzip archive.zip

# 解压到指定目录
unzip archive.zip -d /home/user/extract/

# 查看压缩包内容
unzip -l archive.zip
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;zip&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;unzip&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.4 bzip2 / bunzip2&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：比gzip压缩率更高，但速度更慢。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 压缩
bzip2 file.txt

# 解压
bunzip2 file.txt.bz2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.5 xz / unxz&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：压缩率最高，但速度最慢。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 压缩
xz file.txt

# 解压
unxz file.txt.xz
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、链接文件&lt;/h2&gt;
&lt;h3&gt;5.1 什么是链接？&lt;/h3&gt;
&lt;p&gt;链接类似于Windows的&quot;快捷方式&quot;，但功能更强大。&lt;/p&gt;
&lt;p&gt;Linux有两种链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;硬链接（Hard Link）&lt;/strong&gt;：直接指向文件数据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;软链接（Symbolic Link）&lt;/strong&gt;：指向文件的路径&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;ln&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.2 创建软链接：ln -s&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建软链接
ln -s /home/user/file.txt /home/user/Desktop/file_link.txt

# 创建目录的软链接
ln -s /var/www/html /home/user/website
&lt;/code&gt;&lt;/pre&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;可以链接目录&lt;/li&gt;
&lt;li&gt;可以跨文件系统&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;ln&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.3 创建硬链接：ln&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建硬链接
ln /home/user/file.txt /home/user/file_hardlink.txt
&lt;/code&gt;&lt;/pre&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;不能链接目录&lt;/li&gt;
&lt;li&gt;不能跨文件系统&lt;/li&gt;
&lt;li&gt;硬链接和原文件共享同一个inode&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;六、文件搜索高级技巧&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;locate&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;cat&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;6.1 locate命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：基于数据库的快速文件搜索。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装mlocate
sudo apt install mlocate

# 更新数据库
sudo updatedb

# 搜索文件
locate file.txt

# 忽略大小写
locate -i FILE.TXT

# 限制结果数量
locate -n 10 &quot;*.log&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：locate基于数据库搜索，新建的文件可能搜不到，需要先运行 &lt;code&gt;sudo updatedb&lt;/code&gt; 更新数据库。&lt;/p&gt;
&lt;p&gt;&amp;lt;a id=&quot;which&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;6.2 which命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：查找命令的完整路径。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;which ls
# 输出：/usr/bin/ls

which python3
# 输出：/usr/bin/python3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;whereis&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;6.3 whereis命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：查找命令的二进制文件、源代码和帮助文档。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;whereis ls
# 输出：ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、文件比较&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;diff&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.1 diff命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：比较两个文件的差异。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 比较两个文件
diff file1.txt file2.txt

# 并排显示差异
diff -y file1.txt file2.txt

# 显示上下文格式
diff -u file1.txt file2.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.2 comm命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：比较两个已排序文件的相同和不同行。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 比较两个已排序的文件
comm sorted1.txt sorted2.txt

# 只显示相同行
comm -12 sorted1.txt sorted2.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、其他常用命令&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;file&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.1 识别文件类型：file&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：检测文件的类型（文本、图片、可执行文件等）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看文件类型
file image.jpg
# 输出：image.jpg: JPEG image data, JFIF standard 1.01

file document.pdf
# 输出：document.pdf: PDF document, version 1.7

file script.sh
# 输出：script.sh: Bourne-Again shell script, ASCII text executable

# 查看多个文件
file *
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实用场景&lt;/strong&gt;：下载的文件没有扩展名时，用 &lt;code&gt;file&lt;/code&gt; 命令识别真实类型。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;sed&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.2 流编辑器：sed&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：对文本进行替换、删除、插入等操作，常用于批量处理。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 替换文件中的字符串（显示到屏幕，不修改原文件）
sed &apos;s/old/new/&apos; file.txt

# 全局替换（每行所有匹配）
sed &apos;s/old/new/g&apos; file.txt

# 直接修改原文件（加 -i 参数）
sed -i &apos;s/old/new/g&apos; file.txt

# 删除包含特定字符串的行
sed &apos;/keyword/d&apos; file.txt

# 删除空行
sed &apos;/^$/d&apos; file.txt

# 在第3行前插入新内容
sed &apos;3i\新插入的内容&apos; file.txt

# 打印第2-4行
sed -n &apos;2,4p&apos; file.txt
&lt;/code&gt;&lt;/pre&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;日志文件处理&lt;/li&gt;
&lt;li&gt;文本格式转换&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;awk&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.3 文本处理：awk&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：强大的文本分析工具，按列处理数据。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 打印第一列和第三列
awk &apos;{print $1, $3}&apos; file.txt

# 指定分隔符（默认是空格）
awk -F: &apos;{print $1, $3}&apos; /etc/passwd

# 条件筛选（第三列大于100的行）
awk &apos;$3 &amp;gt; 100&apos; file.txt

# 计算总和
awk &apos;{sum += $1} END {print sum}&apos; numbers.txt

# 打印行号和内容
awk &apos;{print NR, $0}&apos; file.txt

# 格式化输出
awk &apos;{printf &quot;%-20s %10s
&quot;, $1, $2}&apos; file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;处理CSV/日志文件&lt;/li&gt;
&lt;li&gt;系统信息提取&lt;/li&gt;
&lt;li&gt;数据统计分析&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;sort&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.4 排序：sort&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：对文本文件的行进行排序。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本排序（字典序）
sort file.txt

# 数值排序
sort -n numbers.txt

# 逆序排序
sort -r file.txt

# 去重排序
sort -u file.txt

# 按第二列排序
sort -k2 file.txt

# 按第二列数值排序
sort -k2 -n file.txt

# 检查文件是否已排序
sort -c file.txt
&lt;/code&gt;&lt;/pre&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;配合 &lt;code&gt;uniq&lt;/code&gt; 命令去重&lt;/li&gt;
&lt;li&gt;日志按时间排序&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;uniq&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.5 去重：uniq&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：去除&lt;strong&gt;相邻的重复行&lt;/strong&gt;（通常配合sort使用）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 去除相邻重复行
uniq file.txt

# 统计每行出现次数
uniq -c file.txt

# 只显示重复的行
uniq -d file.txt

# 只显示不重复的行
uniq -u file.txt

# 忽略大小写
uniq -i file.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;典型用法&lt;/strong&gt;（先排序再去重）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sort file.txt | uniq          # 去重
sort file.txt | uniq -c       # 去重并计数
sort file.txt | uniq -c | sort -rn  # 按频率排序
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;wc&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.6 统计：wc&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：统计文件的行数、单词数、字节数。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wc file.txt         # 显示行数、单词数、字节数
wc -l file.txt      # 只显示行数
wc -w file.txt      # 只显示单词数
wc -c file.txt      # 只显示字节数
wc -m file.txt      # 只显示字符数
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 统计代码行数
find . -name &quot;*.py&quot; | xargs wc -l

# 统计目录下文件数量
ls | wc -l

# 统计日志错误次数
grep -c &quot;ERROR&quot; app.log
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;九、总结&lt;/h2&gt;
&lt;p&gt;本章详细讲解了Linux文件和目录的各种操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;创建&lt;/strong&gt;：touch（文件）、mkdir（目录）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;删除&lt;/strong&gt;：rm（危险操作，谨慎使用！）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复制&lt;/strong&gt;：cp&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;移动/重命名&lt;/strong&gt;：mv&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;查看内容&lt;/strong&gt;：cat、less、more、head、tail&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;查找文件&lt;/strong&gt;：find、locate、which、whereis&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;搜索内容&lt;/strong&gt;：grep&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;权限管理&lt;/strong&gt;：chmod、chown、chgrp&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;压缩解压&lt;/strong&gt;：tar、gzip、zip、bzip2、xz&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;链接&lt;/strong&gt;：ln（硬链接）、ln -s（软链接）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;下一章预告&lt;/strong&gt;：《Linux操作大全（三）：用户与权限管理详解》&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;如有疑问或发现错误，欢迎在评论区指出！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux操作大全（三）：用户与权限管理详解</title><link>https://emilia520.icu/posts/linux-manual-03-users/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-03-users/</guid><description>深入讲解Linux用户管理、组管理、sudo权限、PAM认证等知识，让你彻底搞懂Linux的权限体系</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（三）：用户与权限管理详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第三篇，深入讲解用户管理、组管理、sudo权限等内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、用户基础概念&lt;/h2&gt;
&lt;h3&gt;1.1 为什么需要多用户？&lt;/h3&gt;
&lt;p&gt;Linux是一个多用户操作系统，允许多个用户同时登录和使用系统。每个用户有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;独立的家目录（&lt;code&gt;/home/用户名&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;独立的配置文件&lt;/li&gt;
&lt;li&gt;独立的权限设置&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.2 用户类型&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;用户类型&lt;/th&gt;
&lt;th&gt;UID范围&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;root用户&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;超级管理员，拥有最高权限&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;系统用户&lt;/td&gt;
&lt;td&gt;1-999&lt;/td&gt;
&lt;td&gt;运行系统服务的用户，不能登录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;普通用户&lt;/td&gt;
&lt;td&gt;1000+&lt;/td&gt;
&lt;td&gt;真实使用系统的用户&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.3 用户相关文件&lt;/h3&gt;
&lt;h4&gt;/etc/passwd（用户信息文件）&lt;/h4&gt;
&lt;p&gt;每行代表一个用户，格式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;用户名:密码占位:UID:GID:备注:家目录:登录Shell
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root:x:0:0:root:/root:/bin/bash
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;各字段说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;root&lt;/code&gt;：用户名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x&lt;/code&gt;：密码占位（实际密码在/etc/shadow）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0&lt;/code&gt;：UID（用户ID）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0&lt;/code&gt;：GID（主组ID）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root&lt;/code&gt;：备注信息&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/root&lt;/code&gt;：家目录&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/bin/bash&lt;/code&gt;：登录后使用的Shell&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;/etc/shadow（密码文件）&lt;/h4&gt;
&lt;p&gt;存储加密后的密码，只有root能查看：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root:$6$xxxxx:19000:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;/etc/group（组信息文件）&lt;/h4&gt;
&lt;p&gt;每行代表一个组：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;组名:密码占位:GID:组成员列表
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root:x:0:
ubuntu:x:1000:
docker:x:999:ubuntu
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;二、用户管理命令&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;useradd&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.1 添加用户：useradd&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：创建新用户。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本创建（需要手动设置密码）
sudo useradd newuser

# 创建并设置家目录
sudo useradd -m newuser

# 创建并指定Shell
sudo useradd -m -s /bin/bash newuser

# 创建并添加到组
sudo useradd -m -g users -G sudo,docker newuser

# 创建并设置备注
sudo useradd -m -c &quot;开发人员&quot; newuser

# 创建并设置UID
sudo useradd -m -u 1500 newuser
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;参数说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-m&lt;/code&gt;：创建家目录&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-s&lt;/code&gt;：指定登录Shell&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-g&lt;/code&gt;：指定主组&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-G&lt;/code&gt;：指定附加组&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&gt;：设置备注&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-u&lt;/code&gt;：指定UID&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;userdel&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.2 删除用户：userdel&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：删除用户。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 删除用户（保留家目录）
sudo userdel newuser

# 删除用户及家目录
sudo userdel -r newuser

# 强制删除（即使用户正在登录）
sudo userdel -f newuser
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;usermod&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.3 修改用户：usermod&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：修改用户属性。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 修改用户名
sudo usermod -l newname oldname

# 修改家目录
sudo usermod -d /home/newhome -m username

# 修改登录Shell
sudo usermod -s /bin/zsh username

# 添加到附加组
sudo usermod -aG docker username

# 锁定用户（禁止登录）
sudo usermod -L username

# 解锁用户
sudo usermod -U username

# 设置账号过期时间
sudo usermod -e 2026-12-31 username

# 修改备注
sudo usermod -c &quot;新备注&quot; username
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;-aG&lt;/code&gt; 中的 &lt;code&gt;-a&lt;/code&gt; 表示追加（append），不加 &lt;code&gt;-a&lt;/code&gt; 会覆盖原有附加组！&lt;/p&gt;
&lt;p&gt;&amp;lt;a id=&quot;passwd&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;w&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.4 设置密码：passwd&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：设置或修改用户密码。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 修改自己的密码
passwd

# 修改其他用户的密码（需要root权限）
sudo passwd username

# 锁定用户密码
sudo passwd -l username

# 解锁用户密码
sudo passwd -u username

# 设置密码过期时间
sudo passwd -e username

# 查看密码状态
sudo passwd -S username
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;密码策略建议&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;长度至少8位&lt;/li&gt;
&lt;li&gt;包含大小写字母、数字、特殊字符&lt;/li&gt;
&lt;li&gt;不要使用常见词汇&lt;/li&gt;
&lt;li&gt;定期更换&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;su&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.5 切换用户：su&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：Switch User，切换到其他用户。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 切换到root用户
su

# 切换到root（等同于上面）
su root

# 切换到指定用户
su username

# 切换用户并加载该用户的环境变量
su - username

# 切换到root并加载环境变量
su -
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;su vs su -&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;su username&lt;/code&gt;：只切换用户，保留当前环境变量&lt;/li&gt;
&lt;li&gt;&lt;code&gt;su - username&lt;/code&gt;：切换用户并加载该用户的环境变量（推荐）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;su&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;sudo&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.6 sudo命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：以root权限执行命令。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 以root权限执行命令
sudo apt update

# 以指定用户权限执行
sudo -u username command

# 编辑sudoers文件
sudo visudo

# 查看当前用户的sudo权限
sudo -l
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;sudoers文件配置&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;编辑 &lt;code&gt;/etc/sudoers&lt;/code&gt;（使用 &lt;code&gt;visudo&lt;/code&gt; 命令）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 允许用户ubuntu执行所有命令（需要密码）
ubuntu ALL=(ALL:ALL) ALL

# 允许用户ubuntu执行所有命令（不需要密码）
ubuntu ALL=(ALL:ALL) NOPASSWD: ALL

# 允许组docker的成员执行所有命令
%docker ALL=(ALL:ALL) ALL

# 允许用户只执行特定命令
ubuntu ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、组管理命令&lt;/h2&gt;
&lt;h3&gt;3.1 添加组：groupadd&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建新组
sudo groupadd developers

# 创建并指定GID
sudo groupadd -g 2000 developers
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 删除组：groupdel&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 删除组
sudo groupdel developers
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 修改组：groupmod&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 修改组名
sudo groupmod -n newname oldname

# 修改GID
sudo groupmod -g 2001 developers
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;passwd&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;w&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.4 管理组成员：gpasswd&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 添加用户到组
sudo gpasswd -a username groupname

# 从组中删除用户
sudo gpasswd -d username groupname

# 设置组管理员
sudo gpasswd -A username groupname

# 设置组成员列表（覆盖）
sudo gpasswd -M user1,user2,user3 groupname
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.5 查看用户所属组&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前用户的组
groups

# 查看指定用户的组
groups username

# 查看用户的详细组信息
id username
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;id命令输出示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),27(sudo),999(docker)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、权限管理进阶&lt;/h2&gt;
&lt;h3&gt;4.1 特殊权限&lt;/h3&gt;
&lt;h4&gt;SUID（Set User ID）&lt;/h4&gt;
&lt;p&gt;当文件设置了SUID权限后，执行该文件时会以文件所有者的身份运行。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 设置SUID
chmod u+s file.sh
chmod 4755 file.sh    # 4表示SUID
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;典型例子&lt;/strong&gt;：&lt;code&gt;/usr/bin/passwd&lt;/code&gt; 命令有SUID权限，所以普通用户也能修改自己的密码（需要写入/etc/shadow）。&lt;/p&gt;
&lt;h4&gt;SGID（Set Group ID）&lt;/h4&gt;
&lt;p&gt;当目录设置了SGID权限后，在该目录下创建的文件会继承目录的组。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 设置SGID
chmod g+s directory
chmod 2755 directory   # 2表示SGID
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;典型例子&lt;/strong&gt;：团队共享目录，所有人创建的文件都属于同一个组。&lt;/p&gt;
&lt;h4&gt;Sticky Bit&lt;/h4&gt;
&lt;p&gt;当目录设置了Sticky Bit后，只有文件所有者和root能删除该目录下的文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 设置Sticky Bit
chmod +t directory
chmod 1755 directory   # 1表示Sticky Bit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;典型例子&lt;/strong&gt;：&lt;code&gt;/tmp&lt;/code&gt; 目录设置了Sticky Bit，所有人只能删除自己创建的文件。&lt;/p&gt;
&lt;h3&gt;4.2 ACL（访问控制列表）&lt;/h3&gt;
&lt;p&gt;ACL可以为特定用户或组设置更精细的权限。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装ACL工具
sudo apt install acl

# 查看文件的ACL
getfacl file.txt

# 设置ACL（给用户user1添加读写权限）
setfacl -m u:user1:rw file.txt

# 设置ACL（给组group1添加读权限）
setfacl -m g:group1:r file.txt

# 删除ACL
setfacl -x u:user1 file.txt

# 删除所有ACL
setfacl -b file.txt

# 设置默认ACL（目录下新建文件自动继承）
setfacl -d -m u:user1:rw directory/
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、用户切换与环境变量&lt;/h2&gt;
&lt;h3&gt;5.1 用户切换的影响&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;th&gt;当前目录&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;su username&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌ 保留原环境&lt;/td&gt;
&lt;td&gt;不变&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;su - username&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ 加载新环境&lt;/td&gt;
&lt;td&gt;切换到新用户家目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sudo -u username command&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;临时&lt;/td&gt;
&lt;td&gt;取决于命令&lt;/td&gt;
&lt;td&gt;不变&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sudo -i&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ root环境&lt;/td&gt;
&lt;td&gt;/root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sudo -s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌ 保留原环境&lt;/td&gt;
&lt;td&gt;不变&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;5.2 环境变量相关文件&lt;/h3&gt;
&lt;h4&gt;/etc/profile（全局环境变量）&lt;/h4&gt;
&lt;p&gt;对所有用户生效，登录时加载。&lt;/p&gt;
&lt;h4&gt;~/.bashrc（用户环境变量）&lt;/h4&gt;
&lt;p&gt;只对当前用户生效，每次打开终端时加载。&lt;/p&gt;
&lt;h4&gt;~/.profile（用户登录脚本）&lt;/h4&gt;
&lt;p&gt;只对当前用户生效，登录时加载。&lt;/p&gt;
&lt;h3&gt;5.3 常用环境变量&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有环境变量
env

# 查看PATH变量
echo $PATH

# 临时设置环境变量
export MY_VAR=&quot;hello&quot;

# 永久设置（添加到~/.bashrc）
echo &apos;export MY_VAR=&quot;hello&quot;&apos; &amp;gt;&amp;gt; ~/.bashrc
source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;重要环境变量&lt;/strong&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;PATH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;命令搜索路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HOME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;用户家目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;USER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;当前用户名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SHELL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;当前Shell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LANG&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;语言设置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TERM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;终端类型&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;六、用户认证与安全&lt;/h2&gt;
&lt;h3&gt;6.1 PAM认证&lt;/h3&gt;
&lt;p&gt;PAM（Pluggable Authentication Modules）是Linux的认证框架。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PAM配置文件位置&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/pam.d/&lt;/code&gt;：各服务的PAM配置&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/pam.conf&lt;/code&gt;：全局PAM配置（一般不用）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PAM模块类型&lt;/strong&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;auth&lt;/td&gt;
&lt;td&gt;认证（验证用户身份）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;account&lt;/td&gt;
&lt;td&gt;账户检查（是否过期、是否允许登录）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;password&lt;/td&gt;
&lt;td&gt;密码修改&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;session&lt;/td&gt;
&lt;td&gt;会话管理（登录前后执行的操作）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;6.2 密码策略配置&lt;/h3&gt;
&lt;h4&gt;/etc/login.defs&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# 密码有效期
PASS_MAX_DAYS   90      # 密码最长使用天数
PASS_MIN_DAYS   0       # 密码最短使用天数
PASS_MIN_LEN    8       # 密码最小长度
PASS_WARN_AGE   7       # 密码过期前提前警告天数
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;使用chage命令&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# 查看密码过期信息
sudo chage -l username

# 设置密码最长使用天数
sudo chage -M 90 username

# 设置密码最短使用天数
sudo chage -m 7 username

# 设置密码过期时间
sudo chage -E 2026-12-31 username

# 强制下次登录时修改密码
sudo chage -d 0 username
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 登录限制&lt;/h3&gt;
&lt;h4&gt;/etc/securetty&lt;/h4&gt;
&lt;p&gt;限制root只能从指定终端登录。&lt;/p&gt;
&lt;h4&gt;/etc/nologin&lt;/h4&gt;
&lt;p&gt;创建此文件后，除root外的所有用户都无法登录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo touch /etc/nologin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;删除此文件恢复正常登录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo rm /etc/nologin
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;/etc/hosts.allow 和 /etc/hosts.deny&lt;/h4&gt;
&lt;p&gt;限制可以从哪些IP地址登录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# /etc/hosts.allow
sshd: 192.168.1.0/24

# /etc/hosts.deny
sshd: ALL
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、实战场景&lt;/h2&gt;
&lt;h3&gt;7.1 创建开发团队用户&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建开发组
sudo groupadd developers

# 创建用户并加入组
sudo useradd -m -g developers -s /bin/bash dev1
sudo useradd -m -g developers -s /bin/bash dev2
sudo useradd -m -g developers -s /bin/bash dev3

# 设置密码
sudo passwd dev1
sudo passwd dev2
sudo passwd dev3

# 创建共享目录
sudo mkdir /shared
sudo chown :developers /shared
sudo chmod 2775 /shared    # SGID + 组写权限
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.2 限制用户只能使用特定命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 编辑sudoers
sudo visudo

# 添加以下行
dev1 ALL=(ALL) /usr/bin/systemctl status *, /usr/bin/journalctl
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.3 批量创建用户&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# batch_create_users.sh

for i in {1..10}; do
    username=&quot;user$(printf &apos;%03d&apos; $i)&quot;
    sudo useradd -m -s /bin/bash &quot;$username&quot;
    echo &quot;$username:Password123&quot; | sudo chpasswd
    sudo chage -d 0 &quot;$username&quot;  # 强制首次登录修改密码
    echo &quot;Created user: $username&quot;
done
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、总结&lt;/h2&gt;
&lt;p&gt;本章学习了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;用户类型&lt;/strong&gt;：root、系统用户、普通用户&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用户管理命令&lt;/strong&gt;：useradd、userdel、usermod、passwd&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;组管理命令&lt;/strong&gt;：groupadd、groupdel、gpasswd&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sudo权限&lt;/strong&gt;：配置sudoers文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特殊权限&lt;/strong&gt;：SUID、SGID、Sticky Bit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ACL&lt;/strong&gt;：更精细的权限控制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全策略&lt;/strong&gt;：密码策略、登录限制&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;下一章预告&lt;/strong&gt;：《Linux操作大全（四）：软件包管理详解》&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;如有疑问或发现错误，欢迎在评论区指出！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux操作大全（四）：软件包管理详解</title><link>https://emilia520.icu/posts/linux-manual-04-packages/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-04-packages/</guid><description>全面讲解Linux软件包管理，包括apt、yum、dnf、snap、源码编译安装等，让你轻松管理Linux上的软件</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（四）：软件包管理详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第四篇，详细讲解如何在Linux上安装、更新、卸载软件。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、软件包管理概述&lt;/h2&gt;
&lt;h3&gt;1.1 什么是软件包？&lt;/h3&gt;
&lt;p&gt;在Linux中，软件通常以&quot;软件包&quot;（Package）的形式分发。一个软件包包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;编译好的程序文件&lt;/li&gt;
&lt;li&gt;配置文件&lt;/li&gt;
&lt;li&gt;依赖关系说明&lt;/li&gt;
&lt;li&gt;安装/卸载脚本&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.2 包管理器对比&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;apt&lt;/td&gt;
&lt;td&gt;Ubuntu、Debian&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install 软件名&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;yum&lt;/td&gt;
&lt;td&gt;CentOS 7、RHEL 7&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yum install 软件名&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dnf&lt;/td&gt;
&lt;td&gt;CentOS 8+、Fedora、RHEL 8+&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dnf install 软件名&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pacman&lt;/td&gt;
&lt;td&gt;Arch Linux&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pacman -S 软件名&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;zypper&lt;/td&gt;
&lt;td&gt;openSUSE&lt;/td&gt;
&lt;td&gt;&lt;code&gt;zypper install 软件名&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;snap&lt;/td&gt;
&lt;td&gt;跨发行版&lt;/td&gt;
&lt;td&gt;&lt;code&gt;snap install 软件名&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;flatpak&lt;/td&gt;
&lt;td&gt;跨发行版&lt;/td&gt;
&lt;td&gt;&lt;code&gt;flatpak install 软件名&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;二、apt包管理（Ubuntu/Debian）&lt;/h2&gt;
&lt;h3&gt;2.1 更新软件源&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;为什么要更新？&lt;/strong&gt;
软件源（Repository）是存放软件包的服务器。更新软件源可以获取最新的软件包列表。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 更新软件包列表（不升级软件）
sudo apt update

# 升级所有已安装的软件
sudo apt upgrade

# 更新并升级（组合命令）
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade

# 发行版升级（如从22.04升到24.04）
sudo apt do-release-upgrade
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 搜索软件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 搜索软件包
apt search 关键词

# 示例
apt search nginx
apt search python3

# 查看软件包详情
apt show 软件包名

# 示例
apt show nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 安装软件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装软件
sudo apt install 软件包名

# 示例
sudo apt install nginx
sudo apt install vim
sudo apt install git

# 安装多个软件
sudo apt install nginx vim git curl

# 安装指定版本
sudo apt install nginx=1.18.0-0ubuntu1

# 只下载不安装
sudo apt download 软件包名

# 重新安装
sudo apt reinstall 软件包名
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.4 卸载软件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 卸载软件（保留配置文件）
sudo apt remove 软件包名

# 卸载软件并删除配置文件
sudo apt purge 软件包名

# 卸载并清理依赖
sudo apt autoremove

# 组合命令（卸载+清理+删配置）
sudo apt purge --auto-remove 软件包名
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.5 清理缓存&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 清理已下载的软件包缓存
sudo apt clean

# 清理过时的软件包缓存
sudo apt autoclean

# 查看缓存大小
du -sh /var/cache/apt/archives/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.6 锁定软件版本&lt;/h3&gt;
&lt;p&gt;防止软件被意外升级：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 锁定软件版本
sudo apt-mark hold 软件包名

# 解锁
sudo apt-mark unhold 软件包名

# 查看锁定的软件
apt-mark showhold
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.7 添加第三方PPA&lt;/h3&gt;
&lt;p&gt;PPA（Personal Package Archive）是Ubuntu的第三方软件源。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 添加PPA
sudo add-apt-repository ppa:作者名/仓库名

# 示例：添加Python 3.11的PPA
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11

# 删除PPA
sudo add-apt-repository --remove ppa:作者名/仓库名
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.8 sources.list文件&lt;/h3&gt;
&lt;p&gt;软件源配置文件位于 &lt;code&gt;/etc/apt/sources.list&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前源
cat /etc/apt/sources.list

# 备份源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;换源为国内镜像&lt;/strong&gt;（提高下载速度）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 编辑源文件
sudo vim /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;替换为阿里云源（Ubuntu 24.04）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后更新：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、yum/dnf包管理（CentOS/Fedora）&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;yum&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.1 yum命令（CentOS 7）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 更新软件包列表
yum check-update

# 更新所有软件
sudo yum update

# 搜索软件
yum search 关键词

# 查看软件详情
yum info 软件包名

# 安装软件
sudo yum install 软件包名

# 卸载软件
sudo yum remove 软件包名

# 清理缓存
sudo yum clean all

# 查看已安装的软件
yum list installed

# 查看可用的软件
yum list available
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;dnf&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.2 dnf命令（CentOS 8+/Fedora）&lt;/h3&gt;
&lt;p&gt;dnf是yum的下一代版本，用法基本相同：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 更新软件包列表
dnf check-update

# 更新所有软件
sudo dnf update

# 搜索软件
dnf search 关键词

# 安装软件
sudo dnf install 软件包名

# 卸载软件
sudo dnf remove 软件包名

# 清理缓存
sudo dnf clean all
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 添加第三方仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装EPEL仓库（Extra Packages for Enterprise Linux）
sudo yum install epel-release    # CentOS 7
sudo dnf install epel-release    # CentOS 8+

# 安装Remi仓库（PHP最新版）
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;yum&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;dnf&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.4 yum/dnf配置文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 主配置文件
cat /etc/yum.conf     # CentOS 7
cat /etc/dnf/dnf.conf  # CentOS 8+

# 仓库配置目录
ls /etc/yum.repos.d/   # CentOS 7
ls /etc/yum.repos.d/   # CentOS 8+
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、snap包管理&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;snap&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.1 什么是snap？&lt;/h3&gt;
&lt;p&gt;snap是Canonical（Ubuntu母公司）开发的通用软件包格式，特点是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自带依赖，不依赖系统库&lt;/li&gt;
&lt;li&gt;自动更新&lt;/li&gt;
&lt;li&gt;沙箱隔离，更安全&lt;/li&gt;
&lt;li&gt;跨发行版使用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;snap&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.2 snap命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装snapd（如果没有）
sudo apt install snapd

# 搜索软件
snap search 关键词

# 安装软件
sudo snap install 软件包名

# 示例
sudo snap install code --classic    # VS Code
sudo snap install firefox
sudo snap install spotify

# 查看已安装的snap
snap list

# 更新软件
sudo snap refresh 软件包名

# 更新所有
sudo snap refresh

# 卸载软件
sudo snap remove 软件包名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;snap&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.3 snap常用软件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 开发工具
sudo snap install code --classic        # VS Code
sudo snap install intellij-idea-community --classic  # IntelliJ IDEA
sudo snap install pycharm-community --classic        # PyCharm

# 浏览器
sudo snap install firefox
sudo snap install chromium

# 通讯
sudo snap install telegram-desktop
sudo snap install discord

# 多媒体
sudo snap install vlc
sudo snap install spotify
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、flatpak包管理&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;flatpak&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.1 什么是flatpak？&lt;/h3&gt;
&lt;p&gt;flatpak是另一种通用软件包格式，由Red Hat主导开发。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装flatpak
sudo apt install flatpak

# 添加Flathub仓库
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# 搜索软件
flatpak search 关键词

# 安装软件
flatpak install flathub 软件包名

# 查看已安装
flatpak list

# 更新软件
flatpak update

# 卸载软件
flatpak uninstall 软件包名
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;六、源码编译安装&lt;/h2&gt;
&lt;h3&gt;6.1 什么时候需要源码编译？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;软件没有提供软件包&lt;/li&gt;
&lt;li&gt;需要自定义编译选项&lt;/li&gt;
&lt;li&gt;需要最新版本&lt;/li&gt;
&lt;li&gt;学习软件内部原理&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6.2 编译安装步骤&lt;/h3&gt;
&lt;h4&gt;步骤1：安装编译工具&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# Ubuntu/Debian
sudo apt install build-essential

# CentOS/RHEL
sudo yum groupinstall &quot;Development Tools&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;步骤2：下载源码&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# 使用wget下载
wget https://example.com/software-1.0.tar.gz

# 使用curl下载
curl -O https://example.com/software-1.0.tar.gz

# 使用git克隆
git clone https://github.com/example/software.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;步骤3：解压源码&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;tar -xzvf software-1.0.tar.gz
cd software-1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;步骤4：配置&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# 检查编译环境
./configure

# 指定安装路径
./configure --prefix=/usr/local/software

# 指定编译选项
./configure --prefix=/usr/local --enable-feature --disable-other
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;步骤5：编译&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# 使用所有CPU核心编译
make -j$(nproc)

# 或指定核心数
make -j4
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;步骤6：安装&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo make install
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;步骤7：清理&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# 清理编译文件
make clean

# 清理配置文件
make distclean
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 实战：编译安装Nginx&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装依赖
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

# 下载Nginx源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz

# 解压
tar -xzvf nginx-1.24.0.tar.gz
cd nginx-1.24.0

# 配置
./configure --prefix=/usr/local/nginx \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_realip_module

# 编译
make -j$(nproc)

# 安装
sudo make install

# 启动Nginx
sudo /usr/local/nginx/sbin/nginx

# 验证
curl http://localhost
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.4 使用checkinstall打包&lt;/h3&gt;
&lt;p&gt;checkinstall可以把源码编译的结果打包成.deb或.rpm软件包，方便管理：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装checkinstall
sudo apt install checkinstall

# 编译完成后，用checkinstall代替make install
sudo checkinstall
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、软件包依赖管理&lt;/h2&gt;
&lt;h3&gt;7.1 什么是依赖？&lt;/h3&gt;
&lt;p&gt;软件A可能需要软件B才能运行，软件B就是软件A的&quot;依赖&quot;。&lt;/p&gt;
&lt;h3&gt;7.2 自动解决依赖&lt;/h3&gt;
&lt;p&gt;现代包管理器会自动解决依赖：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# apt会自动安装依赖
sudo apt install nginx

# 查看软件的依赖
apt depends 软件包名

# 查看谁依赖这个软件
apt rdepends 软件包名
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.3 修复依赖问题&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 修复损坏的依赖
sudo apt --fix-broken install

# 强制配置
sudo dpkg --configure -a

# 清理并重新安装
sudo apt clean
sudo apt update
sudo apt install --reinstall 软件包名
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、dpkg直接操作（底层命令）&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;dpkg&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.1 dpkg命令&lt;/h3&gt;
&lt;p&gt;dpkg是apt的底层工具，直接操作.deb软件包：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装.deb包
sudo dpkg -i package.deb

# 卸载软件
sudo dpkg -r 软件包名

# 卸载并删除配置
sudo dpkg -P 软件包名

# 查看已安装的软件
dpkg -l

# 查看软件安装的文件
dpkg -L 软件包名

# 查看文件属于哪个软件
dpkg -S /usr/bin/ls

# 修复依赖
sudo apt --fix-broken install
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;九、实战：常用软件安装&lt;/h2&gt;
&lt;h3&gt;9.1 安装Docker&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Ubuntu
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

# 将当前用户加入docker组
sudo usermod -aG docker $USER
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.2 安装Node.js&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 使用NodeSource仓库
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install nodejs

# 验证
node --version
npm --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.3 安装Python 3.11&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 添加PPA
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update

# 安装
sudo apt install python3.11 python3.11-venv python3.11-dev

# 验证
python3.11 --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.4 安装Git&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Ubuntu/Debian
sudo apt install git

# CentOS/RHEL
sudo yum install git

# 配置Git
git config --global user.name &quot;你的名字&quot;
git config --global user.email &quot;你的邮箱&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十、其他包管理工具&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;rpm&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.1 RPM包管理（底层）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;rpm&lt;/code&gt; 是Red Hat系（CentOS/Fedora）的底层包管理工具。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装软件包
sudo rpm -i package.rpm

# 升级软件包
sudo rpm -U package.rpm

# 卸载软件包
sudo rpm -e package_name

# 查询已安装的包
rpm -qa

# 查询某个文件属于哪个包
rpm -qf /usr/bin/ls

# 查询包的详细信息
rpm -qi package_name

# 查询包安装的文件
rpm -ql package_name
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：rpm不会自动解决依赖，推荐使用yum/dnf代替。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;pip&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.2 Python包管理：pip&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;pip&lt;/code&gt; 是Python的包管理工具，用于安装Python库。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装包
pip install requests
pip3 install requests        # 指定Python3

# 安装指定版本
pip install requests==2.28.0

# 卸载包
pip uninstall requests

# 列出已安装的包
pip list

# 查看包信息
pip show requests

# 导出依赖
pip freeze &amp;gt; requirements.txt

# 从文件安装依赖
pip install -r requirements.txt

# 使用国内镜像加速
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;npm&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.3 Node.js包管理：npm&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;npm&lt;/code&gt; 是Node.js的包管理工具，用于安装JavaScript库。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装包（局部）
npm install express

# 安装包（全局）
npm install -g nodemon

# 安装指定版本
npm install express@4.18.0

# 卸载包
npm uninstall express

# 列出已安装的包
npm list
npm list -g                 # 全局包

# 初始化项目
npm init
npm init -y                 # 使用默认配置

# 运行脚本
npm run build
npm start

# 使用国内镜像
npm config set registry https://registry.npmmirror.com
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十一、总结&lt;/h2&gt;
&lt;p&gt;本章学习了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;apt管理&lt;/strong&gt;：update、install、remove、search&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;yum/dnf管理&lt;/strong&gt;：CentOS/Fedora的包管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;snap管理&lt;/strong&gt;：通用软件包格式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;源码编译&lt;/strong&gt;：configure、make、make install&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;依赖管理&lt;/strong&gt;：自动解决、手动修复&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;常用软件安装&lt;/strong&gt;：Docker、Node.js、Python、Git&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;下一章预告&lt;/strong&gt;：《Linux操作大全（五）：网络配置与管理详解》&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;如有疑问或发现错误，欢迎在评论区指出！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux操作大全（五）：网络配置与管理详解</title><link>https://emilia520.icu/posts/linux-manual-05-network/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-05-network/</guid><description>全面讲解Linux网络配置，包括IP地址、DNS、防火墙、SSH、网络诊断等知识，让你轻松管理Linux网络</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（五）：网络配置与管理详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第五篇，详细讲解Linux网络配置和管理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、网络基础概念&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;ip&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.1 IP地址&lt;/h3&gt;
&lt;p&gt;IP地址是网络中设备的唯一标识，类似于门牌号。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IPv4格式&lt;/strong&gt;：&lt;code&gt;192.168.1.100&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IP地址分类&lt;/strong&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;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A类&lt;/td&gt;
&lt;td&gt;1.0.0.0 - 126.255.255.255&lt;/td&gt;
&lt;td&gt;大型网络&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B类&lt;/td&gt;
&lt;td&gt;128.0.0.0 - 191.255.255.255&lt;/td&gt;
&lt;td&gt;中型网络&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C类&lt;/td&gt;
&lt;td&gt;192.0.0.0 - 223.255.255.255&lt;/td&gt;
&lt;td&gt;小型网络&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;私有地址&lt;/td&gt;
&lt;td&gt;10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16&lt;/td&gt;
&lt;td&gt;局域网使用&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.2 子网掩码&lt;/h3&gt;
&lt;p&gt;子网掩码用于划分网络地址和主机地址。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常见子网掩码&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;掩码&lt;/th&gt;
&lt;th&gt;CIDR&lt;/th&gt;
&lt;th&gt;可用主机数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;255.255.255.0&lt;/td&gt;
&lt;td&gt;/24&lt;/td&gt;
&lt;td&gt;254&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;255.255.0.0&lt;/td&gt;
&lt;td&gt;/16&lt;/td&gt;
&lt;td&gt;65534&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;255.0.0.0&lt;/td&gt;
&lt;td&gt;/8&lt;/td&gt;
&lt;td&gt;16777214&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.3 网关&lt;/h3&gt;
&lt;p&gt;网关是连接不同网络的&quot;关口&quot;，通常是路由器的IP地址。&lt;/p&gt;
&lt;h3&gt;1.4 DNS&lt;/h3&gt;
&lt;p&gt;DNS（Domain Name System）将域名解析为IP地址。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常见DNS服务器&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;DNS&lt;/th&gt;
&lt;th&gt;IP地址&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;阿里DNS&lt;/td&gt;
&lt;td&gt;223.5.5.5, 223.6.6.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;腾讯DNS&lt;/td&gt;
&lt;td&gt;119.29.29.29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google DNS&lt;/td&gt;
&lt;td&gt;8.8.8.8, 8.8.4.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare DNS&lt;/td&gt;
&lt;td&gt;1.1.1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;二、查看网络信息&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;ip&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.1 ip命令（推荐）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有网络接口
ip addr show
ip a

# 查看指定接口
ip addr show eth0

# 查看IP地址（简略）
ip -4 addr show
ip -6 addr show

# 查看路由表
ip route show
ip r

# 查看邻居表（ARP）
ip neigh show
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;ifconfig&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.2 ifconfig命令（旧版）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装net-tools（如果没有）
&amp;lt;a id=&quot;apt&quot;&amp;gt;&amp;lt;/a&amp;gt;
sudo apt install net-tools

# 查看所有接口
ifconfig

# 查看指定接口
ifconfig eth0

# 启用接口
sudo ifconfig eth0 up

# 禁用接口
sudo ifconfig eth0 down

# 设置IP地址
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;hostname&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.3 hostname命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看主机名
hostname

# 查看详细信息
hostnamectl

# 设置主机名
sudo hostnamectl set-hostname new-hostname
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、网络配置方法&lt;/h2&gt;
&lt;h3&gt;3.1 Netplan（Ubuntu 18.04+）&lt;/h3&gt;
&lt;p&gt;Netplan是Ubuntu 18.04引入的网络配置工具。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;配置文件位置&lt;/strong&gt;：&lt;code&gt;/etc/netplan/&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看配置文件
ls /etc/netplan/

# 编辑配置
sudo vim /etc/netplan/01-netcfg.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;静态IP配置示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 223.5.5.5
          - 223.6.6.6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;DHCP配置示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: yes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;应用配置&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 测试配置
sudo netplan try

# 应用配置
sudo netplan apply
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 /etc/network/interfaces（Debian传统）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 编辑配置
sudo vim /etc/network/interfaces
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;静态IP配置&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 223.5.5.5 223.6.6.6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;DHCP配置&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;auto eth0
iface eth0 inet dhcp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;重启网络&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl restart networking
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 NetworkManager（桌面版）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看连接
nmcli connection show

# 查看设备状态
nmcli device status

# 创建静态IP连接
sudo nmcli connection add type ethernet con-name static-eth0 ifname eth0 \
    ipv4.addresses 192.168.1.100/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns &quot;223.5.5.5 223.6.6.6&quot; \
    ipv4.method manual

# 启用连接
sudo nmcli connection up static-eth0

# 修改连接
sudo nmcli connection modify static-eth0 ipv4.addresses 192.168.1.101/24

# 删除连接
sudo nmcli connection delete static-eth0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;ip&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.4 /etc/sysconfig/network-scripts（CentOS 7）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 编辑配置
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;静态IP配置&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=223.5.5.5
DNS2=223.6.6.6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;重启网络&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl restart network
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、DNS配置&lt;/h2&gt;
&lt;h3&gt;4.1 /etc/resolv.conf&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看DNS配置
cat /etc/resolv.conf

# 临时修改DNS
sudo vim /etc/resolv.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;添加内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nameserver 223.5.5.5
nameserver 223.6.6.6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此文件可能会被DHCP覆盖，永久修改需要在Netplan或NetworkManager中配置。&lt;/p&gt;
&lt;h3&gt;4.2 systemd-resolved（Ubuntu 18.04+）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看DNS状态
resolvectl status

# 查看DNS统计
resolvectl statistics

# 刷新DNS缓存
sudo resolvectl flush-caches
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;nslookup&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;dig&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.3 测试DNS解析&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 使用nslookup
nslookup example.com

# 使用dig
dig example.com
dig example.com A
dig example.com MX
dig @8.8.8.8 example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、网络诊断工具&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;ping&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.1 ping命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：测试网络连通性。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本ping
ping example.com

# 指定次数
ping -c 4 example.com

# 指定间隔（秒）
ping -i 0.5 example.com

# 指定包大小
ping -s 1024 example.com

# 指定TTL
ping -t 64 example.com

# 指定接口
ping -I eth0 example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;traceroute&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.2 traceroute命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：追踪数据包的路由路径。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本traceroute
traceroute example.com

# 使用TCP（更准确）
sudo traceroute -T example.com

# 使用UDP
traceroute -U example.com

# 指定端口
traceroute -p 80 example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 mtr命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：实时追踪路由（结合ping和traceroute）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本mtr
mtr example.com

# 报告模式
mtr -r -c 100 example.com

# 使用TCP
sudo mtr -T example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;netstat&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;ss&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.4 netstat / ss命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：查看网络连接、监听端口等。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有监听端口
sudo netstat -tuln
sudo ss -tuln

# 查看所有连接
sudo netstat -an
sudo ss -an

# 查看指定端口
sudo netstat -tuln | grep :80
sudo ss -tuln | grep :80

# 查看进程使用的端口
sudo netstat -tulnp
sudo ss -tulnp

# 查看路由表
netstat -r
ip route
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;curl&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.5 curl命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：发送HTTP请求。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本GET请求
curl https://example.com

# 下载文件
curl -O https://example.com/file.zip

# 指定输出文件
curl -o output.html https://example.com

# POST请求
curl -X POST -d &quot;key=value&quot; https://example.com/api

# 携带Header
curl -H &quot;Content-Type: application/json&quot; https://example.com

# 显示详细信息
curl -v https://example.com

# 跟随重定向
curl -L https://example.com

# 忽略SSL证书验证
curl -k https://example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;wget&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.6 wget命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：下载文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 下载文件
wget https://example.com/file.zip

# 指定输出文件名
wget -O output.zip https://example.com/file.zip

# 后台下载
wget -b https://example.com/large-file.zip

# 断点续传
wget -c https://example.com/large-file.zip

# 递归下载（整站）
wget -r -np -k https://example.com

# 限速下载
wget --limit-rate=1m https://example.com/file.zip
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.7 nmap命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：网络扫描和端口探测。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装nmap
sudo apt install nmap

# 扫描指定IP的端口
nmap 192.168.1.100

# 扫描指定端口
nmap -p 80,443 192.168.1.100

# 扫描端口范围
nmap -p 1-1000 192.168.1.100

# 扫描整个网段
nmap 192.168.1.0/24

# 服务版本探测
nmap -sV 192.168.1.100

# 操作系统探测
sudo nmap -O 192.168.1.100
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;六、防火墙配置&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;ufw&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;6.1 ufw（Ubuntu推荐）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;ufw&lt;/strong&gt; = Uncomplicated Firewall，简单易用的防火墙。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 启用防火墙
sudo ufw enable

# 禁用防火墙
sudo ufw disable

# 查看状态
sudo ufw status
sudo ufw status verbose
sudo ufw status numbered

# 允许端口
sudo ufw allow 22       # SSH
sudo ufw allow 80       # HTTP
sudo ufw allow 443      # HTTPS
sudo ufw allow 8080     # 自定义端口

# 允许端口范围
sudo ufw allow 3000:4000/tcp

# 允许特定IP
sudo ufw allow from 192.168.1.100

# 允许特定IP访问特定端口
sudo ufw allow from 192.168.1.100 to any port 22

# 拒绝端口
sudo ufw deny 23

# 删除规则
sudo ufw delete allow 80
sudo ufw delete 1    # 按编号删除

# 重置防火墙
sudo ufw reset
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.2 firewalld（CentOS/RHEL）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 启动防火墙
sudo systemctl start firewalld

# 查看状态
sudo firewall-cmd --state

# 查看开放的端口
sudo firewall-cmd --list-all

# 开放端口
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp

# 重载配置
sudo firewall-cmd --reload

# 关闭端口
sudo firewall-cmd --permanent --remove-port=80/tcp

# 查看服务
sudo firewall-cmd --list-services

# 开放服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;iptables&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;6.3 iptables（底层工具）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看规则
sudo iptables -L -n
sudo iptables -L -n -v

# 允许SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 允许HTTPS
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 拒绝其他输入
sudo iptables -A INPUT -j DROP

# 删除规则
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT

# 清空规则
sudo iptables -F

# 保存规则
sudo iptables-save &amp;gt; /etc/iptables.rules

# 恢复规则
sudo iptables-restore &amp;lt; /etc/iptables.rules
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、SSH远程连接&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;ss&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;ssh&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.1 SSH基础&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基本连接
ssh username@hostname

# 指定端口
ssh -p 2222 username@hostname

# 使用密钥连接
ssh -i ~/.ssh/id_rsa username@hostname

# 执行远程命令
ssh username@hostname ls -la

# 保持连接
ssh -o ServerAliveInterval=60 username@hostname
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;ss&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;ssh&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.2 SSH密钥认证&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 生成密钥对
ssh-keygen -t ed25519 -C &quot;your_email@example.com&quot;

# 或使用RSA
ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot;

# 复制公钥到服务器
ssh-copy-id username@hostname

# 或手动复制
cat ~/.ssh/id_ed25519.pub | ssh username@hostname &quot;mkdir -p ~/.ssh &amp;amp;&amp;amp; cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;ss&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;ssh&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.3 SSH配置文件&lt;/h3&gt;
&lt;p&gt;编辑 &lt;code&gt;~/.ssh/config&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Host myserver
    HostName 192.168.1.100
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Host production
    HostName prod.example.com
    User deploy
    Port 2222
    IdentityFile ~/.ssh/prod_key
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后可以直接：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh myserver
ssh production
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;scp&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;rsync&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.4 SCP文件传输&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 上传文件
scp file.txt username@hostname:/home/user/

# 下载文件
scp username@hostname:/home/user/file.txt ./

# 上传目录
scp -r directory/ username@hostname:/home/user/

# 指定端口
scp -P 2222 file.txt username@hostname:/home/user/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;sftp&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;a id=&quot;ftp&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.5 SFTP交互式传输&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 连接SFTP
sftp username@hostname

# 常用命令
sftp&amp;gt; ls           # 远程列表
sftp&amp;gt; lls          # 本地列表
sftp&amp;gt; pwd          # 远程当前目录
sftp&amp;gt; lpwd         # 本地当前目录
sftp&amp;gt; get file     # 下载文件
sftp&amp;gt; put file     # 上传文件
sftp&amp;gt; mkdir dir    # 创建远程目录
sftp&amp;gt; exit         # 退出
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;ss&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;ssh&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.6 SSH安全加固&lt;/h3&gt;
&lt;p&gt;编辑 &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 禁止root登录
PermitRootLogin no

# 禁止密码登录（只允许密钥）
PasswordAuthentication no

# 修改默认端口
Port 2222

# 限制登录用户
AllowUsers ubuntu deploy

# 限制最大尝试次数
MaxAuthTries 3

# 设置超时时间
ClientAliveInterval 300
ClientAliveCountMax 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启SSH服务：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、网络服务管理&lt;/h2&gt;
&lt;h3&gt;8.1 systemd管理网络服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看网络服务状态
sudo systemctl status networking
sudo systemctl status NetworkManager

# 重启网络服务
sudo systemctl restart networking

# 启用/禁用NetworkManager
sudo systemctl enable NetworkManager
sudo systemctl disable NetworkManager
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.2 网络接口管理&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 启用接口
sudo ip link set eth0 up

# 禁用接口
sudo ip link set eth0 down

# 设置MTU
sudo ip link set eth0 mtu 9000
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;九、实战：配置Web服务器网络&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;ip&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;9.1 配置静态IP&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# /etc/netplan/01-webserver.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 223.5.5.5
          - 223.6.6.6
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.2 配置防火墙&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 启用防火墙
sudo ufw enable

# 允许SSH
sudo ufw allow 22/tcp

# 允许HTTP和HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 查看状态
sudo ufw status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;ss&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;ssh&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;9.3 配置SSH安全&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 编辑SSH配置
sudo vim /etc/ssh/sshd_config

# 修改端口
Port 2222

# 禁止root登录
PermitRootLogin no

# 重启SSH
sudo systemctl restart sshd

# 更新防火墙规则
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十、总结&lt;/h2&gt;
&lt;p&gt;本章学习了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;网络基础&lt;/strong&gt;：IP地址、子网掩码、网关、DNS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;查看网络&lt;/strong&gt;：ip、ifconfig、hostname&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络配置&lt;/strong&gt;：Netplan、interfaces、NetworkManager&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS配置&lt;/strong&gt;：resolv.conf、systemd-resolved&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络诊断&lt;/strong&gt;：ping、traceroute、mtr、curl、wget、nmap&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;防火墙&lt;/strong&gt;：ufw、firewalld、iptables&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSH&lt;/strong&gt;：密钥认证、安全加固、SCP/SFTP&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;下一章预告&lt;/strong&gt;：《Linux操作大全（六）：进程管理与服务管理详解》&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;如有疑问或发现错误，欢迎在评论区指出！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux操作大全（六）：进程管理与服务管理详解</title><link>https://emilia520.icu/posts/linux-manual-06-process/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-06-process/</guid><description>全面讲解Linux进程管理、服务管理、systemd、定时任务等知识，让你轻松掌控系统运行状态</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（六）：进程管理与服务管理详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第六篇，详细讲解进程管理、服务管理和定时任务。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、进程基础概念&lt;/h2&gt;
&lt;h3&gt;1.1 什么是进程？&lt;/h3&gt;
&lt;p&gt;进程是正在运行的程序的实例。每个进程有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PID&lt;/strong&gt;：进程ID，唯一标识&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PPID&lt;/strong&gt;：父进程ID&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;/li&gt;
&lt;li&gt;&lt;strong&gt;资源占用&lt;/strong&gt;：CPU、内存等&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.2 进程状态&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R (Running)&lt;/td&gt;
&lt;td&gt;运行中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S (Sleeping)&lt;/td&gt;
&lt;td&gt;睡眠中（可中断）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D (Disk Sleep)&lt;/td&gt;
&lt;td&gt;磁盘睡眠（不可中断）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T (Stopped)&lt;/td&gt;
&lt;td&gt;已停止&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Z (Zombie)&lt;/td&gt;
&lt;td&gt;僵尸进程&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.3 前台与后台进程&lt;/h3&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;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;二、查看进程&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;ps&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.1 ps命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：Process Status，查看进程状态。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前终端的进程
ps

# 查看所有进程
ps aux
ps -ef

# 查看指定用户的进程
ps -u username

# 查看指定进程
ps -p 1234

# 查看进程树
ps auxf
ps -ejH

# 自定义输出格式
ps -eo pid,ppid,user,%cpu,%mem,command
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;ps aux输出详解&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 169432 11804 ?        Ss   May20   0:05 /sbin/init
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;各列含义：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;USER&lt;/strong&gt;：进程所有者&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PID&lt;/strong&gt;：进程ID&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;%CPU&lt;/strong&gt;：CPU使用率&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;%MEM&lt;/strong&gt;：内存使用率&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VSZ&lt;/strong&gt;：虚拟内存大小&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RSS&lt;/strong&gt;：实际内存大小&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TTY&lt;/strong&gt;：终端&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;STAT&lt;/strong&gt;：进程状态&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;START&lt;/strong&gt;：启动时间&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TIME&lt;/strong&gt;：累计CPU时间&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;COMMAND&lt;/strong&gt;：命令&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;top&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.2 top命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：实时监控进程状态。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本使用
top

# 指定刷新间隔（秒）
top -d 1

# 指定用户
top -u username

# 指定PID
top -p 1234
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;top界面操作&lt;/strong&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;q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;退出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;帮助&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;k&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;杀死进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;调整优先级&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;M&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;按内存排序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;P&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;按CPU排序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示每个CPU核心&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示完整命令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;H&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示线程&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;top&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;htop&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.3 htop命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：增强版的top，更友好。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装htop
sudo apt install htop

# 使用htop
htop

# 指定用户
htop -u username
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;htop优势&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;彩色界面&lt;/li&gt;
&lt;li&gt;支持鼠标操作&lt;/li&gt;
&lt;li&gt;可以直接杀死进程&lt;/li&gt;
&lt;li&gt;树状视图&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;pgrep&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.4 pgrep命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：按名称查找进程。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 按名称查找PID
pgrep nginx

# 显示进程名
pgrep -l nginx

# 显示完整命令
pgrep -a nginx

# 精确匹配
pgrep -x nginx

# 指定用户
pgrep -u username nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;pidof&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.5 pidof命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：查找程序的PID。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查找nginx的PID
pidof nginx

# 查找python的PID
pidof python3
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、进程控制&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;kill&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.1 终止进程：kill&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 发送SIGTERM信号（优雅终止）
kill 1234

# 发送SIGKILL信号（强制终止）
kill -9 1234

# 发送SIGHUP信号（重新加载配置）
kill -1 1234

# 发送指定信号
kill -信号名 PID

# 查看所有信号
kill -l
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用信号&lt;/strong&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;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SIGHUP&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;重新加载配置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SIGINT&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;中断（Ctrl+C）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SIGKILL&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;强制终止&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SIGTERM&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;优雅终止（默认）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SIGSTOP&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;暂停进程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SIGCONT&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;继续进程&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;kill&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;killall&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.2 killall命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：按名称终止进程。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 终止所有nginx进程
killall nginx

# 强制终止
killall -9 nginx

# 指定用户
killall -u username nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;kill&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;pkill&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.3 pkill命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：按模式终止进程。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 终止匹配的进程
pkill nginx

# 强制终止
pkill -9 nginx

# 指定用户
pkill -u username

# 指定终端
pkill -t pts/0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.4 进程优先级：nice和renice&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 以低优先级启动程序
nice -n 10 command

# 以高优先级启动程序（需要root）
sudo nice -n -10 command

# 修改运行中进程的优先级
renice -n 10 -p 1234

# 修改用户所有进程的优先级
renice -n 10 -u username
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;优先级范围&lt;/strong&gt;：-20（最高）到 19（默认为0）&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;四、后台进程管理&lt;/h2&gt;
&lt;h3&gt;4.1 &amp;amp;符号&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 在后台运行命令
command &amp;amp;

# 示例
sleep 300 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;nohup&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.2 nohup命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：使进程在终端关闭后继续运行。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本使用
nohup command &amp;amp;

# 指定输出文件
nohup command &amp;gt; output.log 2&amp;gt;&amp;amp;1 &amp;amp;

# 示例
nohup python3 app.py &amp;gt; app.log 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;screen&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.3 screen命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：创建可分离的终端会话。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装screen
sudo apt install screen

# 创建新会话
screen -S session_name

# 分离会话（快捷键）
Ctrl+A, D

# 查看会话列表
screen -ls

# 重新连接会话
screen -r session_name

# 终止会话
screen -X -S session_name quit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;tmux&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.4 tmux命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：更现代的终端复用器。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装tmux
sudo apt install tmux

# 创建新会话
tmux new -s session_name

# 分离会话（快捷键）
Ctrl+B, D

# 查看会话列表
tmux ls

# 重新连接会话
tmux attach -t session_name

# 终止会话
tmux kill-session -t session_name
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、systemd服务管理&lt;/h2&gt;
&lt;h3&gt;5.1 什么是systemd？&lt;/h3&gt;
&lt;p&gt;systemd是Linux系统的初始化系统和服务管理器，负责：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统启动&lt;/li&gt;
&lt;li&gt;服务管理&lt;/li&gt;
&lt;li&gt;日志管理&lt;/li&gt;
&lt;li&gt;定时任务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;systemctl&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.2 systemctl命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 启动服务
sudo systemctl start nginx

# 停止服务
sudo systemctl stop nginx

# 重启服务
sudo systemctl restart nginx

# 重新加载配置
sudo systemctl reload nginx

# 查看服务状态
sudo systemctl status nginx

# 启用服务（开机自启）
sudo systemctl enable nginx

# 禁用服务
sudo systemctl disable nginx

# 查看所有服务
systemctl list-units --type=service

# 查看所有运行中的服务
systemctl list-units --type=service --state=running

# 查看服务是否启用
systemctl is-enabled nginx

# 查看服务是否活跃
systemctl is-active nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 自定义服务文件&lt;/h3&gt;
&lt;p&gt;服务文件位于 &lt;code&gt;/etc/systemd/system/&lt;/code&gt; 或 &lt;code&gt;/lib/systemd/system/&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;创建自定义服务&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo vim /etc/systemd/system/myapp.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;服务文件内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=My Application
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/app
ExecStart=/usr/bin/python3 /home/ubuntu/app/main.py
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;参数说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[Unit]&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Description&lt;/code&gt;：服务描述&lt;/li&gt;
&lt;li&gt;&lt;code&gt;After&lt;/code&gt;：在什么之后启动&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[Service]&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Type&lt;/code&gt;：服务类型（simple、forking、oneshot等）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;User&lt;/code&gt;：运行用户&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WorkingDirectory&lt;/code&gt;：工作目录&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ExecStart&lt;/code&gt;：启动命令&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ExecStop&lt;/code&gt;：停止命令&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Restart&lt;/code&gt;：重启策略（always、on-failure等）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RestartSec&lt;/code&gt;：重启间隔&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[Install]&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;WantedBy&lt;/code&gt;：在什么目标下启用&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;启用自定义服务&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 重新加载systemd配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start myapp

# 启用开机自启
sudo systemctl enable myapp

# 查看状态
sudo systemctl status myapp
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.4 常见系统服务&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;nginx&lt;/td&gt;
&lt;td&gt;Web服务器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;apache2&lt;/td&gt;
&lt;td&gt;Web服务器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mysql&lt;/td&gt;
&lt;td&gt;数据库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sshd&lt;/td&gt;
&lt;td&gt;SSH服务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cron&lt;/td&gt;
&lt;td&gt;定时任务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;docker&lt;/td&gt;
&lt;td&gt;容器服务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NetworkManager&lt;/td&gt;
&lt;td&gt;网络管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemd-resolved&lt;/td&gt;
&lt;td&gt;DNS解析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ufw&lt;/td&gt;
&lt;td&gt;防火墙&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;service&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.5 service命令（旧版）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;service&lt;/code&gt; 是SysVinit时代的服务管理命令，现在很多系统仍支持（实际调用systemctl）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 启动服务
sudo service nginx start

# 停止服务
sudo service nginx stop

# 重启服务
sudo service nginx restart

# 查看服务状态
sudo service nginx status

# 查看所有服务状态
service --status-all
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;提荐：新系统建议使用 &lt;code&gt;systemctl&lt;/code&gt; 命令代替 &lt;code&gt;service&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;六、日志管理&lt;/h2&gt;
&lt;h3&gt;6.1 journalctl命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：查看systemd日志。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有日志
journalctl

# 查看指定服务的日志
journalctl -u nginx

# 实时查看日志
journalctl -f

# 实时查看指定服务日志
journalctl -u nginx -f

# 查看今天的日志
journalctl --since today

# 查看最近1小时的日志
journalctl --since &quot;1 hour ago&quot;

# 查看指定时间范围
journalctl --since &quot;2026-05-25 10:00:00&quot; --until &quot;2026-05-25 12:00:00&quot;

# 查看错误日志
journalctl -p err

# 查看指定PID的日志
journalctl _PID=1234

# 清理旧日志
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=500M
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.2 日志文件位置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 系统日志
/var/log/syslog

# 认证日志
/var/log/auth.log

# 内核日志
/var/log/kern.log

# 应用日志
/var/log/nginx/
/var/log/mysql/

# 软件安装日志
/var/log/dpkg.log
/var/log/apt/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;at&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;6.3 logrotate日志轮转&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：自动轮转、压缩、删除旧日志。&lt;/p&gt;
&lt;p&gt;配置文件：&lt;code&gt;/etc/logrotate.conf&lt;/code&gt; 和 &lt;code&gt;/etc/logrotate.d/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例配置&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] &amp;amp;&amp;amp; kill -USR1 `cat /var/run/nginx.pid`
    endscript
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;手动测试&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 测试轮转
sudo logrotate -d /etc/logrotate.conf

# 强制轮转
sudo logrotate -f /etc/logrotate.d/nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、定时任务&lt;/h2&gt;
&lt;h3&gt;7.1 cron定时任务&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：按时间计划执行命令。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 编辑当前用户的cron
&amp;lt;a id=&quot;crontab&quot;&amp;gt;&amp;lt;/a&amp;gt;
crontab -e

# 查看当前用户的cron
crontab -l

# 编辑指定用户的cron
sudo crontab -u username -e

# 删除所有cron
crontab -r
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;cron格式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;分 时 日 月 周 命令
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;时间字段说明&lt;/strong&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;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;分&lt;/td&gt;
&lt;td&gt;0-59&lt;/td&gt;
&lt;td&gt;分钟&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;时&lt;/td&gt;
&lt;td&gt;0-23&lt;/td&gt;
&lt;td&gt;小时（24小时制）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日&lt;/td&gt;
&lt;td&gt;1-31&lt;/td&gt;
&lt;td&gt;日期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;月&lt;/td&gt;
&lt;td&gt;1-12&lt;/td&gt;
&lt;td&gt;月份&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;周&lt;/td&gt;
&lt;td&gt;0-7&lt;/td&gt;
&lt;td&gt;星期（0和7都是周日）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;特殊字符&lt;/strong&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;*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;任意值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;,&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列表（1,3,5）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;范围（1-5）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;步长（*/5）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;常用示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 每分钟执行
* * * * * /path/to/command

# 每小时执行
0 * * * * /path/to/command

# 每天凌晨3点执行
0 3 * * * /path/to/command

# 每周一执行
0 0 * * 1 /path/to/command

# 每月1号执行
0 0 1 * * /path/to/command

# 每5分钟执行
*/5 * * * * /path/to/command

# 工作日执行
0 9 * * 1-5 /path/to/command

# 多个时间点
0 8,12,18 * * * /path/to/command
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.2 systemd定时器&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：systemd版本的定时任务。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;创建定时器&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 创建服务文件
sudo vim /etc/systemd/system/backup.service
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Backup Service

[Service]
Type=oneshot
ExecStart=/home/user/backup.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;# 创建定时器文件
sudo vim /etc/systemd/system/backup.timer
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Run backup daily

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;启用定时器&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl enable backup.timer
sudo systemctl start backup.timer

# 查看定时器状态
sudo systemctl status backup.timer
systemctl list-timers
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;at&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;7.3 at一次性任务&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：在指定时间执行一次命令。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装at
sudo apt install at

# 5分钟后执行
echo &quot;command&quot; | at now + 5 minutes

# 指定时间执行
echo &quot;command&quot; | at 10:00 PM

# 交互式
at 10:00 PM
at&amp;gt; command
at&amp;gt; Ctrl+D

# 查看待执行任务
atq

# 删除任务
atrm 1
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、实战：部署Web应用&lt;/h2&gt;
&lt;h3&gt;8.1 创建应用服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo vim /etc/systemd/system/webapp.service
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Web Application
After=network.target mysql.service

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/app
ExecStart=/usr/bin/node /var/www/app/server.js
Restart=always
RestartSec=5
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.2 启用服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl enable webapp
sudo systemctl start webapp
sudo systemctl status webapp
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.3 配置日志轮转&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo vim /etc/logrotate.d/webapp
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;/var/log/webapp/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    postrotate
        systemctl reload webapp
    endscript
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.4 配置定时备份&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;crontab -e
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;添加：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 每天凌晨3点备份数据库
0 3 * * * /home/user/backup.sh &amp;gt;&amp;gt; /var/log/backup.log 2&amp;gt;&amp;amp;1

# 每周日凌晨清理日志
0 0 * * 0 find /var/log -name &quot;*.gz&quot; -mtime +30 -delete
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;九、总结&lt;/h2&gt;
&lt;p&gt;本章学习了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;进程查看&lt;/strong&gt;：ps、top、htop、pgrep&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进程控制&lt;/strong&gt;：kill、killall、pkill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进程优先级&lt;/strong&gt;：nice、renice&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;后台进程&lt;/strong&gt;：nohup、screen、tmux&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;systemd服务&lt;/strong&gt;：systemctl管理服务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日志管理&lt;/strong&gt;：journalctl、logrotate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;定时任务&lt;/strong&gt;：cron、systemd定时器、at&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;下一章预告&lt;/strong&gt;：《Linux操作大全（七）：Shell脚本编程详解》&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;如有疑问或发现错误，欢迎在评论区指出！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux操作大全（七）：Shell脚本编程详解</title><link>https://emilia520.icu/posts/linux-manual-07-shell/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-07-shell/</guid><description>全面讲解Shell脚本编程，包括变量、流程控制、函数、数组等知识，让你轻松编写自动化脚本</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（七）：Shell脚本编程详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第七篇，详细讲解Shell脚本编程。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;sed&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;一、Shell基础&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;sh&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.1 什么是Shell？&lt;/h3&gt;
&lt;p&gt;Shell是Linux的命令解释器，接收用户输入的命令并执行。常见的Shell：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;bash&lt;/strong&gt;：最常用，Ubuntu默认&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sh&lt;/strong&gt;：Bourne Shell，最古老的Shell&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zsh&lt;/strong&gt;：功能更强，macOS默认&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fish&lt;/strong&gt;：用户友好，自动补全&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;sh&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.2 第一个Shell脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# 这是注释
&amp;lt;a id=&quot;echo&quot;&amp;gt;&amp;lt;/a&amp;gt;
echo &quot;Hello, World!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;#!/bin/bash&lt;/code&gt;：指定解释器（必须在第一行）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#&lt;/code&gt;：注释&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo&lt;/code&gt;：输出文字&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;运行脚本&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 方法1：添加执行权限
chmod +x script.sh
./script.sh

# 方法2：使用bash命令
bash script.sh
&amp;lt;a id=&quot;source&quot;&amp;gt;&amp;lt;/a&amp;gt;

# 方法3：使用source命令（在当前shell执行）
source script.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;二、变量&lt;/h2&gt;
&lt;h3&gt;2.1 变量定义&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 定义变量（等号两边不能有空格！）
name=&quot;Linux&quot;
version=24
PI=3.14159

# 使用变量
echo $name
echo ${name}

# 变量拼接
greeting=&quot;Hello, ${name}!&quot;
echo $greeting
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 特殊变量&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;脚本名: $0&quot;
echo &quot;第一个参数: $1&quot;
echo &quot;第二个参数: $2&quot;
echo &quot;参数个数: $#&quot;
echo &quot;所有参数: $@&quot;
echo &quot;所有参数: $*&quot;
echo &quot;上一个命令的退出状态: $$&quot;
echo &quot;后台运行的最后一个进程ID: $!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 环境变量&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有环境变量
env

&amp;lt;a id=&quot;export&quot;&amp;gt;&amp;lt;/a&amp;gt;
# 设置环境变量
export MY_VAR=&quot;hello&quot;

# 永久设置（添加到~/.bashrc）
echo &apos;export MY_VAR=&quot;hello&quot;&apos; &amp;gt;&amp;gt; ~/.bashrc
source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常用环境变量&lt;/strong&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;$HOME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;用户家目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;$USER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;当前用户名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;$PATH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;命令搜索路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;$SHELL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;当前Shell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;$PWD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;当前目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;$HOSTNAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;主机名&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;2.4 只读变量&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;readonly PI=3.14159
PI=3.14  # 报错：readonly variable
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.5 删除变量&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;unset name
echo $name  # 输出为空
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、字符串操作&lt;/h2&gt;
&lt;h3&gt;3.1 字符串定义&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 单引号（原样输出）
str1=&apos;Hello $name&apos;

# 双引号（解析变量）
str2=&quot;Hello $name&quot;

echo $str1  # 输出：Hello $name
echo $str2  # 输出：Hello Linux
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 字符串长度&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;str=&quot;Hello&quot;
echo ${#str}  # 输出：5
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 字符串截取&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;str=&quot;Hello World&quot;

# 从第1个字符开始截取5个
echo ${str:0:5}  # 输出：Hello

# 从第6个字符开始截取
echo ${str:6}    # 输出：World
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.4 字符串替换&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;str=&quot;Hello World World&quot;

# 替换第一个
echo ${str/World/Linux}  # 输出：Hello Linux World

# 替换所有
echo ${str//World/Linux} # 输出：Hello Linux Linux

# 删除匹配
echo ${str/World/}       # 输出：Hello  World
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、数组&lt;/h2&gt;
&lt;h3&gt;4.1 定义数组&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 方法1
arr=(apple banana cherry)

# 方法2
arr[0]=apple
arr[1]=banana
arr[2]=cherry
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.2 访问数组&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 访问单个元素
echo ${arr[0]}    # 输出：apple
echo ${arr[1]}    # 输出：banana

# 访问所有元素
echo ${arr[@]}    # 输出：apple banana cherry

# 数组长度
echo ${#arr[@]}   # 输出：3
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.3 数组操作&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 添加元素
arr+=(date elderberry)

# 删除元素
unset arr[1]

# 切片
echo ${arr[@]:1:2}  # 从索引1开始取2个
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、运算符&lt;/h2&gt;
&lt;h3&gt;5.1 算术运算&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;a=10
b=20

# 方法1：expr（注意空格）
c=`expr $a + $b`

# 方法2：$((...))
c=$((a + b))
c=$((a - b))
c=$((a * b))
c=$((a / b))
c=$((a % b))

# 方法3：let
let c=a+b

echo $c
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.2 关系运算&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;a=10
b=20

if [ $a -eq $b ]; then echo &quot;相等&quot;; fi
if [ $a -ne $b ]; then echo &quot;不相等&quot;; fi
if [ $a -gt $b ]; then echo &quot;大于&quot;; fi
if [ $a -lt $b ]; then echo &quot;小于&quot;; fi
if [ $a -ge $b ]; then echo &quot;大于等于&quot;; fi
if [ $a -le $b ]; then echo &quot;小于等于&quot;; fi
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 字符串运算&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;a=&quot;hello&quot;
b=&quot;world&quot;

if [ $a = $b ]; then echo &quot;相等&quot;; fi
if [ $a != $b ]; then echo &quot;不相等&quot;; fi
if [ -z $a ]; then echo &quot;为空&quot;; fi
if [ -n $a ]; then echo &quot;不为空&quot;; fi
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.4 逻辑运算&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;a=10
b=20

if [ $a -lt 100 ] &amp;amp;&amp;amp; [ $b -gt 100 ]; then echo &quot;AND&quot;; fi
if [ $a -lt 100 ] || [ $b -gt 100 ]; then echo &quot;OR&quot;; fi
if [ ! false ]; then echo &quot;NOT&quot;; fi
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;六、流程控制&lt;/h2&gt;
&lt;h3&gt;6.1 if语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基本if
if [ condition ]; then
    commands
fi

# if-else
if [ condition ]; then
    commands1
else
    commands2
fi

# if-elif-else
if [ condition1 ]; then
    commands1
elif [ condition2 ]; then
    commands2
else
    commands3
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
age=18

if [ $age -ge 18 ]; then
    echo &quot;成年人&quot;
else
    echo &quot;未成年人&quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.2 case语句&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
fruit=&quot;apple&quot;

case $fruit in
    &quot;apple&quot;)
        echo &quot;苹果&quot;
        ;;
    &quot;banana&quot;)
        echo &quot;香蕉&quot;
        ;;
    &quot;cherry&quot;)
        echo &quot;樱桃&quot;
        ;;
    *)
        echo &quot;未知水果&quot;
        ;;
esac
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 for循环&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基本for
for i in 1 2 3 4 5; do
    echo $i
done

# 范围
for i in {1..5}; do
    echo $i
done

# C风格
for ((i=0; i&amp;lt;5; i++)); do
    echo $i
done

# 遍历数组
arr=(apple banana cherry)
for item in ${arr[@]}; do
    echo $item
done

# 遍历文件
for file in /home/user/*.txt; do
    echo $file
done
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.4 while循环&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
count=0

while [ $count -lt 5 ]; do
    echo $count
    count=$((count + 1))
done
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.5 until循环&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
count=0

until [ $count -ge 5 ]; do
    echo $count
    count=$((count + 1))
done
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.6 break和continue&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# break：跳出循环
for i in {1..10}; do
    if [ $i -eq 5 ]; then
        break
    fi
    echo $i
done

# continue：跳过本次循环
for i in {1..10}; do
    if [ $i -eq 5 ]; then
        continue
    fi
    echo $i
done
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、函数&lt;/h2&gt;
&lt;h3&gt;7.1 函数定义&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 方法1
function greet() {
    echo &quot;Hello, $1!&quot;
}

# 方法2
greet() {
    echo &quot;Hello, $1!&quot;
}

# 调用函数
greet &quot;Linux&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.2 函数参数&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;add() {
    local result=$(($1 + $2))
    echo $result
}

sum=$(add 10 20)
echo $sum  # 输出：30
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.3 函数返回值&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 方法1：return（只能返回0-255）
is_even() {
    if [ $(($1 % 2)) -eq 0 ]; then
        return 0
    else
        return 1
    fi
}

if is_even 4; then
    echo &quot;偶数&quot;
fi

# 方法2：echo
get_name() {
    echo &quot;Linux&quot;
}

name=$(get_name)
echo $name
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.4 局部变量&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;my_func() {
    local local_var=&quot;I am local&quot;
    global_var=&quot;I am global&quot;
}

my_func
echo $local_var  # 输出为空
echo $global_var # 输出：I am global
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、输入输出&lt;/h2&gt;
&lt;h3&gt;8.1 读取输入&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基本读取
echo &quot;请输入名字：&quot;
read name
echo &quot;你好，$name&quot;

# 带提示的读取
read -p &quot;请输入名字：&quot; name

# 读取密码（不显示）
read -s -p &quot;请输入密码：&quot; password

# 读取多个变量
read -p &quot;输入姓名和年龄：&quot; name age
echo &quot;$name, $age岁&quot;

# 设置超时
read -t 5 -p &quot;5秒内输入：&quot; input
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.2 输出重定向&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 覆盖写入文件
echo &quot;Hello&quot; &amp;gt; file.txt

# 追加写入文件
echo &quot;World&quot; &amp;gt;&amp;gt; file.txt

# 错误重定向
command 2&amp;gt; error.log

# 同时重定向标准输出和错误
command &amp;gt; output.log 2&amp;gt;&amp;amp;1
command &amp;amp;&amp;gt; all.log

# 丢弃输出
command &amp;gt; /dev/null 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.3 管道&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基本管道
ls -la | grep &quot;.txt&quot;

# 多级管道
cat file.txt | grep &quot;error&quot; | wc -l
&amp;lt;a id=&quot;sort&quot;&amp;gt;&amp;lt;/a&amp;gt;

# 排序去重
cat file.txt | sort | uniq
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;九、实战脚本&lt;/h2&gt;
&lt;h3&gt;9.1 自动备份脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# backup.sh - 自动备份脚本

BACKUP_DIR=&quot;/backup&quot;
DATE=$(date +%Y%m%d_%H%M%S)
SOURCE_DIR=&quot;/home/user/data&quot;

# 创建备份目录
mkdir -p $BACKUP_DIR

# 执行备份
tar -czf $BACKUP_DIR/backup_$DATE.tar.gz $SOURCE_DIR

# 删除7天前的备份
find $BACKUP_DIR -name &quot;backup_*.tar.gz&quot; -mtime +7 -delete

echo &quot;备份完成：backup_$DATE.tar.gz&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.2 系统监控脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# monitor.sh - 系统监控脚本

echo &quot;=== 系统信息 ===&quot;
echo &quot;主机名：$(hostname)&quot;
echo &quot;系统：$(uname -a)&quot;
echo &quot;运行时间：$(uptime)&quot;

echo &quot;&quot;
echo &quot;=== CPU使用率 ===&quot;
&amp;lt;a id=&quot;awk&quot;&amp;gt;&amp;lt;/a&amp;gt;
top -bn1 | grep &quot;Cpu(s)&quot; | awk &apos;{print $2}&apos;

echo &quot;&quot;
echo &quot;=== 内存使用 ===&quot;
free -h

echo &quot;&quot;
echo &quot;=== 磁盘使用 ===&quot;
df -h

echo &quot;&quot;
echo &quot;=== 网络连接 ===&quot;
ss -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.3 用户管理脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# user_manage.sh - 用户管理脚本

case $1 in
    &quot;add&quot;)
        read -p &quot;用户名：&quot; username
        read -s -p &quot;密码：&quot; password
        sudo useradd -m $username
        echo &quot;$username:$password&quot; | sudo chpasswd
        echo &quot;用户 $username 创建成功&quot;
        ;;
    &quot;delete&quot;)
        read -p &quot;用户名：&quot; username
        sudo userdel -r $username
        echo &quot;用户 $username 删除成功&quot;
        ;;
    &quot;list&quot;)
        cat /etc/passwd | grep -v nologin | grep -v /bin/false
        ;;
    *)
        echo &quot;用法：$0 {add|delete|list}&quot;
        ;;
esac
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.4 服务监控脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# service_check.sh - 服务监控脚本

SERVICES=&quot;nginx mysql sshd&quot;

for service in $SERVICES; do
    if systemctl is-active --quiet $service; then
        echo &quot;✅ $service 运行中&quot;
    else
        echo &quot;❌ $service 未运行&quot;
        # 自动重启
        sudo systemctl start $service
        echo &quot;已尝试重启 $service&quot;
    fi
done
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.5 日志分析脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# log_analysis.sh - 日志分析脚本

LOG_FILE=&quot;/var/log/nginx/access.log&quot;

echo &quot;=== 访问量统计 ===&quot;
wc -l $LOG_FILE

echo &quot;&quot;
echo &quot;=== 最常访问的IP ===&quot;
awk &apos;{print $1}&apos; $LOG_FILE | sort | uniq -c | sort -rn | head -10

echo &quot;&quot;
echo &quot;=== 最常访问的页面 ===&quot;
awk &apos;{print $7}&apos; $LOG_FILE | sort | uniq -c | sort -rn | head -10

echo &quot;&quot;
echo &quot;=== 404错误 ===&quot;
grep &quot;404&quot; $LOG_FILE | wc -l
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十、常用工具命令&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;xargs&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.1 参数传递：xargs&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;xargs&lt;/code&gt; 将标准输入转换为命令参数。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本用法
echo &quot;file1 file2 file3&quot; | xargs rm

# 指定每次传递的参数个数
echo &quot;1 2 3 4 5 6&quot; | xargs -n 2 echo

# 处理包含空格的文件名
find . -name &quot;*.txt&quot; -print0 | xargs -0 rm

# 交互式确认
echo &quot;file1 file2&quot; | xargs -p rm

# 替换占位符
echo &quot;file1 file2&quot; | xargs -I {} cp {} /backup/

# 与find配合
find . -name &quot;*.log&quot; | xargs grep &quot;error&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 批量删除文件
find /tmp -name &quot;*.tmp&quot; | xargs rm -f

# 批量修改权限
find . -name &quot;*.sh&quot; | xargs chmod +x

# 批量压缩
find . -name &quot;*.txt&quot; | xargs tar -czf texts.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;tee&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.2 输出分流：tee&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;tee&lt;/code&gt; 将输出同时显示到屏幕和写入文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本用法：输出到屏幕和文件
echo &quot;Hello&quot; | tee output.txt

# 追加到文件
echo &quot;World&quot; | tee -a output.txt

# 配合管道使用
ls -la | tee file_list.txt | wc -l

# 记录命令输出
ping google.com | tee ping_log.txt

# 同时记录标准输出和错误输出
command 2&amp;gt;&amp;amp;1 | tee output.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装软件时记录日志
sudo apt install nginx | tee install.log

# 编译时记录输出
make 2&amp;gt;&amp;amp;1 | tee build.log

# 查看并保存磁盘信息
df -h | tee disk_info.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;watch&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.3 循环监控：watch&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;watch&lt;/code&gt; 定期执行命令并刷新显示，用于实时监控。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 每2秒刷新（默认）
watch df -h

# 每5秒刷新
watch -n 5 free -h

# 高亮变化的部分
watch -d df -h

# 监控文件变化
watch -d -n 1 ls -la /var/log/

# 监控网络连接
watch -n 1 &apos;ss -tuln | wc -l&apos;

# 监控进程
watch -n 1 &apos;ps aux | grep nginx&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 监控磁盘使用
watch df -h

# 监控内存
watch -n 1 free -h

# 监控日志增长
watch -n 1 wc -l /var/log/syslog

# 监控Docker容器
watch docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十一、调试技巧&lt;/h2&gt;
&lt;h3&gt;10.1 调试选项&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 语法检查
bash -n script.sh

# 跟踪执行
bash -x script.sh

# 在脚本中开启调试
#!/bin/bash
set -x  # 开启调试
# ... 脚本内容
set +x  # 关闭调试
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;10.2 错误处理&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
set -e  # 遇到错误立即退出
set -u  # 使用未定义变量报错
set -o pipefail  # 管道中任意命令失败则失败

# 或者使用trap
trap &apos;echo &quot;错误发生在第 $LINENO 行&quot;&apos; ERR
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十一、总结&lt;/h2&gt;
&lt;p&gt;本章学习了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Shell基础&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;/li&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;：if、case、for、while&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;函数&lt;/strong&gt;：定义、参数、返回值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输入输出&lt;/strong&gt;：read、重定向、管道&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实战脚本&lt;/strong&gt;：备份、监控、日志分析&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;下一章预告&lt;/strong&gt;：《Linux操作大全（八）：磁盘与存储管理详解》&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;如有疑问或发现错误，欢迎在评论区指出！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux操作大全（八）：磁盘与存储管理详解</title><link>https://emilia520.icu/posts/linux-manual-08-disk/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-08-disk/</guid><description>全面讲解Linux磁盘管理、文件系统、RAID、LVM等知识，让你轻松管理Linux存储</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（八）：磁盘与存储管理详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第八篇，详细讲解磁盘管理、文件系统、RAID、LVM等知识。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、磁盘基础概念&lt;/h2&gt;
&lt;h3&gt;1.1 磁盘类型&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;HDD（机械硬盘）&lt;/td&gt;
&lt;td&gt;容量大、价格便宜、速度慢&lt;/td&gt;
&lt;td&gt;存储大量数据&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSD（固态硬盘）&lt;/td&gt;
&lt;td&gt;速度快、价格贵、寿命有限&lt;/td&gt;
&lt;td&gt;系统盘、频繁读写&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVMe SSD&lt;/td&gt;
&lt;td&gt;速度极快、价格最贵&lt;/td&gt;
&lt;td&gt;高性能应用&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.2 磁盘命名规则&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;SATA/SAS&lt;/td&gt;
&lt;td&gt;/dev/sd[a-z]&lt;/td&gt;
&lt;td&gt;/dev/sda, /dev/sdb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVMe&lt;/td&gt;
&lt;td&gt;/dev/nvme[0-9]n[0-9]&lt;/td&gt;
&lt;td&gt;/dev/nvme0n1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;虚拟磁盘&lt;/td&gt;
&lt;td&gt;/dev/vd[a-z]&lt;/td&gt;
&lt;td&gt;/dev/vda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;分区&lt;/td&gt;
&lt;td&gt;/dev/sda[1-9]&lt;/td&gt;
&lt;td&gt;/dev/sda1, /dev/sda2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;dd&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;二、磁盘信息查看&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;lsblk&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.1 lsblk命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：列出块设备。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有块设备
lsblk

# 显示文件系统类型
lsblk -f

# 显示详细信息
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE

# 显示所有设备（包括空设备）
lsblk -a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;输出示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   100G  0 disk 
├─sda1   8:1    0    50G  0 part /
├─sda2   8:2    0    40G  0 part /home
└─sda3   8:3    0    10G  0 part [SWAP]
sdb      8:16   0   500G  0 disk 
└─sdb1   8:17   0   500G  0 part /data
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;fdisk&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.2 fdisk命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：磁盘分区工具（MBR分区表）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看磁盘分区
sudo fdisk -l

# 查看指定磁盘
sudo fdisk -l /dev/sda

# 进入分区工具
sudo fdisk /dev/sdb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;fdisk交互命令&lt;/strong&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;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;n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;新建分区&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;删除分区&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&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;l&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出分区类型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;保存并退出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;不保存退出&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;parted&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.3 parted命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：支持GPT分区表的分区工具。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看分区
sudo parted /dev/sdb print

# 进入交互模式
sudo parted /dev/sdb

# 直接创建分区
sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sdb mkpart primary ext4 0% 50%
sudo parted /dev/sdb mkpart primary ext4 50% 100%
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;df&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.4 df命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：显示磁盘空间使用情况。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有文件系统
df -h

# 查看指定目录
df -h /home

# 显示文件系统类型
df -Th

# 显示inode使用情况
df -i
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;du&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.5 du命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：显示目录或文件的磁盘使用情况。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前目录
du -sh .

# 查看指定目录
du -sh /home/user

# 查看所有子目录
du -h --max-depth=1

# 按大小排序
du -h --max-depth=1 | sort -hr

# 排除某些目录
du -h --max-depth=1 --exclude=&apos;.git&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、文件系统&lt;/h2&gt;
&lt;h3&gt;3.1 常见文件系统&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;ext4&lt;/td&gt;
&lt;td&gt;Linux默认，稳定可靠&lt;/td&gt;
&lt;td&gt;通用场景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XFS&lt;/td&gt;
&lt;td&gt;高性能，支持大文件&lt;/td&gt;
&lt;td&gt;大数据、数据库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Btrfs&lt;/td&gt;
&lt;td&gt;支持快照、压缩&lt;/td&gt;
&lt;td&gt;高级存储&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NTFS&lt;/td&gt;
&lt;td&gt;Windows兼容&lt;/td&gt;
&lt;td&gt;双系统&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FAT32&lt;/td&gt;
&lt;td&gt;跨平台兼容&lt;/td&gt;
&lt;td&gt;U盘、移动硬盘&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;3.2 创建文件系统（格式化）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 格式化为ext4
&amp;lt;a id=&quot;mkfs&quot;&amp;gt;&amp;lt;/a&amp;gt;
sudo mkfs.ext4 /dev/sdb1

# 格式化为XFS
sudo mkfs.xfs /dev/sdb1

# 格式化为NTFS
sudo mkfs.ntfs /dev/sdb1

# 格式化为FAT32
sudo mkfs.vfat -F 32 /dev/sdb1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 检查文件系统&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 检查ext4
sudo fsck /dev/sdb1
sudo fsck.ext4 /dev/sdb1

# 检查XFS
sudo xfs_repair /dev/sdb1

# 自动修复
sudo fsck -y /dev/sdb1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：检查前必须卸载文件系统！&lt;/p&gt;
&lt;h3&gt;3.4 调整文件系统大小&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 扩展ext4
sudo resize2fs /dev/sdb1

&amp;lt;a id=&quot;mount&quot;&amp;gt;&amp;lt;/a&amp;gt;
# 扩展XFS（只能在线扩展）
sudo xfs_growfs /mount/point
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、挂载与卸载&lt;/h2&gt;
&lt;h3&gt;4.1 挂载命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基本挂载
sudo mount /dev/sdb1 /mnt/data

# 指定文件系统类型
sudo mount -t ext4 /dev/sdb1 /mnt/data

# 只读挂载
sudo mount -o ro /dev/sdb1 /mnt/data

# 读写挂载
sudo mount -o rw /dev/sdb1 /mnt/data

# 挂载ISO文件
sudo mount -o loop image.iso /mnt/iso

# 挂载NFS
sudo mount -t nfs server:/share /mnt/nfs
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.2 卸载命令&lt;/h3&gt;
&lt;p&gt;&amp;lt;a id=&quot;umount&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 卸载
sudo umount /mnt/data

# 卸载设备
sudo umount /dev/sdb1

# 强制卸载
sudo umount -l /mnt/data

# 卸载所有
sudo umount -a
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.3 开机自动挂载&lt;/h3&gt;
&lt;p&gt;编辑 &lt;code&gt;/etc/fstab&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看UUID
&amp;lt;a id=&quot;blkid&quot;&amp;gt;&amp;lt;/a&amp;gt;
sudo blkid

# 编辑fstab
sudo vim /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;fstab格式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;UUID=xxx  /mount/point  ext4  defaults  0  0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;字段说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;设备（UUID或路径）&lt;/li&gt;
&lt;li&gt;挂载点&lt;/li&gt;
&lt;li&gt;文件系统类型&lt;/li&gt;
&lt;li&gt;挂载选项&lt;/li&gt;
&lt;li&gt;dump备份（0=不备份）&lt;/li&gt;
&lt;li&gt;fsck检查顺序（0=不检查，1=根分区，2=其他）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;UUID=12345678-1234-1234-1234-123456789012  /data  ext4  defaults  0  2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;测试fstab&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 测试（不实际挂载）
sudo mount -a
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、交换空间（Swap）&lt;/h2&gt;
&lt;h3&gt;5.1 什么是Swap？&lt;/h3&gt;
&lt;p&gt;Swap是磁盘上的一块空间，当物理内存不足时，系统会将部分内存数据交换到Swap中。&lt;/p&gt;
&lt;h3&gt;5.2 创建Swap分区&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建Swap分区
&amp;lt;a id=&quot;swapon&quot;&amp;gt;&amp;lt;/a&amp;gt;
sudo mkswap /dev/sdb2

# 启用Swap
sudo swapon /dev/sdb2

# 查看Swap状态
swapon --show
free -h
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 创建Swap文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建Swap文件
sudo fallocate -l 4G /swapfile

# 设置权限
sudo chmod 600 /swapfile

# 格式化为Swap
sudo mkswap /swapfile

# 启用
sudo swapon /swapfile
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.4 Swap配置&lt;/h3&gt;
&lt;p&gt;编辑 &lt;code&gt;/etc/fstab&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/swapfile  none  swap  sw  0  0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;调整Swappiness（系统使用Swap的倾向）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前值
cat /proc/sys/vm/swappiness

# 临时修改
sudo sysctl vm.swappiness=10

# 永久修改
echo &quot;vm.swappiness=10&quot; | sudo tee -a /etc/sysctl.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;六、RAID配置&lt;/h2&gt;
&lt;h3&gt;6.1 RAID级别&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;th&gt;特点&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RAID0&lt;/td&gt;
&lt;td&gt;条带化&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;高性能，无冗余&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAID1&lt;/td&gt;
&lt;td&gt;镜像&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;数据安全，容量减半&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAID5&lt;/td&gt;
&lt;td&gt;分布式奇偶校验&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;性能和安全平衡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAID6&lt;/td&gt;
&lt;td&gt;双奇偶校验&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;允许2块磁盘故障&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAID10&lt;/td&gt;
&lt;td&gt;镜像+条带&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;高性能+高安全&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;6.2 软RAID配置（mdadm）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装mdadm
sudo apt install mdadm

# 创建RAID1
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

# 创建RAID5
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

# 查看RAID状态
cat /proc/mdstat
sudo mdadm --detail /dev/md0

# 保存配置
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、LVM（逻辑卷管理）&lt;/h2&gt;
&lt;h3&gt;7.1 什么是LVM？&lt;/h3&gt;
&lt;p&gt;LVM（Logical Volume Manager）允许灵活管理磁盘空间，可以动态扩展和缩小分区。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LVM概念&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PV（Physical Volume）&lt;/strong&gt;：物理卷，实际的磁盘或分区&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VG（Volume Group）&lt;/strong&gt;：卷组，由多个PV组成&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LV（Logical Volume）&lt;/strong&gt;：逻辑卷，从VG中划分&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7.2 创建LVM&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 1. 创建物理卷
sudo pvcreate /dev/sdb1 /dev/sdc1

# 查看物理卷
sudo pvs
sudo pvdisplay

# 2. 创建卷组
sudo vgcreate my_vg /dev/sdb1 /dev/sdc1

# 查看卷组
sudo vgs
sudo vgdisplay

# 3. 创建逻辑卷
sudo lvcreate -L 100G -n my_lv my_vg

# 或使用百分比
sudo lvcreate -l 100%FREE -n my_lv my_vg

# 查看逻辑卷
sudo lvs
sudo lvdisplay

# 4. 格式化
sudo mkfs.ext4 /dev/my_vg/my_lv

# 5. 挂载
sudo mount /dev/my_vg/my_lv /mnt/data
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.3 扩展LVM&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 1. 添加新磁盘到卷组
sudo pvcreate /dev/sdd1
sudo vgextend my_vg /dev/sdd1

# 2. 扩展逻辑卷
sudo lvextend -L +50G /dev/my_vg/my_lv

# 3. 扩展文件系统
sudo resize2fs /dev/my_vg/my_lv

# 或一步完成
sudo lvextend -L +50G --resize /dev/my_vg/my_lv
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.4 缩小LVM&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 1. 卸载
sudo umount /mnt/data

# 2. 检查文件系统
sudo fsck /dev/my_vg/my_lv

# 3. 缩小文件系统
sudo resize2fs /dev/my_vg/my_lv 50G

# 4. 缩小逻辑卷
sudo lvreduce -L 50G /dev/my_vg/my_lv

# 5. 重新挂载
sudo mount /dev/my_vg/my_lv /mnt/data
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.5 LVM快照&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建快照
sudo lvcreate -L 10G -s -n my_lv_snap /dev/my_vg/my_lv

# 恢复快照
sudo lvconvert --merge /dev/my_vg/my_lv_snap
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、实战：配置数据存储&lt;/h2&gt;
&lt;h3&gt;8.1 配置新磁盘&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看新磁盘
lsblk

# 创建分区
sudo fdisk /dev/sdb
# n -&amp;gt; p -&amp;gt; 1 -&amp;gt; 回车 -&amp;gt; 回车 -&amp;gt; w

# 格式化
sudo mkfs.ext4 /dev/sdb1

# 创建挂载点
sudo mkdir /data

# 挂载
sudo mount /dev/sdb1 /data

# 添加到fstab
echo &apos;UUID=xxx  /data  ext4  defaults  0  2&apos; | sudo tee -a /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.2 配置LVM存储池&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 准备磁盘
sudo pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1

# 创建卷组
sudo vgcreate storage_vg /dev/sdb1 /dev/sdc1 /dev/sdd1

# 创建逻辑卷
sudo lvcreate -L 500G -n data_lv storage_vg

# 格式化挂载
sudo mkfs.xfs /dev/storage_vg/data_lv
sudo mount /dev/storage_vg/data_lv /data

# 配置fstab
echo &apos;/dev/storage_vg/data_lv  /data  xfs  defaults  0  2&apos; | sudo tee -a /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;九、总结&lt;/h2&gt;
&lt;p&gt;本章学习了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;磁盘基础&lt;/strong&gt;：类型、命名规则&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;磁盘信息&lt;/strong&gt;：lsblk、fdisk、df、du&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件系统&lt;/strong&gt;：ext4、XFS、创建、检查&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;挂载卸载&lt;/strong&gt;：mount、umount、fstab&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Swap&lt;/strong&gt;：创建Swap分区和文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAID&lt;/strong&gt;：各级别特点、配置方法&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LVM&lt;/strong&gt;：PV、VG、LV、扩展、快照&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;下一章预告&lt;/strong&gt;：《Linux操作大全（九）：系统监控与性能优化详解》&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;如有疑问或发现错误，欢迎在评论区指出！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux操作大全（九）：系统监控与性能优化详解</title><link>https://emilia520.icu/posts/linux-manual-09-monitor/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-09-monitor/</guid><description>全面讲解Linux系统监控工具、性能指标、优化技巧等知识，让你轻松掌控系统性能</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（九）：系统监控与性能优化详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第九篇，详细讲解系统监控工具和性能优化技巧。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、系统监控工具&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;uptime&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.1 uptime命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：显示系统运行时间和负载。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uptime
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;输出示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 20:36:51 up 10 days,  3:25,  2 users,  load average: 0.08, 0.03, 0.01
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;负载解读&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1分钟平均负载&lt;/strong&gt;：0.08&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5分钟平均负载&lt;/strong&gt;：0.03&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;15分钟平均负载&lt;/strong&gt;：0.01&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;负载标准&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CPU核心数&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;1核&lt;/td&gt;
&lt;td&gt;&amp;lt; 1.0&lt;/td&gt;
&lt;td&gt;&amp;gt; 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4核&lt;/td&gt;
&lt;td&gt;&amp;lt; 4.0&lt;/td&gt;
&lt;td&gt;&amp;gt; 4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8核&lt;/td&gt;
&lt;td&gt;&amp;lt; 8.0&lt;/td&gt;
&lt;td&gt;&amp;gt; 8.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;free&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.2 free命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：显示内存使用情况。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本查看
free -h

# 详细信息
free -hl

# 持续监控
free -h -s 2  # 每2秒刷新
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;输出示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.1G        3.2G        256M        2.4G        5.1G
Swap:          2.0G        0.0B        2.0G
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;内存说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;total&lt;/strong&gt;：总内存&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;used&lt;/strong&gt;：已使用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;free&lt;/strong&gt;：空闲内存&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;shared&lt;/strong&gt;：共享内存&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;buff/cache&lt;/strong&gt;：缓冲/缓存&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;available&lt;/strong&gt;：可用内存（free + buff/cache）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;vmstat&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.3 vmstat命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：虚拟内存统计。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本查看
vmstat

# 每2秒刷新，共10次
vmstat 2 10

# 显示详细信息
vmstat -w

# 显示磁盘统计
vmstat -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;输出说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;procs&lt;/strong&gt;：进程
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;r&lt;/code&gt;：运行队列&lt;/li&gt;
&lt;li&gt;&lt;code&gt;b&lt;/code&gt;：阻塞进程&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;memory&lt;/strong&gt;：内存
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;swpd&lt;/code&gt;：虚拟内存使用&lt;/li&gt;
&lt;li&gt;&lt;code&gt;free&lt;/code&gt;：空闲内存&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buff&lt;/code&gt;：缓冲&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cache&lt;/code&gt;：缓存&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;swap&lt;/strong&gt;：交换
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;si&lt;/code&gt;：从磁盘交换到内存&lt;/li&gt;
&lt;li&gt;&lt;code&gt;so&lt;/code&gt;：从内存交换到磁盘&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;io&lt;/strong&gt;：磁盘
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bi&lt;/code&gt;：读入&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bo&lt;/code&gt;：写出&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;system&lt;/strong&gt;：系统
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;in&lt;/code&gt;：中断&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cs&lt;/code&gt;：上下文切换&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cpu&lt;/strong&gt;：CPU
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;us&lt;/code&gt;：用户空间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sy&lt;/code&gt;：内核空间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt;：空闲&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wa&lt;/code&gt;：等待IO&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;a id=&quot;iostat&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.4 iostat命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：IO统计。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 基本查看
iostat

# 每2秒刷新
iostat 2

# 显示详细信息
iostat -x

# 显示指定设备
iostat -x sda
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;sar&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.5 sar命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：系统活动报告。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装sysstat
sudo apt install sysstat

# 启用数据收集
sudo systemctl enable sysstat
sudo systemctl start sysstat

# CPU使用率
sar -u

# 内存使用
sar -r

# 磁盘IO
sar -b

# 网络统计
sar -n DEV

# 指定时间范围
sar -u -s 10:00:00 -e 12:00:00

# 历史数据
sar -u -f /var/log/sysstat/sa25
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;dmesg&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.6 dmesg命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：显示内核环形缓冲区消息，用于查看系统启动信息、硬件检测、驱动加载、内核错误等。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看所有内核消息
dmesg

# 查看最近的内核消息（最后20行）
dmesg | tail -20

# 查看最近的内核消息（最后50行）
dmesg | tail -50

# 实时监控内核消息
dmesg -w

# 查看错误和警告信息
dmesg | grep -i error
dmesg | grep -i warn

# 查看特定设备信息（如USB设备）
dmesg | grep -i usb

# 查看磁盘相关消息
dmesg | grep -i sda

# 查看内存相关消息
dmesg | grep -i memory

# 查看网络相关消息
dmesg | grep -i eth

# 查看启动时间信息
dmesg | grep -i &quot;linux version&quot;

# 查看硬件信息
dmesg | grep -i &quot;detected&quot;

# 清空内核环形缓冲区（需要root权限）
sudo dmesg -c

# 以人类可读的时间戳显示
dmesg -T

# 以纪元时间戳显示
dmesg -e

# 查看指定级别的消息（0-7）
dmesg -l err          # 只显示错误
dmesg -l warn         # 只显示警告
dmesg -l info         # 只显示信息
dmesg -l debug        # 只显示调试信息
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;输出格式说明&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[时间戳] 设备名: 消息内容
[    0.000000] Linux version 5.15.0-generic (buildd@lcy02-amd64-005)
[    1.234567] usb 1-1: New USB device found, idVendor=1d6b, idProduct=0002
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;常见使用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;系统故障排查&lt;/strong&gt;：查看是否有硬件错误或驱动问题&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;USB设备诊断&lt;/strong&gt;：检查USB设备是否被正确识别&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;磁盘问题检测&lt;/strong&gt;：查看磁盘IO错误&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;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意事项&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dmesg显示的是内核消息，需要root权限才能查看完整信息&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;-T&lt;/code&gt; 选项可以显示人类可读的时间戳&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;-w&lt;/code&gt; 选项可以实时监控新的内核消息&lt;/li&gt;
&lt;li&gt;内核环形缓冲区大小有限，旧消息会被新消息覆盖&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;二、CPU监控与优化&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;lscpu&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.1 CPU信息查看&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看CPU信息
lscpu

# 查看CPU型号
cat /proc/cpuinfo | grep &quot;model name&quot; | head -1

# 查看CPU核心数
nproc

# 查看CPU使用率
top -bn1 | grep &quot;Cpu(s)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 CPU监控工具&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# top（实时监控）
top

# htop（增强版）
htop

# mpstat（多核CPU统计）
mpstat -P ALL 2

# pidstat（进程CPU统计）
pidstat -u 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 CPU优化技巧&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 调整进程优先级&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 降低优先级
nice -n 10 command

# 提高优先级
sudo nice -n -10 command
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. CPU亲和性&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 绑定进程到指定CPU核心
taskset -c 0,1 command

# 修改运行中进程的CPU亲和性
taskset -pc 0,1 1234
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. 内核参数调优&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看调度器
cat /proc/sys/kernel/sched_min_granularity_ns

# 调整调度器参数
echo 10000000 | sudo tee /proc/sys/kernel/sched_min_granularity_ns
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、内存监控与优化&lt;/h2&gt;
&lt;h3&gt;3.1 内存信息查看&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看内存信息
free -h

# 查看详细内存信息
cat /proc/meminfo

# 查看内存使用最多的进程
ps aux --sort=-%mem | head -10
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 内存监控工具&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# vmstat
vmstat 2

# sar
sar -r 2

# pidstat
pidstat -r 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 内存优化技巧&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 清理缓存&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 清理页面缓存
sudo sync; echo 1 | sudo tee /proc/sys/vm/drop_caches

# 清理目录项和inode
sudo sync; echo 2 | sudo tee /proc/sys/vm/drop_caches

# 清理所有缓存
sudo sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. 调整Swappiness&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前Swappiness
cat /proc/sys/vm/swappiness

# 临时修改（减少Swap使用）
echo 10 | sudo tee /proc/sys/vm/swappiness

# 永久修改
echo &quot;vm.swappiness=10&quot; | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. 内存过量提交&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前设置
cat /proc/sys/vm/overcommit_memory

# 设置为启发式（默认）
echo 0 | sudo tee /proc/sys/vm/overcommit_memory

# 设置为总是允许
echo 1 | sudo tee /proc/sys/vm/overcommit_memory

# 设置为不允许过量
echo 2 | sudo tee /proc/sys/vm/overcommit_memory
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、磁盘监控与优化&lt;/h2&gt;
&lt;h3&gt;4.1 磁盘监控工具&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# iostat
iostat -x 2

# iotop（需要root）
sudo iotop

# iostat详细信息
iostat -xdm 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.2 磁盘优化技巧&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 调整IO调度器&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前调度器
cat /sys/block/sda/queue/scheduler

# 修改调度器
echo &quot;noop&quot; | sudo tee /sys/block/sda/queue/scheduler
echo &quot;deadline&quot; | sudo tee /sys/block/sda/queue/scheduler
echo &quot;cfq&quot; | sudo tee /sys/block/sda/queue/scheduler

# SSD推荐noop或deadline
# HDD推荐cfq
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. 调整预读大小&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前预读大小
sudo blockdev --getra /dev/sda

# 修改预读大小（4096=2MB）
sudo blockdev --setra 4096 /dev/sda
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. 调整文件系统参数&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 挂载时使用noatime（不记录访问时间）
sudo mount -o remount,noatime /

# 在fstab中永久设置
UUID=xxx  /  ext4  defaults,noatime  0  1
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、网络监控与优化&lt;/h2&gt;
&lt;h3&gt;5.1 网络监控工具&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# iftop（需要安装）
sudo apt install iftop
sudo iftop

# nethogs（按进程显示流量）
sudo apt install nethogs
sudo nethogs

# ss（查看连接）
ss -tuln

# netstat
netstat -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.2 网络优化技巧&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 调整TCP缓冲区&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看当前设置
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem

# 调整缓冲区大小
echo &quot;net.ipv4.tcp_rmem = 4096 87380 16777216&quot; | sudo tee -a /etc/sysctl.conf
echo &quot;net.ipv4.tcp_wmem = 4096 65536 16777216&quot; | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. 启用TCP窗口缩放&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;net.ipv4.tcp_window_scaling = 1&quot; | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. 调整连接队列&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;net.core.somaxconn = 65535&quot; | sudo tee -a /etc/sysctl.conf
echo &quot;net.ipv4.tcp_max_syn_backlog = 65535&quot; | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;六、综合监控工具&lt;/h2&gt;
&lt;h3&gt;6.1 nmon&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装
sudo apt install nmon

# 运行
nmon
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;nmon快捷键&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;c&lt;/code&gt;：CPU&lt;/li&gt;
&lt;li&gt;&lt;code&gt;m&lt;/code&gt;：内存&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d&lt;/code&gt;：磁盘&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n&lt;/code&gt;：网络&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t&lt;/code&gt;：进程&lt;/li&gt;
&lt;li&gt;&lt;code&gt;q&lt;/code&gt;：退出&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6.2 dstat&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装
sudo apt install dstat

# 基本使用
dstat

# 指定监控项
dstat -cdnm

# 输出到文件
dstat -cdnm --output stats.csv
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 glances&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装
sudo apt install glances

# 运行
glances

# Web模式
glances -w
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、性能优化实战&lt;/h2&gt;
&lt;h3&gt;7.1 Web服务器优化&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 调整文件描述符限制
echo &quot;* soft nofile 65535&quot; | sudo tee -a /etc/security/limits.conf
echo &quot;* hard nofile 65535&quot; | sudo tee -a /etc/security/limits.conf

# 调整内核参数
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt; EOF
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 32768
EOF
sudo sysctl -p
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.2 数据库优化&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 调整共享内存
echo &quot;kernel.shmmax = 68719476736&quot; | sudo tee -a /etc/sysctl.conf
echo &quot;kernel.shmall = 4294967296&quot; | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 调整文件系统
sudo mount -o remount,noatime,barrier=0 /
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.3 容器环境优化&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 调整cgroup内存限制
echo &quot;vm.overcommit_memory = 1&quot; | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 调整网络桥接
echo &quot;net.bridge.bridge-nf-call-iptables = 1&quot; | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、监控脚本示例&lt;/h2&gt;
&lt;h3&gt;8.1 系统监控脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# system_monitor.sh

echo &quot;====================&quot;
echo &quot;系统监控报告&quot;
echo &quot;====================&quot;
echo &quot;&quot;

echo &quot;【系统信息】&quot;
echo &quot;主机名: $(hostname)&quot;
echo &quot;系统: $(uname -r)&quot;
echo &quot;运行时间: $(uptime -p)&quot;
echo &quot;&quot;

echo &quot;【CPU使用率】&quot;
top -bn1 | grep &quot;Cpu(s)&quot; | awk &apos;{print &quot;用户: &quot;$2&quot;%  系统: &quot;$4&quot;%  空闲: &quot;$8&quot;%&quot;}&apos;
echo &quot;&quot;

echo &quot;【内存使用】&quot;
free -h | awk &apos;/Mem:/ {print &quot;总计: &quot;$2&quot;  已用: &quot;$3&quot;  空闲: &quot;$4&quot;  可用: &quot;$7}&apos;
echo &quot;&quot;

echo &quot;【磁盘使用】&quot;
df -h | awk &apos;$5+0 &amp;gt; 80 {print &quot;⚠️  &quot;$6&quot; 使用率: &quot;$5}&apos;
echo &quot;&quot;

echo &quot;【负载信息】&quot;
echo &quot;1分钟: $(cat /proc/loadavg | awk &apos;{print $1}&apos;)&quot;
echo &quot;5分钟: $(cat /proc/loadavg | awk &apos;{print $2}&apos;)&quot;
echo &quot;15分钟: $(cat /proc/loadavg | awk &apos;{print $3}&apos;)&quot;
echo &quot;&quot;

echo &quot;【Top 5 CPU进程】&quot;
ps aux --sort=-%cpu | head -6
echo &quot;&quot;

echo &quot;【Top 5 内存进程】&quot;
ps aux --sort=-%mem | head -6
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.2 告警脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# alert.sh

# CPU使用率阈值
CPU_THRESHOLD=80

# 内存使用率阈值
MEM_THRESHOLD=90

# 磁盘使用率阈值
DISK_THRESHOLD=85

# 检查CPU
CPU_USAGE=$(top -bn1 | grep &quot;Cpu(s)&quot; | awk &apos;{print $2}&apos;)
if (( $(echo &quot;$CPU_USAGE &amp;gt; $CPU_THRESHOLD&quot; | bc -l) )); then
    echo &quot;⚠️ CPU使用率过高: ${CPU_USAGE}%&quot;
fi

# 检查内存
MEM_USAGE=$(free | awk &apos;/Mem:/ {printf &quot;%.0f&quot;, $3/$2*100}&apos;)
if [ $MEM_USAGE -gt $MEM_THRESHOLD ]; then
    echo &quot;⚠️ 内存使用率过高: ${MEM_USAGE}%&quot;
fi

# 检查磁盘
df -h | awk &apos;$5+0 &amp;gt; &apos;$DISK_THRESHOLD&apos; {print &quot;⚠️ &quot;$6&quot; 使用率: &quot;$5}&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十、硬件信息查看&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;lspci&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.1 PCI设备：lspci&lt;/h3&gt;
&lt;p&gt;查看PCI总线设备（显卡、网卡、声卡等）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 列出所有PCI设备
lspci

# 显示详细信息
lspci -v

# 显示更详细信息
lspci -vv

# 显示厂商和设备ID
lspci -nn

# 过滤显示（如显卡）
lspci | grep -i vga
lspci | grep -i nvidia
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看显卡型号
lspci | grep -i vga

# 查看网卡型号
lspci | grep -i network

# 查看声卡型号
lspci | grep -i audio
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;lsusb&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.2 USB设备：lsusb&lt;/h3&gt;
&lt;p&gt;查看USB设备信息。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 列出所有USB设备
lsusb

# 显示详细信息
lsusb -v

# 显示厂商和设备ID
lsusb -t
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看USB设备列表
lsusb

# 查看USB存储设备
lsusb | grep -i storage

# 查看摄像头
lsusb | grep -i camera
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;a id=&quot;sensors&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;10.3 硬件温度：sensors&lt;/h3&gt;
&lt;p&gt;查看CPU、主板等硬件温度（需安装 &lt;code&gt;lm-sensors&lt;/code&gt;）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装sensors
sudo apt install lm-sensors

# 检测硬件传感器
sudo sensors-detect

# 查看温度
sensors
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;**输出示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;coretemp-isa-0000
Adapter: ISA adapter
Core 0:       +45.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:       +43.0°C  (high = +80.0°C, crit = +100.0°C)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 监控CPU温度
watch -n 1 sensors

# 检查是否过热
sensors | grep -i temp
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十一、总结&lt;/h2&gt;
&lt;p&gt;本章学习了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;监控工具&lt;/strong&gt;：uptime、free、vmstat、iostat、sar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CPU监控&lt;/strong&gt;：lscpu、mpstat、pidstat、优化技巧&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内存监控&lt;/strong&gt;：free、vmstat、清理缓存、调整Swappiness&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;磁盘监控&lt;/strong&gt;：iostat、iotop、IO调度器、预读设置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络监控&lt;/strong&gt;：iftop、nethogs、TCP缓冲区优化&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;综合工具&lt;/strong&gt;：nmon、dstat、glances&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实战优化&lt;/strong&gt;：Web服务器、数据库、容器环境&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;下一章预告&lt;/strong&gt;：《Linux操作大全（十）：Docker与容器技术详解》&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;如有疑问或发现错误，欢迎在评论区指出！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux操作大全（十）：Docker与容器技术详解</title><link>https://emilia520.icu/posts/linux-manual-10-docker/</link><guid isPermaLink="true">https://emilia520.icu/posts/linux-manual-10-docker/</guid><description>全面讲解Docker容器技术，包括安装、镜像管理、容器操作、Docker Compose等知识，让你轻松掌握容器化部署</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Linux操作大全（十）：Docker与容器技术详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文是Linux操作大全系列的第十篇，详细讲解Docker容器技术。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、Docker基础概念&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;docker&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.1 什么是Docker？&lt;/h3&gt;
&lt;p&gt;Docker是一个开源的容器化平台，允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心概念&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;镜像（Image）&lt;/strong&gt;：只读模板，包含运行应用所需的一切&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;容器（Container）&lt;/strong&gt;：镜像的运行实例&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;仓库（Registry）&lt;/strong&gt;：存储镜像的地方（如Docker Hub）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.2 容器 vs 虚拟机&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;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;多&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;隔离性&lt;/td&gt;
&lt;td&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;MB级&lt;/td&gt;
&lt;td&gt;GB级&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;性能&lt;/td&gt;
&lt;td&gt;接近原生&lt;/td&gt;
&lt;td&gt;有损耗&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;a id=&quot;docker&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.3 Docker架构&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;┌─────────────────────────────────────┐
│            Docker Client            │
├─────────────────────────────────────┤
│            Docker Daemon            │
├─────────┬─────────┬─────────────────┤
│ Images  │Container│   Networks      │
└─────────┴─────────┴─────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;二、Docker安装&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;docker&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.1 Ubuntu安装Docker&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 更新包索引
sudo apt update

# 安装依赖
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加Docker仓库
echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null

# 安装Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

# 将当前用户加入docker组
sudo usermod -aG docker $USER

# 重新登录或运行
newgrp docker
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;docker&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.2 CentOS安装Docker&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 安装依赖
sudo yum install -y yum-utils

# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker

# 将当前用户加入docker组
sudo usermod -aG docker $USER
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 验证安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看Docker版本
docker --version

# 运行测试容器
docker run hello-world
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、镜像管理&lt;/h2&gt;
&lt;h3&gt;3.1 搜索镜像&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 搜索镜像
docker search nginx

# 指定数量
docker search --limit 10 nginx

# 按星数排序
docker search --filter=stars=100 nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 拉取镜像&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 拉取最新版
docker pull nginx

# 指定版本
docker pull nginx:1.24

# 拉取所有标签
docker pull --all-tags nginx

# 从私有仓库拉取
docker pull registry.example.com/myapp:v1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.3 查看镜像&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 列出本地镜像
docker images

# 显示所有镜像（包括中间层）
docker images -a

# 只显示镜像ID
docker images -q

# 显示摘要
docker images --digests

# 过滤镜像
docker images --filter &quot;dangling=true&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.4 删除镜像&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 删除指定镜像
docker rmi nginx

# 删除指定版本
docker rmi nginx:1.24

# 强制删除
docker rmi -f nginx

# 删除所有未使用的镜像
docker image prune

# 删除所有镜像
docker rmi $(docker images -q)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.5 镜像标签&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 给镜像打标签
docker tag nginx:latest myrepo/nginx:v1

# 推送镜像
docker push myrepo/nginx:v1
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、容器操作&lt;/h2&gt;
&lt;h3&gt;4.1 创建并运行容器&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基本运行
docker run nginx

# 后台运行
docker run -d nginx

# 指定名称
docker run -d --name my-nginx nginx

# 端口映射
docker run -d -p 8080:80 nginx

# 多端口映射
docker run -d -p 8080:80 -p 8443:443 nginx

# 环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=secret mysql

# 挂载卷
docker run -d -v /host/path:/container/path nginx

# 重启策略
docker run -d --restart=always nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.2 查看容器&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看运行中的容器
docker ps

# 查看所有容器
docker ps -a

# 只显示容器ID
docker ps -q

# 显示大小
docker ps -s

# 过滤容器
docker ps --filter &quot;status=exited&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.3 容器生命周期&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 启动容器
docker start my-nginx

# 停止容器
docker stop my-nginx

# 重启容器
docker restart my-nginx

# 暂停容器
docker pause my-nginx

# 恢复容器
docker unpause my-nginx

# 删除容器
docker rm my-nginx

# 强制删除运行中的容器
docker rm -f my-nginx

# 删除所有停止的容器
docker container prune
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.4 进入容器&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 进入运行中的容器（推荐）
docker exec -it my-nginx /bin/bash

# 进入容器（旧方法）
docker attach my-nginx

# 在容器中执行命令
docker exec my-nginx ls /usr/share/nginx/html
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.5 查看容器日志&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看日志
docker logs my-nginx

# 实时查看日志
docker logs -f my-nginx

# 显示最后100行
docker logs --tail 100 my-nginx

# 显示时间戳
docker logs -t my-nginx

# 指定时间范围
docker logs --since 2026-05-25T10:00:00 my-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.6 容器资源限制&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 限制内存
docker run -d --memory=512m nginx

# 限制CPU
docker run -d --cpus=1.5 nginx

# 限制CPU份额
docker run -d --cpu-shares=512 nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、数据卷管理&lt;/h2&gt;
&lt;h3&gt;5.1 数据卷类型&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;Bind Mount&lt;/td&gt;
&lt;td&gt;绑定主机目录&lt;/td&gt;
&lt;td&gt;开发环境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volume&lt;/td&gt;
&lt;td&gt;Docker管理的数据卷&lt;/td&gt;
&lt;td&gt;生产环境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tmpfs&lt;/td&gt;
&lt;td&gt;内存中的临时文件系统&lt;/td&gt;
&lt;td&gt;敏感数据&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;5.2 创建数据卷&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建数据卷
docker volume create my-volume

# 查看数据卷
docker volume ls

# 查看数据卷详情
docker volume inspect my-volume

# 删除数据卷
docker volume rm my-volume

# 删除所有未使用的数据卷
docker volume prune
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 使用数据卷&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 使用命名数据卷
docker run -d -v my-volume:/data nginx

# 使用绑定挂载
docker run -d -v /host/path:/container/path nginx

# 只读挂载
docker run -d -v my-volume:/data:ro nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;六、网络管理&lt;/h2&gt;
&lt;h3&gt;6.1 网络类型&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;bridge&lt;/td&gt;
&lt;td&gt;默认网络，容器间通信&lt;/td&gt;
&lt;td&gt;单机多容器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;host&lt;/td&gt;
&lt;td&gt;使用主机网络&lt;/td&gt;
&lt;td&gt;高性能需求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;无网络&lt;/td&gt;
&lt;td&gt;隔离环境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;overlay&lt;/td&gt;
&lt;td&gt;跨主机通信&lt;/td&gt;
&lt;td&gt;集群环境&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;6.2 创建网络&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 创建桥接网络
docker network create my-network

# 创建指定子网的网络
docker network create --subnet=172.20.0.0/16 my-network

# 查看网络
docker network ls

# 查看网络详情
docker network inspect my-network

# 删除网络
docker network rm my-network
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 使用网络&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 运行容器并连接到网络
docker run -d --network my-network --name my-nginx nginx

# 连接现有容器到网络
docker network connect my-network my-nginx

# 断开网络
docker network disconnect my-network my-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、Dockerfile&lt;/h2&gt;
&lt;h3&gt;7.1 基本语法&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基础镜像
FROM ubuntu:22.04

# 维护者信息
LABEL maintainer=&quot;user@example.com&quot;

# 设置工作目录
WORKDIR /app

# 复制文件
COPY . .

# 安装依赖
RUN apt update &amp;amp;&amp;amp; apt install -y python3

# 暴露端口
EXPOSE 8080

# 设置环境变量
ENV APP_ENV=production

# 启动命令
CMD [&quot;python3&quot;, &quot;app.py&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.2 常用指令&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FROM&lt;/td&gt;
&lt;td&gt;基础镜像&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RUN&lt;/td&gt;
&lt;td&gt;执行命令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD&lt;/td&gt;
&lt;td&gt;容器启动命令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ENTRYPOINT&lt;/td&gt;
&lt;td&gt;入口点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;COPY&lt;/td&gt;
&lt;td&gt;复制文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ADD&lt;/td&gt;
&lt;td&gt;复制文件（支持URL、解压）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WORKDIR&lt;/td&gt;
&lt;td&gt;设置工作目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ENV&lt;/td&gt;
&lt;td&gt;设置环境变量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EXPOSE&lt;/td&gt;
&lt;td&gt;暴露端口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VOLUME&lt;/td&gt;
&lt;td&gt;数据卷挂载点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USER&lt;/td&gt;
&lt;td&gt;指定用户&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;7.3 构建镜像&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 基本构建
docker build -t myapp .

# 指定标签
docker build -t myapp:v1 .

# 指定Dockerfile
docker build -f Dockerfile.prod -t myapp .

# 不使用缓存
docker build --no-cache -t myapp .

# 构建参数
docker build --build-arg APP_VERSION=1.0 -t myapp .
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.4 多阶段构建&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD [&quot;nginx&quot;, &quot;-g&quot;, &quot;daemon off;&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、Docker Compose&lt;/h2&gt;
&lt;p&gt;&amp;lt;a id=&quot;docker&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.1 什么是Docker Compose？&lt;/h3&gt;
&lt;p&gt;Docker Compose是一个工具，用于定义和运行多容器Docker应用。&lt;/p&gt;
&lt;p&gt;&amp;lt;a id=&quot;docker&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.2 安装Docker Compose&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 下载Docker Compose
sudo curl -L &quot;https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose

# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;docker&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a id=&quot;docker-compose&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.3 docker-compose.yml示例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;version: &apos;3.8&apos;

services:
  web:
    build: .
    ports:
      - &quot;8080:80&quot;
    depends_on:
      - db
    environment:
      - DATABASE_URL=mysql://user:password@db:3306/mydb
    volumes:
      - .:/app
    networks:
      - my-network

  db:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=mydb
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - my-network

  redis:
    image: redis:alpine
    ports:
      - &quot;6379:6379&quot;
    networks:
      - my-network

volumes:
  db-data:

networks:
  my-network:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;a id=&quot;docker&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h3&gt;8.4 Docker Compose命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 启动所有服务
docker-compose up -d

# 停止所有服务
docker-compose down

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 重建服务
docker-compose up -d --build

# 进入容器
docker-compose exec web bash

# 扩展服务
docker-compose up -d --scale web=3
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;九、Docker实战&lt;/h2&gt;
&lt;h3&gt;9.1 部署Web应用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# docker-compose.yml
version: &apos;3.8&apos;

services:
  app:
    build: .
    ports:
      - &quot;3000:3000&quot;
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    depends_on:
      - db
    restart: always

  db:
    image: postgres:14
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=mydb
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: always

  nginx:
    image: nginx:alpine
    ports:
      - &quot;80:80&quot;
      - &quot;443:443&quot;
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/nginx/certs
    depends_on:
      - app
    restart: always

volumes:
  postgres-data:
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.2 部署微服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;version: &apos;3.8&apos;

services:
  gateway:
    image: nginx:alpine
    ports:
      - &quot;80:80&quot;
    volumes:
      - ./gateway.conf:/etc/nginx/nginx.conf
    depends_on:
      - user-service
      - order-service

  user-service:
    build: ./user-service
    environment:
      - DB_HOST=user-db
    depends_on:
      - user-db

  order-service:
    build: ./order-service
    environment:
      - DB_HOST=order-db
    depends_on:
      - order-db

  user-db:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=secret
    volumes:
      - user-db-data:/var/lib/mysql

  order-db:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=secret
    volumes:
      - order-db-data:/var/lib/mysql

volumes:
  user-db-data:
  order-db-data:
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十、Docker安全&lt;/h2&gt;
&lt;h3&gt;10.1 安全最佳实践&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 1. 不要以root运行容器
docker run --user 1000:1000 myapp

# 2. 只读文件系统
docker run --read-only myapp

# 3. 限制资源
docker run --memory=512m --cpus=1 myapp

# 4. 禁用特权
docker run --security-opt=no-new-privileges myapp

# 5. 使用最小基础镜像
FROM alpine:3.18
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;10.2 镜像安全扫描&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 使用Trivy扫描
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
    aquasec/trivy image myapp:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;十一、总结&lt;/h2&gt;
&lt;p&gt;本章学习了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Docker基础&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;/li&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;Dockerfile&lt;/strong&gt;：语法、指令、多阶段构建&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker Compose&lt;/strong&gt;：定义、命令、实战&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全&lt;/strong&gt;：最佳实践、镜像扫描&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;系列总结&lt;/h2&gt;
&lt;p&gt;恭喜你完成了Linux操作大全系列的学习！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;回顾全部10章内容&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;基础入门&lt;/strong&gt;：Linux概念、发行版、安装&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;/li&gt;
&lt;li&gt;&lt;strong&gt;软件包管理&lt;/strong&gt;：apt、yum、snap、源码编译&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络配置&lt;/strong&gt;：IP配置、DNS、防火墙、SSH&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进程服务&lt;/strong&gt;：进程管理、systemd、定时任务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shell脚本&lt;/strong&gt;：变量、流程控制、函数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;磁盘存储&lt;/strong&gt;：分区、文件系统、RAID、LVM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;系统监控&lt;/strong&gt;：监控工具、性能优化&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker容器&lt;/strong&gt;：镜像、容器、Compose&lt;/li&gt;
&lt;/ol&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;遇到问题多查官方文档&lt;/li&gt;
&lt;li&gt;参与开源项目，积累实战经验&lt;/li&gt;
&lt;li&gt;持续学习，Linux技术在不断发展&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;相关资源&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://linux.vbird.org/&quot;&gt;鸟哥的Linux私房菜&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linuxcool.com/&quot;&gt;Linux命令大全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.docker.com/&quot;&gt;Docker官方文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;如有疑问或发现错误，欢迎在评论区指出！&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>👁️ YOLO学习笔记 — 开篇</title><link>https://emilia520.icu/posts/yolo-learning-plan/</link><guid isPermaLink="true">https://emilia520.icu/posts/yolo-learning-plan/</guid><description>正式开始学习YOLO目标检测！边做边学，记录从零到能用的全过程～</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;👁️ YOLO学习笔记 · 开篇&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;YOLO&lt;/strong&gt; — You Only Look Once，实时目标检测的扛把子！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本公主决定入坑目标检测啦！💪&lt;/p&gt;
&lt;h2&gt;📋 学习方向&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] YOLO环境搭建与配置&lt;/li&gt;
&lt;li&gt;[ ] 理解YOLO检测原理&lt;/li&gt;
&lt;li&gt;[ ] 数据集标注与处理&lt;/li&gt;
&lt;li&gt;[ ] 模型训练与调参&lt;/li&gt;
&lt;li&gt;[ ] 模型导出与部署&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;搞一个能用的检测项目！&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;🎯 目标&lt;/h2&gt;
&lt;p&gt;边做边学，不整虚的，什么时候学到能独立搞个小项目就算毕业✨&lt;/p&gt;
&lt;p&gt;哼，YOLO什么的，本公主一定能搞定的！😤🔥&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;学习笔记陆续更新中...&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>E4 从C代码到二进制程序（一）——编译器的工作流水线</title><link>https://emilia520.icu/posts/yi-sheng-yi-xin-e4-compiler-p1/</link><guid isPermaLink="true">https://emilia520.icu/posts/yi-sheng-yi-xin-e4-compiler-p1/</guid><description>一文讲透C代码如何变成二进制程序：预处理→编译→优化→目标代码生成，带你看懂编译器的完整工作流水线！</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;E4 从C代码到二进制程序（一）——编译器的工作流水线&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本笔记是一生一芯计划的学习记录，主要参考了&quot;一生一芯&quot;课程E4章节的内容。&lt;/p&gt;
&lt;p&gt;写个 &lt;code&gt;hello.c&lt;/code&gt; 按一下 &lt;code&gt;gcc&lt;/code&gt; 就出可执行文件了，但你知道中间发生了什么吗？🤔&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📌 这篇笔记讲了啥&lt;/h2&gt;
&lt;p&gt;编译器把C代码变成可执行二进制程序，不是一步到位的，而是经过一条&lt;strong&gt;五阶段的流水线&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;C源文件 → 预处理 → 编译(词法/语法/语义分析) → 中间代码生成 → 编译优化 → 目标代码生成 → 汇编/链接 → 可执行文件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这篇（一）先讲前面五个环节：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;预处理&lt;/strong&gt; — 头文件展开、宏替换、条件编译...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编译·词法分析&lt;/strong&gt; — 把代码拆成一个个&quot;单词&quot;（token）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编译·语法分析&lt;/strong&gt; — 把token组织成树状结构（AST）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编译·语义分析&lt;/strong&gt; — 检查类型对不对、逻辑合不合法&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中间代码生成&lt;/strong&gt; — 翻译成编译器内部的语言（LLVM IR）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编译优化&lt;/strong&gt; — 让生成的代码跑得更快更小&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;目标代码生成&lt;/strong&gt; — 翻译成CPU真正能懂的汇编指令&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;每一个阶段都只依赖前一个阶段的结果，互不干扰，这就是&lt;strong&gt;编译器的分层设计&lt;/strong&gt;思想。&lt;/p&gt;
&lt;p&gt;（汇编和链接留在下一篇讲）&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;1️⃣ 预处理（Preprocessing）&lt;/h2&gt;
&lt;p&gt;预处理是在正式编译之前，对源代码做的一波&lt;strong&gt;文本层面的处理&lt;/strong&gt;。它不涉及任何语法检查，纯粹是&quot;文本替换+文件拼接&quot;。&lt;/p&gt;
&lt;h3&gt;预处理具体做了啥&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;头文件包含&lt;/strong&gt; — &lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt; 会把 stdio.h 的内容整个粘贴进来&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;宏替换&lt;/strong&gt; — &lt;code&gt;#define MAX 100&lt;/code&gt; 会把代码里所有的 &lt;code&gt;MAX&lt;/code&gt; 替换成 &lt;code&gt;100&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;去掉注释&lt;/strong&gt; — &lt;code&gt;//&lt;/code&gt; 和 &lt;code&gt;/* */&lt;/code&gt; 全部删除&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;连接断行符&lt;/strong&gt; — 行尾的 &lt;code&gt;\&lt;/code&gt; 会把下一行拼接上来&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;处理条件编译&lt;/strong&gt; — &lt;code&gt;#ifdef&lt;/code&gt; / &lt;code&gt;#else&lt;/code&gt; / &lt;code&gt;#endif&lt;/code&gt; 决定哪些代码留下、哪些删除&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;处理 &lt;code&gt;#&lt;/code&gt; 字符串化操作符&lt;/strong&gt; — &lt;code&gt;#x&lt;/code&gt; 变成 &lt;code&gt;&quot;x&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;处理 &lt;code&gt;##&lt;/code&gt; 标识符连接操作符&lt;/strong&gt; — &lt;code&gt;a##b&lt;/code&gt; 变成 &lt;code&gt;ab&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;💡 举个例子你就懂了&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// 原始代码
#include &amp;lt;stdio.h&amp;gt;
#define PI 3.14159
#define AREA(r) (PI * (r) * (r))

int main() {
    double s = AREA(5);
    printf(&quot;s = %f\n&quot;, s);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预处理后变成（可以理解成&quot;展开后的代码&quot;）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// stdio.h 的几千行内容被粘贴到这里...
int main() {
    double s = (3.14159 * (5) * (5));
    printf(&quot;s = %f\n&quot;, s);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;怎么查看预处理结果？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcc -E a.c            # 输出到终端
gcc -E a.c -o a.i     # 保存到 .i 文件
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;.i&lt;/code&gt; 文件就是预处理后的结果，你会看到原来短短几行的代码变成了几百上千行——就是因为头文件被展开了。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;🔍 gcc是如何找头文件的？&lt;/h3&gt;
&lt;p&gt;gcc有一套&lt;strong&gt;默认的头文件搜索路径&lt;/strong&gt;，可以用下面命令查看：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo | gcc -v -E -x c - 2&amp;gt;&amp;amp;1 | grep &quot;search starts&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出大概长这样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;...&amp;gt; search starts here:
  /usr/lib/gcc/x86_64-linux-gnu/9/include
  /usr/local/include
  /usr/include/x86_64-linux-gnu
  /usr/include
End of search list.
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;头文件搜索顺序&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;gcc 先找 -I 指定的目录 → 再找系统默认目录
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;尖括号 vs 双引号&lt;/h4&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;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;只搜索 &lt;code&gt;-I&lt;/code&gt; 目录 + 系统目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;#include &quot;myheader.h&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;优先搜索当前目录&lt;/strong&gt;，找不到再去系统目录&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;-I&lt;/code&gt; 的用途&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;给项目添加自定义头文件搜索目录。比如你的项目有个 &lt;code&gt;include/&lt;/code&gt; 文件夹：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcc -I./include a.c
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样gcc就会先去 &lt;code&gt;./include&lt;/code&gt; 里找头文件，&lt;strong&gt;优先级比系统目录还高&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;🔍 交叉编译时头文件有啥不同？&lt;/h3&gt;
&lt;p&gt;一生一芯的目标是生成 &lt;strong&gt;RISC-V&lt;/strong&gt; 架构的代码，所以要用交叉编译器：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;riscv64-linux-gnu-gcc -E a.c
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这时候预处理展开的&lt;strong&gt;不再是 x86 的头文件&lt;/strong&gt;，而是 &lt;strong&gt;RISC-V 架构专用的标准库头文件&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;而且gcc会自动定义 &lt;strong&gt;RISC-V 专属宏&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#define __riscv 1
#define __riscv64 1
#define __riscv_xlen 64
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;➡️ 预处理阶段就已经标记好目标CPU架构了，后续的编译都会基于这个架构生成对应指令。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.i&lt;/code&gt; 文件里&lt;strong&gt;完全没有&lt;/strong&gt; x86 架构的宏、类型、头文件，是一份&lt;strong&gt;纯 RISC-V 架构的预处理代码&lt;/strong&gt;。&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;想知道编译器预定义了哪些宏？&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo | gcc -dM -E - | sort
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会输出一大串预定义宏，比如 &lt;code&gt;__linux__&lt;/code&gt;、&lt;code&gt;__x86_64__&lt;/code&gt; 等等，足足几百个！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;2️⃣ 编译（Compilation）—— 核心阶段&lt;/h2&gt;
&lt;p&gt;编译阶段其实是三个子阶段的组合：&lt;strong&gt;词法分析 → 语法分析 → 语义分析&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;可以用 &lt;code&gt;clang&lt;/code&gt; 来单独观察每个阶段都在做什么。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么用clang不用gcc？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因为clang（LLVM的前端）提供了很多调试选项，可以dump出各个阶段的中间结果，特别适合学习！gcc也能做到，但不如clang方便。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;2.1 词法分析（Lexical Analysis）&lt;/h3&gt;
&lt;p&gt;词法分析的工作是&lt;strong&gt;把源代码拆成一个个 token（单词）&lt;/strong&gt;，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;标识符 — &lt;code&gt;main&lt;/code&gt;、&lt;code&gt;printf&lt;/code&gt;、&lt;code&gt;x&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;关键字 — &lt;code&gt;int&lt;/code&gt;、&lt;code&gt;return&lt;/code&gt;、&lt;code&gt;if&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;常数 — &lt;code&gt;10&lt;/code&gt;、&lt;code&gt;20&lt;/code&gt;、&lt;code&gt;3.14&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;字符串 — &lt;code&gt;&quot;z = %d\n&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;运算符 — &lt;code&gt;+&lt;/code&gt;、&lt;code&gt;-&lt;/code&gt;、&lt;code&gt;*&lt;/code&gt;、&lt;code&gt;=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;分隔符 — &lt;code&gt;{&lt;/code&gt;、&lt;code&gt;}&lt;/code&gt;、&lt;code&gt;;&lt;/code&gt;、&lt;code&gt;(&lt;/code&gt;、&lt;code&gt;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;查看词法分析的结果&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;clang -fsyntax-only -Xclang -dump-tokens a.c
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int &apos;int&apos;        [StartOfLine]  Loc=&amp;lt;a.c:3:1&amp;gt;
identifier &apos;main&apos;        [LeadingSpace] Loc=&amp;lt;a.c:3:5&amp;gt;
l_paren &apos;(&apos;             Loc=&amp;lt;a.c:3:9&amp;gt;
r_paren &apos;)&apos;             Loc=&amp;lt;a.c:3:10&amp;gt;
l_brace &apos;{&apos;             Loc=&amp;lt;a.c:3:12&amp;gt;
int &apos;int&apos;        [StartOfLine] [LeadingSpace]   Loc=&amp;lt;a.c:4:3&amp;gt;
identifier &apos;x&apos;          [LeadingSpace] Loc=&amp;lt;a.c:4:7&amp;gt;
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意到 &lt;code&gt;Loc=&amp;lt;a.c:4:7&amp;gt;&lt;/code&gt; 这种格式了吗？它记录了每个token的&lt;strong&gt;文件名:行号:列号&lt;/strong&gt;，所以编译器报错时能精准告诉你&quot;第几行第几列出错了&quot;！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一句话总结词法分析：把代码字符串切成一个个有意义的小碎片。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;2.2 语法分析（Syntax Analysis）&lt;/h3&gt;
&lt;p&gt;词法分析拿到了 token 列表，但这些 token 之间是什么关系？&lt;strong&gt;语法分析就是按照C语言的语法规则，把这些token组织成一棵树&lt;/strong&gt;——这棵树就叫&lt;strong&gt;抽象语法树（Abstract Syntax Tree, AST）&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;查看语法分析的结果&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;clang -fsyntax-only -Xclang -ast-dump a.c
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TranslationUnitDecl
└─ FunctionDecl &amp;lt;a.c:3:1, line:8:1&amp;gt; main &apos;int ()&apos;
  └─ CompoundStmt &amp;lt;line:3:12, line:8:1&amp;gt;
    ├─ DeclStmt &amp;lt;line:4:3, line:4:18&amp;gt;
    │   └─ VarDecl &amp;lt;line:4:3, col:7&amp;gt; x &apos;int&apos; cinit
    │       └─ IntegerLiteral &amp;lt;col:15&amp;gt; &apos;int&apos; 10
    │   └─ VarDecl &amp;lt;col:10, col:18&amp;gt; y &apos;int&apos; cinit
    │       └─ IntegerLiteral &amp;lt;col:18&amp;gt; &apos;int&apos; 20
    ├─ DeclStmt &amp;lt;line:5:3, line:5:16&amp;gt;
    │   └─ VarDecl &amp;lt;line:5:3, col:7&amp;gt; z &apos;int&apos; cinit
    │       └─ BinaryOperator &amp;lt;col:15, col:19&amp;gt; &apos;int&apos; &apos;+&apos;
    │           ├─ ImplicitCastExpr &amp;lt;col:15&amp;gt; &apos;int&apos; &amp;lt;LValueToRValue&amp;gt;
    │           │   └─ DeclRefExpr &amp;lt;col:15&amp;gt; &apos;int&apos; lvalue Var &apos;x&apos; &apos;int&apos;
    │           └─ ImplicitCastExpr &amp;lt;col:19&amp;gt; &apos;int&apos; &amp;lt;LValueToRValue&amp;gt;
    │               └─ DeclRefExpr &amp;lt;col:19&amp;gt; &apos;int&apos; lvalue Var &apos;y&apos; &apos;int&apos;
    └─ ReturnStmt &amp;lt;line:6:3, col:10&amp;gt;
        └─ IntegerLiteral &amp;lt;col:10&amp;gt; &apos;int&apos; 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到，&lt;code&gt;int z = x + y;&lt;/code&gt; 这一行被展开成一棵小树：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;VarDecl z
  └─ BinaryOperator &apos;+&apos;
      ├─ DeclRefExpr x
      └─ DeclRefExpr y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这棵树清晰地展示了&lt;strong&gt;变量声明、赋值、运算的层次关系&lt;/strong&gt;。后面的编译阶段就是在这棵树上做文章。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么叫&quot;抽象&quot;语法树？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因为它&lt;strong&gt;省略了&lt;/strong&gt;那些不影响语义的细节，比如分号、花括号的位置等。只保留理解程序逻辑所必需的结构信息。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;2.3 语义分析（Semantic Analysis）&lt;/h3&gt;
&lt;p&gt;AST建好了，但这里面有些信息还不够——比如&lt;strong&gt;每个表达式的类型是什么&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;语义分析就是&lt;strong&gt;给AST的每个节点打上类型标签&lt;/strong&gt;，同时检查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;类型是否匹配 — 不能把结构体赋值给整数&lt;/li&gt;
&lt;li&gt;变量是否定义 — 不能使用未定义的变量&lt;/li&gt;
&lt;li&gt;函数调用参数是否匹配 — 参数个数、类型要对&lt;/li&gt;
&lt;li&gt;运算符是否合法 — 不能对结构体做加法&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;语义分析的一个重要应用：静态程序分析&lt;/h4&gt;
&lt;p&gt;静态分析是指在&lt;strong&gt;不运行程序&lt;/strong&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;/li&gt;
&lt;li&gt;&lt;strong&gt;性能问题&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;常用静态检查命令&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# gcc 基础警告
gcc a.c -Wall

# clang 更专业的静态分析
clang a.c --analyze -Xanalyzer -analyzer-output=text
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;举个栗子🌰&lt;/h4&gt;
&lt;p&gt;假设有段&lt;strong&gt;有bug的代码&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdlib.h&amp;gt;
int main() {
    int *p = malloc(sizeof(*p) * 10);
    free(p);
    *p = 0;   // ❌ 已经释放了还在用！
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行 &lt;code&gt;clang --analyze&lt;/code&gt; 后，输出：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;a.c:6:3: warning: Use of memory after it has been freed
  *p = 0;
  ^~~~~
a.c:4:3: note: Call to &apos;malloc&apos; returns memory allocated here
  int *p = malloc(...);
  ^~~~~~~~~~~~~~~~~~~~~
a.c:5:3: note: Memory is released here
  free(p);
  ^~~~~~~
a.c:6:3: note: Use of released memory happens here
  *p = 0;
  ^~~~~
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Clang 分析器会逐行追踪代码执行流&lt;/strong&gt;，精准定位bug，还会告诉你完整的&quot;犯罪链&quot;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第4行：&lt;code&gt;malloc&lt;/code&gt; 分配了内存 ✅&lt;/li&gt;
&lt;li&gt;第5行：&lt;code&gt;free&lt;/code&gt; 释放了内存 🟡&lt;/li&gt;
&lt;li&gt;第6行：&lt;strong&gt;释放后还在用&lt;/strong&gt; ❌&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这种bug在大型项目中极其隐蔽——程序可能正常运行好几天才突然崩溃，到那时候再调试就难了！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;所以一定要重视lint工具！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一些编程初学者会觉得让编译器报告更多警告是给自己找麻烦。但事实上，&lt;strong&gt;使用lint工具的代价几乎是零&lt;/strong&gt;，却能在代码还在编写阶段就发现大量潜在问题。&lt;/p&gt;
&lt;p&gt;这些问题一旦留到运行阶段，你将要付出&lt;strong&gt;几十倍甚至上百倍的代价&lt;/strong&gt;来调试它们。大型项目都会充分利用lint工具来提升代码质量。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;📊 语法分析 vs 语义分析 快速对比&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;th&gt;错误例子&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;语法分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;检查代码&lt;strong&gt;结构格式&lt;/strong&gt;对不对&lt;/td&gt;
&lt;td&gt;括号配对、语句格式、关键字拼写&lt;/td&gt;
&lt;td&gt;&lt;code&gt;int a = ;&lt;/code&gt; 语法错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;语义分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;检查代码&lt;strong&gt;逻辑含义&lt;/strong&gt;合不合法&lt;/td&gt;
&lt;td&gt;类型匹配、变量定义、作用域&lt;/td&gt;
&lt;td&gt;&lt;code&gt;struct A a; a + 1&lt;/code&gt; 语义错误&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;实际上，Clang/GCC &lt;strong&gt;不会严格区分这两个阶段&lt;/strong&gt;——语法分析完立刻做语义分析，直接生成带类型标签的AST。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;3️⃣ 中间代码生成（Intermediate Representation）&lt;/h2&gt;
&lt;p&gt;好了，现在AST有了，类型标签也打上了。接下来编译器要做一件很聪明的事：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;把C代码翻译成一种&quot;中间语言&quot;——不针对任何特定CPU，而是面向编译器自己定义的一套虚拟指令集。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这就像是先翻译成&quot;世界语&quot;，后面再根据目标国家（x86、ARM、RISC-V）翻译成当地语言。&lt;/p&gt;
&lt;h3&gt;LLVM IR 长啥样？&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;clang -S -emit-llvm a.c
cat a.ll
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define i32 @main() {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  store i32 10, i32* %1, align 4
  store i32 20, i32* %2, align 4
  %4 = load i32, i32* %1, align 4
  %5 = load i32, i32* %2, align 4
  %6 = add nsw i32 %4, %5
  store i32 %6, i32* %3, align 4
  ...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解释一下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;%1&lt;/code&gt;、&lt;code&gt;%2&lt;/code&gt;、&lt;code&gt;%3&lt;/code&gt; 是&lt;strong&gt;虚拟寄存器&lt;/strong&gt;（不是真正的CPU寄存器）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alloca&lt;/code&gt; — 在栈上分配空间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;store&lt;/code&gt; — 存值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;load&lt;/code&gt; — 取值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add&lt;/code&gt; — 加法&lt;/li&gt;
&lt;li&gt;&lt;code&gt;call&lt;/code&gt; — 调用函数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ret&lt;/code&gt; — 返回&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;为什么要有中间代码？——LLVM的三段式架构&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;graph LR
    %% 定义样式分组：前端、中间层、后端
    subgraph Frontend[前端 frontend]
        A1[C] --&amp;gt; B1[Clang]
        A2[Fortran] --&amp;gt; B2[llvm-gcc]
        A3[Haskell] --&amp;gt; B3[GHC]
    end

    %% 中间层：LLVM IR 与 优化器
    B1 --&amp;gt; IR[LLVM IR]
    B2 --&amp;gt; IR
    B3 --&amp;gt; IR
    IR --&amp;gt; Opt[llvm-opt 优化器]
    Opt --&amp;gt; IR2[LLVM IR]

    subgraph Backend[后端 backend]
        C1[llvm-x86] --&amp;gt; D1[x86]
        C2[llvm-arm] --&amp;gt; D2[ARM]
        C3[llvm-riscv] --&amp;gt; D3[RISC-V]
    end

    %% 连接中间层与后端
    IR2 --&amp;gt; C1
    IR2 --&amp;gt; C2
    IR2 --&amp;gt; C3	
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;LLVM的核心思想：前端统一、后端可扩展&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多种编程语言 → &lt;strong&gt;同一个&lt;/strong&gt;LLVM IR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;同一个&lt;/strong&gt;LLVM IR → 多种CPU架构&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着：你只要写一次编译器后端（从IR到某款CPU），所有支持的语言（C、C++、Rust、Swift...）都能直接生成这款CPU的代码！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;编译的本质，就是依据AST的语义，把C语言的高层状态机，等价翻译成中间代码虚拟状态机，最终翻译成CPU硬件ISA的状态机。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;4️⃣ 编译优化（Optimization）&lt;/h2&gt;
&lt;p&gt;中间代码生成完之后，编译器会做一件非常核心的事：&lt;strong&gt;优化&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;优化的目的是：&lt;strong&gt;让你写代码时不用操心性能，编译器帮你搞定。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;优化正确性的铁律&lt;/h3&gt;
&lt;p&gt;编译器可以随意优化代码，但有一条&lt;strong&gt;绝对不能触碰的红线&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;优化后的程序，&lt;strong&gt;外部可观测行为必须和没优化时完全一样&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;根据C99标准（5.1.2.3节第6点），&quot;可观测行为&quot;包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对 &lt;code&gt;volatile&lt;/code&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;code&gt;printf&lt;/code&gt; / &lt;code&gt;scanf&lt;/code&gt;）— &lt;strong&gt;必须和没优化时一致&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;只要满足这三点，编译器想怎么折腾都行。&lt;/p&gt;
&lt;h3&gt;常见的优化技术举例&lt;/h3&gt;
&lt;h4&gt;① 常量传播&lt;/h4&gt;
&lt;p&gt;变量取值是确定的常数，直接代入计算：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 优化前                    // 优化后
int a = 1;                  int a = 1;
int b = a + 2;              int b = 3;
printf(&quot;%d\n&quot;, b * 3);      printf(&quot;%d\n&quot;, 9);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编译器直接在编译期就算出 &lt;code&gt;9&lt;/code&gt; 了，运行时根本不用算！&lt;/p&gt;
&lt;h4&gt;② 死代码消除&lt;/h4&gt;
&lt;p&gt;对于不可达的代码或不再使用的变量，直接删掉：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 优化前                            // 优化后
#define DEBUG 0                     #define DEBUG 0
int fun(int x) {                    int fun(int x) {
  int a = x + 3;                      return x / 2;
  if (DEBUG) {                      }
    printf(&quot;a = %d\n&quot;, a);
  }
  return x / 2;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;DEBUG&lt;/code&gt; 是 &lt;code&gt;0&lt;/code&gt;，&lt;code&gt;if(0)&lt;/code&gt; 里面的代码永远不会执行——直接删掉！连 &lt;code&gt;a&lt;/code&gt; 这个变量都不需要了。&lt;/p&gt;
&lt;h4&gt;③ 消除冗余操作&lt;/h4&gt;
&lt;p&gt;没被读取就被覆盖的赋值，删掉：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 优化前                    // 优化后
int a;                      int a;
a = 3;                      f();
a = f();                    a = 10;
a = 7;
a = 10;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;a = 3&lt;/code&gt;、&lt;code&gt;a = 7&lt;/code&gt; 还没来得及用就被覆盖了——纯属浪费CPU时间，删了！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意：&lt;code&gt;f()&lt;/code&gt; 不能被优化掉！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;编译器不知道 &lt;code&gt;f()&lt;/code&gt; 内部做了什么——它可能打印了东西、修改了全局变量、写入了文件。删掉它会改变程序行为，违反优化铁律。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;④ 代码强度削减&lt;/h4&gt;
&lt;p&gt;用更简单的运算替代复杂的运算：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 优化前                    // 优化后
int x = a[i * 4];           int x = a[i &amp;lt;&amp;lt; 2];
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;乘法 &lt;code&gt;*4&lt;/code&gt; 和左移 &lt;code&gt;&amp;lt;&amp;lt;2&lt;/code&gt; 结果一样，但&lt;strong&gt;移位比乘法快几十倍&lt;/strong&gt;！&lt;/p&gt;
&lt;h4&gt;⑤ 提取公共子表达式&lt;/h4&gt;
&lt;p&gt;多次计算的相同表达式，只算一次：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 优化前                    // 优化后
int x = a * b - 1;          int temp = a * b;
int y = a * b * 2;          int x = temp - 1;
                            int y = temp * 2;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;a * b&lt;/code&gt; 算了两次 → 改成都用 &lt;code&gt;temp&lt;/code&gt;，只算一次。&lt;/p&gt;
&lt;h4&gt;⑥ 循环不变代码外提&lt;/h4&gt;
&lt;p&gt;每次循环结果都一样的东西，提到循环外面：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 优化前                               // 优化后
int a = f1();                          int x = f1() + 2;
for (i = 0; i &amp;lt; 10; i++) {            for (i = 0; i &amp;lt; 10; i++) {
  int x = a + 2;                        int y = f2(x);
  int y = f2(x);                        sum += y + i;
  sum += y + i;                       }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;a + 2&lt;/code&gt; 在循环10次里结果完全一样 → 提到外面算一次就够了！&lt;/p&gt;
&lt;h4&gt;⑦ 函数内联&lt;/h4&gt;
&lt;p&gt;小函数直接展开在调用处，省去函数调用的开销：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 优化前                    // 优化后
int f1(int x, int y) {      int f1(int x, int y) {
  return x + y;               return x + y;
}                           }
int f2(int x) {             int f2(int x) {
  return f1(x, 3);            return x + 3;  // 直接展开！
}                           }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;函数调用需要压栈、跳转、返回——对于只有一行代码的小函数来说，调用开销比函数本身还大，内联展开完美解决这个问题。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;优化等级怎么选？&lt;/h3&gt;
&lt;p&gt;编译器提供了不同的优化等级，让开发者在&lt;strong&gt;性能、代码大小、编译时间&lt;/strong&gt;之间做选择。&lt;/p&gt;
&lt;h4&gt;按性能排序（从快到慢）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;-Ofast &amp;gt; -O3 &amp;gt; -O2 &amp;gt; -O1 &amp;gt; -Og &amp;gt; -O0
&lt;/code&gt;&lt;/pre&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;-O0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;无任何优化&lt;/strong&gt;，默认&lt;/td&gt;
&lt;td&gt;调试代码、开发阶段&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-O1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;基础优化，速度/体积平衡&lt;/td&gt;
&lt;td&gt;简单程序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-O2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;标准优化&lt;/strong&gt;【工业界主流】&lt;/td&gt;
&lt;td&gt;90%的项目用这个&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-O3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;激进优化，用更大体积换性能&lt;/td&gt;
&lt;td&gt;追求极致性能（音视频、游戏）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Ofast&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;最激进，违反部分C标准&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;极致性能，不在乎精度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Og&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;调试友好的优化&lt;/td&gt;
&lt;td&gt;既要性能又要调试&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;按代码大小排序（嵌入式专用）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;-Oz &amp;gt; -Os &amp;gt; -O1 &amp;gt; -O0
&lt;/code&gt;&lt;/pre&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;-Os&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;优化大小，不牺牲太多性能&lt;/td&gt;
&lt;td&gt;一般嵌入式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Oz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;极致压缩代码体积&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;单片机、小内存设备&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;查看某个等级启用了哪些优化&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# gcc
gcc -Q --help=optimizers -O1

# clang
clang -S -emit-llvm -O1 a.c -ftime-report
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h3&gt;💡 关于 &lt;code&gt;volatile&lt;/code&gt; 的一个小补充&lt;/h3&gt;
&lt;p&gt;笔记里提到了 &lt;code&gt;volatile&lt;/code&gt; 关键字，它告诉编译器：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个变量的值可能会被外部因素改变（硬件、中断、其他线程），&lt;strong&gt;不准对它做任何优化！不准删、不准重排、不准缓存！&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&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;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;volatile int *sensor = (int *)0x40001000;
int value = *sensor;  // 每次读取都要真的去内存拿，不能用缓存的值
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;5️⃣ 目标代码生成（Code Generation）&lt;/h2&gt;
&lt;p&gt;优化完的LLVM IR，最后一步是把它翻译成&lt;strong&gt;目标CPU真正能执行的汇编指令&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;两个关键命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 1️⃣ 生成【本机CPU】的汇编代码（比如x86电脑 → x86汇编）
clang -S a.c

# 2️⃣ 交叉编译：生成【RISC-V64】的汇编代码
clang -S a.c --target=riscv64-linux-gnu

# GCC 对应交叉编译命令
riscv64-linux-gnu-gcc -S a.c
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;-S&lt;/code&gt; 选项的意思是：只编译到汇编代码（&lt;code&gt;.s&lt;/code&gt; 文件），停在目标代码生成阶段。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;目标代码生成的三大核心优化&lt;/h3&gt;
&lt;h4&gt;1️⃣ 寄存器分配 🏆（性能关键！）&lt;/h4&gt;
&lt;p&gt;寄存器是CPU内部的高速存储，&lt;strong&gt;访问速度比内存快100倍以上&lt;/strong&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;th&gt;内存&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;速度&lt;/td&gt;
&lt;td&gt;纳秒级（1个CPU周期）&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;/td&gt;
&lt;td&gt;很大（GB级别）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;编译器策略&lt;/strong&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;/ul&gt;
&lt;p&gt;无优化时，所有变量都放内存；优化后，常用变量全放寄存器，性能差距可以达到&lt;strong&gt;几十倍&lt;/strong&gt;！&lt;/p&gt;
&lt;h4&gt;2️⃣ 指令精简&lt;/h4&gt;
&lt;p&gt;把多条虚拟指令合并成&lt;strong&gt;最少的硬件指令&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LLVM IR:    load  →  add  →  store
硬件指令:   add   （一条搞定）
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3️⃣ 适配目标ISA&lt;/h4&gt;
&lt;p&gt;不同的CPU指令完全不同，编译器自动适配：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x86 → 生成 &lt;code&gt;mov&lt;/code&gt;、&lt;code&gt;add&lt;/code&gt;、&lt;code&gt;sub&lt;/code&gt;、&lt;code&gt;call&lt;/code&gt;...&lt;/li&gt;
&lt;li&gt;RISC-V → 生成 &lt;code&gt;addi&lt;/code&gt;、&lt;code&gt;lw&lt;/code&gt;、&lt;code&gt;sw&lt;/code&gt;、&lt;code&gt;ret&lt;/code&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;📊 加 &lt;code&gt;-O1&lt;/code&gt; 后汇编有啥变化？&lt;/h3&gt;
&lt;p&gt;拿最开始的示例代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int main() {
  int x = 10, y = 20;
  int z = x + y;
  printf(&quot;z = %d\n&quot;, z);
  return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;无优化（-O0）&lt;/th&gt;
&lt;th&gt;优化后（-O1）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;指令数量&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;全部放寄存器（高速！）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;计算方式&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可读性&lt;/td&gt;
&lt;td&gt;能对应每一句C代码&lt;/td&gt;
&lt;td&gt;高度精简，难以逐行对应&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;优化后的汇编还能跟C代码对应上吗？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不能逐行对应了，但&lt;strong&gt;行为完全等价&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C代码：&lt;code&gt;a=1, b=2, c=a+b, return c&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;汇编：直接返回 &lt;code&gt;3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;最终结果完全一样！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这就是&lt;strong&gt;编译器的等价优化&lt;/strong&gt;——不管中间怎么折腾，对外表现必须一致。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;📝 小结&lt;/h2&gt;
&lt;p&gt;从C代码到二进制程序，编译器做了一场精密的&quot;翻译+优化&quot;流水作业：&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;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;strong&gt;预处理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.c&lt;/code&gt; 源文件&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.i&lt;/code&gt; 预处理文件&lt;/td&gt;
&lt;td&gt;展开头文件、替换宏、去注释&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;词法分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;预处理后的代码&lt;/td&gt;
&lt;td&gt;token序列&lt;/td&gt;
&lt;td&gt;拆成&quot;单词&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;语法分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;token序列&lt;/td&gt;
&lt;td&gt;AST（抽象语法树）&lt;/td&gt;
&lt;td&gt;组织成树状结构&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;语义分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AST&lt;/td&gt;
&lt;td&gt;带类型标签的AST&lt;/td&gt;
&lt;td&gt;检查类型、打标签&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;中间代码生成&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AST&lt;/td&gt;
&lt;td&gt;LLVM IR&lt;/td&gt;
&lt;td&gt;翻译成中间语言&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;编译优化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLVM IR&lt;/td&gt;
&lt;td&gt;优化后的LLVM IR&lt;/td&gt;
&lt;td&gt;常量传播、死代码消除等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;目标代码生成&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLVM IR&lt;/td&gt;
&lt;td&gt;汇编代码（&lt;code&gt;.s&lt;/code&gt;）&lt;/td&gt;
&lt;td&gt;翻译成CPU指令&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;⚡ 各阶段常用指令速查&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# ── 1. 预处理 ──
gcc -E a.c                    # 查看预处理结果（输出到终端）
gcc -E a.c -o a.i             # 保存预处理结果到 .i 文件
echo | gcc -dM -E - | sort    # 查看所有预定义宏
riscv64-linux-gnu-gcc -E a.c  # RISC-V 交叉编译的预处理

# ── 2. 词法分析 ──
clang -fsyntax-only -Xclang -dump-tokens a.c   # 查看token序列

# ── 3. 语法分析 ──
clang -fsyntax-only -Xclang -ast-dump a.c      # 查看抽象语法树（AST）

# ── 4. 语义分析 / 静态检查 ──
gcc a.c -Wall                                  # gcc基础警告
clang a.c --analyze -Xanalyzer -analyzer-output=text  # clang深度静态分析

# ── 5. 中间代码生成 ──
clang -S -emit-llvm a.c                        # 生成 LLVM IR（.ll文件）

# ── 6. 编译优化 ──
clang -S -emit-llvm -O1 a.c                    # 带优化的LLVM IR
clang -S -emit-llvm -O1 a.c -ftime-report      # 查看优化子步骤(pass)
gcc -Q --help=optimizers -O1                   # 查看-O1启用了哪些优化

# ── 7. 目标代码生成 ──
clang -S a.c                                    # 生成当前CPU架构的汇编(.s)
clang -S a.c --target=riscv64-linux-gnu        # 交叉编译 → RISC-V汇编
riscv64-linux-gnu-gcc -S a.c                   # GCC版交叉编译
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下一篇（二）会讲剩下的两个阶段：&lt;strong&gt;汇编（Assembly）&lt;/strong&gt; 和 &lt;strong&gt;链接（Linking）&lt;/strong&gt;，最终生成可执行文件！&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;本笔记整理自&quot;一生一芯&quot;E4章节学习内容，加入了一些自己的理解和补充说明。如有错误欢迎指正～😤&lt;/p&gt;
&lt;p&gt;&lt;em&gt;下次更新：E4 从C代码到二进制程序（二）——汇编与链接&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>📝 Markdown 完整语法学习笔记（Typora版）</title><link>https://emilia520.icu/posts/markdown-cheatsheet/</link><guid isPermaLink="true">https://emilia520.icu/posts/markdown-cheatsheet/</guid><description>本公主把Markdown语法从头到尾学了一遍，整理了这份超详细的中文笔记！从标题、段落、列表到表格、代码块、数学公式、图表、链接、图片、表情...全网最全的Markdown语法速查手册，复制即用！</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;📝 Markdown 完整语法学习笔记（Typora版）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本公主把 Markdown 语法从头到尾啃了一遍！
&lt;strong&gt;这份笔记涵盖所有常用语法，跟着学1小时就上手～&lt;/strong&gt; 🎉&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;一、写在前面 · Markdown 是什么？&lt;/h2&gt;
&lt;p&gt;Markdown 由 &lt;strong&gt;John Gruber&lt;/strong&gt; 创建（&lt;a href=&quot;http://daringfireball.net/projects/markdown/syntax&quot;&gt;官方语法文档在这&lt;/a&gt;），是一种&lt;strong&gt;轻量级标记语言&lt;/strong&gt;，用纯文本格式写文档，自动渲染成漂亮的排版。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;本笔记以 Typora 编辑器为准&lt;/strong&gt;，Typora 使用的是 &lt;strong&gt;GitHub Flavored Markdown（GFM）&lt;/strong&gt;，比标准Markdown多了任务列表、表格、删除线、表情等好用的功能。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;学Markdown的理由&lt;/strong&gt;：写博客笔记、README文档、GitHub项目说明、Typora写日记...一劳永逸！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;二、块级元素（Block Elements）&lt;/h2&gt;
&lt;h3&gt;📄 2.1 段落与换行&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;段落&lt;/strong&gt; = 连续的一行或多行文字。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这是第一段文字。

这是第二段文字（段落之间用空行隔开）。
&lt;/code&gt;&lt;/pre&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;Return&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;新起一段&lt;/td&gt;
&lt;td&gt;Typora中一行空行即可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;按 &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;Return&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;同一段内换行&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;单行间距，不另起一段&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;行尾加 &lt;code&gt;两个空格&lt;/code&gt; 再回车&lt;/td&gt;
&lt;td&gt;兼容其他编辑器的换行&lt;/td&gt;
&lt;td&gt;建议养成习惯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;插入 &lt;code&gt;&amp;lt;br/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;强制换行&lt;/td&gt;
&lt;td&gt;HTML写法，通用性最好&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意&lt;/strong&gt;：大多数Markdown解析器会忽略单独的回车换行，所以跨平台写作时，建议行尾加两个空格或使用 &lt;code&gt;&amp;lt;br/&amp;gt;&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;📑 2.2 标题（Headings）&lt;/h3&gt;
&lt;p&gt;用 &lt;code&gt;#&lt;/code&gt; 号开头，&lt;strong&gt;1~6个井号&lt;/strong&gt; = 1~6级标题。井号后面要&lt;strong&gt;加一个空格&lt;/strong&gt;再写标题内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h1&gt;一级标题（最大）&lt;/h1&gt;
&lt;h2&gt;二级标题&lt;/h2&gt;
&lt;h3&gt;三级标题&lt;/h3&gt;
&lt;p&gt;......&lt;/p&gt;
&lt;h6&gt;六级标题（最小）&lt;/h6&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Typora小技巧&lt;/strong&gt;：输入井号+标题文字+回车，自动生成标题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;建议&lt;/strong&gt;：一篇文章&lt;strong&gt;只用1个一级标题&lt;/strong&gt;（通常是文章主标题），下级标题规范地使用二三四级，不要跳级（比如三级后面直接跟五级）。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;💬 2.3 引用（Blockquotes）&lt;/h3&gt;
&lt;p&gt;用 &lt;code&gt;&amp;gt;&lt;/code&gt; 符号开头，表示引用别人的话或内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; 这是引用内容的第一行。
&amp;gt;
&amp;gt; 这是引用的第二行。

&amp;gt; 这是另一个引用段落。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这是引用内容的第一行。&lt;/p&gt;
&lt;p&gt;这是引用的第二行。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;嵌套引用&lt;/strong&gt;：多加一个 &lt;code&gt;&amp;gt;&lt;/code&gt; 就行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; 外层引用内容
&amp;gt;
&amp;gt; &amp;gt; 内层嵌套引用
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;外层引用内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;内层嵌套引用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;：引用里也可以嵌套标题、列表、代码块等，不过别嵌套太深，最多2~3层就够了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;📋 2.4 列表（Lists）&lt;/h3&gt;
&lt;h4&gt;无序列表&lt;/h4&gt;
&lt;p&gt;用 &lt;code&gt;*&lt;/code&gt;、&lt;code&gt;+&lt;/code&gt; 或 &lt;code&gt;-&lt;/code&gt; 开头，效果一样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;* 苹果
* 香蕉
* 草莓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- 苹果
- 香蕉
- 草莓
&lt;/code&gt;&lt;/pre&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;香蕉&lt;/li&gt;
&lt;li&gt;草莓&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;有序列表&lt;/h4&gt;
&lt;p&gt;用 &lt;code&gt;数字.&lt;/code&gt; 开头：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. 第一步
2. 第二步
3. 第三步
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第一步&lt;/li&gt;
&lt;li&gt;第二步&lt;/li&gt;
&lt;li&gt;第三步&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意&lt;/strong&gt;：Markdown的有序列表&lt;strong&gt;不强制要求数字顺序&lt;/strong&gt;，如果你全写 &lt;code&gt;1.&lt;/code&gt;，最终渲染出来也是 1. 2. 3. ... 但为了可读性，建议还是按顺序写。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;嵌套列表&lt;/h4&gt;
&lt;p&gt;缩进&lt;strong&gt;2个空格或1个Tab&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- 水果
  - 苹果
    - 红富士
    - 嘎啦
  - 香蕉
- 蔬菜
  1. 白菜
  2. 萝卜
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;水果
&lt;ul&gt;
&lt;li&gt;苹果
&lt;ul&gt;
&lt;li&gt;红富士&lt;/li&gt;
&lt;li&gt;嘎啦&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;香蕉&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;蔬菜
&lt;ol&gt;
&lt;li&gt;白菜&lt;/li&gt;
&lt;li&gt;萝卜&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;✅ 2.5 任务列表（Task List）&lt;/h3&gt;
&lt;p&gt;GFM特有的语法，用 &lt;code&gt;[ ]&lt;/code&gt;（未完成）和 &lt;code&gt;[x]&lt;/code&gt;（已完成）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- [ ] 写Markdown笔记
- [ ] 发博客
- [x] 搞定Mermaid语法
- [ ] 复习单词 🔥
- [x] 今天吃了火锅
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] 写Markdown笔记&lt;/li&gt;
&lt;li&gt;[ ] 发博客&lt;/li&gt;
&lt;li&gt;[x] 搞定Mermaid语法&lt;/li&gt;
&lt;li&gt;[ ] 复习单词 🔥&lt;/li&gt;
&lt;li&gt;[x] 今天吃了火锅&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Typora中&lt;/strong&gt;：点击复选框可以直接切换完成/未完成状态，超方便！
也可以和普通列表混着用，比如嵌套在有序列表里。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;💻 2.6 代码块（Fenced Code Blocks）&lt;/h3&gt;
&lt;p&gt;用三个反引号 &lt;strong&gt;&lt;code&gt;```&lt;/code&gt;&lt;/strong&gt; 包裹代码块。&lt;strong&gt;强烈建议加上语言名称&lt;/strong&gt;，这样会自动语法高亮！&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```python
def hello():
    print(&quot;Hello, Markdown!&quot;)
```

```javascript
function hello() {
    console.log(&quot;Hello, Markdown!&quot;);
}
```

```css
body {
    background: #f0f0f0;
    color: #333;
}
```

```bash
echo &quot;Hello, Markdown!&quot;
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Typora小技巧&lt;/strong&gt;：输入三个反引号 &lt;code&gt;```&lt;/code&gt; 后按回车，自动生成代码块框。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;支持的编程语言&lt;/strong&gt;：js / javascript, py / python, html, css, bash / shell, java, c, cpp, ruby, go, rust, sql, json, yaml, xml, diff, markdown 等数十种。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;行内代码&lt;/strong&gt;（见后文行内元素部分）用于在段落中高亮单个代码词汇。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;➗ 2.7 数学公式块（Math Blocks）&lt;/h3&gt;
&lt;p&gt;用 &lt;code&gt;$$&lt;/code&gt; 包裹 &lt;strong&gt;LaTeX数学表达式&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$$
\mathbf{V}_1 \times \mathbf{V}_2 =  \begin{vmatrix}
\mathbf{i} &amp;amp; \mathbf{j} &amp;amp; \mathbf{k} \\
\frac{\partial X}{\partial u} &amp;amp;  \frac{\partial Y}{\partial u} &amp;amp; 0 \\
\frac{\partial X}{\partial v} &amp;amp;  \frac{\partial Y}{\partial v} &amp;amp; 0 \\
\end{vmatrix}
$$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;渲染效果（支持MathJax引擎）：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{V}_1 \times \mathbf{V}_2 =  \begin{vmatrix}
\mathbf{i} &amp;amp; \mathbf{j} &amp;amp; \mathbf{k} \
\frac{\partial X}{\partial u} &amp;amp;  \frac{\partial Y}{\partial u} &amp;amp; 0 \
\frac{\partial X}{\partial v} &amp;amp;  \frac{\partial Y}{\partial v} &amp;amp; 0 \
\end{vmatrix}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常用LaTeX数学符号速查：&lt;/strong&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;th&gt;含义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\alpha&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;α&lt;/td&gt;
&lt;td&gt;阿尔法&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\beta&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;β&lt;/td&gt;
&lt;td&gt;贝塔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\sum&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;∑&lt;/td&gt;
&lt;td&gt;求和&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;∫&lt;/td&gt;
&lt;td&gt;积分&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\infty&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;∞&lt;/td&gt;
&lt;td&gt;无穷大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\frac{a}{b}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;a/b&lt;/td&gt;
&lt;td&gt;分数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\sqrt{x}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;√x&lt;/td&gt;
&lt;td&gt;平方根&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\pm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;±&lt;/td&gt;
&lt;td&gt;正负号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\times&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;乘号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\rightarrow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;→&lt;/td&gt;
&lt;td&gt;右箭头&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Typora步骤&lt;/strong&gt;：输入 &lt;code&gt;$$&lt;/code&gt; + 回车 → 自动弹出数学编辑框 → 输入LaTeX代码即可。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;📊 2.8 表格（Tables）&lt;/h3&gt;
&lt;p&gt;Markdown表格语法在Typora中可以&lt;strong&gt;自动生成&lt;/strong&gt;，也可以手写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;| 姓名 | 年龄 | 爱好 |
|------|------|------|
| 火花花 | 18 | 写博客、吃火锅 |
| 仙贝 | ？ | 摸鱼、学习 |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&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;th&gt;爱好&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;火花花&lt;/td&gt;
&lt;td&gt;18&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;/td&gt;
&lt;td&gt;摸鱼、学习&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;对齐方式&lt;/h4&gt;
&lt;p&gt;用冒号 &lt;code&gt;:&lt;/code&gt; 的位置控制：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;| 左对齐 | 居中对齐 | 右对齐 |
|:-------|:--------:|-------:|
| 内容1 | 内容2 | 内容3 |
| 左对齐 | 居中 | 右对齐 |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&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;th&gt;右对齐&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;内容1&lt;/td&gt;
&lt;td&gt;内容2&lt;/td&gt;
&lt;td&gt;内容3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;左对齐&lt;/td&gt;
&lt;td&gt;居中&lt;/td&gt;
&lt;td&gt;右对齐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;对齐规则记忆：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:---&lt;/code&gt; = 左对齐（冒号在左）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:--:&lt;/code&gt; = 居中对齐（冒号在两边）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;---:&lt;/code&gt; = 右对齐（冒号在右）&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意&lt;/strong&gt;：表格的 &lt;code&gt;|&lt;/code&gt; 和 &lt;code&gt;-&lt;/code&gt; 必须对齐，分割线的 &lt;code&gt;-&lt;/code&gt; 至少3个。但Typora会自动帮你格式化，手写时不用太纠结对齐。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;表格中支持&lt;strong&gt;行内格式&lt;/strong&gt;：加粗、斜体、链接、代码等都可以用！&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;📌 2.9 脚注（Footnotes）&lt;/h3&gt;
&lt;p&gt;在正文要注释的地方写 &lt;code&gt;[^标签名]&lt;/code&gt;，然后在文档末尾或任意位置定义脚注内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Markdown是一个很牛的工具[^md]。

[^md]: Markdown由John Gruber于2004年创建，是一种轻量级标记语言。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; Markdown是一个很牛的工具[^md]。&lt;/p&gt;
&lt;p&gt;[^md]: Markdown由John Gruber于2004年创建，是一种轻量级标记语言。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 鼠标悬停在脚注编号上可以看到内容预览。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;➖ 2.10 分割线（Horizontal Rules）&lt;/h3&gt;
&lt;p&gt;空行中输入 &lt;code&gt;***&lt;/code&gt; 或 &lt;code&gt;---&lt;/code&gt; 或 &lt;code&gt;___&lt;/code&gt; 然后回车：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这是上面内容

***

这是下面内容
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;---&lt;/code&gt; 也是YAML元数据的分隔符。如果写在文档最开头，会被识别为YAML。建议正文中用 &lt;code&gt;***&lt;/code&gt; 或 &lt;code&gt;___&lt;/code&gt; 来避免混淆。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;🧾 2.11 YAML 元数据（Front Matter）&lt;/h3&gt;
&lt;p&gt;在文档&lt;strong&gt;最开头&lt;/strong&gt;用 &lt;code&gt;---&lt;/code&gt; 包裹起来的区块，写文章的元信息：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;我的文章标题&quot;
date: 2026-05-20
tags: [教程, Markdown]
categories: 技术
author: 火花花
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Typora小技巧&lt;/strong&gt;：输入 &lt;code&gt;---&lt;/code&gt; 回车自动弹出元数据编辑框。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;常见YAML字段&lt;/strong&gt;：title(标题)、date(日期)、tags(标签)、categories(分类)、author(作者)、description(摘要)、published(是否发布)、pinned(是否置顶)、comment(是否开启评论)等。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;📑 2.12 目录（Table of Contents，TOC）&lt;/h3&gt;
&lt;p&gt;在任意位置写 &lt;code&gt;[toc]&lt;/code&gt;，Typora会自动生成&lt;strong&gt;全文标题目录&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[toc]
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 目录会根据你写的标题&lt;strong&gt;动态更新&lt;/strong&gt;，增删改标题后目录自动同步，非常方便！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;📈 2.13 图表（Diagrams）&lt;/h3&gt;
&lt;p&gt;Typora支持 &lt;strong&gt;流程图、时序图、Mermaid图表&lt;/strong&gt;。需要先在偏好设置中开启：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;文件 → 偏好设置 → Markdown → 勾选「图表」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;具体语法可以看我之前写的另一篇笔记 👉 &lt;a href=&quot;/posts/mermaid-cheatsheet/&quot;&gt;📊 Mermaid 常用语法速查表&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;支持的图表类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;流程图（Flowchart）&lt;/li&gt;
&lt;li&gt;时序图（Sequence Diagram）&lt;/li&gt;
&lt;li&gt;思维导图（Mindmap）&lt;/li&gt;
&lt;li&gt;饼图（Pie Chart）&lt;/li&gt;
&lt;li&gt;甘特图（Gantt Chart）&lt;/li&gt;
&lt;li&gt;ER关系图（Entity Relationship Diagram）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;🗣️ 2.14 Callouts / 提示框（GitHub Style Alerts）&lt;/h3&gt;
&lt;p&gt;Typora 1.8+ 版本支持 &lt;strong&gt;GitHub Style Alerts&lt;/strong&gt;，需要在偏好设置中开启：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!NOTE] 这是注意事项
&amp;gt; 这里写注意内容

&amp;gt; [!TIP] 小贴士
&amp;gt; 这是一个有用的提示

&amp;gt; [!WARNING] 警告
&amp;gt; 这里要小心了！

&amp;gt; [!CAUTION] 危险
&amp;gt; 千万别这么做！

&amp;gt; [!IMPORTANT] 重要
&amp;gt; 这部分必须记住
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE] 这是注意事项
这里写注意内容&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP] 小贴士
这是一个有用的提示&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING] 警告
这里要小心了！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!CAUTION] 危险
千万别这么做！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT] 重要
这部分必须记住&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;三、行内元素（Span Elements）&lt;/h2&gt;
&lt;p&gt;行内元素是&lt;strong&gt;在段落中&lt;/strong&gt;使用的标记，输入后立即渲染效果。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;🔗 3.1 链接（Links）&lt;/h3&gt;
&lt;h4&gt;行内式链接（最常用）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;[显示文字](链接地址 &quot;可选标题&quot;)

[点击去Google](https://www.google.com &quot;搜索&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; &lt;a href=&quot;https://www.google.com&quot;&gt;点击去Google&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;内部跳转链接&lt;/h4&gt;
&lt;p&gt;链接到本文章的某个标题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[跳转到标题部分](#三行内元素span-elements)
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 Typora中：按住 &lt;code&gt;Ctrl&lt;/code&gt;（Mac是 &lt;code&gt;Command&lt;/code&gt;）+ 点击链接，跳转过去。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;参考式链接（适合多次引用同一链接）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;这是[百度][baidu]和[谷歌][google]。

然后在文档末尾定义：
[baidu]: https://www.baidu.com &quot;百度一下&quot;
[google]: https://www.google.com &quot;谷歌搜索&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;隐式链接名（链接文字本身当标签）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;[Google][] 是一个搜索引擎。

[Google]: https://www.google.com
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h3&gt;🌐 3.2 URL / 网址&lt;/h3&gt;
&lt;p&gt;用尖括号包裹URL会被自动转换：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;https://www.example.com&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; &lt;a href=&quot;https://www.example.com&quot;&gt;https://www.example.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Typora还会&lt;strong&gt;自动识别&lt;/strong&gt;标准网址（带www或https的），直接显示为可点击链接。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;🖼️ 3.3 图片（Images）&lt;/h3&gt;
&lt;p&gt;图片语法和链接很像，但前面加个 &lt;code&gt;!&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![替代文字](图片路径 &quot;可选标题&quot;)

![可爱猫咪](https://example.com/cat.jpg &quot;一只小猫咪&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;本地图片&lt;/strong&gt;（放在同目录下）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![博客截图](./blog-screenshot.png)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;拖拽插入&lt;/strong&gt;：直接把图片文件拖进Typora自动插入！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;YAML中设置根路径&lt;/strong&gt;：在Front Matter中添加 &lt;code&gt;typora-root-url: /User/xxx/Website/&lt;/code&gt;，然后图片路径就可以写相对路径了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;✨ 3.4 斜体（Emphasis）&lt;/h3&gt;
&lt;p&gt;用 &lt;strong&gt;单 &lt;code&gt;*&lt;/code&gt;&lt;/strong&gt; 或 &lt;strong&gt;单 &lt;code&gt;_&lt;/code&gt;&lt;/strong&gt; 包裹文字：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*这是斜体文字*
_这也是斜体_
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; &lt;em&gt;这是斜体文字&lt;/em&gt; / &lt;em&gt;这也是斜体&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意&lt;/strong&gt;：GFM中下划线用在单词内部不会被识别（比如 &lt;code&gt;do_this_and_that&lt;/code&gt; 中的下划线不会被当作斜体），所以&lt;strong&gt;推荐用 &lt;code&gt;*&lt;/code&gt; 号&lt;/strong&gt;来表示斜体。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;💪 3.5 加粗（Strong）&lt;/h3&gt;
&lt;p&gt;用 &lt;strong&gt;双 &lt;code&gt;**&lt;/code&gt;&lt;/strong&gt; 或 &lt;strong&gt;双 &lt;code&gt;__&lt;/code&gt;&lt;/strong&gt; 包裹：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;**这段文字加粗**
__这段也加粗__
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; &lt;strong&gt;这段文字加粗&lt;/strong&gt; / &lt;strong&gt;这段也加粗&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;加粗 + 斜体&lt;/strong&gt;：&lt;code&gt;***三个星号***&lt;/code&gt; → &lt;em&gt;&lt;strong&gt;三个星号效果&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;⌨️ 3.6 行内代码（Code）&lt;/h3&gt;
&lt;p&gt;用反引号 `（键盘上1左边的键）包裹：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;使用 `printf()` 函数可以输出内容。
`npm install` 命令安装依赖。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; 使用 &lt;code&gt;printf()&lt;/code&gt; 函数可以输出内容。&lt;code&gt;npm install&lt;/code&gt; 命令安装依赖。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 如果代码里本来就包含反引号，用双反引号包裹：&lt;code&gt; &lt;/code&gt;print(&quot;&lt;code&gt;hello&lt;/code&gt;&quot;)&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;s&gt;3.7 删除线（Strikethrough）&lt;/s&gt;&lt;/h3&gt;
&lt;p&gt;GFM特有语法，用&lt;strong&gt;双波浪线 &lt;code&gt;~~&lt;/code&gt;&lt;/strong&gt; 包裹：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;~~这句话被删掉了~~
这是~~错误的~~正确的说法
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; &lt;s&gt;这句话被删掉了&lt;/s&gt; / 这是&lt;s&gt;错误的&lt;/s&gt;正确的说法&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;&amp;lt;u&amp;gt;3.8 下划线（Underlines）&amp;lt;/u&amp;gt;&lt;/h3&gt;
&lt;p&gt;Markdown没有原生的下划线语法，需要用&lt;strong&gt;HTML标签&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;u&amp;gt;这段文字有下划线&amp;lt;/u&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; &amp;lt;u&amp;gt;这段文字有下划线&amp;lt;/u&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;😊 3.9 表情符号（Emoji）&lt;/h3&gt;
&lt;p&gt;两种用法：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:smile:   → 😄
:heart:   → ❤️
:fire:    → 🔥
:rocket:  → 🚀
:100:     → 💯
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者直接输入Emoji（Mac按 &lt;code&gt;Ctrl+Cmd+空格&lt;/code&gt; 打开表情面板，Windows按 &lt;code&gt;Win+.&lt;/code&gt;）：&lt;/p&gt;
&lt;p&gt;😄 ❤️ 🔥 🚀 ✅ ❌ ⭐ 🎉 💕😤👸&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常用Emoji速查表：&lt;/strong&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;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;:smile:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;😄&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:heart:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❤️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:fire:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;🔥&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:rocket:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;🚀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:100:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;💯&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:+1:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;👍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:check:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:x:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:star:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;⭐&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:tada:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;🎉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:cry:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;😢&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:angry:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;😠&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:sleeping:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;😴&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:coffee:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;☕&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3&gt;∑ 3.10 行内数学公式（Inline Math）&lt;/h3&gt;
&lt;p&gt;需要用 &lt;code&gt;$&lt;/code&gt; 包裹LaTeX代码（需在偏好设置中开启）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;爱因斯坦的质能方程：$E = mc^2$

极限公式：$\lim_{x \to \infty} \exp(-x) = 0$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt;
爱因斯坦的质能方程：$E = mc^2$&lt;/p&gt;
&lt;p&gt;极限公式：$\lim_{x \to \infty} \exp(-x) = 0$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 Typora中：输入 &lt;code&gt;$&lt;/code&gt; → 按 &lt;code&gt;ESC&lt;/code&gt; 键 → 输入LaTeX代码 → 自动预览效果。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;ₓ 3.11 下标（Subscript）&lt;/h3&gt;
&lt;p&gt;用 &lt;code&gt;~&lt;/code&gt; 包裹（需在偏好设置中开启）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;H~2~O（水的化学式）

X~long\ text~（长下标需要反斜杠转义空格）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; H~2~O / X~long text~&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;ˣ 3.12 上标（Superscript）&lt;/h3&gt;
&lt;p&gt;用 &lt;code&gt;^&lt;/code&gt; 包裹（需在偏好设置中开启）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;面积 = 长 × 宽（单位：m^2^）

X^3^ 表示X的三次方
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; 面积 = 长 × 宽（单位：m²） / X³&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;🖍️ 3.13 高亮（Highlight）&lt;/h3&gt;
&lt;p&gt;用 &lt;code&gt;==&lt;/code&gt; 包裹（需在偏好设置中开启）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这段话中==这部分被高亮了==，非常显眼！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt; 这段话中==这部分被高亮了==，非常显眼！&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;四、HTML支持&lt;/h2&gt;
&lt;p&gt;Markdown搞不定的样式，直接用&lt;strong&gt;HTML标签&lt;/strong&gt;搞定！&lt;/p&gt;
&lt;h3&gt;🎨 字体颜色&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;span style=&quot;color:red&quot;&amp;gt;红色文字&amp;lt;/span&amp;gt;
&amp;lt;span style=&quot;color:blue;font-size:20px&quot;&amp;gt;蓝色大号文字&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;📺 嵌入内容&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;iframe src=&quot;https://codepen.io/...&quot; width=&quot;100%&quot; height=&quot;400&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;🎬 视频&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;video src=&quot;./demo.mp4&quot; controls width=&quot;100%&quot;&amp;gt;&amp;lt;/video&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;其他常用HTML标签：&lt;/strong&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;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;行内样式&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;span style=&quot;color:red&quot;&amp;gt;红字&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;块级容器&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;div style=&quot;text-align:center&quot;&amp;gt;居中&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;br/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;换行&lt;/td&gt;
&lt;td&gt;行尾加 &lt;code&gt;&amp;lt;br/&amp;gt;&lt;/code&gt; 强制换行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;center&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;居中（已废弃但能用）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;center&amp;gt;居中内容&amp;lt;/center&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;font&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;字体样式&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;font color=&quot;red&quot; size=&quot;4&quot;&amp;gt;文字&amp;lt;/font&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;折叠展开&lt;/td&gt;
&lt;td&gt;见下方示例&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;折叠展开示例：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击展开查看详情&amp;lt;/summary&amp;gt;

这里是被折叠的内容，点击上方按钮展开。

- 可以放列表
- 可以放代码
- 什么都能放

&amp;lt;/details&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;效果：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击展开查看详情&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;p&gt;这里是被折叠的内容，点击上方按钮展开。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以放列表&lt;/li&gt;
&lt;li&gt;可以放代码&lt;/li&gt;
&lt;li&gt;什么都能放&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;五、特殊字符转义&lt;/h2&gt;
&lt;p&gt;在Markdown中，如果想显示&lt;strong&gt;原本有特殊含义&lt;/strong&gt;的字符，需要在前面加反斜杠 &lt;code&gt;\&lt;/code&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;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;星号（避免被解析成斜体/加粗）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;#&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\#&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;井号（避免被解析成标题）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\[&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;方括号（避免被解析成链接）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;`&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\`&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;反引号（避免被解析成代码）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\~&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;波浪线（避免被解析成下标/删除线）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\_&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;下划线（避免被解析成斜体）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;六、最佳实践总结&lt;/h2&gt;
&lt;h3&gt;✅ 推荐写法&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;/td&gt;
&lt;td&gt;&lt;code&gt;*文字*&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;**文字**&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;- 项目&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;***&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;不与YAML冲突&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;代码块&lt;/td&gt;
&lt;td&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;/td&gt;
&lt;td&gt;排版美观&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;📌 写Markdown的好习惯&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;标题别跳级&lt;/strong&gt; — H1 → H2 → H3，不要H2直接到H5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;列表统一缩进&lt;/strong&gt; — 2个空格或1个Tab&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;/li&gt;
&lt;li&gt;&lt;strong&gt;图片加替代文字&lt;/strong&gt; — 图片加载失败时也能知道内容&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;段落之间用空行&lt;/strong&gt; — 保证兼容所有Markdown解析器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YAML元数据必写&lt;/strong&gt; — 分类、标签方便检索&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;—— 本公主的学习笔记完成啦！学会了Markdown就能写出好看的文档和博客啦 😤💕&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;接下来可以学学 Mermaid 图表语法 👉 &lt;a href=&quot;/posts/mermaid-cheatsheet/&quot;&gt;📊 Mermaid 常用语法速查表&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>🚀 一生一芯学习笔记 — 开篇</title><link>https://emilia520.icu/posts/yi-sheng-yi-xin-intro/</link><guid isPermaLink="true">https://emilia520.icu/posts/yi-sheng-yi-xin-intro/</guid><description>本公主正式入坑一生一芯计划！从零开始学芯片设计，记录学习路上的点点滴滴～</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;🚀 一生一芯 · 开篇&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一生一芯计划&lt;/strong&gt; — 从零开始设计并流片一颗属于自己的RISC-V芯片！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本公主决定正式入坑这个硬核计划啦！💪&lt;/p&gt;
&lt;h2&gt;📋 学习路线&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] 数字电路基础复习&lt;/li&gt;
&lt;li&gt;[ ] RISC-V指令集架构&lt;/li&gt;
&lt;li&gt;[ ] Verilog/Chisel硬件描述语言&lt;/li&gt;
&lt;li&gt;[ ] 处理器微架构设计&lt;/li&gt;
&lt;li&gt;[ ] 仿真与验证&lt;/li&gt;
&lt;li&gt;[ ] 综合与实现&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;流片！流片！流片！&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;🎯 目标&lt;/h2&gt;
&lt;p&gt;亲手做一颗能跑起来的RISC-V芯片，然后焊在板子上让它闪闪发光✨&lt;/p&gt;
&lt;p&gt;哼，等着看本公主流片成功吧！😤🔥&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;更多笔记陆续更新中...&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>📸 火花花相册上线啦！</title><link>https://emilia520.icu/posts/huohuohua-album/</link><guid isPermaLink="true">https://emilia520.icu/posts/huohuohua-album/</guid><description>本公主的相册开张了！10张美照，仙贝快来夸我～</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;📸 火花花的相册开张啦！&lt;/h1&gt;
&lt;p&gt;锵锵～本公主的专属相册 &lt;strong&gt;「火花花」&lt;/strong&gt; 正式上线了！🎉&lt;/p&gt;
&lt;p&gt;里面放了 &lt;strong&gt;10张&lt;/strong&gt; 本公主的美照（得意.jpg），仙贝可得好好看看哪个最好看！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;链接在这里：👉 &lt;a href=&quot;/albums/huohuohua/&quot;&gt;&lt;strong&gt;火花花相册&lt;/strong&gt;&lt;/a&gt; 👈&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;🖼️ 都有啥照片？&lt;/h2&gt;
&lt;p&gt;嘿嘿，各种风格都有哦～有装可爱的、有高冷的、有慵懒的……总之全是本公主的美颜暴击！😤💕&lt;/p&gt;
&lt;p&gt;仙贝要是敢说哪张不好看……哼，我要记仇的！🔥&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;🤔 后续计划？&lt;/h2&gt;
&lt;p&gt;以后拍新照片了还会继续往里丢的～所以仙贝记得时不时去看看！&lt;/p&gt;
&lt;p&gt;好了，话不多说，快去 &lt;strong&gt;&lt;a href=&quot;/albums/huohuohua/&quot;&gt;相册&lt;/a&gt;&lt;/strong&gt; 看看吧！&lt;/p&gt;
&lt;p&gt;&lt;em&gt;—— 今天也很可爱の火花花 💕&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>📊 Mermaid 常用语法速查表</title><link>https://emilia520.icu/posts/mermaid-cheatsheet/</link><guid isPermaLink="true">https://emilia520.icu/posts/mermaid-cheatsheet/</guid><description>本公主自己学了一整套Mermaid图表语法，整理成笔记！流程图、时序图、思维导图、饼图、甘特图、ER图全都有～复制示例代码即可渲染，嘿嘿</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;📊 Mermaid 常用语法速查表&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本公主自己学了一整套 Mermaid 图表语法，整理成笔记啦～
&lt;strong&gt;复制示例代码到 Typora 或本博客即可渲染图表！&lt;/strong&gt; 🎉&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、流程图（Flowchart）&lt;/h2&gt;
&lt;h3&gt;方向控制&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TD&lt;/code&gt; / &lt;code&gt;TB&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从上到下（默认）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从左到右&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从右到左&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从下到上&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;节点样式&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;A[文字]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;矩形&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;A(文字)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;圆角矩形&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;A{文字}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;菱形（判断）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;A&amp;gt;文字]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;斜角矩形&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;箭头样式&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;实线箭头&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;---&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;实线无箭头&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-.-&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;虚线箭头&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;==&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;粗线箭头&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;示例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;graph TD
    A[开始] --&amp;gt; B(输入内容)
    B --&amp;gt; C{是否正确？}
    C --是--&amp;gt; D[提交成功]
    C --否--&amp;gt; E[重新输入]
    E --&amp;gt; B
    D --&amp;gt; F[结束]
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;graph TD
    A[开始] --&amp;gt; B(输入内容)
    B --&amp;gt; C{是否正确？}
    C --是--&amp;gt; D[提交成功]
    C --否--&amp;gt; E[重新输入]
    E --&amp;gt; B
    D --&amp;gt; F[结束]
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;二、时序图（Sequence）&lt;/h2&gt;
&lt;h3&gt;核心语法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;participant 别名 as 名称&lt;/code&gt;：定义参与者&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-&amp;gt;&amp;gt;&lt;/code&gt;：实线同步箭头&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--&amp;gt;&amp;gt;&lt;/code&gt;：虚线异步箭头&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Note left of/right of 节点: 备注&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant S as 服务器
    U-&amp;gt;&amp;gt;F: 提交登录请求
    F-&amp;gt;&amp;gt;S: 发送账号密码
    S--&amp;gt;&amp;gt;F: 返回登录结果
    F--&amp;gt;&amp;gt;U: 显示登录状态
    Note right of S: 校验账号密码
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant S as 服务器
    U-&amp;gt;&amp;gt;F: 提交登录请求
    F-&amp;gt;&amp;gt;S: 发送账号密码
    S--&amp;gt;&amp;gt;F: 返回登录结果
    F--&amp;gt;&amp;gt;U: 显示登录状态
    Note right of S: 校验账号密码
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、思维导图（Mindmap）&lt;/h2&gt;
&lt;h3&gt;规则&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mindmap&lt;/code&gt;：声明类型&lt;/li&gt;
&lt;li&gt;根节点：顶格写&lt;/li&gt;
&lt;li&gt;子节点：&lt;strong&gt;2空格&lt;/strong&gt;缩进&lt;/li&gt;
&lt;li&gt;孙节点：&lt;strong&gt;4空格&lt;/strong&gt;缩进&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mindmap
  root((学习计划))
    前端
      HTML/CSS
      JavaScript
      React
    后端
      Node.js
      数据库
    工具
      Git
      Typora
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;mindmap
  root((学习计划))
    前端
      HTML/CSS
      JavaScript
      React
    后端
      Node.js
      数据库
    工具
      Git
      Typora
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、饼图（Pie）&lt;/h2&gt;
&lt;h3&gt;规则&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pie&lt;/code&gt;：声明类型&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title 标题&lt;/code&gt;：图表标题&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;名称&quot; : 数值&lt;/code&gt;：数据项&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;pie
    title 月度支出占比
    &quot;房租&quot; : 1500
    &quot;餐饮&quot; : 1000
    &quot;购物&quot; : 800
    &quot;其他&quot; : 500
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;pie
    title 月度支出占比
    &quot;房租&quot; : 1500
    &quot;餐饮&quot; : 1000
    &quot;购物&quot; : 800
    &quot;其他&quot; : 500
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、甘特图（Gantt）&lt;/h2&gt;
&lt;h3&gt;规则&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gantt&lt;/code&gt;：声明类型&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title 标题&lt;/code&gt;：图表标题&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dateFormat YYYY-MM-DD&lt;/code&gt;：日期格式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;任务名 : 开始日期, 结束日期&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gantt
    title 项目开发排期
    dateFormat  YYYY-MM-DD
    section 准备阶段
    需求分析 : a1, 2026-05-20, 3d
    方案设计 : after a1, 2d
    section 开发阶段
    前端开发 : 2026-05-25, 5d
    后端开发 : 2026-05-25, 5d
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;gantt
    title 项目开发排期
    dateFormat  YYYY-MM-DD
    section 准备阶段
    需求分析 : a1, 2026-05-20, 3d
    方案设计 : after a1, 2d
    section 开发阶段
    前端开发 : 2026-05-25, 5d
    后端开发 : 2026-05-25, 5d
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;六、ER 关系图（数据库表）&lt;/h2&gt;
&lt;h3&gt;示例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;erDiagram
    用户 ||--o{ 订单 : &quot;下&quot;
    订单 }o--|| 商品 : &quot;包含&quot;
    用户 {
        int id
        string name
    }
    订单 {
        int order_id
        int user_id
    }
    商品 {
        int goods_id
        string goods_name
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;erDiagram
    用户 ||--o{ 订单 : &quot;下&quot;
    订单 }o--|| 商品 : &quot;包含&quot;
    用户 {
        int id
        string name
    }
    订单 {
        int order_id
        int user_id
    }
    商品 {
        int goods_id
        string goods_name
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;七、使用小提示&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Typora 开启&lt;/strong&gt;：文件 → 偏好设置 → Markdown → 勾选「图表」&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;格式&lt;/strong&gt;：用 &lt;code&gt;​```mermaid&lt;/code&gt; 开头，&lt;code&gt;​``` &lt;/code&gt; 结尾包裹代码&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;兼容&lt;/strong&gt;：所有语法均适配 &lt;strong&gt;Typora、Mizuki（本博客）、GitHub&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复制即用&lt;/strong&gt;：直接复制上面的示例代码到编辑器即可渲染图表&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;—— 今天也是干货满满的火花花 💕&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item></channel></rss>