自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(170)
  • 收藏
  • 关注

原创 Linux设备与存储精读 · L04-01 | 扇区、LBA、块大小对照与容量换算:字节、MiB、十六进制

摘要:Linux存储单位与换算要点 核心概念: 扇区:磁盘最小寻址单位(通常512B或4KiB),LBA为扇区编号 三种块区分:设备扇区 ≠ 文件系统块(常4KiB) ≠ 内存页(常4KiB) 容量单位:分区配置多用MiB(1MiB=1048576字节),注意与十进制MB区别 关键换算: 十六进制地址直接表字节:0x12C00000=300MiB 字节↔扇区:除以扇区大小(如512B) 分区地址校验:下区起始=本区起始+本区大小 工具命令: blockdev --getss获取扇区大小 blockdev -

2026-08-03 18:18:27 233

原创 Linux设备与存储精读 · L03-04 | 目录权限 vs 块设备权限:为什么块设备不该 `0777`

本文摘要:Linux系统中挂载点目录和块设备节点具有独立的两套权限管理机制。挂载点目录的权限(如0777 system:system)控制路径访问,而块设备节点的权限(如0660 root:system)控制原始设备读写。块设备权限不应设为0777,否则会绕过文件系统带来安全风险。符号链接的权限(如by-name的lrwxrwxrwx)不代表目标设备权限,需用ls -lL查看实际节点权限。挂载后目录权限可能被文件系统根inode覆盖,需挂载后确认。Android系统中还需结合SELinux进行访问控制。

2026-08-03 16:15:33 244

原创 Linux设备与存储精读 · L03-03 | `chmod`、`chown`、umask 与 sticky bit

摘要 本文介绍了Linux系统中管理文件权限的关键命令,包括修改权限的chmod、修改属主/属组的chown/chgrp,以及控制默认权限的umask。重点讲解了目录粘滞位(sticky bit)的作用,并简要提及setuid/setgid功能。文章还对比了服务器与Android环境的操作差异,提供了常用命令选项清单,帮助用户在保证系统安全的前提下有效管理权限设置。

2026-08-02 19:38:19 496

原创 Linux设备与存储精读 · L03-02 | DAC 权限:ugo、八进制与 `rwx` 在文件/目录上的不同含义

本文摘要(≤150字): 本文详解Linux文件权限机制,重点解析ugo × rwx权限位与八进制表示。权限判定遵循属主→属组→其他的优先级,每组包含读(r)、写(w)、执行(x)三种权限,对文件和目录含义不同:文件x表示可执行,目录x表示可进入。常见权限组合如755(rwxr-xr-x)、644(rw-r--r--)等通过八进制数表示。目录权限需特别注意:r仅控制列目录项,w控制增删文件,x决定路径访问能力。文中提供判定流程图、权限示例及验证命令,强调DAC(自主访问控制)可能受挂载方式或SELinux限

2026-07-31 17:24:18 164

原创 Linux设备与存储精读 · L03-01 | 用户与组:uid、gid、`id`,以及 Android 上的 system/shell

摘要 本文是Linux设备与存储系列中的用户与组管理基础篇,主要围绕DAC(自主访问控制)中的身份识别展开。核心内容包括: 身份基础 内核通过数字uid/gid进行权限判断,用户名/组名仅为辅助映射 关键命令:id查看当前身份(uid/gid/补充组),ls -ln显示数字形式的属主属组 进程身份模型 实际用户(启动身份)与有效用户(当前权限依据) 主组决定基本权限,补充组扩展访问能力 Android特定知识 预置固定AID(如root=0,system=1000,shell=2000) adb shell

2026-07-30 17:06:54 381

原创 Linux设备与存储精读 · L02-04 | `stat` / `ls` 常用选项精读:读懂一个路径

