Awk

AWK的工作模式 awk 'Pattern {Action}' 其中 Pattern 常用变量及函数 熟记的变量 NF NF 最后一个域,$NF获取最后一个域的值。如下 echo {a..d} | awk '{print NF, $NF}' 4 d NR/FNR NR表示awk开始执行程序后所读取的数据行数。FNR与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计。如果是一个文件的话,NF和FNR没有区别 有两个文件格式如下: account文件 张三|000001 李四|000002 cdr文件 000001|10 000001|20 000002|30 000002|15 想要得到的结果如下 张三|000001|10 张三|000001|20 李四|000002|30 李四|000002|15 FS/OFS FS输入字段分隔符,默认为空格。OFS输出字段分隔符,默认为空格。 echo "1:2:3" | awk 'BEGIN{FS=":"; OFS=","} {print $1, $2, $3}' 1,2,3 RS/ORS/RT RS输入记录分隔符,默认为换行符。ORS输出记录的分隔符默认为换行符号。 ➜ cat file a b:c d e f:g h 下面这命令解释,首先修改了RS的,则上面的file文件中的行会变成下面三行内容。然后后面打印第2列,即输出的结果为b d h a b c d e f g h ➜ cat file | awk 'BEGIN{RS=":"} {print $2}' b d h ➜ cat file | awk 'BEGIN{RS=":"; ORS=","} {print $2}' b,d,h, ➜ cat file | awk 'BEGIN{RS=":"; ORS=","} {print $2, "<"RT">"}' b <:>,d <:>,h <>, 如上面的一个例子 RT的值就是匹配到的RS的值,RS的值可以采用正则进行设定。 ...

April 9, 2026 · 6 min · Theme PaperMod

Bash

Bash基础 Shell与Bash sh 是一种标准,bash是符合这个标准的实现。 下面的流程是双向的,由于目前markdown中的编辑器不支持双向箭头操作,故先暂时这样。双向箭头, 同时也不支持subgraphs。 flowchart LR subgraph User 用户 end 用户<-->伪终端 用户<-->控制台 subgraph Term 伪终端<-->shell接收解析执行 控制台<-->shell接收解析执行 end shell接收解析执行<-->OS subgraph Kernel OS<-->硬盘I/O OS<-->网络I/O OS<-->其它操作 end 这里上传到github按照图片存储展示 Login Bash Login Bash初始化的配置文件分为下面两类 全局配置 /etc/profile 个人配置 ~/.bash_profile ~/.bash_login ~/.profile Login Sh Login Sh在初始话的时候只会加载下面两个配置文件 /etc/profile ~/.profile 查看用户使用的sh类型 /ect/passwd 创建用户的时候指定 sh useradd -s /bin/bash 修改用户的sh usermod, chsh 为了统一两种 Bash的配置,在login bash里应用interactive bash的配置 if [ -f "$HOME/.bashrc" ]; then source "$HOME/.bashrc" fi 脚本执行顺序 父shell Fork – Sub-shell Sub-shell 继承父shell环境 Sub-shell 调用指定的解释器执行该脚本 Sub-shell 退出,相关环境被销毁 父shell取得Sub-shell的退出状态 Bash命令的解析过程 命令解析的时候一定按照下面的7个步骤进行执行 ...

April 9, 2026 · 13 min · Theme PaperMod

Linux 内核

