面向系统管理员的 Python 使系统管理更加简单(并且更加有趣)
内容过多,我就不全贴了,有兴趣请范文原文:http://www-128.ibm.com/developer ... a=dgr-cn-cu&s_tact=105agx52&s_cmp=gr
采用 Python 来管理 UNIX® 系统,同时结合优秀的程序设计概念。Python 是一种易于学习的开放源代码脚本编写语言,它使得系统管理员能够更快速地完成工作。它还可以使工作变得充满乐趣。
引言
作为一名系统管理员,您可能碰到过各种各样的挑战和问题。管理用户、磁盘空间、进程、设备和备份,可能让许多系统管理员绞尽脑汁,从而变得心情郁闷、甚至精神错乱。Shell 脚本可以为此提供帮助,但是它们通常具有令人感到灰心的各种限制。在这种情况下,功能齐全的脚本编写语言(如Python)可以将烦琐的任务变得更加容易、并且我敢说变得充满乐趣。
本文中的示例展示了不同的 Python 特性,您可以在实际应用中使用它们。如果您仔细地学习这些示例,那么您将能够了解 Python 的强大功能。
关于模块
模块是一个重要的 Python 概念。一般来说,模块 是您为了使用而进行导入的一项资源。这个过程就好比是从文件柜中取出一张纸,并将其放在桌面上,以便进行使用。您可以使用 import 命令导入模块,每个示例程序的最开始都出现了这个命令。其中提供了各种各样的模块,可用于数据库连接、网络编程、操作系统服务和许多其他有价值的领域。
使用 Python
|
为什么使用 Python?
之所以推荐 Python,是因为它具有许多特性:
- 它是免费的,是开放源代码。
- 它学习起来非常容易。许多用户认为,与其他脚本编写语言相比,它的语法更接近于英语。
- 它是非常成熟的。Python 已经出现很久了,这意味着它的代码是非常稳定的,可以通过许多模块来添加相应的功能,并且在 Web 上可以获得内容丰富的文档。
|
|
Python是一种功能齐全的、可靠的编程语言,就这一点而论,它具有非常多的特性。学习这种语言可能不是一项非常容易的任务。然而请记住,许多 Python特性(如 GUI 工具包)对系统管理员来说并没有太大的价值。这就是本文使用特定示例的原因:它们展示了您所需要掌握的相关技能,以便能够高效地编写Python 脚本以完成系统管理工作。
有关示例的说明
- 每个示例都包括一个 try: 和一个 except:,以及外围代码块。这是基本错误处理的实现。Python 为处理所有类型的异常提供了广泛的支持,但是出于这些示例程序的目的,我尽量保持其简单。
- 这些示例运行于 Linux® 计算机中运行的 Python 2.5 之上,但是它们应该适用于任何 UNIX®/Linux 计算机。
- 您完全可以对这些脚本进行相应的修改。这是非常正确的做法!Python 脚本的本质是,可以很容易地对它们进行修改和自定义,而不需要重新编译代码。
示例 1:搜索文件,并以一种友好的格式显示权限
第一个示例程序(请参见清单 1)用于搜索匹配某种模式(基于用户的输入)的文件、以及为特定文件所分配的权限,并将结果显示在屏幕上。乍看上去,您可能认为这个程序并不比执行一个 find 命令能够完成更多的工作;然而,它能够以一种自定义的方式来显示结果,并且您用于显示这种增强的查找结果的选项是几乎不受任何限制的。这个示例向您介绍了如何使用一个系统命令,并使其更加完善(或者至少更具自定义性)。
该脚本主要执行下面三项任务:
- 从用户那里获得搜索模式。
- 执行搜索。
- 将结果呈现给用户。
在编写这个脚本时,您需要不断地问自己这个问题,“这个代码支持哪种任务?”向自己提这个问题,可以使得您更加关注于您的工作,并且提高效率。
清单 1. 搜索文件,并在结果中列出文件权限
import stat, sys, os, string, commands
#Getting search pattern from user and assigning it to a list
try:
#run a 'find' command and assign results to a variable
pattern = raw_input("Enter the file pattern to search for:\n")
commandString = "find " + patterncommandOutput = commands.getoutput(commandString)
findResults = string.split(commandOutput, "\n")
#output find results, along with permissions
print "Files:"
print commandOutput
print "================================"
for file in findResults:
mode=stat.S_IMODE(os.lstat(file)[stat.ST_MODE])
print "\nPermissions for file ", file, ":"
for level in "USR", "GRP", "OTH":
for perm in "R", "W", "X":
if mode %amp; getattr(stat,"S_I"+perm+level):
print level, " has ", perm, " permission"
else:
print level, " does NOT have ", perm, " permission"
except:
print "There was a problem - check the message above"
|
这个程序完成了下面的这些步骤:
- 请求用户输入一种搜索模式(第 7 行到第 9 行)。
- 显示所找到的文件的清单(第 12 行到第 14 行)。
- 使用 stat 模块,获得每个找到的文件的权限,并将它们显示在屏幕上(第 15 行到第 23 行)。
当这个程序运行时,输出结果应该与清单 2 中所示类似。
清单 2. 第一个示例的输出
$ python example1.py
Enter the file pattern to search for:
j*.py
FILES FOUND FOR PATTERN j*.py :
jim.py
jim2.py
================================
Permissions for file jim.py :
USR R
USR W
USR X
GRP -
GRP -
GRP -
OTH -
OTH -
OTH -
Permissions for file jim2.py :
USR R
USR W
USR X
GRP R
GRP -
GRP X
OTH R
OTH -
OTH X
|