linux运行perl脚本

随着可视化技术的进步,企业正在将物理服务器整合到虚拟化环境中,从而在减少功耗和物理空间的同时改善资产管理。 在某些情况下,整合运动涉及从旧操作系统迁移到可以提供更轻松的系统维护或其他总拥有成本收益的操作系统。

如果您打算从Solaris迁移到Linux,则几乎所有的自定义代码(包括C,shell脚本,Perl等)都需要某种补救措施 ,即映射属性的“重新对齐”,这是由于平台的差异而引起的。 。

没有时间阅读这篇文章?

这是将Perl脚本从Solaris迁移到Linux时要注意的五个最常见的“陷阱”:

平台特定的Perl模块依赖性  操作系统命令和IPC(进程间通信)  利用操作系统路径名  包含平台特定信息的特殊变量  跨平台实现不同或未实现的功能

而且,Perl与其他语言没有什么不同-尽管程序本身可以在平台之间移植,并且您只需要安装一个解释器即可在目标系统上运行代码-可能会出现一些补救类型的问题。 特定于Solaris的资源,尤其是操作系统路径名,系统命令和Perl模块,通常会在代码中得到利用。 因此,您应该期望必须进行一些代码补救,以确保Perl脚本在迁移后能够按预期工作。

但是,什么Perl语法构造以及您最应注意哪些运算符? 在本文中,我们解释了最常见的可移植性陷阱,并提出了将Perl脚本从Solaris迁移到Linux的路线图。 您可能会使用本文中关于从大多数UNIX操作系统(包括AIX,HP / UX等)迁移到Linux的路线图; 但是,所有示例,示例代码和参考都集中于从Solaris到Linux的迁移。

Perl可移植性问题

您应该检查Perl脚本上引用的资源,以确保在Linux系统上运行Solaris特定代码时不会出现问题。 例如,考虑一个脚本,该脚本从仅在Solaris上遇到的文件中提取信息。 想象执行一个使用Linux上没有的标志的系统命令。

根据可访问性或参考性,大多数可移植性问题可分为五类,如表1所示。

表1. Perl脚本中的可移植性问题的类别

类  可移植性问题  01  平台特定的Perl模块依赖性  02  操作系统命令和IPC(进程间通信)  03  利用操作系统路径名  04  使用包含平台特定信息的特殊变量  05  跨平台实现不同或未实现的功能

表1中列出的类并不是所有可移植性问题的权威列表,而只是最常见的问题。 有关可移植性问题的更多详细信息,请查看Perl编程文档(请参阅参考资料中的链接)。

完善Perl移植的五个步骤

让我们看一下将Perl脚本从Solaris移植到Linux的路线图。 此路线图建立在表1中的可移植性问题类别的基础上。该路线图包括五个步骤,每个步骤着眼于表1中的类别之一; 每个步骤都会确定Perl语法构造或运算符可能需要某种代码补救的问题。

步骤1.检查特定于Solaris的模块依赖性

第一步就是检查导入的Perl模块。 其中一些是专门为Solaris构建的,启用它们后,它们会将脚本绑定到Solaris平台。 我们需要通过脚本代码来识别这些模块,找出它们所利用的功能和变量,并进行适当的更改,以使它们不会将您束缚在未运行Perl脚本的平台上。

您可以在CPAN信息库中找到特定于Solaris的模块的完整列表 。 它们的名称通常以Solaris ::或Sun :: Solaris ::开头。

您可以使用清单1中的shell脚本,该脚本可用于使用以“ Solaris”或“ Sun”开头的导入语句来标识Perl脚本文件。

清单1.如何查找Solaris模块导入

#!/bin/bash

find . -name "*.pl" -exec grep -ilP "^\s*use (Solaris|Sun)" {} \;

您可以修改清单1中的代码,以使该脚本在Perl脚本中查找特定于Solaris的模块时更加准确。 例如,您可以将清单1中的shell脚本转换为Perl,从而利用PPI模块进行解析。 该模块的使用超出了本文的范围,但是我们建议在解析Perl代码时使用它以提高准确性。

