<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Linux on pemako</title>
    <link>http://pemako.cn/tags/linux/</link>
    <description>Recent content in Linux on pemako</description>
    <image>
      <title>pemako</title>
      <url>http://pemako.cn/images/papermod-cover.png</url>
      <link>http://pemako.cn/images/papermod-cover.png</link>
    </image>
    <generator>Hugo -- 0.146.6</generator>
    <language>en</language>
    <lastBuildDate>Thu, 09 Apr 2026 20:00:00 +0800</lastBuildDate>
    <atom:link href="http://pemako.cn/tags/linux/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Awk</title>
      <link>http://pemako.cn/posts/awk/</link>
      <pubDate>Thu, 09 Apr 2026 20:00:00 +0800</pubDate>
      <guid>http://pemako.cn/posts/awk/</guid>
      <description>&lt;p&gt;&lt;code&gt;AWK&lt;/code&gt;的工作模式 &lt;code&gt;awk &#39;Pattern {Action}&#39;&lt;/code&gt; 其中 &lt;code&gt;Pattern&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;常用变量及函数&#34;&gt;常用变量及函数&lt;/h2&gt;
&lt;h3 id=&#34;熟记的变量&#34;&gt;熟记的变量&lt;/h3&gt;
&lt;h4 id=&#34;nf&#34;&gt;&lt;code&gt;NF&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;NF&lt;/code&gt; 最后一个域，&lt;code&gt;$NF&lt;/code&gt;获取最后一个域的值。如下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;echo {a..d} | awk &#39;{print NF, $NF}&#39;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;4 d&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;nrfnr&#34;&gt;&lt;code&gt;NR/FNR&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;NR&lt;/code&gt;表示&lt;code&gt;awk&lt;/code&gt;开始执行程序后所读取的数据行数。&lt;code&gt;FNR&lt;/code&gt;与&lt;code&gt;NR&lt;/code&gt;功用类似,不同的是&lt;code&gt;awk&lt;/code&gt;每打开一个新文件,FNR便从0重新累计。如果是一个文件的话，NF和FNR没有区别&lt;/p&gt;
&lt;p&gt;有两个文件格式如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;account&lt;/code&gt;文件&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;张三|000001
李四|000002
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cdr&lt;/code&gt;文件&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;000001|10
000001|20
000002|30
000002|15
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;想要得到的结果如下&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;张三|000001|10
张三|000001|20
李四|000002|30
李四|000002|15
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;fsofs&#34;&gt;&lt;code&gt;FS/OFS&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;FS&lt;/code&gt;输入字段分隔符，默认为空格。&lt;code&gt;OFS&lt;/code&gt;输出字段分隔符，默认为空格。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;echo &amp;quot;1:2:3&amp;quot; | awk &#39;BEGIN{FS=&amp;quot;:&amp;quot;; OFS=&amp;quot;,&amp;quot;} {print $1, $2, $3}&#39;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1,2,3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;rsorsrt&#34;&gt;&lt;code&gt;RS/ORS/RT&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;RS&lt;/code&gt;输入记录分隔符，默认为换行符。&lt;code&gt;ORS&lt;/code&gt;输出记录的分隔符默认为换行符号。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;➜  cat file
a b:c d
e f:g h
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;下面这命令解释，首先修改了RS的，则上面的file文件中的行会变成下面三行内容。然后后面打印第2列，即输出的结果为&lt;code&gt;b d h&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;a b
c d e f
g h
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;➜ cat file | awk &amp;#39;BEGIN{RS=&amp;#34;:&amp;#34;} {print $2}&amp;#39;
b
d
h


➜ cat file | awk &amp;#39;BEGIN{RS=&amp;#34;:&amp;#34;; ORS=&amp;#34;,&amp;#34;} {print $2}&amp;#39;
b,d,h,

➜ cat file | awk &amp;#39;BEGIN{RS=&amp;#34;:&amp;#34;; ORS=&amp;#34;,&amp;#34;} {print $2, &amp;#34;&amp;lt;&amp;#34;RT&amp;#34;&amp;gt;&amp;#34;}&amp;#39;
b &amp;lt;:&amp;gt;,d &amp;lt;:&amp;gt;,h &amp;lt;&amp;gt;,
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如上面的一个例子 &lt;code&gt;RT&lt;/code&gt;的值就是匹配到的&lt;code&gt;RS&lt;/code&gt;的值，&lt;code&gt;RS&lt;/code&gt;的值可以采用正则进行设定。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bash</title>
      <link>http://pemako.cn/posts/bash/</link>
      <pubDate>Thu, 09 Apr 2026 20:00:00 +0800</pubDate>
      <guid>http://pemako.cn/posts/bash/</guid>
      <description>&lt;h2 id=&#34;bash基础&#34;&gt;&lt;code&gt;Bash&lt;/code&gt;基础&lt;/h2&gt;
