歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 利用 Ruby 的威力更有效地進行系統管理

利用 Ruby 的威力更有效地進行系統管理

日期:2017/2/28 16:49:30   编辑:Linux教程

除了用作強大的 Web 應用程序開發平台外,通過與 Rails 框架相結合,Ruby 還具有較少被提及的另一面,那就是作為一種強大的腳本語言,就像 Python 或 Perl 那樣。它擁有非常強大的功能,由於可以使用很多內建的和外部的庫,因此可利用它的威力來解決通常系統管理工作環境中出現的很多腳本編寫需求。而且,用 Ruby 編程也很有趣!

簡介

Ruby 是一種功能極其豐富的、免費的、簡單的、可擴展的、可移植的、面向對象的腳本編程語言。最近,它在 Web 領域廣受歡迎。這在一定程度上要歸因於非常強大的 Web 應用程序開發框架 Rails,Rails 正是用 Ruby 編寫的。Rails,也稱 Ruby on Rails(ROR),顧名思義,它為快速、有效地開發 Web 應用程序提供一個非常強大的平台。它是高度可伸縮的,Web 上有很多站點就是用 Ruby on Rails 構建的。

除了與 Rails 一起用作 Web 應用程序開發平台外,Ruby 還具有較少被提及的另一面,那就是作為一種強大的腳本編程語言,就像 Python 或 Perl 那樣。它擁有非常強大的功能,由於可以使用很多內建的和外部的庫,因此可利用它的威力來解決通常系統管理工作環境中出現的很多腳本編程需求。

系統管理需要大量編寫腳本以使事情更簡單、更有效。編寫腳本比單調的手動工作能更好地解決用戶管理、進程管理、文件管理、軟件包管理和其他基本的自動化需求。在這個場景中,Ruby 非常有用。它有一套很好的庫可滿足這一點。


對於本文,我假設讀者具有 Ruby 的應用知識。這裡提供的基本例子使用純 Ruby,因此可以在 Ruby 支持的任何類 UNIX? 系統以及 Windows? 上運行。對於更高級的 Cfruby 例子,需要能夠使用一個 UNIX 系統。下面所有的例子已經在一台 Linux? 機器上使用 Ruby v1.8.4 進行了測試。它們應該也能用於最新版本的 Ruby。

實踐中的 Ruby

第一個例子在指定路徑中搜索符合給定模式的文件,並以用戶友好的方式給出關於這些文件的詳細信息。實現這一目標不必依賴於任何命令行實用程序,只需使用 Ruby 內建的 API。因此,這個例子在有 Ruby 運行的任何平台上都能運行。

而且,這個例子展示了 Ruby 在簡化腳本編寫需求方面有多強大。它不是簡單地模擬 *nix "find" 命令,而是構建在該命令之上,因而在使用 Ruby 時具有很強的定制能力。


清單 1. 在給定路徑中搜索符合給定模式的模式的文件,並顯示它們的詳細信息

require 'find'
puts ""
puts "-----------------------File Search-----------------------------------"
puts ""
print "Enter the search path : "
searchpath = gets
searchpath = searchpath.chomp
puts ""
print "Enter the search pattern : "
pattern = gets
pattern = pattern.chomp
puts"----------------------------------------------------------------------"
puts "Searching in " + searchpath + " for files matching pattern " + pattern
puts"----------------------------------------------------------------------"
puts ""
Find.find(searchpath) do |path|
if FileTest.directory?(path)
if File.basename(path)[0] == ?.
Find.prune # Don't look any further into this directory.
else
next
end
else
if File.fnmatch(pattern,File.basename(path))
puts "Filename : " + File.basename(path)
s = sprintf("%o",File.stat(path).mode)
print "Permissions : "
puts s
print "Owning uid : "
puts File.stat(path).uid
print "Owning gid : "
puts File.stat(path).uid
print "Size (bytes) : "
puts File.stat(path).size
puts "---------------------------------------------------"
end
end
end


在這個例子中:

第 5-11 行 - 請求用戶提供搜索路徑和搜索模式。
第 16 行 - 使用 Ruby 中 “Find” 類中的 “find” 方法遍歷指定的搜索路徑。
第 17 行 - 檢查發現的文件是否為一個目錄。如果是目錄,並且不是 “.”,則遞歸地遍歷該目錄。
第 24 行 - 使用 “File” 類中的 “fnmatch” 方法檢查發現的文件是否符合給定的模式。
第 25-34 行 - 如果文件符合模式,則打印文件的詳細信息。

下面是這個腳本的一個示例輸出。


清單 2. 第一個例子的示例輸出

[root@logan]# ruby findexample.rb

-----------------------File Search-----------------------------------

Enter the search path : /test

Enter the search pattern : *.rb
----------------------------------------------------------------------
Searching in /test for files matching pattern *.rb
----------------------------------------------------------------------

Filename : s.rb
Permissions : 100644
Owning uid : 1
Owning gid : 1
Size (bytes) : 57
---------------------------------------------------
Filename : test.rb
Permissions : 100644
Owning uid : 0
Owning gid : 0
Size (bytes) : 996
---------------------------------------------------
Filename : s1.rb
Permissions : 100644
Owning uid : 1
Owning gid : 1
Size (bytes) : 39
---------------------------------------------------


在系統管理期間,最常見的一個需求是有效地使用 zip 文件來管理備份,或者將一組文件從一台計算機轉移到另一台計算機。在這個方面,Ruby 很有優勢。這裡的第二個例子構建在第一個例子的基礎上,但是包含了一個場景,在此場景中,需要將搜索到的文件打包到 zip 文件中。

內建的 zlib 模塊可幫助處理 gzip 文件,對於大多數情況它都夠好。但是,在這裡我將使用另一個很好的 Ruby 庫,即 “rubyzip”,來創建和處理 zip 歸檔文件。請查看 參考資料 小節,找到下載它的鏈接。而且要注意,這個例子使用純 Ruby,它不依賴於計算機上當前提供的任何命令行實用程序。

Copyright © Linux教程網 All Rights Reserved