
模块L02 文件、路径与元数据篇号L02-04 / 38预计阅读45 分钟主线Linux 设备与存储文章目录本篇目标30 秒速览正文1. 读一条 ls -l复习并定锚2. ls存储场景高频用法2.1 看目录自身还是看目录里面2.2 隐藏项与递归2.3 inode、人类可读、数字身份2.4 符号链接跟随与否2.5 排序与单列2.6 类型提示与 SELinux 标签点到3. stat字段级元数据3.1 跟随链接3.2 自定义格式脚本必备3.3 看文件系统本身4. file内容/魔数线索5. namei路径逐级拆开6. 组合拳一条路径怎么读透常用选项清单必会lsstatfilenameiAndroid 对照检查清单练习判断题对 / 错选项填空读输出题操作题本篇边界L02 模块小结下一篇预告本篇目标把ls、stat的常用选项练到会选、会读并用file、namei补齐「内容线索」与「路径逐级解析」。学完后对任意路径能快速回答类型、inode、是否跟随链接、大小/时间、属主以及中间哪一层目录卡住访问。30 秒速览ls -l类型 权限 链接数 属主 大小 时间 名字存储排障第一探针。高频组合-ld看目录自身、-lL跟随符号链接、-liinode、-lh人类可读大小、-ln数字 uid/gid。stat同一套元数据的「字段级」视图-c/--format脚本化-L跟随链接-f看文件系统级信息。file按魔数猜内容类型镜像/稀疏等线索。namei按路径分量逐级显示类型与权限适合查「中间目录不可穿越」。正文1. 读一条ls -l复习并定锚adb shellls-l/dev/block/by-name/userdata# 服务器ls-l/tmp字段之间故意多留空格方便对竖线等宽字体下阅读lrwxrwxrwx 1 root root 20 2024-01-01 12:00 userdata - /dev/block/dm-56 │ │ │ │ │ │ │ │ │ │ │ │ │ └─ ⑦ 名字含 - 目标 │ │ │ │ │ └─ ⑥ 时间 │ │ │ │ └─ ⑤ 大小* │ │ │ └─ ④ 属组 │ │ └─ ③ 属主 │ └─ ② 硬链接计数 └─ ① 类型(首字符 l) 权限(后九位)拆开对照同一行① lrwxrwxrwx 类型 l 权限 rwxrwxrwx ② 1 硬链接计数 ③ root 属主 ④ root 属组 ⑤ 20 大小* ⑥ 2024-01-01 12:00 时间 ⑦ userdata - /dev/block/dm-56 名字符号链接带 -* 第⑤列随类型而变符号链接目标字符串长度本例20/dev/block/dm-56的长度普通文件字节大小块设备常为major, minor不是容量容量看blockdev/ls -lL目标节点等L05/L11不要把这里的20当成块设备大小。权限九位的语义在 L03本篇把选项用熟并把「看链接本身 / 看目标」分开。2.ls存储场景高频用法2.1 看目录自身还是看目录里面ls-l/data# 列出目录「内容」ls-ld/data# 列出目录「自己」这一行挂载点排障常用2.2 隐藏项与递归ls-la/data/local/tmp# 含 . 与 .. 及隐藏名ls-lA/data/local/tmp# 含隐藏名通常不含 . 与 ..ls-lR/data/local/tmp# 递归目录大时慎用2.3 inode、人类可读、数字身份ls-lifile# inode 号L02-02ls-lhfile# 大小用 K/M/Gls-lnfile# 属主/属组显示为 uid/gid 数字Android 上对照id时-n很有用L03。2.4 符号链接跟随与否ls-l/dev/block/by-name/userdata# 链接本身lls-lL/dev/block/by-name/userdata# 跟随显示目标属性常为 bls-lHsome-link# 命令行参数若是链接则跟随目录内容里的链接不跟随GNU选项行为直觉默认-l对符号链接显示链接本身-L遍历时跟随符号链接显示目标-H仅跟随「作为命令参数出现的」符号链接2.5 排序与单列ls-lt# 按修改时间新的在前ls-ltr# 时间排序后反转日志目录常用ls-lS# 按大小ls-1# 一列一个名字脚本友好2.6 类型提示与 SELinux 标签点到ls-lF# 目录名后 /可执行后 *链接后 等ls-lp# 目录名后加 /ls-lZ# 显示 SELinux 上下文有则显示规则编写不在本专栏Z只要求会看「还有标签」DAC 与 MAC 关系见 L12/L13。3.stat字段级元数据stat/datastat/dev/block/by-name/userdatastat-L/dev/block/by-name/userdata无选项时输出多行文件名、大小、块数、类型、inode、链接数、权限、uid/gid、三个时间戳等。不同实现版式略有差异字段含义一致。3.1 跟随链接statsymlink# 默认链接本身stat-Lsymlink# 目标等价于 dereference对 by-name要看块设备的 major/minor、权限用stat -L或先readlink -f再stat真身。3.2 自定义格式脚本必备GNU / 完整 coreutilsstat-c%n %F %i %s %a %U:%G/etc/hostsstat-c%n %t,%T/dev/loop0# 设备号十六进制 major/minor视实现stat-c%x %y %zfile# atime mtime ctime常用格式符必会格式符含义%n文件名%F类型描述regular file / directory / symbolic link / block special file…%f原始 mode十六进制%a权限八进制如 644%A权限人类可读如 -rw-r–r–%iinode%h硬链接数%s大小字节%b已分配块数实现相关%U%u属主名 / uid%G%g属组名 / gid%x%y%zatime / mtime / ctime%w诞生时间支持则显示否则-%d%D所在设备号十进制 / 十六进制%t%T设备节点 major/minor十六进制设备文件toyboxstat可能只支持部分格式符或选项名不同板上用可用子集完整格式在服务器练。3.3 看文件系统本身stat-f/datastat-f-c%n %t %S %b %f %a/data2/dev/null-f切换到文件系统级统计类型、块大小、总块数/空闲等与df信息相邻精确定量对比见 L11。4.file内容/魔数线索file/tmp/storage-lab.imgfile-L/dev/block/by-name/userdata2/dev/nullfile-bpath# 只打印结果不打印路径前缀file-ipath# MIME 类型对镜像文件可区分 raw、sparse、各类 FS 镜像等线索L08 会再用。对块设备节点file有时只报block special真正看 FS 类型更常用blkid/mountL05/L06。5.namei路径逐级拆开namei /data/local/tmp namei-l/data/local/tmp namei-m/data/local/tmp示意每一级显示f/d/l等以及权限适合回答「Permission denied 卡在中间哪一层」。选项含义-l长格式权限、属主等-m显示 mode-o显示拥有者详情实现相关-x碰到挂载点时显示文件系统类型等实现相关-n不跟随符号链接实现相关-v更啰嗦Android 上常无namei→ 服务器练板上可用反复ls -ld各级前缀路径代替。# 无 namei 时的等价思路adb shellls-ld/data adb shellls-ld/data/local adb shellls-ld/data/local/tmp6. 组合拳一条路径怎么读透以 by-name 为例adb shellls-l/dev/block/by-name/userdata adb shellls-lL/dev/block/by-name/userdata adb shellstat/dev/block/by-name/userdata adb shellstat-L/dev/block/by-name/userdata adb shell readlink-f/dev/block/by-name/userdata问题优先探针是不是符号链接ls -l/stat不跟随目标块设备权限/设备号ls -lL/stat -Linode / 精确字节大小ls -li/stat -c %i %s目录自身权限挂载点ls -ld/stat中间哪级目录卡住namei -l或逐级ls -ld文件内容像什么file常用选项清单必会ls选项含义典型场景Android/toybox远程服务器-l长格式看类型/权限/属主/大小有有-a含隐藏项与...查隐藏配置有有-A含隐藏项通常不含...列表更干净有有-d列出目录自身而非内容挂载点、目录权限有有-h与-l联用人类可读大小看镜像文件大小有有-i显示 inode硬链接对照L02-02/03有有-L跟随符号链接by-name → 块设备属性有有-H跟随作为参数的符号链接精细控制跟随视实现有-n数字 uid/gid与id对照有有-R递归小目录树大树慎用有有-1单列脚本处理名单有有-t按 mtime 排序找最新日志/产物有有-S按大小排序找大文件有有-r反转排序与-t/-S组合有有-F类型后缀提示快速扫目录有有-p目录名后加/同上更克制有有-ZSELinux 上下文确认「还有标签」常见视系统--full-time完整时间戳精确比对时间常无有GNU-G/-g长格式中省略属组或属主窄屏阅读视实现有--colorauto颜色交互浏览视实现有-R 管道/head控制递归输出量避免刷屏有有必会读法非选项行首类型字符设备节点的major, minor链接的-。stat选项/用法含义典型场景Android/toybox远程服务器无多行摘要人工查看有有-L/--dereference跟随符号链接by-name 看目标常见有-c FMT/--formatFMT按格式串输出脚本抽取字段部分有-f/--file-system文件系统级信息与df对照入口视实现有-t/--terse简短输出快速扫视实现有-c %n %F %i %s %a名/类型/inode/大小/八进制权限最常用脚本组合部分有-c %U:%G %u:%g属主属组权限排障部分有-c %x %y %z三个时间同步/缓存问题线索部分有-c %t %T设备 major/minor块设备节点部分有--printfFMT格式串可含\n精确控制输出常无有GNUfile选项含义典型场景Android/toybox远程服务器无路径 猜测结果看镜像/二进制线索视实现有-b不打印路径前缀脚本视实现有-iMIME分类文件视实现有-L跟随符号链接对链接查目标内容类型视实现有-s对特殊文件也读内容探测谨慎用于设备视实现有-z尝试看压缩包内压缩镜像视实现有-E出错时不继续猜脚本稳健视实现有--mime-type只打 MIME type脚本常无有namei选项含义典型场景Android/toybox远程服务器无逐级类型路径解析常无有-l长格式查哪级权限不足常无有-m显示 mode同上常无有-o拥有者信息同上常无有-x显示挂载点/FS 线索跨挂载点路径常无有-n不跟随符号链接与跟随对比常无有-v详细调试常无有无namei时对路径每一级前缀执行ls -ld。Android 对照adb shellls-ld/data adb shellls-l/dev/block/by-name/userdata adb shellls-lL/dev/block/by-name/userdata adb shellls-li/data/local/tmp2/dev/null|headadb shellstat/data adb shellstat-L/dev/block/by-name/userdata需求板上优先挂载点目录自身ls -ldby-name → 块设备ls -lls -lL或statstat -Linodels -li无namei逐级ls -ld完整stat -c/file/namei远程服务器检查清单会用-ld/-lL/-li/-lh/-ln/-la/-lR知其风险会用stat、stat -L、stat -c %n %F %i %s %a会用stat -f作为文件系统信息入口会用file看普通文件/镜像线索会用namei -l或逐级ls -ld定位路径中哪一层有问题对 by-name 能分清「链接自身」与「目标块设备」两套输出练习判断题对 / 错ls -l /data与ls -ld /data显示的是同一类信息。ls -lL作用于 by-name 时便于查看目标块设备的类型与权限。stat默认一定跟随符号链接到目标。inode 号应当跨/data与/system比较是否相等以判断是否同一文件。参考答案错。前者列内容后者列目录自身。对。错。默认看链接自身跟随用-L。错。inode 只在同一文件系统内有意义L02-02。选项填空只看挂载点/data自己的类型与权限ls ___ /data脚本要打印「路径、类型名、inode、字节大小」stat -c ________ path跟随 by-name 查看目标stat ___ path或ls ___ path参考答案-ld%n %F %i %s等价字段顺序可调整-L-lL读输出题$ ls -ld /data drwxrwx--x 1 root system 4096 ... /data $ ls -l /dev/block/by-name/userdata lrwxrwxrwx 1 root root 20 ... userdata - /dev/block/dm-56 $ stat -c %F %i %s %a /dev/block/by-name/userdata symbolic link 234 20 777 $ stat -L -c %F %t %T %a /dev/block/by-name/userdata block special file 00 fe 660/data的类型与属主属组by-name 未跟随时%s为 20 更可能表示什么跟随后类型与权限八进制是什么参考答案目录root:system。符号链接目标字符串长度约 20 字节不是块设备容量。block special file660。操作题Androidadb shellls-ld/data /dev/block adb shellls-l/dev/block/by-name/userdata adb shellls-lL/dev/block/by-name/userdata adb shellstat/data远程服务器cd/tmpechohils-stat-demo.txtln-sls-stat-demo.txt ls-stat-linkls-lils-stat-demo.txt ls-stat-linkls-lLls-stat-linkstat-c%n %F %i %s %a %Uls-stat-demo.txt ls-stat-linkstat-L-c%n %F %i %sls-stat-linkfilels-stat-demo.txt namei-l/tmp/ls-stat-linkrm-fls-stat-demo.txt ls-stat-link本篇边界不讲权限位如何判定能否读写L03不讲df/blockdev容量对比L11不讲 SELinux 策略仅会看ls -Z不讲find全选项后文按需出现L02 模块小结篇收获L02-01行首类型-dlbc…L02-02名字 / inode / 数据块分离目录项L02-03硬链接与符号链接ln/readlink/realpathL02-04ls/stat/file/namei常用选项收口下一篇预告L03-01《用户与组uid、gid、id以及 Android 上的 system/shell》— 进入 DAC弄清「谁」在访问对象。