在使用Solaris特定代码标识脚本之后,您需要搜索在Linux上也可以使用的等效模块。 从功能上识别此类模块并不总是那么容易,因为原始模块可能会处理Solaris平台专有的技术。 发生这种情况时,您将必须执行更深入的分析。

要使用等效的基于Linux的模块,您需要用新模块的等效项替换所有import语句以及所有被调用的函数和变量 。

步骤2.检查对Solaris特定系统命令的调用

当执行Solaris到Linux的迁移时,从Perl脚本中调用操作系统命令可能会出现最常见的问题:

目标系统上缺少命令  具有不同标志集的命令  在两个平台上行为不同的命令

因此,在处理此问题(类号02可移植性问题:系统调用)时,您需要格外小心。

此处的目标是确保在语法上和语义上在脚本上引发的任何系统命令在Linux上也能正常工作。 简而言之,这就是识别带有Solaris特定系统命令的脚本中所利用的Perl核心功能和运算符。

让我们从一个例子开始。 清单2显示了一个简单的Perl脚本,用于显示Solaris系统的内存大小。

清单2.显示系统内存大小的Perl脚本

#!/usr/bin/perl

my $mem_info = `prtconf | grep Memory`;

my (undef, $mem_size) = split(':', $mem_info);

($mem_size, undef) = split(' ', $mem_size);

print "Memory size is: ".$mem_size."\n";

现在,假设我们要在Linux上运行相同的脚本。 我们发现它通过backtick运算符调用了管道系统命令( prtconf | grep Memory ),而prtconf命令特定于Solaris。 第一步是找到它的替代品。

您可以使用cat /proc/meminfo | grep MemTotal cat /proc/meminfo | grep MemTotal即使输出格式不同,因为/proc/meminfo保留大小信息以KB为单位,而prtconf以MB为单位。

要修复此脚本,可以将ptrconf cat /proc/meminfo替换为ptrconf ,但是将输出信息保留为MB(我们不知道此脚本的输出是否用作其他脚本的输入,因此,不要更改它至关重要它),我们可以使用简单的转换。 清单3显示了如何修复此脚本的示例。

清单3.修复清单2脚本

#!/usr/bin/perl

my $mem_info = `cat /proc/meminfo | grep MemTotal`;

my (undef, $mem_size) = split(':', $mem_info);

($mem_size, undef) = split(' ', $mem_size);

$mem_size = int($mem_size / 1000);

print "Memory size is: ".$mem_size."\n";

由于Perl具有足够的灵活性以适应执行操作系统命令的不同方式,因此有许多不同的核心功能和运算符用于该目的。 表2列出了可用于从Perl脚本中调用系统命令的Perl核心功能和运算符。

表2.用来调用系统命令的核心功能和运算符

功能/操作员  Solaris中的示例  Linux中的示例  反引号( `` )  `prstat`  `ps -e`  系统  system("psrinfo")  system("cat","/proc/cpuinfo")  执行  exec("/usr/sbin/df -kZ")  exec("/bin/df -kZ")  x  qx/"metastat"/  qx/"lvdisplay"/  打开  open DATA, "cat /var/cron/log |"  Open DATA, "cat /var/log/cron"  阅读管  readpipe( "cat /etc/default/login " )  Readpipe( "cat /etc/default/login" )

您可以检查Perl文档以获取有关这些功能和运算符以及不属于Perl核心语言的任何其他功能的进一步信息。 请查阅IBM红皮书“从Solaris到Linux的迁移:系统管理员指南 ”,以了解有关系统管理命令差异的更多信息。

步骤3.检查OS路径名的使用

现在让我们讨论通过Perl脚本迁移杠杆路径名。 此步骤类似于步骤2。在这里,您需要注意用于打开或操作文件的语法元素和运算符。 尽管有特定的运算符可以执行此操作,但是引用路径名可能会出现一些问题。 (调用第2步中提到的系统命令时,也可以看到此信息。)

