有时我们知道了一个文件的file或者dentry地址,想知道对应的文件的路径,下面介绍两种方法:
file
如果知道的是file的地址,可以使用files命令:
crash> foreach files | grep ffff88824243e000 1 ffff88824243e000 ffff888140f07ad0 ffff888140f59368 REG /proc/sysrq-trigger
dentry
也可以先通过file的地址得到dentry的地址,方法很简单:
crash> *file.f_path -x ffff88824243e000 f_path = { mnt = 0xffff8887417c44a0, dentry = 0xffff888140f07ad0 },
比如dentry的地址是ffff888140f49710,输出文件路径的方法是:
- 使用files命令
crash> files -d 0xffff888140f49710 DENTRY INODE SUPERBLK TYPE PATH ffff888140f49710 ffff888140fb2b88 ffff8881c0daf000 REG /var/log/journal/a93e80bc64d54c6187b90bc46e84d7a8/system.journal
- 使用list命令
dentry结构通过d_parent指向父dentry,而dentry的名字存放在d_name中,所以可以得出:
crash> list -o dentry.d_parent -s dentry.d_name.name ffff888140f49710 ffff888140f49710 d_name.name = 0xffff888140f49788 "system.journal" ffff888140f495c8 d_name.name = 0xffff888140f11090 "a93e80bc64d54c6187b90bc46e84d7a8" ffff888140f490a8 d_name.name = 0xffff888140f49120 "journal" ffff888140f48f60 d_name.name = 0xffff888140f48fd8 "log" ffff888140f4ce18 d_name.name = 0xffff888140f4ce90 "var" ffff8881c487a520 d_name.name = 0xffff8881c487a598 "/" BASH 复制 全屏
- 遍历
crash> foreach files | grep ffff888140f49710