&lt;h3 id=&#34;shell与bash&#34;&gt;&lt;code&gt;Shell&lt;/code&gt;与&lt;code&gt;Bash&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sh&lt;/code&gt; 是一种标准,&lt;code&gt;bash&lt;/code&gt;是符合这个标准的实现。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;下面的流程是双向的，由于目前markdown中的编辑器不支持双向箭头操作，故先暂时这样。&lt;a href=&#34;https://mermaid-js.github.io/mermaid/#/flowchart?id=beta-multi-directional-arrows&#34;&gt;双向箭头&lt;/a&gt;, 同时也不支持&lt;a href=&#34;https://mermaid-js.github.io/mermaid/#/flowchart?id=subgraphs&#34;&gt;subgraphs&lt;/a&gt;。&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flowchart LR
subgraph User
    用户
end
用户&amp;lt;--&amp;gt;伪终端
用户&amp;lt;--&amp;gt;控制台

subgraph Term
    伪终端&amp;lt;--&amp;gt;shell接收解析执行
    控制台&amp;lt;--&amp;gt;shell接收解析执行
end

shell接收解析执行&amp;lt;--&amp;gt;OS
subgraph Kernel
    OS&amp;lt;--&amp;gt;硬盘I/O
    OS&amp;lt;--&amp;gt;网络I/O
    OS&amp;lt;--&amp;gt;其它操作