这篇文章摘要了Linux中ls、stat、file和namei命令的核心用法,重点聚焦文件元数据查看与路径解析: 核心命令功能 ls -l:显示7类关键信息(类型、权限、链接数、属主、大小、时间、名称) stat:提供字段级元数据视图,支持脚本化输出 file:通过魔数识别文件实际内容类型 namei:逐级解析路径权限,定位访问障碍点 高频使用场景 符号链接处理(-L跟踪目标 vs 默认显示链接本身) 目录与内容的区分查看(-d) 存储排障关键操作(inode查看、大小格式化、设备号解析) 时间排序/递归/

2026-07-30 16:34:50 235

原创 Linux设备与存储精读 · L02-03 | 硬链接与符号链接:`ln`、`readlink`、`realpath`

本文介绍了Linux中的硬链接与符号链接的区别及操作: 硬链接:多个目录项共享同一inode,不能跨文件系统,删除一个不影响数据,ln命令创建。 符号链接:独立inode存储目标路径字符串,可跨文件系统,目标可不存在,ln -s创建。 常用操作: readlink查看链接内容 readlink -f/realpath解析最终路径 ls -l显示链接属性,ls -lL显示目标属性 Android应用:/dev/block/by-name使用符号链接管理分区设备节点。 关键区别在于硬链接直接共享inode,符号

2026-07-29 15:50:17 572

原创 Linux设备与存储精读 · L02-02 | inode 与目录项:名字、元数据、数据分别在哪

本文摘要(149字): Linux文件系统将文件拆解为名字(目录项)、元数据(inode)和数据块三部分。目录是特殊文件,其内容为「文件名→inode号」映射。同一inode可对应多个名字(硬链接基础)。文件系统镜像以二进制形式存储在块设备上,挂载后由驱动解析为可访问的路径结构。关键概念:inode存储元数据(类型、权限等)和数据块指针;目录项建立名字与inode的关联;超级块描述整个文件系统信息。

2026-07-29 11:36:53 326

原创 Linux设备与存储精读 · L02-01 | 文件类型全景:普通文件、目录、符号链接、设备节点

本文介绍了Linux系统中七种不同的文件类型及其在存储链路中的角色。主要内容包括: 文件类型概述:Linux通过路径统一访问接口,但内核用文件类型区分不同对象。主要类型包括普通文件(-)、目录(d)、符号链接(l)、块设备(b)、字符设备(c)、命名管道(p)和套接字(s)。 关键类型详解: 普通文件(-):字节序列,内容由程序解释 目录(d):存放名字映射,可能是普通目录或挂载点 符号链接(l):指向另一路径的快捷方式 块设备(b):按块访问的存储设备入口 存储场景应用: 普通文件用于存储镜像和配置 块设

2026-07-28 16:56:22 265

原创 Linux设备与存储精读 · L01-03 | 验证环境:Android 设备 + 远程 Linux 服务器怎么分工练

L01 心智模型与命令入口:35 分钟:Linux 设备与存储。

2026-07-27 16:43:06 267

原创 Linux设备与存储精读 · L01-02 | 学什么对象:文件、设备节点、挂载点与「命令只是探针」

Linux设备与存储:心智模型与命令探针 本文强调在Linux设备与存储管理中,应以系统对象(如文件、设备节点、挂载点等)为核心,而非单纯记忆命令。主要内容包括: 对象与探针模型:命令只是探测/操作对象的工具,学习应以理解对象本身为重点 路径对象类型:包括普通文件(-)、目录(d)、符号链接(l)、块设备节点(b)等 链路对象:虽不可见但重要的概念,如分区、块设备、文件系统、挂载关系等 命令选择逻辑:不同命令针对同一对象回答不同问题(如mount显示挂载信息,df显示空间使用) 常见误读:提醒注意命令输出可

2026-07-27 14:32:56 363 1

原创 Linux设备与存储精读 · L01-01 | 一条存储链路:介质、分区、块设备、文件系统、挂载

