• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > 使用Ruby编写脚本进行系统管理的教程

使用Ruby编写脚本进行系统管理的教程

作者:goldensun 字体:[增加 减小] 来源:互联网

goldensun 通过本文主要向大家介绍了ruby脚本语言,ruby脚本,ruby自动化脚本,ruby教程,ruby on rails教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

简介

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

</div>

在这个例子中:

  •     第 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
---------------------------------------------------

</div>

在系统管理期间,最常见的一个需求是有效地使用 zip 文件来管理备份,或者将一组文件从一台计算机转移到另一台计算机。在这个方面,Ruby 很有优势。这里的第二个例子构建在第一个例子的基础上,但是包含了一个场景,在此场景中,需要将搜索到的文件打包到 zip 文件中。

内建的 zlib 模块可帮助处理 gzip 文件,对于大多数情况它都够好。但是,在这里我将使用另一个很好的 Ruby 库,即 “rubyzip”,来创建和处理 zip 归档文件。请查看 参考资料 小节,找到下载它的链接。而且要注意,这个例子使用纯 Ruby,它不依赖于计算机上当前提供的任何命令行实用程序。

安装 rubyzip

    通过提供的链接下载 “rubyzip” gem,并将它复制到系统中。(在撰写本文之际,它的文件名是 “rubyzip-0.9.1.gem”)。
    运行 gem 安装 rubyzip-0.9.1.gem

清单 3. 使用 zip 文件

require 'rubygems'
require_gem 'rubyzip'
require 'find'
require 'zip/zip'

puts ""
puts "------------------File Search and Zip-----------------------------"
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 ""
puts"----------------------------------------------------------------------"
puts "Zipping up the found files..."
puts"----------------------------------------------------------------------"
 Zip::ZipFile.open("test.zip", Zip::ZipFile::CREATE) {
 |zipfile|
 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))
        p File.basename(path)
        zipfile.add(File.basename(path),path)
    end
  end
 end
 }

</div>

这个脚本为根据提供的搜索路径和搜索模式搜索到的文件创建一个名为 “test.zip” 的 zip 文件。

这个例子做以下事情:

  •     第 9-15 行 - 请求用户提供搜索路径和搜索模式。
  •     第 23 行 - 创建一个新的名为 “test.zip” 的 ZipFile。
  •     第 25 行 - 使用 Ruby 中 “Find” 类中的 “find” 方法遍历指定的搜索路径。
  •     第 26 行 - 检查发现的文件是否为一个目录。如果是目录,并且不是 “.”,则递归地遍历该目录。
  •     第 33 行 - 使用 “File” 类中的 “fnmatch” 方法检查发现的文件是否符合给定的模式。
  •     第 35 行 - 将符合的文件添加到 zip 归档中。

下面是一个示例输出:
清单 4. 第二个例子的示例输出

[root@logan]# ruby zipexample.rb

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

Enter the search path  : /test

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

----------------------------------------------------------------------
Zipping up the found files...
----------------------------------------------------------------------
"s.rb"
"test.rb"
"s1.rb"

[root@logan]# unzip -l test.zip
Ar
  


 

您可能想查找下面的文章:

  • 优化Ruby脚本效率实例分享
  • ruby写扫描当前网页所有url的脚本
  • ruby写扫描当前网页所有url的脚本
  • Ruby编写HTML脚本替换小程序的实例分享
  • 编写Ruby脚本来对Twitter用户的数据进行深度挖掘
  • 使用Ruby编写脚本进行系统管理的教程
  • Ruby实现的删除已经合并的git分支脚本分享
  • Ruby实现的一个强大的批量删除文件脚本分享
  • Ruby和Shell脚本实现判断成绩及格功能

相关文章

  • 简单介绍Ruby on Rails对PostgreSQL数组类型的支持
  • Rails bundle命令安装mysql gem包出错的解决方法
  • Ruby中的Socket编程简单入门
  • Ruby中proc和lambda的两个区别
  • Ruby中的循环语句的用法教程
  • 借助RubyGnome2库进行GTK下的Ruby GUI编程的基本方法
  • Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例
  • Ubuntu上配置Ruby on Rails框架及RubyMine IDE开发环境
  • Ruby中Hash的11个问题解答
  • Ruby中的block代码块学习教程

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Rails脚手架使用实例
    • Ruby与Ruby on Rails框架环境搭建的简明教程
    • print不自动换行,puts会自动换行第1/2页
    • Ruby中的block、proc、lambda区别总结
    • win7安装ruby on rails开发环境
    • Ruby中用线程实现经典的生产者消费者问题代码实例
    • 利用RJB在Ruby on Rails中使用Java代码的教程
    • ruby 正则表达式 教程
    • Ruby中执行Linux shell命令的六种方法详解
    • ruby 学习笔记(2) 类的基本使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有