科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用Perl管理Linux操作系统的配置文件 (3)

用Perl管理Linux操作系统的配置文件 (3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

一般的开发者用于定位、学习和调试配置文件的所花费的时间,比您预期的要更长。不过,使用一个您可能每天都在用的工具:CVS 树,您就可以节约那些时间——并减轻精力和挫折的负担。

作者:Teodor Zlatanov 来源:IBM DW中国 2007年10月20日

关键字: 文件 操作系统 Linux PERL

  • 评论
  • 分享微博
  • 分享邮件
 

我编写了一个 glob() 调用来测定默认的 CONFFILE,因为用户的主目录可能在任意位置。如果

CONFFILE 中包含非法数据, AppConfig 就会自动地停止整个程序(这可以修改为只提出一个警告)。脚本甚至不需要配置文件就可以运行。

打印了帮助文本后,我将 CVS_RSH 设置为适当的值(默认是 ssh )。这是为了让用户不必再以其他方式设置环境变量,这对那些将 maintain.pl 放入 crontab 中的用户来说尤其方便。

完成预备工作后,让我们来看脚本的核心部分:

清单 8: maintain.pl 的主循环

foreach my $spot (keys %{$config->UPDATE()})
{
 my $level = 0 + $config->UPDATE()->{$spot};
 next if $level > $config->LEVEL();
 print "Spot $spot, Level $level\n";
 chdir $spot;
 if ($config->DRYRUN())
 {
  print "Not updating due to DRYRUN\n";
 }
 else
 {
  system($config->CVS() . " -q update");
 }

 if ($config->COMMIT())
 {
  if ($config->DRYRUN())
  {
   print "Not committing due to DRYRUN\n";
  }
  else
  {
   system($config->CVS() . " commit -m ''")
  }
 }

}

这是一个简单的循环。我遍历每个 spot (这些实际上是目录),如果 spot 的级别低于或等于 LEVEL 配置变量(默认为 5),则执行 cvs update 。另外,如果设置了 COMMIT 标记,我会执行 cvs commit -m '' ,这将提交所有的修改,并给出一个空日志消息。实际上,如果没有 DRYRUN 标识,这个循环将只有几行长。

我以字符串格式而不是多参数格式来使用 system() 。您可以用第二种方式来使用——查看 perldoc -f system 以获得关于这个函数调用用法的细节。

此外,我没有检查 system() 调用 的结果,因为没有必要。在发生 CVS 更新或提交问题的时,maintain.pl 不能(或者不应该)任何事情,因为这些是重要的配置文件,我们不希望盲目地更新。

配置文件本身是简单的:

清单 9. maintain.conf

# the number is the update level
UPDATE /home/tzz/emacs = 0
UPDATE /home/tzz/config = 0
UPDATE /home/tzz/articles = 1
UPDATE /home/tzz/gnus/gnus = 1

不要忘记,在这里您可以设置任何 AppConfig 变量 ,所以,举例来说,您可以覆盖默认的 LEVEL 或 CVS_RSH 。我通过 maintain.pl 更新我的 Emacs、config、articles 和 gnus 目录,不过它们的更新级别不同,以反映我更新的频率(我每天更新级别为 0 的条目两次,级别为 1 的一次)。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章