文章摘要 本文介绍了Linux存储系统的核心概念链,从物理介质到文件访问的完整路径:物理存储介质→分区表→块设备→文件系统→挂载点→目录权限。通过仓库类比解释了各环节的作用(介质如建筑、分区如库房、块设备如装卸口等),并强调关键区分点(如分区≠文件系统)。文章提供了三条核心命令(ls -l查看设备节点、mount查看挂载关系、df -h查看空间)的字段解读方法,指导读者在排障时快速定位问题环节(如分区缺失、挂载错误等)。最后通过实例演示如何用命令链验证存储链路状态,建立"先定位环节再下钻细节"的排障思维。

2026-07-27 14:29:57 333

原创 Makefile精读 · M03-04 | 目标/模式特定变量、`export` 与环境变量边界

摘要: 本文详解GNU Make中的变量作用域与传递机制。核心内容包括: 目标/模式特定变量:通过target: VAR := value或%.o: VAR += value实现局部覆盖,支持针对特定文件调整编译选项(如debug.o单独禁用优化)。 变量导出机制:export VAR使Make变量进入配方shell环境,区分$(VAR)(Make展开)与$$VAR(shell环境变量),避免混淆两种传递路径。 作用域叠加规则:全局变量可被目标/模式特定赋值覆盖,:=会重置值,+=则追加,需注意阅读顺序。

2026-07-23 18:00:02 375

原创 Makefile精读 · M03-03 | 自动变量:`$@` `$<` `$^` `$?` `$*` 与目录变体

M03 变量体系:40~45 分钟:GNU Make★。

2026-07-22 10:37:33 361

原创 Makefile精读 · M03-02 | 展开时机:递归展开 vs 简单展开,以及覆写规则

本文深入解析GNU Make变量体系的核心难点——变量展开时机。主要区分了两种变量类型:简单变量(:=定义时立即展开)和递归变量(=每次引用时展开),通过实验对比展示了二者的关键差异。文章重点剖析了自引用陷阱、+=追加操作的展开规则、配方中的变量展开时机等易错点,并给出实用建议:配置型变量建议统一使用:=++=组合;函数调用特别是$(shell)要注意展开次数;通过覆写优先级链(override>命令行>普通赋值)解决变量覆盖问题。最后提供了$(info)调试和make -p等实用排查手段,帮助开发者精准定

2026-07-22 10:09:51 335

原创 Makefile精读 · M03-01 | 变量赋值全解:`=` `:=` `?=` `+=` `!=`

摘要(149字) GNU Make变量本质是字符串,支持5种赋值方式:=(递归延迟展开)、:=(立即展开)、?=(未定义时赋值)、+=(追加)和!=(执行shell命令)。:=是配置变量的首选,=多用于旧代码延迟展开,?=适合设置可覆盖的默认值。变量引用采用$(VAR)语法,命令行赋值优先级高于Makefile定义。理解不同赋值方式的展开时机对编写可靠Makefile至关重要,尤其要注意=可能引发的递归陷阱和+=与原变量类型的关联性。

2026-07-21 21:10:27 392

原创 Makefile精读 · M02-04 | 后缀规则、双冒号规则与「遗留写法」对照

本文介绍了 GNU Make 中两种遗留规则语法:后缀规则和双冒号规则,并与现代模式规则进行对比。 主要内容: 后缀规则(如.c.o)是模式规则(%.o: %.c)的前身,依赖.SUFFIXES列表控制生效范围 双冒号规则(::)允许同一目标有多个配方片段,执行时会被串联 现代实践推荐优先使用模式规则和静态模式规则,保持代码清晰 提供了新旧语法对照表和决策指南,帮助读者理解遗留代码 关键建议: 新项目应使用模式规则(%模式)和单冒号规则 阅读旧代码时可将后缀规则转换为等效模式规则理解 双冒号规则需检查所有相

2026-07-21 18:01:18 363

原创 Makefile精读 · M02-03 | 模式规则 `%` 与静态模式:读大型 Makefile 的钥匙

