受这个问题的启发,我反过来问:系统pipe理员需要了解多less编程知识? 更具体地说,什么编程工具是有用的系统pipe理员有?
我会开始:
系统pipe理只是编程。 configurationpipe理系统让您可以将整个基础架构视为分布式机器。 作为一个系统pipe理员,你的工作是编程这台机器。
知道一个文本编辑器。 通常vi为系统pipe理员,emacs为程序员。
知道如何编写脚本。 select一种脚本语言。 Perl和shell / sed / awk组合一样是Perl常用的最爱。 Ruby和Python可以工作,但是对于很多事情来说对象是错误的范例。
知道如何编写可读文档。
版本控制。 维护configuration文件和审计跟踪的关键。
学习用编程术语思考。 理解程序,面向对象和函数式编程范例。 这些可能永远不会被使用,但了解它们会使您的生产效率更高。
学习使用debugging器(或更多)和日志logging。
学习使用RDBMS。 有很多数据处理要求可以通过正确使用RDBMS来简化。 即使能够根据需求切换到DBAangular色,也可以创造奇迹。
部署前testing。 看到testing驱动的开发哲学。
结对编程是好的。 让其他人看着你的肩膀学习/build议/正确。
学习至less要熟悉一堆语言。 每年学习一门新的语言。
脚本编写是必不可less的,但我会build议,知道一些“真实”的语言是一个明确的奖金。 例如,您可以使用.NET System.DirectoryServices命名空间做一些非常有用的事情。
我是程序员和高级pipe理员/集成商。 为了工作,我需要了解以下几点:
大多数初级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 ++编写的。
了解如何绑定到您的LDAP并从您select的脚本语言中检索所需的信息对于从故障排除到真正加强各种types的自动化(帐户和资源调配,对用户或计算机帐户的更智能检查)的所有关键点都是至关重要的。
可能看起来很基本,但我看到很多面包店,人们不认为他们需要这种系统pipe理。 很多地方花费大量的$$$来pipe理大量的pipe理工具,据我所知,如果有人知道或知道如何使用这些工具,95%的工作可以用几个小时的脚本完成这样做。
我发现,知道bash,dos批处理和powershell脚本为系统pipe理员提供了一个框架,可以在任何stream行的系统上做任何事情。