直接使用 libcfruby 中的 Ruby 类
Libcfruby 是 Cfruby 的核心,它包含一组模块,这些模块提供了各种用于简化系统维护和设置的功能。为了使用 libcfruby,需要在安装 Cfruby gem 之后,将 “require_gem 'cfruby'” 添加到脚本的顶端。这样便可以直接访问 libcfruby 中的所有核心模块,在脚本中可以根据需要按任意方式使用它们。这种方法惟一的缺点是 libcfruby 比较大,它将所有的类和方法都放入到它们各自的名称空间中。所以,为了访问任何一个类,都需要以名称空间加以限定。例如,libcfruby 提供了一个用于获得系统类型的方法。要获取操作系统的类型,需要做以下事情:
清单 5. 使用 libcfruby 获取操作系统类型
require 'rubygems'
require_gem 'cfruby'
os = Cfruby::OS::OSFactory.new.get_os()
puts(os.name)
这只是获得操作系统的名称。随着您用 libcfruby 做更多的事情,您的脚本中将充斥着更多指定名称空间的语句。正是由于这一点,另一种使用 Cfruby 的方法就显得很方便。
使用 cfrubyscript 包装器,这个包装器为 libcfruby 提供了一个更简洁的接口
为了使用 cfrubyscript 包装器,需要添加:
清单 6. 使用 cfrubyscript
require 'rubygems'
require_gem 'cfruby'
require 'libcfruby/cfrubyscript'
这样会将 cfrubyscript 包括到脚本中,然后就可以通过一个更简单的接口来访问 libcfruby 的功能。
cfrubyscript 做到了以下几点:
它将一组变量导出到全局名称空间,例如 $os、$pkg、$user、$proc 和 $sched。
它将大多数主要模块放到主名称空间中,所以可以调用 FileEdit.set 而不是 Cfruby::FileEdit.set。
它为 String 和 Array 添加了很多助手方法,这些方法可以做一些 Cfruby 事情(安装程序、编辑文件等)。
它还提供了一个很好的日志记录器。
所以,不再需要在脚本中指定一大堆的名称空间。上面用于获取操作系统类型的例子现在变成这样:
清单 7. 使用 cfrubyscript 获取操作系统的类型
require 'rubygems'
require_gem 'cfruby'
require 'libcfruby/cfrubyscript'
puts($os.name)
这可以翻译成一个单独的调用,该调用使用全局变量 $os。Cfruby 的确强大,它为管理类 *nix 系统提供了很多功能。
现在来看看其中一些功能,以及使用它们的一些基本例子。
用户管理
在系统管理中,最常见、最重要的任务之一就是用户和组的管理。Cfruby 以一种可移植的、简单的方式提供了一套强大的方法来实现该任务。
该任务是使用 UserManager 对象实现的,这个对象可以像下面这样从 OS 模块获得。
清单 8. 使用 libcfruby 获得 UserManager 对象
require 'rubygems'
require_gem 'cfruby'
osfactory = Cfruby::OS::OSFactory.new()
os = osfactory.get_os()
usermgr = os.get_user_manager()
如果使用 cfrubyscript 方式,那么已经有一个全局用户管理对象,即 $user,它可以直接用于调用方法。我将使用这种方法,因为这样更简单,更易于阅读。
下面展示如何使用它来创建和删除一个用户。
清单 9. 使用 cfgrubyscript 进行用户管理
require 'rubygems'
require_gem 'cfruby'
require 'libcfruby/cfrubyscript'
$user.adduser('newusername','password')
$user.deleteuser('usernametodelete',true)
上述代码做什么事情?
第 1、2 行 – 和通常一样,将 libcfruby 和 cfrubyscript 包括到脚本中。
第 3 行 – 以用户名 “newusername” 和第二个参数指定的密码创建一个新用户。
第 4 行 – 删除用户名为 “usernametodelete” 的用户。第二个参数的值可以是 true 或 false,用于指定是否删除被删除用户的主目录。
类似地,组操作也可以使用 UserManager 对象中的 addgroup() 和 deletegroup() 方法来完成。
进程管理
管理员的另一项重要的任务是跟踪系统上运行的进程,并管理它们。Cfruby 在这方面也很有用,它为有效地处理进程提供了方法。
您可以使用 Cfruby 实现它。
清单 10. 使用 cfgrubyscript 进行进程管理
require 'rubygems'
require_gem 'cfruby'
require 'libcfruby/cfrubyscript'
$proc.kill($proc.vim)
'ps –aef'.exec()
上述代码做什么事情?
第 3 行 – 使用全局 ProcessManager 对象 $proc 关闭由参数指定的 “vim” 进程。$proc.vim 是在系统上运行的 “vim” 进程的一个 ProcessInfo 类型的对象。它们是由 cfrubyscript 自动创建的。
第 4 行 – 用指定的命令 “ps –aef” 启动一个新进程。可以从命令字符串中直接调用 exec 方法。
包管理
系统管理员必须负责的另一项任务是管理系统上的包。Cfruby 提供了一些方法用于方便地在系统上安装和删除软件。
清单 11. 使用 cfgrubyscript 进行包管理
require 'rubygems'
require_gem 'cfruby'
require 'libcfruby/cfrubyscript'
all = $pkg.packages()
installed = $pkg.installed_packages()
ruby.install()
上述代码做什么事情?
第 3 行 – 使用 cfrubyscript 创建的全局 $pkg PackageManager 对象,通过调用 packages() 方法获得系统上所有可用的包。
第 4 行 – 获得所有已安装的包的列表。
第 5 行 – 通过调用 install 方法安装 Ruby 包。可以通过包名本身直接调用 install 助手方法。
事情就是这么简单。
文件管理
Cfruby 还可以帮助管理系统上的文件。通过使用 Cfruby 提供的方法,可以轻松地创建、编辑、删除、更改所有权和更改许可等等。
清单 12. 使用 cfgrubyscript 进行文件管理
require 'rubygems'
require_gem 'cfruby'
require 'libcfruby/cfrubyscript'
'/etc/ssh'.chown_mod('root', 'wheel', 'u=rw,g=r,o-rwx', `:recursive` => true)
上述代码做什么事情?
第 3 行 – 更改文件 “/etc/ssh” 的所有者和组以及许可。直接从文件本身调用 chown_mod() 方法。这样,这是通过 cfrubyscript 的助手对象和方法实现的。注意,这里只用一行就实现了该功能。
所以,上述例子应该已经让您了解到 Cfruby 有多强大,使用它来管理系统有多容易。而且,由于提供了一套非常直观的类和方法,它使得系统管理的整个任务变得更加容易,也更加有趣。
关于 Cfruby 和它的那一整套功能还有很多需要知道的。它附带有一套很好的文档。建议您看一看这些文档,这样才能将这个 Ruby 库的全部威力释放出来。请查看参考资料小节,获取相关链接。
结束语
Ruby 不仅可以与 Rails 框架一起用于 Web 应用程序开发。它还可以像脚本编程语言一样强大,作为通常的 shell 脚本编程的一个很好的替代品,常用于实现系统管理中的脚本编程需求。
通过使用 Ruby 的一套内建模块和一些外部的库,系统管理员可以变得更加高效,工作更加有趣。Ruby 是一个非常有用、非常强大的工具,是每个系统管理员工具箱中必备的工具。