🧭《深入理解 Linux 内核(2.6.11)》 → Linux 6.x 源码结构对照与学习导引 🧩 一、系统整体结构 模块 书中章节 Linux 2.6 路径 Linux 6.x 路径 说明 内核入口(启动流程) 第 2 章 arch/i386/kernel/head.S, init/main.c arch/x86/kernel/head_64.S, init/main.c 入口逻辑相似:仍是 start_kernel(),但支持多架构(x86, ARM, RISC-V) 系统调用入口 第 10 章 arch/i386/kernel/entry.S, arch/i386/kernel/traps.c arch/x86/entry/entry_64.S, kernel/syscall_table.S 系统调用表机制相同,但入口汇编和 syscall wrapper 重写 内核初始化流程 第 3 章 init/main.c init/main.c 主干逻辑仍是 start_kernel() → rest_init() 🧠 二、进程与调度(Process & Scheduler) 模块 书中章节 2.6.11 路径 6.x 路径 说明 进程描述符 第 3–4 章 include/linux/sched.h, kernel/fork.c include/linux/sched.h, kernel/fork.c task_struct 结构仍然存在,字段大幅扩展(多 CPU、NUMA 支持) 进程创建 第 3 章 kernel/fork.c kernel/fork.c 核心函数仍是 do_fork() / copy_process() 进程终止 第 3 章 kernel/exit.c kernel/exit.c 逻辑基本相同 调度器 第 7 章 kernel/sched.c(O(1) 调度器) kernel/sched/core.c, kernel/sched/fair.c(CFS 调度器) 📌 最大差异:现代内核使用 CFS(完全公平调度器)取代了 O(1) 睡眠与唤醒 第 7 章 kernel/sched.c kernel/sched/core.c 同样通过 wait_queue 与 schedule() 🧮 三、内存管理(Memory Management) 模块 书中章节 2.6.11 路径 6.x 路径 说明 页框分配 第 8 章 mm/page_alloc.c mm/page_alloc.c 概念一致(buddy system),但支持 NUMA / CMA / ZONE_DEVICE 虚拟内存管理 第 9 章 mm/mmap.c, mm/mprotect.c mm/mmap.c, mm/mprotect.c vm_area_struct、mm_struct 概念仍相同 页面换出 第 15 章 mm/vmscan.c mm/vmscan.c 逻辑相似但复杂度大幅提升 Slab 分配器 第 8 章 mm/slab.c mm/slub.c, mm/slab_common.c 默认使用 SLUB(比 Slab 更简洁高效) 🧱 四、中断与异常(Interrupts & Exceptions) 模块 书中章节 2.6.11 路径 6.x 路径 说明 中断描述 第 4 章 arch/i386/kernel/irq.c, kernel/irq/handle.c kernel/irq/ 下多文件(manage.c, chip.c, spurious.c 等) 2.6 时是单文件,现在模块化程度更高 中断上下文切换 第 4–5 章 arch/i386/kernel/entry.S arch/x86/entry/entry_64.S 汇编层实现更新为 x86_64 调用约定 软中断、tasklet、工作队列 第 4–5 章 kernel/softirq.c, kernel/workqueue.c kernel/softirq.c, kernel/workqueue.c 概念完全保留 💾 五、文件系统(VFS & FS) 模块 书中章节 2.6.11 路径 6.x 路径 说明 虚拟文件系统层(VFS) 第 12 章 fs/namei.c, fs/open.c, fs/read_write.c fs/namei.c, fs/open.c, fs/read_write.c 几乎同名路径,代码更复杂 inode / dentry 机制 第 12 章 fs/inode.c, fs/dcache.c fs/inode.c, fs/dcache.c 概念完全相同,接口丰富 文件系统注册 第 13 章 fs/super.c fs/super.c 仍然是 register_filesystem() Ext2 文件系统 第 14 章 fs/ext2/ fs/ext4/ 现代系统几乎都使用 ext4 取代 ext2 🔌 六、设备驱动与内核模块(Driver & Module) 模块 书中章节 2.6.11 路径 6.x 路径 说明 模块加载机制 第 20 章 kernel/module.c kernel/module/(目录化) 模块系统大改:支持 LTO、压缩、Rust 模块等 设备驱动模型 第 13 章 drivers/base/ drivers/base/ 书中介绍的 kobject/kset/driver model 仍是基础 字符设备 第 13 章 drivers/char/ drivers/char/ 仍可用同样机制注册字符设备 ⚙️ 七、同步机制(Synchronization) 模块 书中章节 2.6.11 路径 6.x 路径 说明 自旋锁、信号量 第 5 章 kernel/spinlock.c, kernel/semaphore.c kernel/locking/ 完全独立成 kernel/locking/ 模块 RCU(Read-Copy-Update) 第 5 章 初步存在 kernel/rcu/ 现代内核的核心机制之一 原子操作 第 5 章 include/asm/atomic.h include/linux/atomic/ 已高度泛化并支持多架构实现 🌐 八、网络子系统(Networking) 模块 书中章节 2.6.11 路径 6.x 路径 说明 网络协议栈 第 18–19 章 net/ipv4/, net/core/ net/ipv4/, net/core/, net/ipv6/ 路径相同,但功能极大增强(XDP、eBPF) Socket 实现 第 18 章 net/socket.c net/socket.c 接口一致,内部实现复杂化 eBPF 无 无 kernel/bpf/, tools/bpf/ ⚡ 新增:现代 Linux 内核的重大特性 🧩 九、核心入口函数速览(Linux 6.x 仍保留的经典符号) 功能 函数名 路径 内核启动 start_kernel() init/main.c 系统调用 sys_* 系列 kernel/sys_*.c 进程调度 schedule() kernel/sched/core.c 创建进程 do_fork(), copy_process() kernel/fork.c 虚拟内存管理 do_mmap(), do_munmap() mm/mmap.c 文件打开 do_sys_openat2() fs/open.c 读写文件 vfs_read(), vfs_write() fs/read_write.c 🧭 十、推荐的现代学习路线图(结合你的环境) 阶段 内容 对应实践 阶段 1:结构导览 通读 ULK 前 3 章 + 对照 init/, kernel/, arch/x86/ 阅读 init/main.c 中的 start_kernel() 阶段 2:进程调度与内存 对照书中第 3–9 章 阅读 kernel/sched/ 与 mm/page_alloc.c 阶段 3:VFS 与系统调用 书中第 10–14 章 对照 fs/ 与 arch/x86/entry/ 阶段 4:同步与驱动模型 书中第 5、20 章 查看 kernel/locking/, drivers/base/ 阶段 5:现代特性探索 eBPF、io_uring、cgroups、namespaces 阅读 kernel/bpf/, fs/io_uring.c, kernel/cgroup/ ✅ 总结 你完全可以用 Linux 6.x + OrbStack 学《深入理解 Linux 内核》。 ...

