自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從Solaris遷移Perl腳本到Linux

系統(tǒng) 其他OS 系統(tǒng)運維
如果您計劃從 Solaris 遷移到 Linux,那么幾乎您的所有定制代碼(包括 C、shell 腳本、Perl,等等)都需要一些矯正 — 一個映射屬性的 “再排列” — 因為平臺不同。在本文中,我們將向您介紹最常見的可移植性陷阱,并為您呈現(xiàn)一個將 Perl 腳本從 Solaris 遷移到 Linux 的路線圖。

隨著可視化技術的發(fā)展,企業(yè)逐漸將物理服務器合并到虛擬環(huán)境,提高資產(chǎn)管理同時減少能量消耗和物理空間。有些情況下,合并活動涉及到從一個舊操作系統(tǒng)遷移到一個能提供便利的系統(tǒng)管理或其他總擁有成本優(yōu)勢的系統(tǒng)。

如果您計劃從 Solaris 遷移到 Linux,那么幾乎您的所有定制代碼(包括 C、shell 腳本、Perl,等等)都需要一些矯正 — 一個映射屬性的 “再排列” — 因為平臺不同。

此外,Perl 不同于其他語言 — 盡管程序本身可在各種平臺上移植,而且您只需要安裝一個解析程序來在目標系統(tǒng)上運行代碼 — 但是一些矯正類型的問題仍然可能出現(xiàn)。特定 Solaris 資源 — 最明顯的操作系統(tǒng)路徑名、系統(tǒng)命令和 Perl 模塊 — 通常在代碼中受到影響。因此,您應該期待采用某種代碼矯正(code remediation)來確保 Perl 腳本在遷移之后正常運行。

但是什么 Perl 語法結構,哪個操作符最值得關注呢?在本文中,我們將向您介紹最常見的可移植性陷阱,并為您呈現(xiàn)一個將 Perl 腳本從 Solaris 遷移到 Linux 的路線圖。您可以使用本文提供的路線圖從大多數(shù) Unix 操作系統(tǒng)將 Perl 腳本遷移到 Linux;然而,所有示例、樣例代碼以及參考資料只關注 Solaris 到 Linux 的遷移。

Perl 可移植性問題

您應該檢查 Perl 腳本中引用的參考資料,來確保腳本在 Linux 系統(tǒng)中運行時不會出現(xiàn)由特定 Solaris 代碼引起的問題。例如,想想從一個僅在 Solaris 上遇到的文件中提取信息的腳本;想像使用一個在 Linux 系統(tǒng)中不可用的標志執(zhí)行一個系統(tǒng)命令。

多數(shù)可移植性問題根據(jù)他們訪問的或引用的系統(tǒng)資源可以被分成 5 類,見表 1 。

表 1. Perl 腳本中可移植性問題的分類

類別 可移植性問題
01 特定平臺 Perl 模塊依賴項
02 操作系統(tǒng)命令和 IPC(進程間通信)
03 使用的操作系統(tǒng)路徑名
04 存放特定平臺信息的特定變量的使用
05 不同實現(xiàn)或不能跨平臺實現(xiàn)的功能

表 1 中列出的類別不是所有可移植性問題,只是最常見的一部分。關于可移植性問題的詳細內(nèi)容,查看 Perl Programming Documentation。

5 步讓 Perl 移植變***

讓我們來看看將 Perl 腳本從 Solaris 移植到 Linux 的路線圖,這個路線圖是根據(jù)表 1 中的可移植性問題分類構建的。線路圖包括 5 個步驟,每一個對應表中的一個類;每步都可以識別需要代碼矯正的 Perl 語法結構或操作符問題。

第 1 步. 檢查特定 Solaris 模塊依賴項

***步都是關于檢查導入 Perl 模塊的。其中一些專門用于構建 Solaris,一旦您使用了它們,它們就將腳本綁定到 Solaris 平臺。我們需要通過腳本代碼識別這些模塊,弄清楚它們所用的函數(shù)和變量,然后進行適當改變,以防將您困于 Perl 腳本不能運行的平臺上。

在 CPAN 庫您可以找到一個 特定 Solaris 模塊完整列表;它們的名稱通常以 Solaris::Sun:: 開頭。

您可以使用清單 1 中的腳本識別 Perl 腳本文件和以 “Solaris” 或 “Sun” 開頭的導入語句。

清單 1. 如何找到 Solaris 模塊導入

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

