免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3617 | 回复: 0
打印 上一主题 下一主题

(转贴)面向系统管理员的 Python 使系统管理更加简单(并且更加有趣) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-22 16:14 |只看该作者 |倒序浏览
介绍了如何使用python编写脚本来提高系统管理的效率,比较有启发,比起bash,perl,Python有很多更强大的功能,是一个很好的管理脚本语言的选择。\r\n内容太多了,不全发了,我就发个链接先了。http://www.ibm.com/developerwork ... 5agx52&s_cmp=gr\r\n\r\n面向系统管理员的 Python\r\n\r\n使系统管理更加简单(并且更加有趣)\r\n    developerWorks\r\n    \r\n    \r\n文档选项\r\n    将打印机的版面设置成横向打印模式    \r\n\r\n打印本页\r\n    将此页作为电子邮件发送    \r\n\r\n将此页作为电子邮件发送\r\n\r\n\r\n级别: 中级\r\n\r\nJames Knowlton (james@jamesknowlton.com), 软件质量工程师, Freelance Writer\r\n\r\n2007 年 10 月 08 日\r\n\r\n    采用 Python 来管理 UNIX® 系统,同时结合优秀的程序设计概念。Python 是一种易于学习的开放源代码脚本编写语言,它使得系统管理员能够更快速地完成工作。它还可以使工作变得充满乐趣。 \r\n\r\n引言\r\n\r\n作为一名系统管理员,您可能碰到过各种各样的挑战和问题。管理用户、磁盘空间、进程、设备和备份,可能让许多系统管理员绞尽脑汁,从而变得心情郁闷、甚至精神错乱。Shell 脚本可以为此提供帮助,但是它们通常具有令人感到灰心的各种限制。在这种情况下,功能齐全的脚本编写语言(如 Python)可以将烦琐的任务变得更加容易、并且我敢说变得充满乐趣。\r\n\r\n本文中的示例展示了不同的 Python 特性,您可以在实际应用中使用它们。如果您仔细地学习这些示例,那么您将能够了解 Python 的强大功能。\r\n\r\n关于模块\r\n\r\n模块是一个重要的 Python 概念。一般来说,模块 是您为了使用而进行导入的一项资源。这个过程就好比是从文件柜中取出一张纸,并将其放在桌面上,以便进行使用。您可以使用 import 命令导入模块,每个示例程序的最开始都出现了这个命令。其中提供了各种各样的模块,可用于数据库连接、网络编程、操作系统服务和许多其他有价值的领域。\r\n\r\n使用 Python\r\n    \r\n为什么使用 Python?\r\n\r\n之所以推荐 Python,是因为它具有许多特性:\r\n\r\n    * 它是免费的,是开放源代码。\r\n    * 它学习起来非常容易。许多用户认为,与其他脚本编写语言相比,它的语法更接近于英语。\r\n    * 它是非常成熟的。Python 已经出现很久了,这意味着它的代码是非常稳定的,可以通过许多模块来添加相应的功能,并且在 Web 上可以获得内容丰富的文档。\r\n\r\nPython 是一种功能齐全的、可靠的编程语言,就这一点而论,它具有非常多的特性。学习这种语言可能不是一项非常容易的任务。然而请记住,许多 Python 特性(如 GUI 工具包)对系统管理员来说并没有太大的价值。这就是本文使用特定示例的原因:它们展示了您所需要掌握的相关技能,以便能够高效地编写 Python 脚本以完成系统管理工作。\r\n\r\n有关示例的说明\r\n\r\n    * 每个示例都包括一个 try: 和一个 except:,以及外围代码块。这是基本错误处理的实现。Python 为处理所有类型的异常提供了广泛的支持,但是出于这些示例程序的目的,我尽量保持其简单。\r\n    * 这些示例运行于 Linux® 计算机中运行的 Python 2.5 之上,但是它们应该适用于任何 UNIX®/Linux 计算机。\r\n    * 您完全可以对这些脚本进行相应的修改。这是非常正确的做法!Python 脚本的本质是,可以很容易地对它们进行修改和自定义,而不需要重新编译代码。\r\n\r\n示例 1:搜索文件,并以一种友好的格式显示权限\r\n\r\n第一个示例程序(请参见清单 1)用于搜索匹配某种模式(基于用户的输入)的文件、以及为特定文件所分配的权限,并将结果显示在屏幕上。乍看上去,您可能认为这个程序并不比执行一个 find 命令能够完成更多的工作;然而,它能够以一种自定义的方式来显示结果,并且您用于显示这种增强的查找结果的选项是几乎不受任何限制的。这个示例向您介绍了如何使用一个系统命令,并使其更加完善(或者至少更具自定义性)。\r\n\r\n该脚本主要执行下面三项任务:\r\n\r\n   1. 从用户那里获得搜索模式。\r\n   2. 执行搜索。\r\n   3. 将结果呈现给用户。\r\n\r\n在编写这个脚本时,您需要不断地问自己这个问题,“这个代码支持哪种任务?”向自己提这个问题,可以使得您更加关注于您的工作,并且提高效率。\r\n\r\n\r\n清单 1. 搜索文件,并在结果中列出文件权限\r\n\r\n                    \r\nimport stat, sys, os, string, commands\r\n\r\n#Getting search pattern from user and assigning it to a list\r\n\r\ntry:\r\n    #run a \'find\' command and assign results to a variable\r\n    pattern = raw_input(\"Enter the file pattern to search for:\\n\")\r\n    commandString = \"find \" + patterncommandOutput = commands.getoutput(commandString)\r\n    findResults = string.split(commandOutput, \"\\n\")\r\n\r\n    #output find results, along with permissions\r\n    print \"Files:\"\r\n    print commandOutput\r\n    print \"================================\"\r\n    for file in findResults:\r\n        mode=stat.S_IMODE(os.lstat(file)[stat.ST_MODE])\r\n        print \"\\nPermissions for file \", file, \":\"\r\n        for level in \"USR\", \"GRP\", \"OTH\":\r\n            for perm in \"R\", \"W\", \"X\":\r\n                if mode %amp; getattr(stat,\"S_I\"+perm+level):\r\n                    print level, \" has \", perm, \" permission\"\r\n                else:\r\n                    print level, \" does NOT have \", perm, \" permission\"\r\nexcept:\r\n    print \"There was a problem - check the message above\"\r\n            \r\n\r\n\r\n这个程序完成了下面的这些步骤:\r\n\r\n   1. 请求用户输入一种搜索模式(第 7 行到第 9 行)。\r\n   2. 显示所找到的文件的清单(第 12 行到第 14 行)。\r\n   3. 使用 stat 模块,获得每个找到的文件的权限,并将它们显示在屏幕上(第 15 行到第 23 行)。\r\n\r\n当这个程序运行时,输出结果应该与清单 2 中所示类似。\r\n\r\n清单 2. 第一个示例的输出\r\n\r\n                \r\n$ python example1.py\r\nEnter the file pattern to search for:\r\nj*.py\r\n\r\nFILES FOUND FOR PATTERN  j*.py :\r\njim.py\r\njim2.py\r\n================================\r\n\r\nPermissions for file  jim.py :\r\nUSR     R\r\nUSR     W\r\nUSR     X\r\nGRP     -\r\nGRP     -\r\nGRP     -\r\nOTH     -\r\nOTH     -\r\nOTH     -\r\n\r\nPermissions for file  jim2.py :\r\nUSR     R\r\nUSR     W\r\nUSR     X\r\nGRP     R\r\nGRP     -\r\nGRP     X\r\nOTH     R\r\nOTH     -\r\nOTH     X\r\n\r\n\r\n示例 2:基于菜单选择对 tar 存档文件执行操作\r\n\r\n前一个示例提示用户输入要使用的搜索模式。另一种从用户那里获得信息的方式是通过命令行参数。清单 3 中的程序说明了如何在 Python 中完成这项工作:这段代码接受一个 tar 文件的名称作为命令行参数,然后向用户提供几种选择。\r\n\r\n这个示例还显示了一种新的解决问题的方法。第一个示例使用命令模块运行 find 命令,并捕获输出。这种方法可能比较笨拙,并且不是非常符合 Python 的习惯。这个示例使用 tarfile 模块打开 tar 文件,这样做的好处是,在操作文件时允许您使用 Python 的属性和方法。通过 Python 所提供的许多模块,您可以完成许多无法通过命令行完成的工作。\r\n\r\n这是一个很好的示例,它说明了 Python 中菜单系统的实现。该程序将根据您的选择执行不同的操作:\r\n\r\n    * 如果您按 1,那么这个程序将提示您输入该存档文件中要提取到当前目录的文件名,然后提取该文件。\r\n    * 如果您按 2,那么这个程序将提示您输入文件名,然后显示该文件的信息。\r\n    * 如果您按 3,那么这个程序将列出该存档文件中所有的文件。\r\n\r\n\r\n清单 3. 根据您的菜单选择对 tar 存档文件执行相应的操作\r\n\r\n                \r\nimport tarfile, sys\r\n\r\ntry:\r\n    #open tarfile\r\n    tar = tarfile.open(sys.argv[1], \"r:tar\")\r\n\r\n    #present menu and get selection\r\n    selection = raw_input(\"Enter\\n\\\r\n    1 to extract a file\\n\\\r\n    2 to display information on a file in the archive\\n\\\r\n    3 to list all the files in the archive\\n\\n\")\r\n\r\n    #perform actions based on selection above\r\n    if selection == \"1\":\r\n        filename = raw_input(\"enter the filename to extract:  \")\r\n        tar.extract(filename)\r\n    elif selection == \"2\":\r\n        filename = raw_input(\"enter the filename to inspect:  \")\r\n        for tarinfo in tar:\r\n            if tarinfo.name == filename:\r\n                print \"\\n\\\r\n                Filename:\\t\\t\", tarinfo.name, \"\\n\\\r\n                Size:\\t\\t\", tarinfo.size, \"bytes\\n\\\r\n    elif selection == \"3\":\r\n        print tar.list(verbose=True)\r\nexcept:\r\n    print \"There was a problem running the program\"\r\n\r\n\r\n这个程序完成了下面的这些步骤:\r\n\r\n   1. 打开 tar 文件(第 5 行)。\r\n   2. 显示菜单,并获得用户的选择(第 8 行到第 11 行)。\r\n   3. 如果您按 1(第 14 行到第 16 行),从该存档文件中提取一个文件。\r\n   4. 如果您按 2(第 17 行到第 23 行),显示有关选择的文件的信息。\r\n   5. 如果您按 3(第 24 行到第 25 行),显示该存档文件中所有文件的信息。\r\n\r\n清单 4 中显示了输出结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP