linux perl模块 使用,常用perl模块的使用

本文介绍Perl中的几个实用模块,包括Net::Ping用于网络连通性检查、File::Copy及File::Rsync进行文件复制与同步、Net::OpenSSH实现远程SSH连接及命令执行、Getopt::Std用于命令行参数解析,以及Expect模块简化交互式脚本编写。
摘要由CSDN通过智能技术生成

1.   Net::Ping,perl的ping模块,范例:

点击(此处)折叠或打开

#!/usr/bin/perl -w

use strict;

use Net::Ping;

sub ping_check{

my $dest=shift;

my $mp = Net::Ping->new("icmp");

if($mp->ping($dest,2)){

print "$dest is alive\n";

}else {

print "$dest is dead\n";

}

$mp->close;

}

while (my $host=<>){

chomp $host;

&ping_check($host);

}

2.File::Copy 主要提供了copy和move函数

点击(此处)折叠或打开

#!/usr/bin/perl

use strict;

use warnings;

use File::Copy;

my $filein=$ARGV[0];

my $fileout=$ARGV[1];

copy($filein,$fileout) or die "copy $filein to $fileout failed\n";

move($fileout,"$fileout.test") or die "mv $fileout to $fileout.txt failed\n";

3.File::Rsync;

点击(此处)折叠或打开

#!/usr/bin/perl

use strict;

use warnings;

use File::Rsync;

my $filein=$ARGV[0];

my $fileout=$ARGV[1];

&rsync_file($filein,$fileout);

sub rsync_file{

my $localdir=shift;

my $remotedir=shift;

print "rsync file from $localdir to $remotedir\n";

my $obj = File::Rsync->new( { archive => 1, compress => 1 ,del=>1} );

$obj->exec( { src => $localdir, dest => $remotedir } ) or warn "rsync failed\n";

}

需要注意在使用rsync的时候Rsync->new里面的参数del,del表示删除目标文件中有但是源文件没有的文件。

另外就是如果我们是同步两个目录,应该使用rsync dir1/ dir2这样的形式。

如果使用sync dir1 dir2的话,结果就是dir1被放到dir2下面去了,也不要使用rsync dir1/* dir2的形式,否则当dir1是空文件夹的时候会报错。

4.  Net::OpenSSH

点击(此处)折叠或打开

#!/usr/bin/perl

use strict;

use warnings;

use Net::OpenSSH;

my $rhost=shift;

my $cmd=shift;

&remotessh_cmd($rhost,$cmd);

sub remotessh_cmd{

my $host=shift;

my $cmd=shift;

chomp $host;

my $private_key_path='/root/.ssh/id_rsa';

my $ruser="root";

my %opt=("user"=>$ruser,"key_path"=>$private_key_path,"timeout"=>3,"kill_ssh_on_timeout" => 1);

my $ssh= Net::OpenSSH->new($host,%opt);

$ssh->error and die "Couldn't establish SSH connection: ". $ssh->error;

my $out=$ssh->capture($cmd);

print "SSH result:$out";

$ssh->error and die "remote command failed:".$ssh->error;

}

如果不是太在意执行结果的输出,可以直接使用 $ssh->system($cmd)来操作,需要注意执行返回值的问题,比如你强制杀掉某个进程,如果这个进程不存在了返回值就不是0,需要用$ssh->system("$cmd;exit0")这样的形式。

5.Getopt::Std

这个就不用多说了,解析参数用的。

getopts("f:s:ul:",\%options);

然后对$options{'f'}等等进行判断是否存在,如果存在的话那么-f指定的参数就是$options{'f'}。

6. Expect;

perl里面使用expect脚本也简单的,下面是用expect的签发证书的脚本中的一部分。

my $exp = Expect->spawn ($cmd) or die "Cannot spawn : $cmd \n";

$exp->log_stdout(0);

$exp->log_file("expect.log");#记录整个文件

$exp->expect(30,

[ qr#Enter pass phrase for $choice{dir}/$choice{file}.key:#i => sub { my $exp = shift;

$exp->send("$choice{'passwd'}\r");

exp_continue; }],

.........................

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值