標準化您的 UNIX 命令列工具(轉)
標準化您的 UNIX 命令列工具(轉)[@more@] 本文介紹用於標準化介面以簡化在不同 UNIX® 系統之間移動的方法。如果您管理多種 UNIX 系統(特別是在異構環境中),則最艱鉅的任務可能是在不同環境之間切換並執行不同的任務,同時還必須考慮系統之間的所有差異。本文並不介紹特定的差異,而是研究能夠提供相容層(或包裝)以支援一致環境的方法。
關於本系列
典型的 UNIX® 管理員擁有一套經常用於輔助管理過程的關鍵實用工具、訣竅和系統。存在各種用於簡化不同過程的關鍵實用工具、命令列鏈和指令碼。其中一些工具來自於作業系統,而大部分的訣竅則來源於長期的經驗積累和減輕系統管理員工作壓力的要求。本系列文章主要專注於最大限度地利用各種 UNIX 環境中可用的工具,包括簡化異構環境中的管理任務的方法。
差異和問題
如果您使用多種 UNIX 主機,特別是每種主機都支援不同的 UNIX 風格(Berkeley Software Distribution (BSD)、UNIX System Release 4 (VSVR4) 等)或版本,您也許發現自己要花大量的時間來檢查和確定自己所在的主機型別,以便能夠適應系統操作方式的變化。
例如,ps 命令在基於 BSD 和基於 SVR4 的 UNIX 主機上,分別需要不同的命令列選項來獲得大致相同的資訊(有關更多細節,請參閱 系統管理員工具包: 程式管理技巧)。平臺之間還存在更廣泛的差異。有時,這種差異是命令名稱發生了更改;Linux® 提供 adduser 命令,而 Solaris 則提供 useradd 命令。
就標準化而言,有多種方法可供您採用。
您可以選擇對主要平臺(例如 Solaris)進行標準化,並在其他平臺上提供等效命令的包裝以匹配 Solaris 標準。
也可以選擇對為所使用的任務提供最佳組合的命令集進行標準化,挑選您喜歡的命令併為特定平臺上不存在的命令構建包裝。
您可以建立自己的一套執行特定任務的指令碼(包括您自己用於 ls、ps 等常用工具的替代指令碼),以便它們生成您想要的資訊。這樣做有點危險,原因是它意味著您可能從未使用原始命令,從而可能在您的指令碼不可用時導致潛在的問題。
如何具體實現各個命令的包裝以提供一個相容或唯一的層,這取決於您是嘗試簡單地為功能相同的替代命令提供一個公認名稱,還是需要構建一個或多個命令的包裝以獲得等效的結果。可能的解決方案有三種:
別名——這種解決方案僅在某些外殼中受支援——別名提供了將給定的字串展開為特定命令的簡單方法。
外殼函式——大多數現代外殼都支援這種解決方案——外殼函式使您能夠建立更復雜的序列,但是由於它們作為內建函式執行,在差異相當小時可能更為實用。
外殼指令碼——當您要構建的包裝特別複雜時,更好的解決方案是使用外殼指令碼,您可以代替原始命令呼叫這些指令碼。使用外殼指令碼,您可以更創造性地處理替代,甚至為另一個命令提供完全由外殼指令碼驅動的替代。
讓我們研究一下每種可能的解決方案和一些可透過此方法來進行模擬的示例命令。
使用別名
別名在 Korn (ksh)、Bourne-Again SHell (bash)、TENEX C shell (tcsh) 和 Z shell (zsh) 外殼中受支援,當您希望設定命令的特定選項,同時仍然支援其他選項時,別名提供了也許是最簡單的方法。顧名思義,您可以將一個命令用作另一個命令的別名,或者為帶有附加選項的同一個命令提供別名。別名從您鍵入的內容展開為其展開形式。
例如,一個常用的別名是 ll,它呼叫等效的 ls -l(ll 通常稱為長清單 (long listing))。每當使用者鍵入 ll,就會直接將其替換為展開形式,因此:$ ll a* 在執行前展開為:$ ls -l a*。
命令列選項也仍然有效,換句話說,$ ll -a 展開為:$ ls -l -a。
還可以為現有命令設定別名;假設將 -F 選項新增到所有 ls 命令,這樣,$ ls 將展開為:$ ls -F。
要設定別名,請使用內建的外殼 alias 語句,並在引號中指定所需的展開形式。例如,要設定前面詳細描述的 ll 的展開形式,可使用:$ alias ll='ls -l'。
別名在以下情況下最為有用:您希望使用 base 命令並容易地指定附加選項,同時仍然允許設定特定於平臺的選項。
一個很好的例子就是 ps 命令,它在基於 SVR4 和基於 BSD 的 UNIX 主機上是不同的。在本系列的第一篇文章中,請參閱 系統管理員工具包: 程式管理技巧 ——這篇文章解釋瞭如何使用 ps 的選項來獲得相似的清單。您可以結合別名使用那些選項,而不會影響您指定附加選項的能力。例如,在 BSD 上,您將如清單 1 所示指定別名。
清單 1. 在 BSD 上指定別名
$ alias ps='ps -o pid,ppid,command'
而在 SVR4 主機上,您將如清單 2 所示建立別名。
清單 2. 在 SVR4 上指定別名
$ alias ps='ps -opid,ppid,cmd
現在,在這兩個系統對 ps 的不同操作方式的限制下,您獲得了 ps 產生的標準輸出。和前面一樣,您可以繼續新增更多選項;例如,在安裝了該別名的任一個平臺上請求所有程式,新增 -A 選項就是這樣一種情況。這會在 BSD(在此示例中為 Mac OS X)上產生類似於清單 3 的輸出。
關於本系列
典型的 UNIX® 管理員擁有一套經常用於輔助管理過程的關鍵實用工具、訣竅和系統。存在各種用於簡化不同過程的關鍵實用工具、命令列鏈和指令碼。其中一些工具來自於作業系統,而大部分的訣竅則來源於長期的經驗積累和減輕系統管理員工作壓力的要求。本系列文章主要專注於最大限度地利用各種 UNIX 環境中可用的工具,包括簡化異構環境中的管理任務的方法。
差異和問題
如果您使用多種 UNIX 主機,特別是每種主機都支援不同的 UNIX 風格(Berkeley Software Distribution (BSD)、UNIX System Release 4 (VSVR4) 等)或版本,您也許發現自己要花大量的時間來檢查和確定自己所在的主機型別,以便能夠適應系統操作方式的變化。
例如,ps 命令在基於 BSD 和基於 SVR4 的 UNIX 主機上,分別需要不同的命令列選項來獲得大致相同的資訊(有關更多細節,請參閱 系統管理員工具包: 程式管理技巧)。平臺之間還存在更廣泛的差異。有時,這種差異是命令名稱發生了更改;Linux® 提供 adduser 命令,而 Solaris 則提供 useradd 命令。
就標準化而言,有多種方法可供您採用。
您可以選擇對主要平臺(例如 Solaris)進行標準化,並在其他平臺上提供等效命令的包裝以匹配 Solaris 標準。
也可以選擇對為所使用的任務提供最佳組合的命令集進行標準化,挑選您喜歡的命令併為特定平臺上不存在的命令構建包裝。
您可以建立自己的一套執行特定任務的指令碼(包括您自己用於 ls、ps 等常用工具的替代指令碼),以便它們生成您想要的資訊。這樣做有點危險,原因是它意味著您可能從未使用原始命令,從而可能在您的指令碼不可用時導致潛在的問題。
如何具體實現各個命令的包裝以提供一個相容或唯一的層,這取決於您是嘗試簡單地為功能相同的替代命令提供一個公認名稱,還是需要構建一個或多個命令的包裝以獲得等效的結果。可能的解決方案有三種:
別名——這種解決方案僅在某些外殼中受支援——別名提供了將給定的字串展開為特定命令的簡單方法。
外殼函式——大多數現代外殼都支援這種解決方案——外殼函式使您能夠建立更復雜的序列,但是由於它們作為內建函式執行,在差異相當小時可能更為實用。
外殼指令碼——當您要構建的包裝特別複雜時,更好的解決方案是使用外殼指令碼,您可以代替原始命令呼叫這些指令碼。使用外殼指令碼,您可以更創造性地處理替代,甚至為另一個命令提供完全由外殼指令碼驅動的替代。
讓我們研究一下每種可能的解決方案和一些可透過此方法來進行模擬的示例命令。
使用別名
別名在 Korn (ksh)、Bourne-Again SHell (bash)、TENEX C shell (tcsh) 和 Z shell (zsh) 外殼中受支援,當您希望設定命令的特定選項,同時仍然支援其他選項時,別名提供了也許是最簡單的方法。顧名思義,您可以將一個命令用作另一個命令的別名,或者為帶有附加選項的同一個命令提供別名。別名從您鍵入的內容展開為其展開形式。
例如,一個常用的別名是 ll,它呼叫等效的 ls -l(ll 通常稱為長清單 (long listing))。每當使用者鍵入 ll,就會直接將其替換為展開形式,因此:$ ll a* 在執行前展開為:$ ls -l a*。
命令列選項也仍然有效,換句話說,$ ll -a 展開為:$ ls -l -a。
還可以為現有命令設定別名;假設將 -F 選項新增到所有 ls 命令,這樣,$ ls 將展開為:$ ls -F。
要設定別名,請使用內建的外殼 alias 語句,並在引號中指定所需的展開形式。例如,要設定前面詳細描述的 ll 的展開形式,可使用:$ alias ll='ls -l'。
別名在以下情況下最為有用:您希望使用 base 命令並容易地指定附加選項,同時仍然允許設定特定於平臺的選項。
一個很好的例子就是 ps 命令,它在基於 SVR4 和基於 BSD 的 UNIX 主機上是不同的。在本系列的第一篇文章中,請參閱 系統管理員工具包: 程式管理技巧 ——這篇文章解釋瞭如何使用 ps 的選項來獲得相似的清單。您可以結合別名使用那些選項,而不會影響您指定附加選項的能力。例如,在 BSD 上,您將如清單 1 所示指定別名。
清單 1. 在 BSD 上指定別名
$ alias ps='ps -o pid,ppid,command'
而在 SVR4 主機上,您將如清單 2 所示建立別名。
清單 2. 在 SVR4 上指定別名
$ alias ps='ps -opid,ppid,cmd
現在,在這兩個系統對 ps 的不同操作方式的限制下,您獲得了 ps 產生的標準輸出。和前面一樣,您可以繼續新增更多選項;例如,在安裝了該別名的任一個平臺上請求所有程式,新增 -A 選項就是這樣一種情況。這會在 BSD(在此示例中為 Mac OS X)上產生類似於清單 3 的輸出。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-960523/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- UNIX作業系統的版本與標準(轉)作業系統
- windows命令列工具(轉)Windows命令列
- [轉]資料標準化
- .net core/.net 使用 CommandLineParser 來標準化地解析命令列命令列
- 常用UNIX命令(轉)
- Unix環境高階程式設計——開源的標準化努力程式設計
- 標準化面試(Structured Interview)(轉載)面試StructView
- unix的AWK命令介紹(轉)
- Unix下打包命令的使用(轉)
- UNIX命令詳解(轉)
- 類unix系統下常用工具及命令(轉)
- 哪些財務分析工具有標準化方案?
- Unix命令列程式和內建指令命令列
- [轉]UNIX find命令實踐
- UNIX系統操作命令(轉)
- dos2unix, unix2dos 對應的命令(轉)
- 軟體專案管理“固化、簡化、標準化”(轉)專案管理
- Yoda:您的 Linux 系統命令列個人助理Linux命令列
- JDK常用的命令列工具JDK命令列
- UNIX find 命令的高階技術 (轉)
- ROS命令列工具ROS命令列
- 實用Unix/Linux 命令(轉)Linux
- 用 nodejs 寫一個命令列工具 :建立 react 元件的命令列工具NodeJS命令列React元件
- 運維標準化與流程化建設深度指南(轉)運維
- 謹慎做資料庫技術的標準化(轉)資料庫
- 【地圖API】為何您的座標不準?如何糾偏?地圖API
- 模組轉測標準
- [轉載]監控 Linux 效能的 18 個命令列工具Linux命令列
- TortoiseSVN 命令 (命令列執行工具)命令列
- 用命令列提高UNIX工作效率大合集命令列
- unix下 nohup 命令使用方法(轉)
- unix 命令詳解 - 轉自網路
- 基本UNIX命令集介紹(轉)
- 軟體專案開發的文件編寫標準化 (轉)
- CUJ:標準庫:標準庫中的搜尋演算法 (轉)演算法
- Click: 命令列工具神器命令列
- EFCore之命令列工具命令列
- 使用SVN命令列工具命令列