end
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;这里上传到github按照图片存储展示&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://raw.githubusercontent.com/pemako/imgs/master/public/youdao/mermaid-diagram-20210818111907.png&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;login-bash&#34;&gt;&lt;code&gt;Login Bash&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Login Bash&lt;/code&gt;初始化的配置文件分为下面两类&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全局配置
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/profile&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;个人配置
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.bash_profile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.bash_login&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.profile&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;login-sh&#34;&gt;&lt;code&gt;Login Sh&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Login Sh&lt;/code&gt;在初始话的时候只会加载下面两个配置文件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/profile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.profile&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查看用户使用的&lt;code&gt;sh&lt;/code&gt;类型&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/ect/passwd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建用户的时候指定 &lt;code&gt;sh&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;useradd -s /bin/bash&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修改用户的&lt;code&gt;sh&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;usermod, chsh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了统一两种 &lt;code&gt;Bash&lt;/code&gt;的配置，在&lt;code&gt;login bash&lt;/code&gt;里应用&lt;code&gt;interactive bash&lt;/code&gt;的配置&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/.bashrc&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/.bashrc&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;脚本执行顺序&#34;&gt;脚本执行顺序&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;父&lt;code&gt;shell&lt;/code&gt; &lt;code&gt;Fork&lt;/code&gt; &amp;ndash; &lt;code&gt;Sub-shell&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sub-shell&lt;/code&gt; 继承父&lt;code&gt;shell&lt;/code&gt;环境&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sub-shell&lt;/code&gt; 调用指定的解释器执行该脚本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sub-shell&lt;/code&gt; 退出，相关环境被销毁&lt;/li&gt;
&lt;li&gt;父&lt;code&gt;shell&lt;/code&gt;取得&lt;code&gt;Sub-shell&lt;/code&gt;的退出状态&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;bash命令的解析过程&#34;&gt;&lt;code&gt;Bash&lt;/code&gt;命令的解析过程&lt;/h3&gt;
&lt;p&gt;命令解析的时候一定按照下面的7个步骤进行执行&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 内核</title>
      <link>http://pemako.cn/posts/linux-kernel/</link>
      <pubDate>Thu, 09 Apr 2026 20:00:00 +0800</pubDate>
      <guid>http://pemako.cn/posts/linux-kernel/</guid>
      <description>&lt;h1 id=&#34;深入理解-linux-内核2611--linux-6x-源码结构对照与学习导引&#34;&gt;&lt;strong&gt;🧭《深入理解 Linux 内核（2.6.11）》 → Linux 6.x 源码结构对照与学习导引&lt;/strong&gt;&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-一系统整体结构&#34;&gt;&lt;strong&gt;🧩 一、系统整体结构&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;模块&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;书中章节&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;Linux 2.6 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;Linux 6.x 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;说明&lt;/strong&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;第 2 章&lt;/td&gt;
          &lt;td&gt;arch/i386/kernel/head.S, init/main.c&lt;/td&gt;
          &lt;td&gt;arch/x86/kernel/head_64.S, init/main.c&lt;/td&gt;
          &lt;td&gt;入口逻辑相似：仍是 start_kernel()，但支持多架构（x86, ARM, RISC-V）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;系统调用入口&lt;/td&gt;
          &lt;td&gt;第 10 章&lt;/td&gt;
          &lt;td&gt;arch/i386/kernel/entry.S, arch/i386/kernel/traps.c&lt;/td&gt;
          &lt;td&gt;arch/x86/entry/entry_64.S, kernel/syscall_table.S&lt;/td&gt;
          &lt;td&gt;系统调用表机制相同，但入口汇编和 syscall wrapper 重写&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;内核初始化流程&lt;/td&gt;
          &lt;td&gt;第 3 章&lt;/td&gt;
          &lt;td&gt;init/main.c&lt;/td&gt;
          &lt;td&gt;init/main.c&lt;/td&gt;
          &lt;td&gt;主干逻辑仍是 start_kernel() → rest_init()&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-二进程与调度process--scheduler&#34;&gt;&lt;strong&gt;🧠 二、进程与调度（Process &amp;amp; Scheduler）&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;模块&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;书中章节&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;2.6.11 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;6.x 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;说明&lt;/strong&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;第 3–4 章&lt;/td&gt;
          &lt;td&gt;include/linux/sched.h, kernel/fork.c&lt;/td&gt;
          &lt;td&gt;include/linux/sched.h, kernel/fork.c&lt;/td&gt;
          &lt;td&gt;task_struct 结构仍然存在，字段大幅扩展（多 CPU、NUMA 支持）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;进程创建&lt;/td&gt;
          &lt;td&gt;第 3 章&lt;/td&gt;
          &lt;td&gt;kernel/fork.c&lt;/td&gt;
          &lt;td&gt;kernel/fork.c&lt;/td&gt;
          &lt;td&gt;核心函数仍是 do_fork() / copy_process()&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;进程终止&lt;/td&gt;
          &lt;td&gt;第 3 章&lt;/td&gt;
          &lt;td&gt;kernel/exit.c&lt;/td&gt;
          &lt;td&gt;kernel/exit.c&lt;/td&gt;
          &lt;td&gt;逻辑基本相同&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;调度器&lt;/td&gt;
          &lt;td&gt;第 7 章&lt;/td&gt;
          &lt;td&gt;kernel/sched.c（O(1) 调度器）&lt;/td&gt;
          &lt;td&gt;kernel/sched/core.c, kernel/sched/fair.c（CFS 调度器）&lt;/td&gt;
          &lt;td&gt;📌 &lt;strong&gt;最大差异&lt;/strong&gt;：现代内核使用 CFS（完全公平调度器）取代了 O(1)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;睡眠与唤醒&lt;/td&gt;
          &lt;td&gt;第 7 章&lt;/td&gt;
          &lt;td&gt;kernel/sched.c&lt;/td&gt;
          &lt;td&gt;kernel/sched/core.c&lt;/td&gt;
          &lt;td&gt;同样通过 wait_queue 与 schedule()&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-三内存管理memory-management&#34;&gt;&lt;strong&gt;🧮 三、内存管理（Memory Management）&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;模块&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;书中章节&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;2.6.11 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;6.x 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;说明&lt;/strong&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;第 8 章&lt;/td&gt;
          &lt;td&gt;mm/page_alloc.c&lt;/td&gt;
          &lt;td&gt;mm/page_alloc.c&lt;/td&gt;
          &lt;td&gt;概念一致（buddy system），但支持 NUMA / CMA / ZONE_DEVICE&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;虚拟内存管理&lt;/td&gt;
          &lt;td&gt;第 9 章&lt;/td&gt;
          &lt;td&gt;mm/mmap.c, mm/mprotect.c&lt;/td&gt;
          &lt;td&gt;mm/mmap.c, mm/mprotect.c&lt;/td&gt;
          &lt;td&gt;vm_area_struct、mm_struct 概念仍相同&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;页面换出&lt;/td&gt;
          &lt;td&gt;第 15 章&lt;/td&gt;
          &lt;td&gt;mm/vmscan.c&lt;/td&gt;
          &lt;td&gt;mm/vmscan.c&lt;/td&gt;
          &lt;td&gt;逻辑相似但复杂度大幅提升&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Slab 分配器&lt;/td&gt;
          &lt;td&gt;第 8 章&lt;/td&gt;
          &lt;td&gt;mm/slab.c&lt;/td&gt;
          &lt;td&gt;mm/slub.c, mm/slab_common.c&lt;/td&gt;
          &lt;td&gt;默认使用 SLUB（比 Slab 更简洁高效）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-四中断与异常interrupts--exceptions&#34;&gt;&lt;strong&gt;🧱 四、中断与异常（Interrupts &amp;amp; Exceptions）&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;模块&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;书中章节&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;2.6.11 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;6.x 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;说明&lt;/strong&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;第 4 章&lt;/td&gt;
          &lt;td&gt;arch/i386/kernel/irq.c, kernel/irq/handle.c&lt;/td&gt;
          &lt;td&gt;kernel/irq/ 下多文件（manage.c, chip.c, spurious.c 等）&lt;/td&gt;
          &lt;td&gt;2.6 时是单文件，现在模块化程度更高&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;中断上下文切换&lt;/td&gt;
          &lt;td&gt;第 4–5 章&lt;/td&gt;
          &lt;td&gt;arch/i386/kernel/entry.S&lt;/td&gt;
          &lt;td&gt;arch/x86/entry/entry_64.S&lt;/td&gt;
          &lt;td&gt;汇编层实现更新为 x86_64 调用约定&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;软中断、tasklet、工作队列&lt;/td&gt;
          &lt;td&gt;第 4–5 章&lt;/td&gt;
          &lt;td&gt;kernel/softirq.c, kernel/workqueue.c&lt;/td&gt;
          &lt;td&gt;kernel/softirq.c, kernel/workqueue.c&lt;/td&gt;
          &lt;td&gt;概念完全保留&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-五文件系统vfs--fs&#34;&gt;&lt;strong&gt;💾 五、文件系统（VFS &amp;amp; FS）&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;模块&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;书中章节&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;2.6.11 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;6.x 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;虚拟文件系统层（VFS）&lt;/td&gt;
          &lt;td&gt;第 12 章&lt;/td&gt;
          &lt;td&gt;fs/namei.c, fs/open.c, fs/read_write.c&lt;/td&gt;
          &lt;td&gt;fs/namei.c, fs/open.c, fs/read_write.c&lt;/td&gt;
          &lt;td&gt;几乎同名路径，代码更复杂&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;inode / dentry 机制&lt;/td&gt;
          &lt;td&gt;第 12 章&lt;/td&gt;
          &lt;td&gt;fs/inode.c, fs/dcache.c&lt;/td&gt;
          &lt;td&gt;fs/inode.c, fs/dcache.c&lt;/td&gt;
          &lt;td&gt;概念完全相同，接口丰富&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;文件系统注册&lt;/td&gt;
          &lt;td&gt;第 13 章&lt;/td&gt;
          &lt;td&gt;fs/super.c&lt;/td&gt;
          &lt;td&gt;fs/super.c&lt;/td&gt;
          &lt;td&gt;仍然是 register_filesystem()&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Ext2 文件系统&lt;/td&gt;
          &lt;td&gt;第 14 章&lt;/td&gt;
          &lt;td&gt;fs/ext2/&lt;/td&gt;
          &lt;td&gt;fs/ext4/&lt;/td&gt;
          &lt;td&gt;现代系统几乎都使用 ext4 取代 ext2&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-六设备驱动与内核模块driver--module&#34;&gt;&lt;strong&gt;🔌 六、设备驱动与内核模块（Driver &amp;amp; Module）&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;模块&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;书中章节&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;2.6.11 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;6.x 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;说明&lt;/strong&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;第 20 章&lt;/td&gt;
          &lt;td&gt;kernel/module.c&lt;/td&gt;
          &lt;td&gt;kernel/module/（目录化）&lt;/td&gt;
          &lt;td&gt;模块系统大改：支持 LTO、压缩、Rust 模块等&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;设备驱动模型&lt;/td&gt;
          &lt;td&gt;第 13 章&lt;/td&gt;
          &lt;td&gt;drivers/base/&lt;/td&gt;
          &lt;td&gt;drivers/base/&lt;/td&gt;
          &lt;td&gt;书中介绍的 kobject/kset/driver model 仍是基础&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;字符设备&lt;/td&gt;
          &lt;td&gt;第 13 章&lt;/td&gt;
          &lt;td&gt;drivers/char/&lt;/td&gt;
          &lt;td&gt;drivers/char/&lt;/td&gt;
          &lt;td&gt;仍可用同样机制注册字符设备&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-七同步机制synchronization&#34;&gt;&lt;strong&gt;⚙️ 七、同步机制（Synchronization）&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;模块&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;书中章节&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;2.6.11 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;6.x 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;说明&lt;/strong&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;第 5 章&lt;/td&gt;
          &lt;td&gt;kernel/spinlock.c, kernel/semaphore.c&lt;/td&gt;
          &lt;td&gt;kernel/locking/&lt;/td&gt;
          &lt;td&gt;完全独立成 kernel/locking/ 模块&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;RCU（Read-Copy-Update）&lt;/td&gt;
          &lt;td&gt;第 5 章&lt;/td&gt;
          &lt;td&gt;初步存在&lt;/td&gt;
          &lt;td&gt;kernel/rcu/&lt;/td&gt;
          &lt;td&gt;现代内核的核心机制之一&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;原子操作&lt;/td&gt;
          &lt;td&gt;第 5 章&lt;/td&gt;
          &lt;td&gt;include/asm/atomic.h&lt;/td&gt;
          &lt;td&gt;include/linux/atomic/&lt;/td&gt;
          &lt;td&gt;已高度泛化并支持多架构实现&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-八网络子系统networking&#34;&gt;&lt;strong&gt;🌐 八、网络子系统（Networking）&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;模块&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;书中章节&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;2.6.11 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;6.x 路径&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;说明&lt;/strong&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–19 章&lt;/td&gt;
          &lt;td&gt;net/ipv4/, net/core/&lt;/td&gt;
          &lt;td&gt;net/ipv4/, net/core/, net/ipv6/&lt;/td&gt;
          &lt;td&gt;路径相同，但功能极大增强（XDP、eBPF）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Socket 实现&lt;/td&gt;
          &lt;td&gt;第 18 章&lt;/td&gt;
          &lt;td&gt;net/socket.c&lt;/td&gt;
          &lt;td&gt;net/socket.c&lt;/td&gt;
          &lt;td&gt;接口一致，内部实现复杂化&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;eBPF&lt;/td&gt;
          &lt;td&gt;无&lt;/td&gt;
          &lt;td&gt;无&lt;/td&gt;
          &lt;td&gt;kernel/bpf/, tools/bpf/&lt;/td&gt;
          &lt;td&gt;⚡ 新增：现代 Linux 内核的重大特性&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-九核心入口函数速览linux-6x-仍保留的经典符号&#34;&gt;&lt;strong&gt;🧩 九、核心入口函数速览（Linux 6.x 仍保留的经典符号）&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;函数名&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;路径&lt;/strong&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;start_kernel()&lt;/td&gt;
          &lt;td&gt;init/main.c&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;系统调用&lt;/td&gt;
          &lt;td&gt;sys_* 系列&lt;/td&gt;
          &lt;td&gt;kernel/sys_*.c&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;进程调度&lt;/td&gt;
          &lt;td&gt;schedule()&lt;/td&gt;
          &lt;td&gt;kernel/sched/core.c&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;创建进程&lt;/td&gt;
          &lt;td&gt;do_fork(), copy_process()&lt;/td&gt;
          &lt;td&gt;kernel/fork.c&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;虚拟内存管理&lt;/td&gt;
          &lt;td&gt;do_mmap(), do_munmap()&lt;/td&gt;
          &lt;td&gt;mm/mmap.c&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;文件打开&lt;/td&gt;
          &lt;td&gt;do_sys_openat2()&lt;/td&gt;
          &lt;td&gt;fs/open.c&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;读写文件&lt;/td&gt;
          &lt;td&gt;vfs_read(), vfs_write()&lt;/td&gt;
          &lt;td&gt;fs/read_write.c&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-十推荐的现代学习路线图结合你的环境&#34;&gt;&lt;strong&gt;🧭 十、推荐的现代学习路线图（结合你的环境）&lt;/strong&gt;&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;阶段&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;内容&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;对应实践&lt;/strong&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;阶段 1：结构导览&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;通读 ULK 前 3 章 + 对照 init/, kernel/, arch/x86/&lt;/td&gt;
          &lt;td&gt;阅读 init/main.c 中的 start_kernel()&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;阶段 2：进程调度与内存&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;对照书中第 3–9 章&lt;/td&gt;
          &lt;td&gt;阅读 kernel/sched/ 与 mm/page_alloc.c&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;阶段 3：VFS 与系统调用&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;书中第 10–14 章&lt;/td&gt;
          &lt;td&gt;对照 fs/ 与 arch/x86/entry/&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;阶段 4：同步与驱动模型&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;书中第 5、20 章&lt;/td&gt;
          &lt;td&gt;查看 kernel/locking/, drivers/base/&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;阶段 5：现代特性探索&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;eBPF、io_uring、cgroups、namespaces&lt;/td&gt;
          &lt;td&gt;阅读 kernel/bpf/, fs/io_uring.c, kernel/cgroup/&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-总结&#34;&gt;&lt;strong&gt;✅ 总结&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;你完全可以用 &lt;strong&gt;Linux 6.x + OrbStack&lt;/strong&gt; 学《深入理解 Linux 内核》。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 基础</title>
      <link>http://pemako.cn/posts/linux-basics/</link>
      <pubDate>Thu, 09 Apr 2026 20:00:00 +0800</pubDate>
      <guid>http://pemako.cn/posts/linux-basics/</guid>
      <description>&lt;p&gt;GUI (Graphical User Interface) 图形用户界面。用户界面的所有元素图形化，主要使用鼠标作为输入工具，点击图标执行程序，使用按钮、菜单、对话等尽心个交互，追求医用，看起来比较美&lt;/p&gt;
