作者:黄晓敏3023 | 2021-09-08 09:22
自学了一段时间python,感觉可能是我学习的姿势不太对。总是感觉python相比于shell和perl更偏向于web开发。而对linux的运维管理偏弱。抛开fabric等这类用python开发的运维工具不谈。自己在日常运维中运用python能做些什么?比shell脚本便捷或效率高的地方又体现在哪里?现在只用python写过部分日志分析脚本和从页面中提取uid生成链接然后测试播放等动作的简单脚本。
自学了一段时间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
The Python program in this example is about 6 times faster than the BASH program. Python is a little slower in this example as it is only 3 times faster than BASH Python is roughly 5.5 times faster than BASH in this test. With Python lists being 29 times faster and Python dictionaries being 23.7 times faster using BASH for
any kind of sequential data manipulation is unacceptable (unless it is very small amounts of data). Since in this simple function calling program Python is 11.77 times faster than BASH, BASH is therefore
restricted to linear program whereas Python is only 48% (verses the 476% of BASH) slower than the non function calling program and for that reason is a very good structured programming language (keep in
mind that 10000 function calls were made in both programs). 其实根本不需要看任何测试。一个大量操作依赖进程间通信,没有 JIT 和中间码优化,对复杂数据结构的支持约等于零的 Bash,要和 Python 在功能和效率上进行任何比较的方法,就是执行 ./xxx.py 或者干脆写成 C 程序吧。
bash用的熟的话固然不错,但python的优点在于有很多web框架可视化运维过程和结果
这个从用户友好度上是没法比的
你一个月写几个运维脚本?维护几个运维脚本?这俩加起来少于10个的话,用bash和python都没啥区别。
P.S. Python偏向web?太荣幸了…我以为会说PHP的…
不会py的sa不是合格的sa, 曾经用expect管理了两百台服务器, 现在觉得太二了.
前两天刚把miller的内核网卡中断补丁脚本用不到10行py搞定仍salt里了. 可见py的简洁.
运维自动化配置目前还是py和ruby为主
如果抛开fabric,甚至saltstack、ansible这种运维工具的话,很难体现出python的强大。
可以读一下 《Python UNIX 和Linux 系统管理指南》,
体会一下。