清单4显示了一个小的脚本,该脚本读取Solaris的NFS服务器配置文件并将其打印到标准输出。

清单4.将系统文件的内容打印到标准输出的Perl脚本

#!/usr/bin/perl

open(NFSCONF, '/etc/default/nfs');

print ;

close(NFSCONF);

从Solaris迁移到Linux时,您需要注意通常不同的系统路径。 在此示例中,此Solaris脚本上引用的文件/etc/default/nfs在Linux / Red Hat发行版中不存在,但是可以用/etc/sysconfig/nfs替换。 清单5显示了在脚本被修复后的脚本。

清单5.清单4的修复

#!/usr/bin/perl

open(NFSCONF, '/etc/sysconfig/nfs');

print ;

close(NFSCONF);

您需要了解任何操纵文件的Perl命令。 表3显示了Perl中使用的一些常见路径处理命令。 如果脚本中正在使用其中任何一个,则在迁移时需要修正路径名。

表3. Perl中的常见路径处理命令

命令  描述  chdir  更改工作目录。  chmod  更改文件列表的权限。  glob  返回文件名扩展的列表(可能为空)。  link  创建链接到旧文件名的新文件名。  mkdir  创建一个新目录。  open  打开一个文件。  opendir  打开目录。  rename  更改文件名。  rmdir  删除指定目录。  sysopen  打开指定的文件,并将其与指定的文件句柄关联。

步骤4.检查包含Solaris特定信息的特殊变量的使用

一些特殊变量保存有关Solaris特定环境的信息。 您需要识别这些变量并进行正确的翻译。 表4列出了一些可能包含Solaris特定信息或参考的核心变量。

表4.一些Perl核心变量; 在Perl编程文档中查看所有内容

变量  描述  ENV  包含当前环境变量。 其中一些变量可能不支持Solaris和Linux之间的直接映射。 一些示例是变量NETPATH,MSGVERB和SEV_LEVEL。  SIG  包含信号的信号处理程序。 请参阅相关主题有关这两个平台上的信号差异的详细信息部分。

步骤5.识别在跨平台上实现不同的功能的使用

一些Perl核心功能未实现或在各种平台上实现方式有所不同。 这些功能在Solaris和Linux上的行为会有所不同。 您将需要对其进行更改,以便他们合作或找到Linux平台的互补版本并锁定到该版本中。 再次,请参见《 Perl编程文档》( 有关链接,请参见参考资料)。

结论

确定从Solaris迁移到Linux(或从HP / UX或AIX迁移到Linux)时可能引起麻烦的Perl脚本的五个最常见组件并不难。 但是,进行必要的代码修复和代码替换以成功将脚本引入Linux可能会很耗时,尤其是在您要迁移许多脚本的情况下。 本文中有关代码补救的建议和示例应该可以帮助您入门。 祝好运!

翻译自: https://www.ibm.com/developerworks/opensource/library/l-port-perl/index.html

linux运行perl脚本

