perl写cgi如何获得并且输出系统信息

perl写cgi如何获得并且输出系统信息

我想获取系统的ip地址这样的信息显示在网页里面,我写了下面的代码
系统是blfs 6.3,web服务器是lighttpd,开启了cgi支持,使用的root运行的web server,现在下面的cgi能运行,gmtime()的结果能正常显示,刷新也能改变,问题是@info不能显示,但是在控制台./index.pl这样运行可以正常显示,我知道肯定是我什么地方错了,查了好长时间的google,也没能得出个答案

谢谢大家帮我看看,多谢

#!/usr/bin/perl
use strict;
use warnings;
my @info = `ip add show`;
my $time = gmtime();
print   "Content-type:   text/html\n\n";
print <<end;
<html>
<head>
<title>测试界面</title>
<link rev="made" href="mailto:lcnja\@qq.com" />
<meta name="keywords" content="lcnja" />
<meta name="copyright" content="copyright 2008 Lcnja" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
@info
$time
</body>
</html>
end
那就顺带显示一下 $!
先谢谢flw的回复
我再详细的说一下在linux下运行和在网页里面显示的时候的输出

cli直接用root运行这个脚本,回显如下
Content-type:   text/html

<html>
<head>
<title>test it</title>
<link rev="made" href="mailto:lcnja@qq.com" />
<meta name="keywords" content="lcnja" />
<meta name="copyright" content="copyright 2008 Lcnja" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8 scope host lo
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN
     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
     link/ether 00:0c:29:15:9f:20 brd ff:ff:ff:ff:ff:ff
     inet 192.168.3.248/24 brd 192.168.3.255 scope global eth0
4: teql0: <NOARP> mtu 1500 qdisc noop state DOWN qlen 100
     link/void
5: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN
     link/ipip 0.0.0.0 brd 0.0.0.0
6: gre0: <NOARP> mtu 1476 qdisc noop state DOWN
     link/gre 0.0.0.0 brd 0.0.0.0

Sat Dec 13 02:21:12 2008
</body>
</html>




网页只显示如下

<html>
<head>
<title>test it</title>
<link rev="made" href="mailto:lcnja@qq.com" />
<meta name="keywords" content="lcnja" />
<meta name="copyright" content="copyright 2008 Lcnja" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

Sat Dec 13 02:22:22 2008
</body>
</html>

改了一下,现在在网页访问的时候连时间也不显示了,看来用cgi的时候@info赋值好像没成功,继续google想办法

#!/usr/bin/perl
use strict;
use warnings;
my @info = `ip add show`and my $time = gmtime();
print   "Content-type:   text/html\n\n";
print <<end;
<html>
<head>
<title>测试界面</title>
<link rev="made" href="mailto:lcnja\@qq.com" />
<meta name="keywords" content="lcnja" />
<meta name="copyright" content="copyright 2008 Lcnja" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
@info
$time
</body>
</html>
end
你的cgi 权限可能不够  不能执行  `ip add show`;

试试 chomd 777 *.cgi
问题搞定了
方法如下,为了安全,首先设置lighttpd的运行用户和组为www
然后添加www组和www用户,www用户的shell指定为false
设置sudoers
www     ALL=(ALL) NOPASSWD: /sbin/ip
然后代码改一行
my @info = `/sbin/ip add show`;

然后就可以输出了

感谢所有回我帖子的朋友,谢谢