每个系统pipe理员应该知道哪些程序员的东西?

受这个问题的启发,我反过来问:系统pipe理员需要了解多less编程知识? 更具体地说,什么编程工具是有用的系统pipe理员有?

  • 版本控制 。 能够生成,阅读和应用补丁。 知道如何使用一个版本控制系统来展示版本库的广泛版本,以及为什么你需要一个。 知道如何编写描述性更新日志,以及为什么你需要它们。 知道如何search版本库的日志中的关键字和时间框架。
  • 脚本 。 做一些事情,并在你的路上。 做两次或更多,做一次,然后写一个脚本。
  • debugging 。 了解如何读取堆栈跟踪以及如何向您的软件支持联系人报告相关错误。 发现错误是好的和有益的,但知道如何解决它可能需要花费大量的代码阅读的投入。 做那些对你来说容易的部分,让他们做一些容易的部分。
  • testing 。 连续监视并logging错误。 与版本控制和testing结合使用,您可以很清楚地了解什么时候会发生什么样的错误,什么时候发生了什么变化。 监视生产和预生产。
  • 同行评议 。 提出并审查生产系统的变化。 在试生产前进行testing,确定需要做什么并logging可能会影响多长时间的服务。 不要让变革pipe理降级为官僚政治的政治斗争。
  • 研究密码学 。 现代系统pipe理员负责networking资源; 将安全作为最后一步加在不可能和非常昂贵的命题之间。 了解公钥encryption,密码处理实践和一般的encryption将是非常有价值的。

我会开始:

  1. 如何编写比最基本的脚本更多的语言。 自动化是你的朋友。
  2. 如何运行一个debugging器/知道如何阅读某种崩溃报告:它能够弄清楚一个崩溃报告以及询问哪个人更容易。
  3. 版本控制 – 不只是为了代码,而是为了保存历史logging或改变控制权。

系统pipe理只是编程。 configurationpipe理系统让您可以将整个基础架构视为分布式机器。 作为一个系统pipe理员,你的工作是编程这台机器。

知道一个文本编辑器。 通常vi为系统pipe理员,emacs为程序员。

知道如何编写脚本。 select一种脚本语言。 Perl和shell / sed / awk组合一样是Perl常用的最爱。 Ruby和Python可以工作,但是对于很多事情来说对象是错误的范例。

知道如何编写可读文档。

版本控制。 维护configuration文件和审计跟踪的关键。

学习用编程术语思考。 理解程序,面向对象和函数式编程范例。 这些可能永远不会被使用,但了解它们会使您的生产效率更高。

学习使用debugging器(或更多)和日志logging。

学习使用RDBMS。 有很多数据处理要求可以通过正确使用RDBMS来简化。 即使能够根据需求切换到DBAangular色,也可以创造奇迹。

部署前testing。 看到testing驱动的开发哲学。

结对编程是好的。 让其他人看着你的肩膀学习/build议/正确。

学习至less要熟悉一堆语言。 每年学习一门新的语言。

  • 知道如何编程。 是的,这很重要:正如一位评论者所说,如果你不止一次这样做,那么写一个脚本 – 并写得很好。
  • 了解标准操作系统安装中包含的工具。 对于UNIXpipe理员来说,这意味着像Korn Shell(ksh)和Perl以及vi这样的工具。 不要依赖于Emacs或者Ruby或者Tcl或者C shell。
  • 了解networking。 以太网数据包如何组合在一起? 包是什么样的? 什么是不同的数据包types? 了解tcpdump,wireshark,snoop等工具。
  • 编写便携式代码。 如果代码要在Linux下运行 – Tru64 – 和Solaris – 以及OpenVMS – 然后编写可移植代码。 即使它只能在两个版本的UNIX下运行 – 使其具有可移植性。 但是,如果它不需要便携,不要花费额外的时间。
  • 知道文档在哪里。 对于Perl,这意味着perldoc,Perl Mongers,perl.org等。对于ksh,这意味着手册页和您最喜欢的Korn shell书。
  • 文件,文件,文件,文件! logging你的代码,创build手册页,创build内联的Perl文档,以及其他适当的东西。 解释如何使用该程序,以及为什么你这样编码。
  • 了解你的系统的打包工具。 知道如何为Red Hat或HP-UX软件仓库或Solaris软件包创buildRPM:这将允许您为系统构build软件包,从而将它们集成到安装过程中。

脚本编写是必不可less的,但我会build议,知道一些“真实”的语言是一个明确的奖金。 例如,您可以使用.NET System.DirectoryServices命名空间做一些非常有用的事情。

