Murray 要求您要了解您的 shell。「Bash、tcsh、csh??shell 是您最基本的軟體開發工具」,他強調說。「它可以做許多了不起的事情。所有的工作都要依賴於它……和它的強大功能」。作為說明通用的 shell 腳本功能強大的例子,在參考資料部分中有一個可以下載的文件,其中有一組腳本,用於獲得 Red Hat 發行的更新 RPM 軟體包並將它們合併到原來的軟體包和定製的軟體包。下載文件並解壓縮后,您可以在 /developerworks/rpm_update_scripts 目錄下找到腳本。最終結果是一個包括所有軟體包最新版本的目錄和一個用於網路安裝的升級的 hdlist 文件。
下面的代碼片段實現的是對 Red Hat RPM 軟體包的自動更新,以創建一個使用最新的 RPM 的可以安裝的版本。這對任何一個維護公共 Linux 伺服器的人來說是一個基本的步驟。就我們而言,我們通常是維護許多公共 Linux 伺服器上的大量網路服務。下面是可以自動完成更新最新的安全和功能的過程的部分腳本。
下面的腳本樣例證明了普通的 shell 編程技術可以廣泛應用於各種系統配置和程序設計應用。腳本使用的是 bourne shell,它是在不同的 UNIX 系統中最為常見的 shell。這樣就可以保證這些非常輕便的代碼可以稍加修改或者不加修改地在不同的 UNIX 系統上使用。修改 Red Hat 軟體包的規範以應用於其它 Linux 發行版本是很容易的。
# Create/update hardlinks from update, and custom directories # to the install directory. We assume that original RPMS are already # hardlinked to the install directory, so all we need to do is filter # out any replaced by updated packages.
#for file in $src/*; do for file in `find $src -name *.rpm -a ! -name *.src.rpm -print`; do base=`basename $file;` if test ! -f $dest/$base; then echo "Linking $file"; ln $file $dest else echo "EXISTS: $file"; fi done
清單 3. get_update.sh
#!/bin/sh rh_ver=$1 dest=$2 echo "Retrieving updates for version ${rh_ver} to $dest" lftp << EOF open ftp.freshrpms.net
在 Codemonks,相當多的開發工作是在 Linux 上用 Java 完成。這兩個工具的組合為創建商業級質量的 Web 應用提供了一個平台,Murray 說。「在做這些項目的過程中,我們發現我們要總體上了解客戶已有的應用代碼」,他回憶說。locks.c (在下載得到的壓縮文件中的 /developerworks/locks 目錄下) 是一個代碼片段,實現的是用於 Java Virtual Machine Profiler Interface (JVMPI) 的讀/寫鎖以及大量的調試代碼。
Linux 開發人員的代表
「在情況允許的時候,不要寫特定於系統的代碼」,Murray 說,而是克服困難去「寫好的跨平台的代碼」。受雇的 Murray 堅持認為他最大的資本永遠是「寫具有商業品質的代碼,構建和提供網路服務,定製 OS 或內核,而且完全基於可靠的開放源代碼的平台」。
下面是一個代碼片段,來自於一個跨平台的定製的 IMAP 伺服器,這個伺服器由 Linux 和 MacOS X 的開發人員共同開發。代碼實現的是一個用來處理字元串的簡單的增長緩存。這樣避免了緩存溢出的問題(不要忘記那些安全漏洞),而不必要您每次做某些事情的時候重新分配空間。它是通過維護一個簡單的可變長的緩存來實現的,這個緩存可以寫滿和清空。這個緩存已經被用於一個實驗用的 IMAP 伺服器,這個伺服器是由一個團隊緊張工作了一周完成的。
對 Murray 來說,得益於 Linux 強大功能的應用程序的列表在不斷地增長。「有很多」,他說。「Oracle, WebSphere, Apache, PostgresQL, MySQL, Cyrus IMAP... 這個列表很長而且在不斷增長。」
對 Murray 來說,Linux 到此為止了。「我們所有的伺服器都運行 Linux;不管目標平台如何,我們主要的開發都在 Linux 上進行;我們把 Linux 推薦給用戶來運行伺服器應用程序」,他說。「 Linux 快速發展的步伐,開放源代碼組織對它的廣泛支持,低廉的開發費用,如果把這些結合在一起,您就知道它是一個難以擊敗的平台」。