需求是这样的,想远程执行这个命令,返回各个硬盘分区的剩余空间的大小,当然,剩余空间太小可能就要处理了。
package main import ( "fmt" "syscall" // "strings" gofstab "github.com/deniswernert/go-fstab" ) type DiskStatus struct { All uint64 `json:"all"` Used uint64 `json:"used"` Free uint64 `json:"free"` } const ( B = 1 KB = 1024 * B MB = 1024 * KB GB = 1024 * MB ) // disk usage of path/disk func DiskUsage(path string) (disk DiskStatus) { fs := syscall.Statfs_t{} err := syscall.Statfs(path, &fs) if err != nil { return } disk.All = fs.Blocks * uint64(fs.Bsize) disk.Free = fs.Bfree * uint64(fs.Bsize) disk.Used = disk.All - disk.Free return } func main(){ mounts ,_ :=gofstab.ParseSystem() for _,val := range mounts{ //fmt.Printf("%v\n",val.File) if val.File == "swap"||val.File == "/dev/shm"||val.File == "/dev/pts"||val.File == "/proc"||val.File =="/sys"{ continue } disk := DiskUsage(val.File) //fmt.Printf("All: %.2f GB\n", float64(disk.All)/float64(GB)) //fmt.Printf("Used: %.2f GB\n", float64(disk.Used)/float64(GB)) //fmt.Printf("Free: %.2f GB\n", float64(disk.Free)/float64(GB)) diskall:=float64(disk.All)/float64(GB) diskfree:= float64(disk.Free)/float64(GB) dfpercent:=float64(diskfree/diskall) fmt.Printf("%s %.2f%%\n",val.File, dfpercent*100) } }