我是程序员和高级pipe理员/集成商。 为了工作,我需要了解以下几点:

  • 如何编写shell脚本(POSIX,无Bashisms),一点Perl,一点Python
  • 基本C(单一UNIX规范)
  • 如何安装编译器工具链
  • 如何从源头上构build库和其他OSS项目
  • Valgrind是什么,以及如何使用它来发现内存泄漏
  • 如何滚动.rpm和.deb包
  • 虽然我们不需要它,但是一点PHP和一点LISP也不会受到伤害

大多数初级pipe理员可以看我们的程序员之一,并说(有权力),是的,我正确地安装它,这里是你有一个泄漏的地方,这就是为什么你刚刚推的代码打破。 或者“不,它不是我们的MySQL版本,在这里查看你的查询…”

我们认为,当我们聘请一个有天赋的pipe理员的时候,我们有点不一样了,我们希望他们(最终)能够find自己的编程方式,即使它只是按照他们需要的方式来工作。

总而言之,全面的做法永远不会伤害你。

很多年前(事实上,Windows NT 3.1)我是从事编程服务的程序员,偶尔也是偶尔的设备驱动程序。 这意味着你很了解Windows内核。 当时我对编程感到有点无聊,转而进行networkingpipe理。 我发现我在编程方面的背景一直是immensley宝贵的一次又一次。

这不仅仅是写VBScript脚本是相当痛苦的。 了解Windows的内部工作原理,特别是IP的工作原理,可以帮助解决奇怪的服务器和networking问题。 这也是一种心态。 程序员习惯于文档和版本控制,而且让我感到惊讶的是,有多lessWindowspipe理员会试着去查看它是否正常工作,并担心之后会解决这个问题。

所有这一切都很好,但是说出去做十年的程序员并不是很有用的build议! 不过,我认为这将有助于大多数系统pipe理员有一些像C ++或C#这样的“硬”语言的编程经验。 如果你的组织中有驯服的程序员,就跟他们一起喝吧!

约翰·雷尼

不好的事情发生,你的代码会比你想象的要长。 优雅地失败,并带有有用的错误消息。 你将用完磁盘,内存,CPU,时间等,处理它。

不要那么乐观,百万分之一的问题在生产中会经常发生。

有了这里的所有描述,我不会说我是一个系统pipe理员。 但是,我build立和pipe理一些Windows / Linux服务器的事实,我必须承认:

  • 在Linux中,bash脚本是一个必须知道的 – 如果你知道如何将它与perl / awk / etc整合,那就更好了。 我发现使用它很多任务变得更容易。

  • 了解在C / C ++中编程有很大的帮助。 有时你必须修改一个GNU源代码(如果你使用的话)以满足你的需要,因为成为一个GNU产品并不能保证你总能得到你所需要的帮助 – 而且很多时候它们都是用C / C ++编写的。

  • SQL – 一切适用于数据库
  • 编程 – 语言无关紧要,只要您了解可以学习和适应任何语言的逻辑和过程即可。
  • 如何编码和变化 – 这是一个巨大的。 你有多less次被困在一个configuration中,试图弄清楚为什么有人这样做,如果我们改变它,会有什么影响。 这一个超出你的代码或脚本的任何东西,这一个覆盖当你在防火墙设置的变化,以处理一个附带的情况下,当用户X接收来自域Y的电子邮件在周二下午,当它下雨了。 也可能不是你,可能是PFY决定继续前进,然后在你的假期凌晨2点打电话给你,因为一切都以可怕的方式破裂了。
  • 系统语言 – 在Windows上,这是像Powershell和WMI这样的东西,可以让脚本语言绑定到一些非常强大的资源,并在PC上执行任何操作。 Unix / Linux有自己的一套工具,我没有资格谈论。

了解如何绑定到您的LDAP并从您select的脚本语言中检索所需的信息对于从故障排除到真正加强各种types的自动化(帐户和资源调配,对用户或计算机帐户的更智能检查)的所有关键点都是至关重要的。

可能看起来很基本,但我看到很多面包店,人们不认为他们需要这种系统pipe理。 很多地方花费大量的$$$来pipe理大量的pipe理工具,据我所知,如果有人知道或知道如何使用这些工具,95%的工作可以用几个小时的脚本完成这样做。

我发现,知道bash,dos批处理和powershell脚本为系统pipe理员提供了一个框架,可以在任何stream行的系统上做任何事情。