本文介绍了GNU Make中的模式规则与静态模式规则,它们是构建系统中的关键抽象机制。主要内容包括: 模式规则:使用%作为通配符,匹配的字符串称为"茎"。典型用法如%.o: %.c,通过茎在目标与依赖间传递。 静态模式规则:限定特定目标集合应用模式,语法为targets: target-pattern: prereq-patterns,比普通模式规则更可控。 自动变量:如$@(目标)、$<(首个依赖)、$*(茎)等,在模式规则中特别有用。 优先级:显式规则优先于模式规则,工程中常组合使用通用模式和特殊规则。

2026-07-20 16:10:07 356

原创 Makefile精读 · M02-02 | 多目标规则、同一配方与「一个目标多条规则」

摘要(149字) 本文解析Makefile中两类规则写法:多目标规则(a b c: deps)允许多个目标共享依赖和配方,但配方须用$@正确更新当前目标;同一目标的多条单冒号规则会合并依赖,但配方必须唯一。建议优先使用模式规则替代显式多目标,拆分时可用「仅依赖」规则追加头文件依赖。阅读时需全文搜索目标名拼合规则,警惕重复配方冲突。关键点:依赖合并、配方唯一、多目标慎用。

2026-07-20 15:40:48 409

原创 Makefile精读 · M02-01 | 显式规则:目标、依赖、配方与 Tab 纪律

文章摘要(≤150字) GNU Make显式规则的核心语法包括目标、依赖和配方三部分。目标与依赖以冒号分隔,配方必须以Tab开头。规则支持多目标、多依赖,长依赖列表可用\续行。配方默认每行独立启动shell,需用&&或\保持同一会话。前缀@抑制回显,-忽略错误,+强制执行。Tab缩进是语法要求,空格会导致missing separator错误。注释用#,空行不影响规则连续性。无配方的规则仅声明依赖关系,常见于all目标。掌握这些基础为后续多目标规则奠定关键基础。 (注:实际字数149,符合要求)

2026-07-18 19:15:09 295

原创 Makefile精读 · M01-04 | 命令行与环境:`-j` `-k` `-n` `-B` `-s` 与 `MAKEFLAGS`

本文介绍了GNU Make工具中最常用的几个命令行选项及其应用场景。主要内容包括: 常用选项功能: -j:并行执行任务加速构建 -k:失败后继续执行其他目标 -n:模拟执行(dry-run)用于调试 -B:强制重新构建所有目标 -s:静默模式减少输出 使用场景: 调试时先用-n检查 怀疑构建问题时用-B强制重编 开发时用-j加速构建 需要全面检查错误时用-k 环境传递: MAKEFLAGS变量会传递选项给子make进程 正确写法应使用$(MAKE)而非裸make 这些选项不改变Makefile语法但能显著影

2026-07-18 18:12:08 321

原创 Makefile精读 · M01-03 | 默认目标、`.PHONY` 与 `all`/`clean` 约定

文章摘要(150字): 本文介绍了GNU Make的核心概念与实用技巧,重点解析了默认目标的确定机制(首个非特殊规则或通过.DEFAULT_GOAL显式指定),并强调.PHONY对clean等动作目标的重要性,避免因同名文件导致构建失败。文章梳理了all(构建主产物)、clean(删除生成文件)等社区约定目标的作用,提供了最小Makefile骨架示例。阅读Makefile时建议优先关注默认目标、.PHONY声明和清理逻辑,同时注意命令行多目标的执行顺序。关键术语包括默认目标、伪目标、.DEFAULT_GOA

2026-07-17 10:31:48 386

原创 Makefile精读 · M01-02 | make 如何找到并执行 Makefile:`-f` `-C` 与默认文件名

摘要: 本文详解了GNU Make执行时的文件查找规则和工作目录机制。关键点包括: 默认查找顺序:在当前目录依次查找GNUmakefile→makefile→Makefile,使用首个找到的文件; -f选项:显式指定Makefile文件路径,优先级高于默认查找; -C选项:先切换工作目录再执行构建,影响所有相对路径解析; 路径解析原则:相对路径始终基于make进程的工作目录(由-C决定),而非Makefile文件位置; 工程实践建议:优先使用Makefile命名,通过make -n验证入口文件,注意文档指定

2026-07-17 10:04:03 432

