adb 调试中目录和索引节点转储的示例

此示例显示了如何创建 adb 脚本以显示目录内容以及文件系统的索引节点映射。 在此示例中,目录名为 dir 且包含许多文件。

该文件系统与 /dev/hd3 设备文件 (/tmp) 相关联,该设备文件具有必要的许可权供用户读取。

要显示目录,请创建适当脚本。 一个目录通常包含一个或多个条目。 每个条目均由无符号索引节点号(索引号)和 14 个字符的文件名组成。 可通过在脚本文件中包含命令显示此信息。 adb 调试程序期望对象文件为 xcoff 格式文件。 目录并不如此。 adb 程序指示目录 (因为它不是 xcoff 格式文件) 的文本长度为 0。 使用 m 命令向 adb 程序指示此目录的文本长度大于 0。 因此,通过输入以下命令在 adb 会话中显示条目:

,0?m 360 0

例如,以下命令显示以制表符分隔索引节点号和文件名的前 20 个条目:

0,20?ut14cn

你可以换第二个号码20,以指定目录中的条目数。 如果将以下命令置于脚本开头,那么 adb 程序将字符串显示为每列数字的标题:

="inumber"8t"Name"

一旦创建了脚本文件,使用目录名启动 adb 程序时,将它重定向为输入。 例如,以下命令在以下命令中启动 adb 程序:geo目录,使用来自以下位置的命令输入:ddump脚本文件:

adb geo - <ddump

减号 (-) 防止 adb 程序打开核心文件。 adb 程序从脚本文件读取命令。

要显示文件系统的索引节点表,请创建新脚本,然后使用与该文件系统相关的设备的文件名启动 adb 程序。 文件系统的索引节点表的结构复杂。 每个条目均包含:

  • 状态标记的字值
  • 数字链接的字节值
  • 用户和组标识的 2 字节值
  • 大小的字节和字值
  • 文件块磁盘上位置的 8 字值
  • 创建和修改日期的 2 字值

以下为目录转储输出的示例:

        inumber Name
0:       26    .
        2     ..
        27    .estate
        28    adbsamp
        29    adbsamp.c
        30    calc.lex
        31    calc.yacc
        32    cbtest
        68    .profile
        66    .profile.bak
        46    adbsamp2.c
        52    adbsamp2
        35    adbsamp.s
        34    adbsamp2.s
        48    forktst1.c
        49    forktst2.c
        50    forktst3.c
        51    lpp&us1.name
        33    adbsamp3.c
        241   sample
        198   adbsamp3
        55    msgqtst.c
        56    newsig.c

索引节点表从地址 02000 处开始。 可通过将以下命令置于脚本文件中显示第一个条目:

02000,-1?on3bnbrdn8un2Y2na

此命令为输出显示指定了几个换行符从而使该显示更加易于阅读。

要将脚本文件与 /dev/hd3 文件的索引节点表一起使用,请输入以下命令:

adb /dev/hd3 - <script

显示中的每个条目的格式为:

02000: 073145
    0163 0164 0141
    0162 10356
    28770 8236 25956 27766 25455 8236 25956 25206
    1976 Feb 5 08:34:56 1975 Dec 28 10:55:15