April 9, 2026 · 7 min · Theme PaperMod

Linux 基础

GUI (Graphical User Interface) 图形用户界面。用户界面的所有元素图形化,主要使用鼠标作为输入工具,点击图标执行程序,使用按钮、菜单、对话等尽心个交互,追求医用,看起来比较美 CLI (Command Line Interface) 命令行界面。用户界面字符化,使用键盘作为输入工具,输入命令、选项、参数执行程序,追求高效,看起来比较酷 缩写习惯 1. 最常见的缩写,取每个单词的首字母 cd Change Directory dd Disk Dump df Disk Free du Disk Usage pwd Print Working Directory ps Processes Status PS Prompt Strings su Substitute User rc Run Command Tcl Tool Command Language cups Common Unix Printing System apt Advanced Package Tool bg BackGround ping Packet InterNet Grouper 2. 如果首字母后为h,通常保留 chsh CHange SHell chmod CHange MODe chown CHange OWNer chgrp CHange GRouP bash Bourne Again Shell zsh Z SHell ksh Korn SHell ssh Secure SHell 3. 递归缩写类 GNU GUN's Not Unix PHP PHP; Hypertext Pregrocessor RPM RPM Package Manager WINE WINE Is Not an Emulator PNG PNG's Not GIF nano Nano's ANOther editor 4. 如果只有一个单词,通常取每个音节的首字母 cp CoPy ln LiNk ls LiSt mv MoVe rm ReMove 5. 对于目录,通常使用前几个字母作为缩写 bin BINaries dev DEVices etc ETCetera lib LIBrary var VARiable proc PROCesses sbin Superuser BINaries tmp TemPorary usr Unix Shared Resources diff DIFFerences cal CALendar cat CATenate ed EDitor exec EXECute tab TABle regexp REGular EXPression 6. 如果某种缩写比较深入人心,例如"mesg"代表"message",在新的复合缩写中,将沿用这种缩写方式 dmesg Diagnostic MESsaGe sed Stream EDitor stty Set TTY fstab FileSystem TABle passwd PASSWorD 7. 有些缩写中,第一个字母’g’,代表’GNU' awk Aho Weiberger and Kernighan gawk GNU AWK gpg GNU Privacy Guard grep GNU Regular Expression Print egrep Extended GREP 命令选项,从a到z a all: 全部,所有(ls, uname, lsattr) archive: 存储(cp, rsync) append: 附加 (tar -A , 7z) b blocksize: 块大小,带参数 (du , df) batch: 批处理模式 (交互模式的程序通常拥有此选项,如 top -b) c commands : 执行命令,带参数 (bash , ksh , python) create : 创建 (tar) d debug : 调试 delete : 删除 directory : 目录 (ls) e execute : 执行,带参数 (xterm , perl) edit : 编辑 exclude : 排除 f force : 强制,不经确认(cp , rm ,mv) file : 文件,带参数 (tar) configuration file : 指定配置文件(有些守护进程拥有此选项,如 ssh , lighttpd) g h –help : 帮助 human readable : 人性化显示(ls , du , df) headers : 头部 i interactive : 交互模式,提示(rm , mv) include : 包含 k keep : 保留 kill l long listing format : 长格式(ls) list : 列表 load : 读取 (gcc , emacs) m message : 消息 (cvs) manual : 手册 (whereis) create home : 创建 home 目录 (usermod , useradd) n number : 行号、编号 (cat , head , tail , pstree , lspci) no : (useradd , make) o output : 输出 (cc , sort) options : 选项 (mount) p port : 端口,带参数 (很多网络工具拥有此选项,如 ssh , lftp ) protocol : 协议,带参数 passwd : 密码,带参数 q quiet : 静默 r reverse : 反转 recursive : 递归 (cp , rm , chmod -R) s silent : 安静 size : 大小,带参数 subject t tag type: 类型(mount) u user:用户名、UID、带参数 v verbose : 冗长 version : 版本 w width : 宽度 warning : 警告 x exclude : 排除 (tar , zip) y yes z zip : 启用压缩 (bzip , tar , zcat , zip , cvs) 学会使用man命令 下面以 man date 为例进行说明 ...

