【问题标题】:How to get all the inodes under the linux filesystem with python?如何用python获取linux文件系统下的所有inode?
【发布时间】:2018-07-03 11:19:57
【问题描述】:

我正在尝试对 inode 进行一些计算(获取它们的大小等...) 我在网上找到的只是如何获取某个文件或目录的inode,但我想通过一次调用获取所有inode,然后逐个使用它们有什么想法吗?

谢谢

【问题讨论】:

    标签: python linux filesystems inode


    【解决方案1】:

    这个怎么样?

    import os
    inodes = os.popen("sudo ls -Rli / | awk '{ print $1 }'").read().split('\n')
    inodes = [int(i) for i in inodes if i.isnumeric()]
    

    对于我的主文件夹,这将返回一个 inode 编号列表:

    [11666512, 10223622, 10234894, 10223641, 10223637, 10617011, 10254828, 10249545, 10223642, 10223643, 10487015, 10223640, 11929556, 10223639, 10223644, 10486989]
    

    为了澄清,ls 命令采用三个标志参数,RliR 执行递归搜索以检查文件夹和所有以 / 开头的子文件夹中的所有文件,l 格式化输出以提供给我们一个列表,i 给我们提供 inode。我们将结果传递给 awk 以获取包含 inode 的第一列,然后对该数据进行一些简单的清理。

    【讨论】:

    • 谢谢你的回答,但它是关于某个目录的,我不想通过目录或文件来获取它们,我想获取整个表。我已经尝试遍历所有目录和文件并为它们获取 inode,实际上我需要文件系统表
    • @Godfather 我更新了答案,这能满足你的需要吗?
    • 我也试过这个,但我仍然只能在“root”中获取目录和文件。
    • @Godfather 对不起,我的错。我从我的代码中复制了错误的行。您只需添加R 标志,以便ls 递归搜索根文件系统。我刚刚更新了我的答案。希望对你有用
    【解决方案2】:

    您可以使用 Python3 中的 scandir 函数枚举所有 inode。

    import os
    inodes = [ ]
    for dirname,subdirs,filenames in os.walk('/') :
        inodes.extend ( [ k.inode() for k in os.scandir(dirname) ] )
    

    os.walk 返回所有目录。
    os.scandir 返回每个目录中的所有条目。 如果要获取起始目录的 inode,则必须使用 os.stat 来完成。

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 2011-07-24
      • 2017-08-09
      • 2011-05-19
      • 2013-05-10
      • 2012-09-01
      • 2018-10-26
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多