在Go中,有没有一种方法可以检查文件系统上可用/已使用/总 inode 的数量?
我想要的东西就像df -i返回的一样,并且如果可能的话,不想调用dfdf的示例:

# On macOs 10.15 (-i not needed here)
df /
Filesystem   512-blocks     Used Available Capacity iused      ifree %iused  Mounted on
/dev/disk1s2  236568496 22038704  44026328    34%  488339 1182354141    0%   /

# On Ubuntu 18.04
df -i /
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/vda1      2621440 219719 2401721    9% /

最佳答案

您可以使用syscall.Statfs。它的参数是路径名和Statfs_t结构的指针。它使用包含路径名指定的文件或目录的文件系统的统计信息来填充结构。通常,您将使用./或安装点的路径名。
这是一个Go程序,它以路径名作为参数并显示inode信息。

package main

import (
    "fmt"
    "os"
    "syscall"
)

func main() {
    var statfs syscall.Statfs_t
    path := os.Args[1]
    if err := syscall.Statfs(path, &statfs); err != nil {
        fmt.Fprintf(os.Stderr, "Cannot stat %s: %v\n", path, err)
        os.Exit(1)
    }
    fmt.Printf("Inodes: total %d, free %d\n", statfs.Files, statfs.Ffree)
}

10-06 13:16