使用 Ruby 获取磁盘空间信息的最佳方法是什么?我倾向于使用纯 Ruby 方案。如果不可能(即使使用其他 gem),也可以使用标准 Ubuntu 桌面安装中可用的任何命令将信息解析为 Ruby。
require 'sys/filesystem'
stat = Sys::Filesystem.stat("/")
mb_available = stat.block_size * stat.blocks_available / 1024 / 1024
spaceMb_i = `df -m /dev/sda1`.split(/\b/)[24].to_i
其中'/dev/sda1'是路径,可以通过运行df命令来确定
bytes_free = \
df -B1 .`.split[10].to_i`。 - rogerdpackgb_available = stat.bytes_free / 1024 / 1024 / 1024
1024 / 1024 / 1024
,从字节到兆字节再到千兆字节。看到 bytes_free
应该就能明白了。mb_available
是标准的数据显示方式,除非它小于1MB。不过你可以通过参数控制想要的单位(KB、MB、GB)。 - DotSlashCodingbytes_free
返回字节(它确实是这样),然后我们将其除以1024三次,我们就可以得到:字节->千字节->兆字节->千兆字节。所以@zachaysan的问题是为什么变量被命名为mb_available
而不是更准确的gb_available
。 - aidanmb_available
的变量包含一个数字,该数字代表可用的兆字节数量,同时我也会期望一个名为 gb_available
的变量包含一个数字,该数字代表可用的千兆字节数量。但是在上面的答案中,我们将“可用的千兆字节数量”存储在一个名称暗示它实际上存储“可用的兆字节数量”的变量中 - 这是具有误导性的,应该避免。 - aidan您好,我已经为此创建了一个宝石(gem):https://github.com/pr0d1r2/free_disk_space
gem 'free_disk_space' # 将此行添加到 Gemfile 文件中
FreeDiskSpace.terabytes('/')
FreeDiskSpace.gigabytes('/')
FreeDiskSpace.megabytes('/')
FreeDiskSpace.kilobytes('/')
FreeDiskSpace.bytes('/')
这仅适用于Linux系统:如果您不介意调用shell,可以使用df
命令获取文件系统信息并使用正则表达式解析输出:
fs_to_check = '/boot'
df_output = `df #{fs_to_check}`
disk_line = df_output.split(/\n/)[1]
disk_free_bytes = disk_line.match(/(.+)\s+(\d+)\s+(\d+)\s+(\d+)\s+/)[4].to_i
disk_free_mbs = disk_free_bytes / 1024
puts(disk_free_mbs)
与rogerdpack的评论类似,为了获得以GB/MB为单位的可用空间,您可以尝试以下操作
# Get free space in Gb in present partition
gb_free = `df -BG .`.split[10].to_i
# Get free space in MB in /dev/sda1 partition
mb_free = `df -BM /dev/sda1`.split[10].to_i
puts gb_free, mb_free
**
)是什么意思? - hagello我的无需使用 gem 的解决方案(仅适用于 Linux):
storage_info = `df -h | grep "sda1" -w`
# storage_info => "/dev/sda1 39G 27G 12G 70% /"
然后根据您可能需要的确切信息(总空间、已用空间、可用空间、百分比中的已用空间),您可以执行以下操作:
free_space = storage_info.split(" ")[3]
# free_space => "12G"
我相信这更加健壮可靠。
filesystem = "/dev/sda1"
free_megabytes = `LANG=C df -m #{filesystem}`.split("\n").map do |line|
line.split.first(4)
end.transpose.to_h["Available"]&.to_i
puts(free_megabytes)
def check_disk_space
system('df -H | grep debug > ff')
ss = File.open('ff').read.split(/\s+/)
system('rm ff')
"#{ss[3]}"
end
在Ubuntu上使用,用于检查调试文件的大小,并将可用大小作为输出。