linux运行perl脚本,linux运行perl脚本_将Perl脚本从Solaris移植到Linux相关推荐

  1. linux 变量的继承,solaris移植到linux的大坑:bash和sh中环境变量继承的差异

    问题的引出 项目中脚本A .B,A调用B, 其中A中所有命令均使用绝对路径,B中直接使用 在solaris上工作正常,移植到linux中报错: /syscom/lm/linux//backupgen: ...

  2. linux下查看mysql数据库的字段类型_系统运维|[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型...

    提问: 我想要知道我的MySQL数据库是MyISAM还是Innodb类型.我该如何检查MySQL数据库表的类型? MySQl主要使用两种存储引擎:MyISAM 和 Innodb.MyISAM是非事务的 ...

  3. Linux启动hbase的shell命令出现警告_系统启动优盘制作图文教程(Windows Linux 等)...

    老牌的U盘启动制作工具有Ultra ISO.Unetbootin等,但本人目前常用的系统启动优盘制作工具还是Rufus,简单易用可定制性强. 界面如下 软件会自动扫描并添加可用的可移动设备,即U盘. ...

  4. linux 上自动执行caffe,linux下caffe的命令运行脚本

    参考:https://www.cnblogs.com/denny402/p/5076285.html 首先编译: make -j8 make pycaffe 注:下面的--solver=.... 等价 ...

  5. linux里docker镜像mysql运行sql脚本时出现Failed to open file ‘/home/mydatabase.sql‘, error: 2的解决

    linux里docker镜像mysql运行sql脚本时出现Failed to open file '/home/mydatabase.sql', error: 2的解决 此文章的前提是已经把sql文件 ...

  6. shell脚本配置运行python程序,小技巧之 Linux 软连接的使用

    shell脚本配置运行python程序,小技巧之 Linux 软连接的使用 实验室的多位博士会在同一台机器上跑python程序,主流的跑程序的方法有两种 使用sh脚本配置路径和程序 直接激活conda ...

  7. Linux:写一个简单的shell求和脚本并运行

    步骤 1.创建空脚本 touch sum.sh 2.编辑脚本文件 vi sum.sh 3.向脚本中添加代码 #!/bin/bash i=0;sum=0 while [ $i -le 10 ] do l ...

  8. Linux环境python脚本后台运行

    python 脚本后台运行 在服务器端一直运行一个Python脚本,当然就想到了在命令后面加&符号,代码如下: $ python /data/python/server.py >pyth ...

  9. linux perl开发工具,专家推荐 几款常用Perl开发工具

    本文和大家重点讨论一下几款Perl开发工具的用法,比如ActivePerl,它是一个可以让你任意执行Perl程序的工具软件,至于其他的Perl工具的作用请看本文的详细介绍. Perl开发工具 Acti ...

  10. python 每分钟运行一次_调度Python脚本以准确地每小时运行一次

    在我问之前,Cron Jobs和Task Scheduler将是我的最后选择,这个脚本将在Windows和Linux之间使用,我更愿意使用编码方法来完成此操作,而不是将其留给最终用户完成. 是否有可用 ...

最新文章

  1. 基于颜色特征,形状特征和纹理特征的数字图像的检索(Digital Image Retrieval)MATLAB GUI实现(本科毕业设计)
  2. java继承中的一些该注意的问题
  3. python打开文件_python如何学习
  4. Linux学习:shell命令
  5. Effective Java之坚持使用Overide注解(三十六)
  6. Laravel 指定日志生成目录
  7. UI自动化,你值得拥有
  8. 学习笔记-----usart串口调试助手一直打印00的解决方案
  9. 160个CrackMe破解思路合集
  10. Movidius神经计算棒初体验
  11. Docker官方文档翻译1
  12. 高颜值生物信息在线绘图工具
  13. 如何创建sis文件——概叙
  14. java线上问题定位神器 Arthas入门
  15. hadoop2.x学习01
  16. Linux命令教程第三期
  17. 双系统 修改grub启动菜单字体大小
  18. 注意力机制SimAM代码(Pytorch)
  19. 如何构建用户满意的“服务化”数据平台
  20. input只能输入汉字、数字、英文

热门文章

  1. 用engineercms建立项目管理平台
  2. Office2016专业增强版与Visio2016专业版不能共存的解决办法
  3. linux下如何查看二进制文件,Linux二进制文件的查看方法
  4. 央视影音 for Mac 1.2.1 中文版 – CCTV和地方卫视直播软件
  5. Mac翻译系列软件推荐二:人人译视界 for Mac
  6. Linux实训项目——第八章:配置网络接口及远程管理
  7. 最好用电脑录音软件推荐
  8. 用户故事与敏捷方法笔记---Scrum与用户故事
  9. 【Scratch案例实操】scratch大鱼吃小鱼(完整详案) scratch编程案例教学 scratch创意编程 少儿编程教案
  10. Python 竟也可以写网页前端了