&lt;p&gt;CLI (Command Line Interface) 命令行界面。用户界面字符化，使用键盘作为输入工具，输入命令、选项、参数执行程序，追求高效，看起来比较酷&lt;/p&gt;
&lt;h2 id=&#34;缩写习惯&#34;&gt;缩写习惯&lt;/h2&gt;
&lt;h3 id=&#34;1-最常见的缩写取每个单词的首字母&#34;&gt;1. 最常见的缩写，取每个单词的首字母&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cd&lt;/code&gt; &lt;code&gt;Change Directory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dd&lt;/code&gt; &lt;code&gt;Disk Dump&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;df&lt;/code&gt; &lt;code&gt;Disk Free&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;du&lt;/code&gt; &lt;code&gt;Disk Usage&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pwd&lt;/code&gt; &lt;code&gt;Print Working Directory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps&lt;/code&gt; &lt;code&gt;Processes Status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PS&lt;/code&gt; &lt;code&gt;Prompt Strings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;su&lt;/code&gt; &lt;code&gt;Substitute User&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rc&lt;/code&gt; &lt;code&gt;Run Command&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Tcl&lt;/code&gt; &lt;code&gt;Tool Command Language&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cups&lt;/code&gt; &lt;code&gt;Common Unix Printing System&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apt&lt;/code&gt; &lt;code&gt;Advanced Package Tool&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bg&lt;/code&gt; &lt;code&gt;BackGround&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ping&lt;/code&gt; &lt;code&gt;Packet InterNet Grouper&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-如果首字母后为h通常保留&#34;&gt;2. 如果首字母后为&lt;code&gt;h&lt;/code&gt;,通常保留&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;chsh&lt;/code&gt; &lt;code&gt;CHange SHell&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chmod&lt;/code&gt; &lt;code&gt;CHange MODe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chown&lt;/code&gt; &lt;code&gt;CHange OWNer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chgrp&lt;/code&gt; &lt;code&gt;CHange GRouP&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash&lt;/code&gt; &lt;code&gt;Bourne Again Shell&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zsh&lt;/code&gt; &lt;code&gt;Z SHell&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ksh&lt;/code&gt; &lt;code&gt;Korn SHell&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssh&lt;/code&gt; &lt;code&gt;Secure SHell&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-递归缩写类&#34;&gt;3. 递归缩写类&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GNU&lt;/code&gt; &lt;code&gt;GUN&#39;s Not Unix&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PHP&lt;/code&gt; &lt;code&gt;PHP; Hypertext Pregrocessor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RPM&lt;/code&gt; &lt;code&gt;RPM Package Manager&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WINE&lt;/code&gt; &lt;code&gt;WINE Is Not an Emulator&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PNG&lt;/code&gt; &lt;code&gt;PNG&#39;s Not GIF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nano&lt;/code&gt; &lt;code&gt;Nano&#39;s ANOther editor&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-如果只有一个单词通常取每个音节的首字母&#34;&gt;4. 如果只有一个单词，通常取每个音节的首字母&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cp&lt;/code&gt; &lt;code&gt;CoPy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ln&lt;/code&gt; &lt;code&gt;LiNk&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ls&lt;/code&gt; &lt;code&gt;LiSt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mv&lt;/code&gt; &lt;code&gt;MoVe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rm&lt;/code&gt; &lt;code&gt;ReMove&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;5-对于目录通常使用前几个字母作为缩写&#34;&gt;5. 对于目录，通常使用前几个字母作为缩写&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bin&lt;/code&gt; &lt;code&gt;BINaries&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dev&lt;/code&gt; &lt;code&gt;DEVices&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;etc&lt;/code&gt; &lt;code&gt;ETCetera&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lib&lt;/code&gt; &lt;code&gt;LIBrary&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;var&lt;/code&gt; &lt;code&gt;VARiable&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;proc&lt;/code&gt; &lt;code&gt;PROCesses&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sbin&lt;/code&gt; &lt;code&gt;Superuser BINaries&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tmp&lt;/code&gt; &lt;code&gt;TemPorary&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;usr&lt;/code&gt; &lt;code&gt;Unix Shared Resources&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;diff&lt;/code&gt; &lt;code&gt;DIFFerences&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cal&lt;/code&gt;    &lt;code&gt;CALendar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cat&lt;/code&gt;    &lt;code&gt;CATenate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ed&lt;/code&gt;    &lt;code&gt;EDitor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exec&lt;/code&gt; &lt;code&gt;EXECute&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tab&lt;/code&gt;    &lt;code&gt;TABle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regexp&lt;/code&gt; &lt;code&gt;REGular EXPression&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;6-如果某种缩写比较深入人心例如mesg代表message在新的复合缩写中将沿用这种缩写方式&#34;&gt;6. 如果某种缩写比较深入人心，例如&amp;quot;mesg&amp;quot;代表&amp;quot;message&amp;quot;，在新的复合缩写中，将沿用这种缩写方式&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dmesg&lt;/code&gt; &lt;code&gt;Diagnostic MESsaGe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sed&lt;/code&gt; &lt;code&gt;Stream EDitor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stty&lt;/code&gt; &lt;code&gt;Set TTY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fstab&lt;/code&gt; &lt;code&gt;FileSystem TABle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;passwd&lt;/code&gt; &lt;code&gt;PASSWorD&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;7-有些缩写中第一个字母g代表gnu&#34;&gt;7. 有些缩写中，第一个字母&amp;rsquo;g&amp;rsquo;，代表&amp;rsquo;GNU&#39;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;awk&lt;/code&gt; &lt;code&gt;Aho Weiberger and Kernighan&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gawk&lt;/code&gt; &lt;code&gt;GNU AWK&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gpg&lt;/code&gt; &lt;code&gt;GNU Privacy Guard&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grep&lt;/code&gt; &lt;code&gt;GNU Regular Expression Print&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;egrep&lt;/code&gt; &lt;code&gt;Extended GREP&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;命令选项从a到z&#34;&gt;命令选项，从a到z&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;a
&lt;ul&gt;
&lt;li&gt;all: 全部，所有（ls, uname, lsattr）&lt;/li&gt;
&lt;li&gt;archive: 存储(cp, rsync)&lt;/li&gt;
&lt;li&gt;append: 附加 (tar -A , 7z)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;b
&lt;ul&gt;
&lt;li&gt;blocksize: 块大小，带参数 (du , df)&lt;/li&gt;
&lt;li&gt;batch: 批处理模式 (交互模式的程序通常拥有此选项，如 top -b)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;c
&lt;ul&gt;
&lt;li&gt;commands : 执行命令，带参数 (bash , ksh , python)&lt;/li&gt;
&lt;li&gt;create : 创建 (tar)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;d
&lt;ul&gt;
&lt;li&gt;debug : 调试&lt;/li&gt;
&lt;li&gt;delete : 删除&lt;/li&gt;
&lt;li&gt;directory : 目录 (ls)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;e
&lt;ul&gt;
&lt;li&gt;execute : 执行，带参数 (xterm , perl)&lt;/li&gt;
&lt;li&gt;edit : 编辑&lt;/li&gt;
&lt;li&gt;exclude : 排除&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;f
&lt;ul&gt;
&lt;li&gt;force : 强制，不经确认(cp , rm ,mv)&lt;/li&gt;
&lt;li&gt;file : 文件，带参数 (tar)&lt;/li&gt;
&lt;li&gt;configuration file : 指定配置文件(有些守护进程拥有此选项，如 ssh , lighttpd)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;g&lt;/li&gt;
&lt;li&gt;h
&lt;ul&gt;
&lt;li&gt;&amp;ndash;help : 帮助&lt;/li&gt;
&lt;li&gt;human readable : 人性化显示(ls , du , df)&lt;/li&gt;
&lt;li&gt;headers : 头部&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;i
&lt;ul&gt;
&lt;li&gt;interactive : 交互模式，提示(rm , mv)&lt;/li&gt;
&lt;li&gt;include : 包含&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;k
&lt;ul&gt;
&lt;li&gt;keep : 保留&lt;/li&gt;
&lt;li&gt;kill&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;l
&lt;ul&gt;
&lt;li&gt;long listing format : 长格式(ls)&lt;/li&gt;
&lt;li&gt;list : 列表&lt;/li&gt;
&lt;li&gt;load : 读取 (gcc , emacs)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;m
&lt;ul&gt;
&lt;li&gt;message : 消息 (cvs)&lt;/li&gt;
&lt;li&gt;manual : 手册 (whereis)&lt;/li&gt;
&lt;li&gt;create home : 创建 home 目录 (usermod , useradd)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;n
&lt;ul&gt;
&lt;li&gt;number : 行号、编号 (cat , head , tail , pstree , lspci)&lt;/li&gt;
&lt;li&gt;no : (useradd , make)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;o
&lt;ul&gt;
&lt;li&gt;output : 输出 (cc , sort)&lt;/li&gt;
&lt;li&gt;options : 选项 (mount)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;p
&lt;ul&gt;
&lt;li&gt;port : 端口，带参数 (很多网络工具拥有此选项，如 ssh , lftp )&lt;/li&gt;
&lt;li&gt;protocol : 协议，带参数&lt;/li&gt;
&lt;li&gt;passwd : 密码，带参数&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;q
&lt;ul&gt;
&lt;li&gt;quiet : 静默&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;r
&lt;ul&gt;
&lt;li&gt;reverse : 反转&lt;/li&gt;
&lt;li&gt;recursive : 递归 (cp , rm , chmod -R)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;s
&lt;ul&gt;
&lt;li&gt;silent : 安静&lt;/li&gt;
&lt;li&gt;size : 大小，带参数&lt;/li&gt;
&lt;li&gt;subject&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;t
&lt;ul&gt;
&lt;li&gt;tag&lt;/li&gt;
&lt;li&gt;type: 类型（mount）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;u
&lt;ul&gt;
&lt;li&gt;user：用户名、UID、带参数&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;v
&lt;ul&gt;
&lt;li&gt;verbose : 冗长&lt;/li&gt;
&lt;li&gt;version : 版本&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;w
&lt;ul&gt;
&lt;li&gt;width : 宽度&lt;/li&gt;
&lt;li&gt;warning : 警告&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;x
&lt;ul&gt;
&lt;li&gt;exclude : 排除 (tar , zip)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;y
&lt;ul&gt;
&lt;li&gt;yes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;z
&lt;ul&gt;
&lt;li&gt;zip : 启用压缩 (bzip , tar , zcat , zip , cvs)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;学会使用man命令&#34;&gt;学会使用&lt;code&gt;man&lt;/code&gt;命令&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;下面以 &lt;code&gt;man date&lt;/code&gt; 为例进行说明
&lt;img loading=&#34;lazy&#34; src=&#34;https://raw.githubusercontent.com/pemako/assets/main/2022/202212081315728.png&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://raw.githubusercontent.com/pemako/assets/main/2022/202212081316797.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sed</title>
      <link>http://pemako.cn/posts/sed/</link>
      <pubDate>Thu, 09 Apr 2026 20:00:00 +0800</pubDate>
      <guid>http://pemako.cn/posts/sed/</guid>
      <description>&lt;h2 id=&#34;重要函数说明&#34;&gt;重要函数说明&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;q&lt;/code&gt;  提前退出命令，不执行后续命令，也不读入后续行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d&lt;/code&gt;  删除&lt;code&gt;pattern space&lt;/code&gt;(模式空间)中的所有内容，包括换行符&lt;/li&gt;
