模块:L01 心智模型与命令入口 篇号:L01-03 / 38 预计阅读:35 分钟 主线:Linux 设备与存储
文章目录
-
- 本篇目标
- 30 秒速览
- 正文
-
- 1. 两种环境各干什么
- 2. Android:从 adb 进 shell
- 3. 远程服务器:先确认工具在不在
- 4. 服务器安全练法:文件 + loop
- 5. 同一问题,两边怎么对照练
- 6. 权限与「命令在不在」的决策
- 7. 本专栏后续练习落点(预告)
- Android 对照
- 检查清单
- 练习
-
- 判断题(对 / 错)
- 操作题 A(Android)
- 操作题 B(远程服务器)
- 读输出题
- 本篇边界
- 下一篇预告
- L01 模块小结
本篇目标
把后续练习落到两处:Android 设备负责看真机对象与挂载现象;远程 Linux 服务器负责练完整命令选项,并用文件 + losetup 安全模拟块设备。学完能判断「这条命令该在哪跑、缺权限时怎么办、危险操作碰谁」。
30 秒速览
- Android:adb shell,常见实现是 toybox;适合观察 /dev/block、mount、df、by-name。
- 远程服务器:util-linux / e2fsprogs 等更全;适合 lsblk、findmnt、losetup、mkfs、镜像工具。
- 精通标准按完整工具链;板上缺的命令到服务器练,概念两边通用。
- 服务器上练块设备:默认用普通文件 + loop,不要对系统盘 dd/mkfs。
- Android 镜像主机工具可从 AOSP out/host/linux-x86/bin 拷到服务器使用。
正文
1. 两种环境各干什么
| Android 设备 | 真实分区名、by-name、多挂载点、产品路径 | 命令选项常被裁剪;部分操作需 root |
| 远程 Linux 服务器 | 完整选项、反复试验、做/拆 loop 镜像 | 通常没有手机那套 by-name;勿伤系统盘 |
对象模型两边是同一套(L01-01 / L01-02)。差别主要在:探针齐不齐、路径长什么样、有没有权限。
分工原则:
2. Android:从 adb 进 shell
主机已装好 adb、设备已连接时:
adb devices
adb shell
需要更高权限时(视设备与 userdebug/eng 配置而定):
adb root
adb shell
# 或在 shell 内:
su
本专栏常用的观察入口:
adb shell ls -l /dev/block/by-name | head
adb shell mount | grep ' /data '
adb shell df -h /data
adb shell id
| adb devices 无设备 | 未授权、驱动、线材、未开调试 |
| Permission denied | 当前 uid 不够;试 adb root 或设备是否允许 root |
| 找不到某命令 | toybox 未提供该工具或未链到 PATH |
Android shell 里的许多命令来自 toybox:名字眼熟,选项往往比完整 util-linux / coreutils 少。 后文归属篇会给「常用选项清单」;表中标明 Android 不具备的,以服务器练习为准。
3. 远程服务器:先确认工具在不在
登录服务器后自检(包名因发行版而异,命令名如下):
which lsblk findmnt losetup blockdev blkid mkfs.ext4
lsblk -V 2>/dev/null || true
mount –version 2>/dev/null || true
| 块设备拓扑 | lsblk | Android 上常无 |
| 挂载查看 | findmnt、mount | findmnt 板上常无 |
| loop | losetup | 服务器练镜像/块设备的核心 |
| 容量 | blockdev、df、du | blockdev 板上可能需 root |
| FS 识别 | blkid | 视镜像是否带 |
| 创建 FS | mkfs.ext4 等 | 只对练习文件/loop |
缺包时按发行版安装 util-linux、e2fsprogs 等(具体 apt/yum 命令以服务器文档为准)。 Android 专用主机工具(如 simg2img、e2fsdroid、lpdump)可从已编译的 AOSP 树拷贝:
out/host/linux-x86/bin/
放到服务器某目录后,把该目录加入 PATH,或写全路径调用。
4. 服务器安全练法:文件 + loop
目标:得到一个「长得像块设备」的节点,而不去动 /dev/sda、/dev/vda 等系统盘。
示意流程(路径可自定;需要时加 sudo):
# 1)准备一个空文件当「假磁盘」(这里 64MiB)
dd if=/dev/zero of=/tmp/storage-lab.img bs=1M count=64 status=progress
# 2)挂到空闲 loop 设备
sudo losetup -f –show /tmp/storage-lab.img
# 假设打印:/dev/loop0
# 3)此时 /dev/loop0 就是可练习的块设备对象
ls -l /dev/loop0
sudo blockdev –getsize64 /dev/loop0
# 4)练完释放(先 umount 若已挂载)
sudo losetup -d /dev/loop0
rm -f /tmp/storage-lab.img
硬规矩:
后续 L05~L08 的破坏性步骤,默认都建立在这种 loop 之上。
5. 同一问题,两边怎么对照练
以「看见块设备与挂载」为例:
| 有哪些块设备 | ls -l /dev/block | lsblk;或 ls -l /dev/sd* /dev/vd* /dev/loop* |
| 某路径挂在谁上 | mount | grep ' /data ' | findmnt / 或 mount | grep ' / ' |
| 空间 | df -h /data | df -h / |
| 精确字节容量 | blockdev –getsize64 <节点>(常需 root) | 对 loop:blockdev –getsize64 /dev/loopN |
| 按名找分区 | /dev/block/by-name/… | 一般无 by-name;用 lsblk -f / 分区名列 |
对照目的:确认对象关系一致,而不是强求两边路径字符串相同。
6. 权限与「命令在不在」的决策
命令失败
├─ 提示 not found / No such file → 换环境或安装/拷贝工具
├─ 提示 Permission denied
│ ├─ Android:adb root / su;仍不行则换只读观察或服务器练等价项
│ └─ 服务器:sudo;或检查文件属主
└─ 提示 busy / target is busy → 先 umount / 查占用(L07)
读输出时仍用 L01-02 的规矩:先定对象,再解释探针结果。
7. 本专栏后续练习落点(预告)
| by-name、真机多挂载点、产品路径 | Android |
| ls/stat/chmod 语义 | 两边都可;完整选项偏服务器 |
| lsblk/findmnt/parted 查看 | 服务器 |
| mkfs/fsck/losetup/dd 实验 | 服务器 + loop |
| e2fsdroid/simg2img/lpdump | 服务器(主机工具) |
| 排障五题收口 | Android 现象 + 服务器复现实验 |
Android 对照
| 进入方式 | adb shell;调试机常见 adb root |
| 命令实现 | 多为 toybox |
| 块设备入口 | /dev/block、/dev/block/by-name |
| 与服务器差异 | 路径与工具集不同;分区/FS/挂载对象模型相同 |
检查清单
- 能说清:真机观察与服务器练选项分别解决什么问题
- 会用 adb devices / adb shell 做 L01 级观察
- 服务器上会用文件 + losetup 得到练习用块设备,并会 losetup -d 释放
- 明确:不对系统盘、不对量产用户数据做格式化练手
- 遇到 not found / Permission denied 时,知道换环境、提权或换探针
练习
判断题(对 / 错)
参考答案
操作题 A(Android)
adb devices
adb shell ls -l /dev/block/by-name | head
adb shell mount | grep ' /data '
adb shell df -h /data
记下:by-name 里是否有 userdata(或等价名)、/data 的设备与 type。
操作题 B(远程服务器)
按第 4 节创建 64MiB 文件并 losetup,然后:
ls -l /dev/loopN # N 换成实际编号
sudo blockdev –getsize64 /dev/loopN
sudo losetup -a | grep loopN
sudo losetup -d /dev/loopN
rm -f /tmp/storage-lab.img
确认:getsize64 结果为 67108864(64×1024×1024),释放后 loop 不再占用该文件。
读输出题
$ which findmnt lsblk
/usr/bin/findmnt
/usr/bin/lsblk
$ adb shell which findmnt lsblk
/system/bin/sh: findmnt: inaccessible or not found
参考答案
本篇边界
- 不讲各发行版装包的完整手册
- 不讲 adb 驱动与公司内网接入流程
- 不讲 losetup/mkfs 的完整选项清单(L08/L06 归属篇)
- 不讲量产烧录与解锁策略
下一篇预告
L02-01:《文件类型全景:普通文件、目录、符号链接、设备节点》— 从路径行首字母把对象类型认全,为 stat/ls 精读打底。
L01 模块小结
| L01-01 | 一条存储链路 + 会读 ls -l / mount / df |
| L01-02 | 对象是主体,命令是探针 |
| L01-03 | Android 观察、服务器练选项与 loop 安全实验 |
从 L02 起,按对象深挖;命令常用选项在各自归属篇收束到「必会清单」。