原创 Makefile精读 · M01-01 | 什么是 Make:目标、依赖与配方

**文章摘要: 本文介绍了GNU Make的核心概念与基础用法,重点解析Makefile的三元组结构(目标、依赖、配方)。Make作为构建编排工具,通过时间戳比对实现增量编译,其核心规则遵循"若依赖比目标新则执行配方"的原则。文章通过最小示例展示如何编写基础Makefile,并阐述多规则依赖链的执行逻辑,强调应从依赖图角度而非文件顺序理解构建流程。同时指出常见误区(如混淆Make与编译器、误读执行顺序等),为后续学习Makefile的查找机制(M01-02)和变量函数(M03)奠定基础。关键要点包括:Tab

2026-07-16 16:55:58 534

原创 Shell脚本精读 · S14-03 | 综合实战:拆解一段真实开源/运维脚本

文章摘要: 本文以Bash工程化实战为核心,通过一个虚构的发布同步项目(release-sync)串联专栏全模块知识。从项目结构(README、配置、脚本分层)切入,详解代码走读六步法:1) 读文档明确入口与依赖;2) 定位bin/入口;3) 追踪source链与路径计算;4) 分析选项门禁(getopts);5) 跟踪业务逻辑(循环、外部命令如rsync/flock);6) 检查错误处理与并发控制(trap/锁)。示例包含120行典型脚本(入口+库文件),覆盖set -e防错、函数封装、参数校验等工程化实

2026-07-11 19:02:29 403

原创 Shell脚本精读 · S14-02 | 脚本模板:从 20 行工具到可维护项目

摘要 本文提供三种 Bash 脚本模板,根据项目复杂度选择适用方案: 一档(工具):20-40 行单文件脚本,适合一次性任务(如日志清理),强调简洁性。 二档(CLI):80-200 行单文件脚本,支持参数解析(getopts)、错误处理(trap)和日志功能,适合运维命令或批处理任务。 三档(项目):多文件结构(bin/+lib/),支持子命令、共享库和配置管理,适合团队协作的长期维护项目。 关键建议: 优先选择低档位,避免过度设计。 通过 shellcheck 和 bash -n 确保代码质量。 多文件

2026-07-11 18:58:39 389

原创 Shell脚本精读 · S14-01 | 风格约定:命名、引用、函数与错误处理

本文总结了Bash脚本工程化风格约定,主要包含以下要点: 文件规范 使用#!/usr/bin/env bash作为shebang 首行注释后立即设置set -euo pipefail严格模式 文件名应具有描述性(如backup-db.sh) 命名约定 常量/环境变量用UPPER_SNAKE_CASE 局部变量用lower_snake_case 函数命名采用verb_noun形式或小写下划线 代码结构 自上而下分四段:常量配置→工具函数→业务函数→main入口 函数内变量必须用local声明 提供标准die(

2026-07-11 18:45:38 501

原创 Shell脚本精读 · S13-02 | 可移植脚本编写清单与 `command`/`printf`

摘要 本文针对POSIX sh与Bash脚本的可移植性差异,提供了一份详细对照实践指南。主要内容包括: 明确脚本目标(POSIX sh或Bash专用),避免混用语法 推荐使用command -v检查依赖,替代非标准的which 建议用printf替代echo -e等不可移植用法 提供可移植脚本骨架示例,包含错误处理和参数检查 讲解条件判断、循环、模式匹配的POSIX兼容写法 注意事项:set选项的兼容性、IFS安全用法、路径处理等 提供检查清单,帮助编写通过dash和shellcheck验证的脚本 文章强调

2026-07-11 17:44:23 455

原创 Shell脚本精读 · S13-01 | POSIX sh 与 Bash:语法对照表

本文对比了POSIX sh与Bash的语法差异,帮助开发者在可移植脚本和Bash专用脚本间做出选择。主要内容包括: shebang重要性:#!/bin/sh不能包含Bash专用语法,否则可能在dash等严格POSIX shell中报错 核心差异: 条件测试:[ ]是POSIX,[[ ]]是Bash专属 算术运算:$(( ))是POSIX,(( ))是Bash专属 字符串/数组:Bash支持子串提取、模式匹配、数组等高级操作 流程控制:Bash支持for(( ))、{1..10}等扩展语法 最佳实践: 可移植