&lt;li&gt;&lt;code&gt;D&lt;/code&gt;  删除模式空间中的首行，即第一个&lt;code&gt;\n&lt;/code&gt;之前的所有内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;h&lt;/code&gt;  &lt;strong&gt;拷贝&lt;/strong&gt;模式空间中的所有内容到&lt;code&gt;hold space&lt;/code&gt;(交换空间)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;H&lt;/code&gt;  &lt;strong&gt;追加&lt;/strong&gt;模式空间中的所有内容到交换空间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g&lt;/code&gt;  &lt;strong&gt;拷贝&lt;/strong&gt;交换空间中的所有内容到模式空间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;G&lt;/code&gt;  &lt;strong&gt;追加&lt;/strong&gt;交换空间中的所有内容到模式空间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n&lt;/code&gt;  &lt;strong&gt;读取&lt;/strong&gt;下一个输入行，使用接下来的命令继续对下一行进行处理&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N&lt;/code&gt;  &lt;strong&gt;追加&lt;/strong&gt;下一个输入行到当前模式空间，并改变当前行号&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p&lt;/code&gt;  打印当前行所有模式空间中的内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P&lt;/code&gt;  打印当前行模式空间中的首行，即第一个&lt;code&gt;\n&lt;/code&gt;之前的所有内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x&lt;/code&gt;  将模式空间和交换空间的内容进行交换&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t label&lt;/code&gt; 如果条件满足，则跳转到标签所在地继续执行，若无标签，则到命令末尾&lt;/li&gt;
&lt;li&gt;&lt;code&gt;b label&lt;/code&gt; 直接跳转到标签所在地继续执行，若无标签，则到命令末尾&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;模式空间和交换空间都属于缓存区&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;模式空间-pattern-space&#34;&gt;模式空间 (pattern space)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;默认情况下 &lt;code&gt;sed&lt;/code&gt; 逐行处理空间&lt;/li&gt;
&lt;li&gt;编辑指令支队该空间生效&lt;/li&gt;
&lt;li&gt;该空间如无&lt;code&gt;d/D&lt;/code&gt;命令，必打印&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;交换空间保持空间-hold-space&#34;&gt;交换空间/保持空间 (hold space)&lt;/h2&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;h2 id=&#34;入门例子详解&#34;&gt;入门例子详解&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;sed&lt;/code&gt;的命令参数有： &lt;code&gt;-n&lt;/code&gt; &lt;code&gt;-i&lt;/code&gt; &lt;code&gt;-e&lt;/code&gt; &lt;code&gt;-r&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;sed&lt;/code&gt;的函数参数有: &lt;code&gt;i&lt;/code&gt; &lt;code&gt;c&lt;/code&gt; &lt;code&gt;a&lt;/code&gt; &lt;code&gt;r&lt;/code&gt; &lt;code&gt;w&lt;/code&gt; &lt;code&gt;y&lt;/code&gt; &lt;code&gt;q&lt;/code&gt; &lt;code&gt;s&lt;/code&gt; &lt;code&gt;n&lt;/code&gt; &lt;code&gt;N&lt;/code&gt; &lt;code&gt;d&lt;/code&gt; &lt;code&gt;D&lt;/code&gt; &lt;code&gt;p&lt;/code&gt; &lt;code&gt;P&lt;/code&gt; &lt;code&gt;h&lt;/code&gt; &lt;code&gt;H&lt;/code&gt; &lt;code&gt;g&lt;/code&gt; &lt;code&gt;G&lt;/code&gt; &lt;code&gt;x&lt;/code&gt; &lt;code&gt;t&lt;/code&gt; &lt;code&gt;b&lt;/code&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
