yae*_*ael -1 linux bash sed awk perl
lvs 是向我们显示文件系统大小的好命令
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_root vgW -wi-ao---- 100.00g
lv_swap vgW -wi-ao---- 7.72g
lv_var vgW -wi-ao---- 100.87g
Run Code Online (Sandbox Code Playgroud)
我正在尝试捕获根文件系统大小
直到现在我创建了以下语法
lvs | awk '$1 ~ /root/' | awk '{print $NF}' | sed s'/\./ /g' | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
及其打印(预期输出为 100 )
100
Run Code Online (Sandbox Code Playgroud)
但我想改进我的语法以变得更好
有什么建议 ?
lvs
显示有关 LVM 卷的信息。它可以为您提供包含根文件系统的块设备的大小(而不是该文件系统的大小),如果该文件系统恰好位于 LVM 卷上,并且您知道哪个(不知道,逻辑卷的名称)不具备有在它的“根”)。
size=$(
lvs --unit b --nosuffix --no-headings --config 'log{prefix=""}' -o size vgW/lv_root
)
Run Code Online (Sandbox Code Playgroud)
要找出包含根文件系统的块设备的大小,无论是 LVM 卷还是磁盘分区还是 NBD/loop/md...设备(但请注意,根文件系统不必由块支持用于网络文件系统、zfs、btrfs...)的设备,在 Linux 上,我会使用lsblk
:
size=$(
lsblk -Jbo size,mountpoint | jq '.blockdevices[]|select(.mountpoint=="/").size'
)
Run Code Online (Sandbox Code Playgroud)
要查找/
文件系统的大小,您可以使用df
(假设为 GNU df
)或findmnt
:
size=$(findmnt -bno size /)
Run Code Online (Sandbox Code Playgroud)
size=$(df -B1 --output=size / | awk 'NR==2{print $1}')
Run Code Online (Sandbox Code Playgroud)
这些以字节为单位为您提供大小,即最精确的大小。如果您希望将大小四舍五入为整数千兆字节,只需除以 1000000000:
gigabytes=$((size / 1000000000))
Run Code Online (Sandbox Code Playgroud)
或者以 gibibytes 为单位(请注意,lvs
使用基于 1024 的后缀,其中g
表示 gibibyte,而不是 gigabyte),请使用:
gibibytes=$((size / 1024 / 1024 / 1024))
Run Code Online (Sandbox Code Playgroud)
虽然上面的所有命令也允许指定不同的单位(但要注意 gigabyte 与 gigibyte 并且大多数会给你浮点数,并且可能会以不同的方式进行四舍五入,并根据语言环境使用不同的十进制基数字符)。
归档时间: |
|
查看次数: |
93 次 |
最近记录: |