Tim Asked: 2009-05-22 21:29:31 +0800 CST2009-05-22 21:29:31 +0800 CST 2009-05-22 21:29:31 +0800 CST 每个系统管理员都应该知道哪些程序员知识? 772 受这个问题的启发,我反问:系统管理员需要了解多少编程知识?更具体地说,哪些编程工具对系统管理员有用? untagged 12 个回答 Voted Best Answer jldugger 2009-05-23T00:30:22+08:002009-05-23T00:30:22+08:00 版本控制。能够生成、读取和应用补丁。知道如何使用一个版本控制系统来呈现存储库范围的版本以及你为什么想要一个。知道如何编写描述性变更日志以及为什么需要它们。了解如何在存储库的日志中搜索关键字和时间范围。 脚本。做某事一次,然后上路。做两次或更多,做一次然后写一个脚本。 调试。了解如何阅读堆栈跟踪以及如何向您的软件支持联系人报告相关错误。发现错误很好也很有帮助,但知道如何修复它可能需要大量投资来阅读代码。做对你来说容易的部分,让他们做对他们来说容易的部分。 测试。持续监控并记录错误。与版本控制和测试结合使用,您可以清楚地知道什么时候出了什么问题,以及当时发生了什么变化。监控生产和预生产。 同行评审。提出并审查对生产系统的更改。对预生产进行测试,准确确定需要完成的工作并记录哪些服务可能会受到影响多长时间。不要让变革管理退化为官僚权力的政治斗争。 学习密码学。现代系统管理员负责网络资源;作为最后一步增加安全性介于不可能和非常昂贵的提议之间。总体上了解公钥加密、密码处理实践和加密将非常有价值。 Chealion 2009-05-22T21:47:37+08:002009-05-22T21:47:37+08:00 我会开始: 不管是什么语言,如何编写比最基本的脚本更多的东西。自动化是您的朋友。 如何运行调试器/知道如何阅读某种类型的崩溃报告:它使找出崩溃报告以及向谁询问结果变得容易得多。 版本控制 - 不仅适用于代码,还适用于任何值得保留历史记录或更改控制的内容。 Devdas 2009-05-22T23:13:41+08:002009-05-22T23:13:41+08:00 系统管理只是编程。配置管理系统可让您将整个基础架构视为分布式机器。作为系统管理员,您的工作是对这台机器进行编程。 知道一种文本编辑器。通常 vi 用于系统管理员,emacs 用于程序员。 知道如何编写脚本。选择一种脚本语言。Perl 一直是最受欢迎的,shell/sed/awk 组合也是如此。Ruby 和 Python 可以工作,但是对于很多事情来说,对象是错误的范式。 知道如何编写可读的文档。 版本控制。对于维护配置文件和审计跟踪至关重要。 学习用编程术语思考。了解过程、面向对象和函数式编程范式。这些可能永远不会被使用,但了解它们会让你的工作效率无限提高。 学习使用调试器(或更多)和日志记录。 学习使用 RDBMS。有很多数据处理要求可以通过正确使用 RDBMS 来简化。即使能够按需切换到 DBA 角色也能创造奇迹。 部署前测试。请参阅测试驱动的开发理念。 结对编程很好。让其他人看着你的肩膀学习/建议/纠正。 学会至少对一堆语言有一个短暂的熟悉。每年学习一门新语言。 Mei 2009-06-18T14:33:15+08:002009-06-18T14:33:15+08:00 知道如何编程。 是的,这很重要:正如一位评论者所说,如果你不止一次这样做,那就写一个脚本 - 写好。 了解标准操作系统安装中包含的工具。 对于 UNIX 管理员,这意味着 Korn Shell (ksh) 和 Perl 和 vi 等工具。不要依赖 Emacs 或 Ruby 或 Tcl 或 C shell 的存在。 了解网络。以太网数据包是如何组合在一起的?包长什么样子?有哪些不同的数据包类型?了解 tcpdump、wireshark、snoop 等工具。 编写可移植的代码。 如果代码要在 Linux - 和 Tru64 - 和 Solaris - 和 OpenVMS - 下运行 - 然后编写可移植代码。即使它只能在两个版本的 UNIX 下运行 - 使其可移植。但是,如果它不需要便携,请不要在上面花费额外的时间。 知道文档在哪里。对于 Perl,这意味着 perldoc、Perl Mongers、perl.org 等。对于 ksh,这意味着手册页和您最喜欢的 Korn shell 书籍。 文件,文件,文件,文件!记录您的代码、创建手册页、创建内联 Perl 文档以及其他任何合适的内容。解释如何使用该程序以及为什么要这样编码。 了解系统的打包工具。了解如何为 Red Hat、HP-UX 软件仓库或 Solaris 软件包创建 RPM:这将允许您为您的系统构建软件包,从而将它们集成到安装过程中。 Maximus Minimus 2009-05-30T06:14:19+08:002009-05-30T06:14:19+08:00 脚本是必不可少的,但我认为了解一些“真正的”语言是一个明确的好处。例如,您可以使用 .NET System.DirectoryServices 命名空间做一些非常有用的事情。 Tim Post 2009-06-08T22:49:16+08:002009-06-08T22:49:16+08:00 我是一名程序员和高级管理员/集成商。要在我工作的地方工作,你需要知道以下几点: 如何编写 shell 脚本(POSIX,没有 Bashisms),一点 Perl,一点 Python Basic C(单一 UNIX 规范) 如何安装编译器工具链 如何从源代码构建库和其他 OSS 项目 Valgrind是什么以及如何使用它来发现内存泄漏 如何滚动 .rpm 和 .deb 包 虽然我们不需要它,但一点 PHP 和一点 LISP 不会有什么坏处 大多数初级管理员可以看着我们的一位程序员并说(有权限),是的,我正确安装了它,这就是你有漏洞的地方,这就是你刚刚推送的代码被破坏的原因。或者“不,它不是我们的 MySQL 版本,请在此处查看您的查询……” 我认为我们有点不同,当我们聘请一位有天赋的管理员时……我们有一半期望他们(最终)找到自己的编程方式,即使它只是破解我们用来按照他们需要的方式工作的东西. 总之,全面发展永远不会伤害你。 John Rennie 2009-05-22T23:26:34+08:002009-05-22T23:26:34+08:00 很多很多年前(实际上是 Windows NT 3.1),我最初是一名程序员,专门编写服务,甚至偶尔会编写设备驱动程序。这意味着您非常了解 Windows 内核。随着时间的推移,我对编程感到有点厌烦,并转向网络管理。我发现我的编程背景一遍又一遍地非常有价值。 不仅仅是编写 VBScript 脚本相对轻松。了解 Windows 的工作原理,尤其是 IP 的工作原理,有助于解决奇怪的服务器和网络问题。也是一种心态。程序员习惯于文档和版本控制,看到有多少 Windows 管理员会尝试一些东西以查看它是否有效并担心事后解决混乱,这让我感到震惊。 一切都很好,但是说离开并作为程序员工作十年并不是很有用的建议!但是,我认为这将有助于大多数系统管理员拥有一些使用“硬”语言(如 C++ 或 C#)进行编程的经验。如果你的组织中有驯服的程序员,那就和他们一起喝酒吧! 约翰·雷尼 Ronald Pottol 2009-06-10T17:07:38+08:002009-06-10T17:07:38+08:00 糟糕的事情发生了,你的代码会比你想象的要长。优雅地失败,并提供有用的错误消息。您将耗尽磁盘、内存、cpu、时间等,处理它。 不要那么乐观,百万分之一的奇怪问题在生产中会经常发生。 fbmario 2012-06-07T21:15:37+08:002012-06-07T21:15:37+08:00 有了这里的所有描述,我不会说我是系统管理员。但事实上我构建和管理了几个 windows/linux 服务器,我必须承认一些事情: 在 linux 中,bash 脚本是必须知道的——如果你知道如何将它与 perl/awk/etc 集成,那就更好了。我发现使用它让许多任务变得更容易。 知道用 C/C++ 编程有很大帮助。有时您必须修改 GNU 源代码(如果您使用源代码)以满足您的需要,因为成为 GNU 产品并不能确保您总是能及时获得所需的帮助——而且很多时候它们是用 C/C++ 编写的。 Shial 2009-06-18T15:54:59+08:002009-06-18T15:54:59+08:00 SQL - 一切都适用于数据库 编程——语言无所谓,只要你理解逻辑和过程,你就可以学习和适应任何语言。 如何记录代码和更改 - 这个是巨大的。有多少次你被困在一个配置中,试图弄清楚为什么有人这样做,如果我们把它改回来会有什么影响。这超出了您编写的任何代码或脚本,当您在星期二下午下雨时用户 X 收到来自域 Y 的电子邮件时,当您更改防火墙设置以处理边缘情况时,这将涵盖。可能不是你,可能是 PFY 决定继续做这件事,然后在你假期的凌晨 2 点打电话给你,因为一切都以一种可怕的方式发生了。 系统语言——在 Windows 上,这就是 Powershell 和 WMI 之类的东西,它们可以让你的脚本语言绑定到一些非常强大的资源并在 PC 上做任何事情。Unix/Linux 有它们自己的工具集,我没有资格谈论它们。
我会开始:
系统管理只是编程。配置管理系统可让您将整个基础架构视为分布式机器。作为系统管理员,您的工作是对这台机器进行编程。
知道一种文本编辑器。通常 vi 用于系统管理员,emacs 用于程序员。
知道如何编写脚本。选择一种脚本语言。Perl 一直是最受欢迎的,shell/sed/awk 组合也是如此。Ruby 和 Python 可以工作,但是对于很多事情来说,对象是错误的范式。
知道如何编写可读的文档。
版本控制。对于维护配置文件和审计跟踪至关重要。
学习用编程术语思考。了解过程、面向对象和函数式编程范式。这些可能永远不会被使用,但了解它们会让你的工作效率无限提高。
学习使用调试器(或更多)和日志记录。
学习使用 RDBMS。有很多数据处理要求可以通过正确使用 RDBMS 来简化。即使能够按需切换到 DBA 角色也能创造奇迹。
部署前测试。请参阅测试驱动的开发理念。
结对编程很好。让其他人看着你的肩膀学习/建议/纠正。
学会至少对一堆语言有一个短暂的熟悉。每年学习一门新语言。
脚本是必不可少的,但我认为了解一些“真正的”语言是一个明确的好处。例如,您可以使用 .NET System.DirectoryServices 命名空间做一些非常有用的事情。
我是一名程序员和高级管理员/集成商。要在我工作的地方工作,你需要知道以下几点:
大多数初级管理员可以看着我们的一位程序员并说(有权限),是的,我正确安装了它,这就是你有漏洞的地方,这就是你刚刚推送的代码被破坏的原因。或者“不,它不是我们的 MySQL 版本,请在此处查看您的查询……”
我认为我们有点不同,当我们聘请一位有天赋的管理员时……我们有一半期望他们(最终)找到自己的编程方式,即使它只是破解我们用来按照他们需要的方式工作的东西.
总之,全面发展永远不会伤害你。
很多很多年前(实际上是 Windows NT 3.1),我最初是一名程序员,专门编写服务,甚至偶尔会编写设备驱动程序。这意味着您非常了解 Windows 内核。随着时间的推移,我对编程感到有点厌烦,并转向网络管理。我发现我的编程背景一遍又一遍地非常有价值。
不仅仅是编写 VBScript 脚本相对轻松。了解 Windows 的工作原理,尤其是 IP 的工作原理,有助于解决奇怪的服务器和网络问题。也是一种心态。程序员习惯于文档和版本控制,看到有多少 Windows 管理员会尝试一些东西以查看它是否有效并担心事后解决混乱,这让我感到震惊。
一切都很好,但是说离开并作为程序员工作十年并不是很有用的建议!但是,我认为这将有助于大多数系统管理员拥有一些使用“硬”语言(如 C++ 或 C#)进行编程的经验。如果你的组织中有驯服的程序员,那就和他们一起喝酒吧!
约翰·雷尼
糟糕的事情发生了,你的代码会比你想象的要长。优雅地失败,并提供有用的错误消息。您将耗尽磁盘、内存、cpu、时间等,处理它。
不要那么乐观,百万分之一的奇怪问题在生产中会经常发生。
有了这里的所有描述,我不会说我是系统管理员。但事实上我构建和管理了几个 windows/linux 服务器,我必须承认一些事情:
在 linux 中,bash 脚本是必须知道的——如果你知道如何将它与 perl/awk/etc 集成,那就更好了。我发现使用它让许多任务变得更容易。
知道用 C/C++ 编程有很大帮助。有时您必须修改 GNU 源代码(如果您使用源代码)以满足您的需要,因为成为 GNU 产品并不能确保您总是能及时获得所需的帮助——而且很多时候它们是用 C/C++ 编写的。