题 使用python或不执行sys管理操作时感到困惑


我正在用bash做备份,我也写了很少的其他bash脚本。 我想将它转换为python因为我需要学习用于AI技术的python而且我总是将它推迟。因为我必须经常做系统管理员的事情,所以我想如果我在python中做事情那么它会擅长python。现在我对一些事感到困惑

1)我已经看到我可以在bash中执行一行但是在python中我需要为此编写15行代码.e,g使tar球备份。 sed,awk可以过滤文件,在python中我必须写更多的行。所以我的问题是我走错了路。 python是否真的用于系统管理员的事情。对我来说,就像在J2EE中制作一个5页的静态网站,而不是简单的html。

2)我想知道如果bash可以做任何事情,人们为什么要选择python。 我只是在谈论回合sys管理员的事情。

所以我需要知道我是通过尝试使用python来杀死自己还是因为我还在学习我发现它很难?

我只是想知道python是否真的意味着备份,检查日志文件等。


4
2018-05-02 02:18






答案:


Python是一种通用的脚本语言,就像Perl一样。这意味着它比bash脚本更强大,但它也意味着语法通常会更冗长,编写脚本会更复杂。 Bash脚本具有特定于域的优势,这意味着它们做出了许多假设,使大多数任务变得更容易。但是,如果bash所做的假设不适合您需要完成的任务,那么您可能需要花很长时间才能按照您需要的方式工作。

这是Windows系统管理员在处理批处理或VBScript编写时遇到的相同问题。 PowerShell有助于缓解这一点,但是你仍然面临着“这个任务是否足够复杂以至于需要PowerShell,还是一个足够好的批处理脚本来完成可靠的工作?”。

实际上,它确实取决于您需要完成的任务。如果您在Python中编写和维护任务更容易,请使用它。如果bash实际上非常简单,那就用它吧。脚本语言是 工具。这样使用它们。使用最适合您任务要求的工具。

当我写剧本时,我有一个心理清单:

  1. 我正在努力完成的任务究竟是什么?第一步是 总是 定义问题。
  2. 我编写此脚本的语言更快?我的时间很宝贵。
  3. 哪种语言更适合其他人阅读,理解和支持此任务?其他人的时间也很有价值。
  4. 哪种语言会导致更强大,更可靠或更长期的修复?我想写一次,并永远修复它。
  5. 有什么东西让一种语言不合适吗? Python或PowerShell不可用,还是某些模块不能安装?我的批处理文件或bash脚本是否会调用不保证存在且我无法使用脚本维护的程序?

7
2018-05-02 02:56



@ Mirror51:我不能同意培根比特。我通常使用bash来快速和肮脏的任务...如果问题变得(更复杂),那么我使用python。在使用python之前,我使用bash作为快速原型。 - hmontoliu
@hmontoliu我真的很想听听那些能让你使用python的复杂任务,因为对我而言bash可以很容易地做事。为什么有人需要python。我只需要知道这种情况,有人可以解释最初工作A在bash中完成的地方然后它变得复杂然后python解决了。我真的想知道那个案子 - Mirage
@ Mirror51:2个例子(很多),一个bash脚本用于grep几千个文件,与psql数据库有一些关系;这个任务变得复杂,并被移植到python。这提高了性能,甚至允许我们轻松编写Web用户界面来补充CLI界面;另一个例子(更一般):你有一个脚本在多个服务器上做东西;服务器和要运行的命令要么存储在配置文件中,要么存储在脚本中编码的数组中。如果您将脚本迁移到python,由于其语法清晰,这些内容会变得更容易和更清晰 - hmontoliu
谢谢@hmontoliu,这让我感到厌烦,因为我在使用python时没有任何伤害。如果你可以给一些python接收器的在线链接做这些任务,我将非常感谢,因为我是新手,我想看看如何做这些事情 - Mirage
@ Mirror51要在Python可能更好的时候进行扩展,假设我有一个需要查询LDAP服务器或SQL服务器的脚本。 Python有内置模块可以做到这一点,并且可以很容易地处理结果,因为变量是记录集对象。使用bash脚本会更困难,因为您可能不得不处理大型记录集的临时文件管理和使用正则表达式解析字符串。这总是有可能因数据异常而导致出现错误(哦不,带有连字符的姓氏!)。 - Bacon Bits


你在这里问一个有点夸夸其谈的问题。这就像在询问为什么有人在一个套接字集可以工作时在他们的工具箱中有不同的套接字集。每个工具(在本例中为程序/语言/脚本环境)都有自己独特的优点和缺点。例如,当CFEngine(用C语言编写,我相信)做同样的事情时,为什么你会使用Puppet(用Ruby编写)?

脚本语言相对于shell环境的最大优势之一是可读性(模糊Perl不能承受)。在语言字符串操作中也可以更容易。例如,在Bash中你可能需要将你的字符串回显到sed / awk / grep来解析它,但是在Python / Ruby / Perl中你有内置的正则表达式和字符串操作。与远程套接字的通信可能比编写一个更容易围绕curl,wget或netcat的脚本。脚本语言也不需要fork来进行处理。例:

myvar=$(echo "my string" | grep string | cut -d"" -f 3)

这将导致创建三个单独的分叉,从而减慢系统速度。

底线Python旨在满足需求,并且由于它具有它的优点和缺点。一个伟大的系统管理员和一个平庸的系统管理员之间的区别是他们知道各种工具的优势。学习Python是一个好主意,但它并不适合所有工具。


3
2018-05-02 02:46





我是一个系统管理员和一个python程序员。我通常做的是提前思考并重视我将要做的事情来实现bash和python中的某些东西,然后使用最好的工具来完成工作(给我更多速度/力量的工具)。一个不排除另一个,看看python os模块 你会发现有很多东西可以帮助系统管理。

根据经验(我使用的是YMMV):如果你必须运行很多命令,那么使用bash会更好,如果你必须从文本文件进行格式化和计算,python会更好。

另外,你说你正在学习python,所以我建议你先坚持你最熟悉的知识。让一些测试项目滚动以获得与python的亲密关系,当你变得更好时,你会发现根据你想做的事情的复杂性,你自然会倾向于用bash或python做事。


3
2018-05-02 02:46





作为经常使用python和bash的系统管理员,我可以说我经常遇到同样的问题。 通常 (非常普遍)当我意识到我将需要多个open()命令或者如果我在python中实现它时需要导入子进程(或类似的)时,我认真地重新考虑使用python进行sysadmin。也就是说,有时python更容易在以后添加额外的功能。在很多情况下,我写过一些我认为很简单的东西,然后用python(或任何编程语言)重写它,因为我意识到它比我想象的要复杂得多。

真的,这取决于你作为程序员来决定。如果你不知道怎么做,不排除一种方法 - 如果你能从经验中学习,为什么不呢?


2
2018-05-02 06:09