istat 读单个 inode
istat 是 Sleuth Kit 里读取单个 inode 元数据的工具,输出该 inode 的类型、权限、属主、大小、四类时间戳(修改、访问、元数据变更、创建)以及数据块映射。它解决的是「某个具体文件到底是什么时候变化的」这类问题:先用 fls 或 ifind 拿到 inode 号,再用 istat 看四类时间的完整读数。因为直接工作在镜像上,它不会像挂载分区那样扰动元数据。
基本信息
| 适用平台 | Linux/macOS 分析机(Sleuth Kit) |
|---|---|
| 用法 | istat [-o 分区偏移] [-z 时区] <镜像> <inode 号> |
| 配套命令 | fls 列出目录项获取 inode,ifind 按文件名或时间反查 inode |
| 输出内容 | inode 属性、四类时间戳、数据块映射(直接与间接块) |
| 时间显示 | 由 -z 决定渲染时区,建议显式写 UTC |
| 只读特性 | 直接读取镜像,不挂载,不改变元数据 |
典型使用场景
- 核对单个文件的四类时间,判断是新建还是被修改
- 把文件时间与日志事件对齐,确认操作顺序
- 定位文件的数据块,为后续提取内容做准备
- 确认文件是否已被删除(inode 状态与链接数)
- 批量抽样若干关键文件的元数据,形成文件级时间线
- 复核其他工具(如 fls 输出)给出的时间读数是否一致
查看单个 inode
查看单个 inode
# 先用 fls 找到目标文件的 inode 号
fls -o 2048 -r -m / -z UTC /evidence/disk.dd | grep -F '/etc/passwd'
# 读取该 inode 的完整元数据(时间按 UTC 渲染)
istat -o 2048 -z UTC /evidence/disk.dd 12845 | sed -n '1,12p'
# 按文件名反查 inode,再用 istat 查看
ifind -o 2048 -n /etc/passwd /evidence/disk.dd
# 只看时间相关行
istat -o 2048 -z UTC /evidence/disk.dd 12845 | grep -iE 'modified|accessed|changed|created'
# 部分版本支持直接输出 bodyfile 格式,便于合并进时间线
# istat -o 2048 -z UTC -B /evidence/disk.dd 12845输出逐项读法
| 项 | 含义 | 判读要点 |
|---|---|---|
| inode 号与类型 | 唯一标识与文件类型 | 同一分区内唯一;不同分区会重复出现 |
| mode/uid/gid | 权限位与属主属组 | 可看出是否可执行、属主是否异常 |
| Modified | 内容修改时间 | 写入内容才会刷新 |
| Accessed | 访问时间 | 受挂载选项影响,noatime 下不可靠 |
| Changed | inode 元数据变更时间 | 改权限、改名都会刷新,不等同于创建时间 |
| Created | 创建时间 | 部分文件系统不支持或为 0 |
| 数据块映射 | 直接块与间接块列表 | 用于按块提取内容或分析碎片 |
Created 在部分文件系统上缺失或为 0;Changed 是 inode 元数据变更时间,不等同于创建时间。四类时间要分别理解,不要互相替代。
inode 号在不同分区会重复出现,必须同时带上分区偏移(-o)才是唯一定位。省略偏移可能读到另一分区的同名 inode,结论完全不同。