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