您可以修改清單 1 中的代碼,使其在 Perl 腳本內(nèi)更精確地尋找特定 Solaris 模塊。例如,您可以將清單 1 中的腳本轉(zhuǎn)換成 Perl,從而利用 PPI 模塊 進行解析。模塊的使用不在本文范圍之內(nèi),但是在解析 Perl 代碼時,為更精確我們建議使用它。

在使用特定 Solaris 代碼識別腳本之后,您需要搜索可以在 Linux 系統(tǒng)上運行的等價模塊。就功能性而言,識別這類模塊通常并不那么容易,因為原始模塊可能涉及到 Solaris 平臺的專有技術。出現(xiàn)這種情況時,您就不得不執(zhí)行更加深入的分析。

要使用一個等價的基于 Linux 的模塊,您需要用新模塊的等價類替換所有導入語句以及所有稱為函數(shù)變量的對象。

第 2 步. 檢查特定 Solaris 系統(tǒng)命令調(diào)用

從 Perl 腳本內(nèi)調(diào)用操作系統(tǒng)命令,在執(zhí)行從 Solaris 到 Linux 遷移時,可以呈現(xiàn)多數(shù)常見問題,原因如下:

  • 目標系統(tǒng)命令缺乏
  • 命令有不同的標志集
  • 命令在兩個系統(tǒng)上表現(xiàn)不同

因此,在處理這些問題時,要特別關注第 2 類可移植性問題:系統(tǒng)調(diào)用。

這里的目標是確保任何在腳本上按照語法和語義調(diào)用的系統(tǒng)命令,在 Linux 上都能正確運行。簡而言之,都是關于識別在含有特定 Solaris 系統(tǒng)命令的腳本中使用的 Perl 核心函數(shù)和操作符。

讓我們從一個示例開始。清單 2 是一個用于顯示 Solaris 系統(tǒng)內(nèi)存大小的簡單 Perl 腳本。

清單 2. Perl 腳本顯示系統(tǒng)內(nèi)存大小

				
#!/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"; 
 

現(xiàn)在,假設我們想在 Linux 上運行同一個腳本。通過 backtick 操作符,我們斷定它調(diào)用一個管道系統(tǒng)命令(prtconf | grep Memory),而 prtconf 命令是特定于 Solaris 的。***步是為它尋找一個代替品。

您可以使用 cat /proc/meminfo | grep MemTotal,即使輸出的格式不同,因為 /proc/meminfo 保存信息的單位是 KB,而 prtconf 是 MB。

要矯正這些腳本,您可以使用 cat /proc/meminfo 替換 ptrconf,但將輸出信息單位保存為 MB(我們不知道這個腳本的輸出是否會用于其他腳本的輸入,因此***不要改變),我們可以使用一個簡單的轉(zhuǎn)換。清單 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 足夠靈活,可以適應不同執(zhí)行操作系統(tǒng)命令的方法,因此有許多不同的核心函數(shù)和操作符。表 2 列出了用來從 Perl 腳本中調(diào)用系統(tǒng)命令的 Perl 核心函數(shù)和操作符。

表 2. 調(diào)用系統(tǒng)命令的 Perl 核心函數(shù)和操作符

函數(shù)/操作符 Solaris 中的示例 Linux 中的示例
backtick (``) `prstat` `ps -e`
system system("psrinfo") system("cat","/proc/cpuinfo")
exec exec("/usr/sbin/df -kZ") exec("/bin/df -kZ")
qx qx/"metastat"/ qx/"lvdisplay"/
open open DATA, "cat /var/cron/log |" Open DATA, "cat /var/log/cron"
readpipe readpipe( "cat /etc/default/login " ) Readpipe( "cat /etc/default/login" )

您可以查看 Perl 文檔,進一步了解每個函數(shù)和操作符,以及任何其他不是 Perl 核心語言的函數(shù)和操作符。查閱 IBM 紅皮書 “Solaris to Linux Migration: A guide for system administrators” 了解更多系統(tǒng)管理命令的差異。

#p#

第 3 步. 檢查 OS 路徑名的使用

現(xiàn)在,我們來研究通過 Perl 腳本遷移使用的路徑名;這一步類似于第 2 步。這里,您需要留意用于打開或操作文件的語法元素和操作符。盡管有特定操作符執(zhí)行這一任務,但是在引用路徑名方面也可能出問題。(當您調(diào)用像步驟 2 中提到的那些命令時,您將會看到這些問題)

清單 4 顯示了一個小腳本,閱讀 Solaris 的 NFS 服務器配置文件并以標準輸出打印。

清單 4. 將以標準輸出打印文件系統(tǒng)內(nèi)容的 Perl 腳本

				
#!/usr/bin/perl 
open(NFSCONF, '/etc/default/nfs'); 
print <NFSCONF>; 
close(NFSCONF);
 