April 9, 2026 · 8 min · Theme PaperMod

Sed

重要函数说明 q 提前退出命令,不执行后续命令,也不读入后续行 d 删除pattern space(模式空间)中的所有内容,包括换行符 D 删除模式空间中的首行,即第一个\n之前的所有内容 h 拷贝模式空间中的所有内容到hold space(交换空间) H 追加模式空间中的所有内容到交换空间 g 拷贝交换空间中的所有内容到模式空间 G 追加交换空间中的所有内容到模式空间 n 读取下一个输入行,使用接下来的命令继续对下一行进行处理 N 追加下一个输入行到当前模式空间,并改变当前行号 p 打印当前行所有模式空间中的内容 P 打印当前行模式空间中的首行,即第一个\n之前的所有内容 x 将模式空间和交换空间的内容进行交换 t label 如果条件满足,则跳转到标签所在地继续执行,若无标签,则到命令末尾 b label 直接跳转到标签所在地继续执行,若无标签,则到命令末尾 模式空间和交换空间都属于缓存区 模式空间 (pattern space) 默认情况下 sed 逐行处理空间 编辑指令支队该空间生效 该空间如无d/D命令,必打印 交换空间/保持空间 (hold space) 按指令进行存取处理 如需编辑该空间,需交换出去 如需打印,需交换出去 入门例子详解 sed的命令参数有: -n -i -e -r sed的函数参数有: i c a r w y q s n N d D p P h H g G x t b ...

April 9, 2026 · 9 min · Theme PaperMod