Linux中获取硬盘空闲空间

6

在bash脚本中,我需要获取整个磁盘的总大小和当前已使用的大小。

我知道可以使用以下命令获取总磁盘大小,而不需要root权限:

cat /sys/block/sda/size

这个命令将输出设备SDA上块的数量。将其乘以512,您就会得到此设备上的字节数。这足以获取总磁盘大小。
现在是关于当前使用空间的问题。我想在没有root权限的情况下获取此值。我可以假设设备名称为SDA。现在有一个命令:df。我打算使用这个命令,但它似乎只输出当前挂载分区的数据。
有没有办法获取SDA磁盘上已使用空间的总量,而不需要root权限且不需要所有分区都被挂载?
让我们假设以下例子:
/dev/sda1 80GB Linux partition 20GB Used
/dev/sda2 80GB Linux Home partition 20GB Used
/dev/sda3 100GB Windows Parition. 30GB Used

假设我的SDA磁盘分区如上所示。但是当我在Linux上时,我的Windows分区(sda3)未被挂载。
df命令的输出将给出我使用了40GB的总量,因此它不考虑sda3。
再次提问: 是否有一种方法可以在没有root权限的情况下获取我使用了70GB的总空间?

使用sudo运行fdisk -l命令? - riteshtch
就像我的问题所说的那样,我知道使用sudo的方法。但是这个程序不会在sudo权限下运行。至少我尽量避免使用sudo。我真的需要一个不需要sudo的解决方案。 - Baklap4
lsblk | tr -s ' ' | cut -d ' ' -f1,4 |column -t - Daniel
@Joda lsblk 显示每个分区的总空间。我知道如何获取它们。但我想问的是每个分区的总可用空间,而不管它们是否已挂载。 - Baklap4
2个回答

1
我认为stat命令会有所帮助。你可以从/proc/partitions获取分区信息。 stat命令示例输出:
$ stat -f /dev/sda1
  File: "/dev/sda1"
    ID: 0        Namelen: 255     Type: tmpfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 237009     Free: 236970     Available: 236970
Inodes: Total: 237009     Free: 236386

-1

你可以使用df

df -h --output='used' /home 
Used
3.2G

如果你结合一些 sed 或者 awk,你就可以得到你想要的值。

就像我之前说过的,df命令无法给我所需的信息。因为它只会显示目录的总大小。我不知道有哪些分区,所以这个命令行不通。此外,df只能跟踪当前已挂载的设备,而不能显示完整的磁盘空间。 - Baklap4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接