如何使用Perl从fstab中提取设备信息和挂载点?

时间:2012-01-25 09:15:20

标签: perl

我是Perl的新手,我真的需要一个特定问题的帮助。

我需要从我的fstab中提取信息,但那里有很多信息,我只想了解有关设备及其挂载点的信息。 我找到答案的最接近的是: http://www.freebsd.org/doc/en/articles/vinum/perl.html

但是因为我是Perl的新手,所以我很难调整代码,所以它可以帮助我解决问题

这是我的fstab,但我只想要3个“开发”行,包括挂载点,任何聪明的方法都可以做到这一点?

/dev/disk/by-id/usb-ST925041_0AS_FF9250410A0000000000005FF87FF7-part2 /                    
ext3       noatime,nodiratime,acl,user_xattr 1 1
/dev/disk/by-id/usb-ST925041_0AS_FF9250410A0000000000005FF87FF7-part3 /var/log             
ext3       noatime,nodiratime,acl,user_xattr 1 2
/dev/disk/by-id/usb-ST925041_0AS_FF9250410A0000000000005FF87FF7-part1 swap                 swap       
defaults              0 0
proc                 /proc                proc       defaults              0 0
sysfs                /sys                 sysfs      noauto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto                0 0
usbfs                /proc/bus/usb        usbfs      noauto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0

非常感谢帮助,提前谢谢!

2 个答案:

答案 0 :(得分:2)

如果这是你的输出,并且你只想抓住以/dev开头的行,你可以简单地将它传递给grep,而不需要改变你的perl脚本。

perlscript.pl | grep "^/dev"

不确定是否在没有-e标志的情况下工作,已经有一段时间了,我现在无法测试它。如果所有其他方法都失败了,请使用perl:

perlscript.pl | perl -nwe 'print if m#^/dev#'

答案 1 :(得分:1)

这样的事情应该没问题,然后:

#!/usr/bin/perl

open (my $fstab, "<", "/etc/fstab") or die "Cannot open /etc/fstab.";

while(<$fstab>)
{
    my @list = split;
    next if($list[0] !~ m,^/dev,);
    print "Device : $list[0]\nMountpoint : $list[1]\n";
}

close($fstab);
exit 0;

请记住,如果您的fstab具有UUID =条目或任何类型的文件系统,而这些文件系统不是/ dev中列出的设备,则无效。