2026-07-09 15:09:05 539

原创 Shell脚本精读 · S12-03 | 排错方法论:最小复现与二分定位

Bash脚本排错六步法:从现象到根因的系统化调试指南 本文系统介绍了Bash脚本排错的标准化流程:1)准确记录现象(命令、环境、退出码);2)构建最小复现环境;3)使用二分注释法定位问题命令;4)结合-x调试输出分析执行流;5)对比环境差异(路径、权限、版本);6)针对性修复并验证。重点强调通过最小复现缩小问题范围,利用注释二分法快速定位失败点,配合set -x和ShellCheck等工具,避免盲目修改。文中包含典型排错场景示例,演示如何区分脚本主动退出与异常终止,并警告常见反模式(如忽略退出码、盲目添加|

2026-07-09 14:59:02 514

原创 Shell脚本精读 · S12-02 | 语法检查与 ShellCheck:静态发现问题

本文介绍了ShellCheck这一Bash脚本静态分析工具的使用方法和常见问题处理。主要内容包括: ShellCheck与动态调试的区别,前者用于静态检查语法和逻辑问题,后者用于运行时排错 安装方法和基本使用命令,包括本地安装和在线检查 常见错误编号(SCxxxx)及其对应的典型问题,如变量引号、cd失败处理等 示例演示如何修正常见警告 处理source命令跟踪和SC1090警告的方法 抑制规则的注意事项和原则 与set选项的关联检查 工作流建议,包括编辑器集成和CI流程 ShellCheck的局限性说明

2026-07-09 14:56:09 451

原创 Shell脚本精读 · S12-01 | 调试开关:`set -x` 与 `PS4`

摘要: 本文系统讲解Bash调试工具set -x(xtrace)与PS4的实战应用,帮助开发者查看变量展开后的实际执行命令。核心要点包括: 基础用法:通过set -x打印展开后的命令(前缀+),bash -x调试完整脚本,PS4自定义输出格式(推荐添加行号/函数名); 进阶技巧:结合set -e排查失败点、局部跟踪代码块、处理敏感信息泄露风险; 对比分析:set -v显示原始行而非展开结果,适用场景不同; 注意事项:避免生产环境长期开启xtrace(日志膨胀/安全风险),区分stderr与业务输出。 衔接S

2026-07-09 14:38:55 382

原创 Shell脚本精读 · S11-02 | 健壮性清单:锁、重试、超时与幂等

Bash 脚本健壮性实践指南 本文总结了编写健壮 Bash 脚本的关键技术与模式: 并发控制:推荐使用 flock 文件锁,或 mkdir 原子锁目录,避免多实例冲突 错误恢复:实现带退避策略(如指数退避)和尝试上限的重试机制 超时处理:通过 timeout 命令防止命令永久挂起 幂等设计:确保脚本重复执行不产生副作用,采用先检查后操作模式 资源检查:在脚本开始时验证必要依赖和环境变量(command -v、${VAR:?}) 锁清理:结合 trap 实现异常退出时的资源释放 文中提供了各模式的典型代码实现

2026-07-08 10:32:13 297

原创 Shell脚本精读 · S11-01 | 信号与 `trap`:清理临时文件与优雅退出

展开。

2026-07-08 10:09:26 317

原创 Shell脚本精读 · S10-03 | `sed`/`awk` 一键式调用:脚本中的「胶水」

本文介绍了在Bash脚本中调用sed和awk进行文本处理的常用方法。主要内容包括: sed基本用法: 替换文本(s/old/new/) 删除行(/pattern/d) 打印特定行(-n和p选项) 原地修改文件(-i选项及注意事项) awk核心功能: 按列处理(-F指定分隔符,$1/$NF等列引用) 条件处理(模式匹配和条件判断) 统计汇总(END块) 实用技巧: 通过-v传递Shell变量给awk 引号使用策略(单双引号区别) 常见代码片段示例(去重、过滤等) 错误处理和退出码 文章强调这些方法适合处理简单

2026-07-08 09:50:58 170

原创 Shell脚本精读 · S10-02 | `grep`/`egrep` 与脚本:过滤与 `if grep -q`

本文介绍了在Bash脚本中高效使用grep命令的核心技巧。主要内容包括: 基础用法:行过滤、多文件处理和标准输入读取 关键退出码机制(0/1/2)及其在脚本控制流中的应用 -q静默模式配合if判断存在性的最佳实践 正则表达式选项:-E扩展正则与-F字面量匹配的区别 常用选项速查表(-i/-v/-c/-l/-r等) 递归搜索时的路径过滤技巧(--include/--exclude-dir) 管道场景下的pipefail问题解决方案 脚本中常见的模式识别案例 特别强调避免grep | wc -l等冗余写法,提倡

2026-07-08 09:24:34 241

原创 Shell脚本精读 · S10-01 | 何时用 Shell、何时用 awk/sed:分工原则

本文阐述了Shell与文本处理工具(grep/sed/awk)的合理分工原则。Shell应专注流程控制、文件操作和进程管理,而将文本处理任务交给专用工具:grep用于行筛选(模式匹配)、sed擅长流式编辑(替换/删行)、awk处理列数据(统计/报表)。文章通过对比正反例说明,Shell应作为"胶水"协调工具链,避免硬用Bash实现复杂文本算法。典型反模式包括用for+cut解析CSV、超长命令替换等。正确做法是建立管道工作流(如grep过滤→awk提取→sort排序),并注意错误处理(pipefail)。文

2026-07-07 11:06:26 371

原创 Shell脚本精读 · S09-04 | 后台任务、`wait` 与进程替换

文章摘要(150字以内) 本文介绍了Bash中进程管理的核心操作: 后台执行:通过cmd &启动后台任务,$!获取其PID; 进程同步:使用wait等待指定或全部后台任务完成,注意处理退出码; 进程替换:<(cmd)和>(cmd)将命令输出/输入模拟为文件路径,支持diff <(a) <(b)等高级用法; 并行任务:结合&和wait实现简单并行,需保存多个PID避免覆盖; 注意事项:脚本退出前需显式等待后台任务,避免进程被意外终止。 文末提供典型应用场景和检查清单,帮助识别脚本中的关键模式。 (149字)

2026-07-07 10:45:44 388

原创 Shell脚本精读 · S09-03 | 子 Shell 与命令替换:`()` 与 `$()`

摘要: 本文介绍Bash中命令替换$(cmd)和子shell(cmd)的核心用法及常见误区。命令替换将命令输出作为文本插入命令行,需注意引号包裹防拆词、尾部换行去除等问题;子Shell在独立进程中执行命令,变量修改不影响父Shell。关键区分$( )(命令替换)、$(( ))(算术)、( )(子Shell)和{ }(命令组)的用途,并通过SCRIPT_DIR等经典模式解析子Shell环境特性。强调引号重要性及set -e下退出码处理,提供脚本检查清单避免常见错误。

2026-07-07 10:11:21 407

原创 Shell脚本精读 · S09-02 | 管道与管道退出码:`pipefail` 再探

摘要 本文重点讲解Bash管道的核心机制和使用技巧。管道(cmd1 | cmd2)将前者的stdout连接后者的stdin,两端命令并行执行。默认情况下,管道整体退出码仅取决于最后一个命令,这可能导致前端命令失败被忽略。通过set -o pipefail可改变这一行为,使任一环节失败即视为管道整体失败,常与set -e配合使用确保脚本健壮性。 Bash特有的PIPESTATUS数组可获取管道各环节的详细退出状态。需注意stderr默认不进入管道,需通过2>&1 |或|&重定向。常见模式如grep | awk

2026-07-06 15:17:14 683

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除