您建议在Linux上获取磁盘名称的模块是什么?我已经对CPAN进行了一些搜索,但我找到的所有模块都太旧了.在Bash我可以使用类似的东西:
disk_name=$(df |grep -w '/'|awk '{print $1}'|cut -d/ -f3)
echo $disk_name
sda6
Run Code Online (Sandbox Code Playgroud)
请帮我理解如何在Perl中做同样的事情.谢谢.
在Linux上列出已安装磁盘的"正确"方法是通过getmntent()系统调用,可以使用Quota模块从Perl访问:
use Quota;
Quota::setmntent();
while (my ($dev, $path, $type, $opts) = Quota::getmntent()) {
print "The root device is $dev.\n" if $path eq "/";
}
Quota::endmntent();
Run Code Online (Sandbox Code Playgroud)
作为奖励,使用Quota模块列出设备挂载点应该是相当可移植到其他Unixish系统,解析各种系统文件或输出df可能不是.遗憾的是,这个看似基本的模块不包含在标准Perl发行版中,因此您必须从CPAN(或从您的发行版的软件包库中获取它 - 例如,Debian/Ubuntu具有libquota-perl软件包).
PS.简单地分割设备名称/和采取的第三个元素(如您的cut命令一样)是不转,也就是说,一个安全的方式/dev/sdb1进入sdb1.它的一些问题是:
/dev- 它只是一个惯例./dev,它可能是在它的子目录.例如,我的根文件系统在设备上/dev/disk/by-uuid/627f8512-f037-4c6c-9892-6130090c0e0f.tmpfs通常使用设备名称安装)none,但可以使用任何设备名称.如果你想摆脱这个/dev/部分,我建议使用正则表达式的保守方法,例如:
if ($dev =~ m(^/dev/(.*)$)s) {
print "The directory $path is mounted from device $1 under /dev.\n";
} else {
print "The directory $path is not mounted from a device under /dev.\n"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1067 次 |
| 最近记录: |