自学了一段时间python,感觉可能是我学习的姿势不太对。总是感觉python相比于shell和perl更偏向于web开发。而对linux的运维管理偏弱。
抛开fabric等这类用python开发的运维工具不谈。自己在日常运维中运用python能做些什么?比shell脚本便捷或效率高的地方又体现在哪里?
现在只用python写过部分日志分析脚本和从页面中提取uid生成链接然后测试播放等动作的简单脚本。
其他的就不知道做些什么好了。
想请知乎上的前辈多给些指点,如果能有些具体实例就更好不过了。
相同问题也在v2ex上发表了提问 http://www.v2ex.com/t/75193
多谢大家
回复内容:
我更喜欢用“系统管理”来形容“运维”这项工作。运维听起来是偏执行的一项工作。python在系统管理上的优势在与强大的开发能力和完整的工具链。python的工程开发能力强大,远强于各种shell和perl。易读易写,兼具面向对象和函数式风格,还有不错元编程能力。通过系统化的将各种管理工具结合,对上述的各类工具进行二次开发,形成统一的服务器管理系统。
和python类似的ruby也很适合编写系统管理软件,但是在相关库和工具上,比python差太多。
举个栗子: 某牛人,精通 bash,python,perl,ruby ,在工作中写了数百个单一功能的脚本(任何语言)来进行日常操作,涵盖了监控,部署,网络配置,日志分析,安全检测 等等许许多多的方面,无所不包。他所作的,只是操作,并没有把系统管理这项工作做好。再多的脚本,也只是把“操作”这个行为做到极致。写再多的脚本,也不能转化为公司在系统管理上的宝贵资产。
让系统易于管理,是一个工程。只有像puppet(ruby),saltstack(python) 这样的自动化管理工具,才能完整的描述整个系统,并且让系统管理的方方面面纳入统一的体系,而不是一堆脚本。
python在服务器管理工具上非常丰富,配置管理(saltstack) 批量执行( fabric, saltstack) 监控(Zenoss, nagios 插件) 虚拟化管理( python-libvirt) 进程管理 (supervisor) 云计算(openstack) ...... 还有大部分系统C库都有python绑定。
对于流程确定的事情,最终一定是纳入系统管理的体系,写成程序,成为系统的一部分。而不是无法复用游离与整体的各种脚本。
随着云计算时代的来临,中小型公司,不需要运维了。大型公司,没有工程开发能力的运维,是没有竞争力的。
现在不用 perl 了?
谢邀。你说的对,Python对日常运维工作来说比Perl和Bash都弱。Python做Web开发也比PHP麻烦很多。我个人的感觉Python更像Java,不适合与Perl/Bash比较。
我个人常用的运维工具是Bash为主,Python主要用来做一些算法演算。因为我的日常维护任务以文件系统维护为主,比较语言要结合场景。
绝大部分的应用需求,所有语言都能完成,但是难易程度不同,选择语言要看开发者的熟练程度和需求的复杂程度。
如果只是“grep”需求,你选Bash执行grep最简单,如果稍复杂就用awk,再复杂就用perl。用更通用的语言就是费力不讨好。
如果是个矩阵计算需求,perl的数组能把你折腾死,bash的管道能把机器折腾死。
我下面这个观点一定会有争议(尤其是PHPer),我倾向于把高级语言分成三类:
1) 底层的C/C
这是可以写操作系统,操作硬件的。可以解决一切问题,但是绝大多数互联网项目不应该用。
2) 中性的Java/Python/Ruby/.NET系列
这是做项目的主要语言,平衡开发效率和执行效率。没有明显的亮点,亦没有明显的缺点。
3) 特长的PHP/Bash/Perl
在某些特定领域,应该选择这些有特长的语言。随着需求越来越全面,语言的短板越用越多,应该控制扩散。
如果撇开 fabric 和 func 这种大杀器再说……我目前的感觉是,任何不是“阅后即焚”的一次性脚本,尤其可能需要日后修改调整的、稍有逻辑处理的脚本,都应该用 Python 代替 Bash。想想“我有一堆主机,我要分别……”这种数组操作吧。想想伟大的 bash 字符串替换。想想 quoting。Bash 完美继承了 Perl 的 “Write-only”属性。
非运维,自己实验室有一摞小机器的人路过。
@冯伟刚 执行效率 Bash 高?您的签名里“软件工程师”是开玩笑的吧?
python_vs_bash_benchmark.zip
- 本例中的 Python 程序比 BASH 程序快大约 6 倍。
- 本例中 Python 稍慢一些,因为它只比 BASH 快 3 倍
- 在此测试中,Python 大约比 BASH 快 5.5 倍。
- 使用 BASH 时,Python 列表的速度提高了 29 倍,Python 字典的速度提高了 23.7 倍
任何类型的顺序数据操作都是不可接受的(除非数据量非常小)。
- 由于在这个简单的函数调用程序中,Python 比 BASH 快 11.77 倍,因此 BASH 是
仅限于线性程序,而 Python 只比非函数调用程序慢 48%(相对于 BASH 的 476%),因此它是一种非常好的结构化编程语言(保持在
请注意,两个程序中都进行了 10000 个函数调用)。
其实根本不需要看任何测试。大量操作依赖进程间通信,没有 JIT 和中间码优化,复杂数据结构的支持约等于零的 Bash,要和 Python 在功能和效率上进行任何比较的方法,就是执行 ./xxx.py 或者干脆写成 C 程序吧。
bash用的熟的话固然不错,但是python的优点有很多web框架可视化运维过程和结果
这个从用户界面上是没法比的
你一个月写几个运维脚本?维护几个运维脚本?这俩加起来少于10个的话,用bash和python没什么区别。
P.S. Python偏向web?太荣幸了……我以为会说PHP的……
不会py的sa不合格的sa,曾经期望管理了两百台服务器,现在觉得太二了。
前两天刚把米勒的内核中断药物脚本用不到10行py搞定仍然盐里了。 可见py的简洁。
运维自动化配置目前还是py和ruby主要
如果抛开fabric,甚至saltstack、ansible这类运维工具的话,很难体会出python的强大。
可以读一下《Python UNIX和Linux系统管理指南》,
了解一下。