當從 Solaris 遷移到 Linux 時,您需要注意系統(tǒng)路徑,這常常不同。在本例中,在這個 Solaris 腳本中引用的文件 /etc/default/nfs 在 Linux/Red Hat 發(fā)布版中不存在,但是可以使用 /etc/sysconfig/nfs 替代。清單 5 顯示了矯正后的腳本。

清單 5. 清單 4 的矯正

				
#!/usr/bin/perl 
open(NFSCONF, '/etc/sysconfig/nfs'); 
print <NFSCONF>; 
close(NFSCONF);
 

您需要了解操作文件的 Perl 命令。表 3 是一些在 Perl 中常見的路徑處理命令;如果其中一些用在腳本中,遷移時就需要矯正路徑名。

表 3. Perl 中常見的路徑處理命令

命令 描述
chdir 修改工作路徑。
chmod 修改文件清單的許可。
glob 返回一系列擴展文件名(可能為空)。
link 創(chuàng)建鏈接到舊文件名的新文件名。
mkdir 創(chuàng)建一個新路徑。
open 打開一個文件。
opendir 打開一個目錄。
rename 修改一個文件的文件名。
rmdir 刪除指定目錄。
sysopen 打開特定文件,以及將它和一個特定文件句柄聯(lián)系在一起。

第 4 步. 檢查保存特定 Solaris 信息的特定變量

一些保存環(huán)境信息的特定變量可能是特定于 Solaris 的;您需要識別這些變量并進行適當轉(zhuǎn)換。表 4 列出了幾個可能保存特定 Solaris 信息或參考資料的關鍵變量。

表 4. 一些 Perl 核心變量;在

變量 描述
ENV 含有當前環(huán)境變量。其中一些變量可能不支持在 Solaris 和 Linux 之間直接映射,比如 NETPATH、MSGVERB 和 SEV_LEVEL。
SIG 含有信號處理程序。關于在兩個平臺上發(fā)送信號的差異。
Perl Programming Documentation 查看所有變量

第 5 步. 識別在各種平臺上實現(xiàn)有所不同的函數(shù)的使用

有些核心 Perl 函數(shù)要么不能實現(xiàn),要么在各個平臺上的實現(xiàn)都不相同;這些函數(shù)在 Solaris 和 Linux 上的表現(xiàn)也不同。您需要修改它們,或者找到 Linux 平臺的兼容版本并自然過渡到其中;再一次,查看 Perl Programming Documentation 。

結束語

識別在從 Solaris 到 Linux(或者, HP/UX 或 AIX 到 Linux)的遷移過程中可能會引起問題的 5 個常見組件并不是很困難。但是進行必要的代碼矯正和代碼替換來將您的腳本成功地移入 Linux 很費時間,特別是如果您有很多腳本需要遷移。本文的示例和代碼矯正會幫您快速上手。祝您好運!

【編輯推薦】

  1. 遷移到Linux時會出現(xiàn)的十大安全錯誤
  2. 學習筆記 Perl腳本語言在Linux操作系統(tǒng)下如何安裝
  3. Perl腳本語言環(huán)境搭建時需要注意的五大問題

【責任編輯:楊賽 TEL:(010)68476606】

責任編輯:yangsai 來源: IBMDW
相關推薦

2011-01-13 14:19:41

solarisLinux

2011-12-14 09:46:14

LinuxUnix遷移

2012-05-21 10:23:36

2015-12-18 16:19:47

私有云從VMwareOpenStack

2010-07-15 13:21:46

Perl多進程

2009-02-06 10:32:00

UnixLinux服務器

2013-05-03 09:49:38

MySQLMariaDB

2016-05-09 10:27:36

MySQLHive數(shù)據(jù)遷移

2024-11-11 09:39:11

Cloudflare遷移Go

2023-11-29 09:53:29

數(shù)據(jù)庫遷移SQL Server

2012-03-12 09:46:21

Solaris2.5illumos

2012-04-01 14:41:10

Solarisillumos

2020-05-08 11:42:24

JavaScript編程語言技術

2010-07-26 15:32:08

Perl腳本語言

2010-07-20 10:58:39

Perl腳本

2010-04-09 09:37:23

甲骨文Solaris開源

2010-07-22 08:42:04

Eclipse平臺中P

2019-04-10 09:00:23

AWSOracle數(shù)據(jù)庫

2009-11-30 10:54:59

solaris命令

2025-04-29 02:10:00

點贊
收藏

51CTO技術棧公眾號