5 个系统管理员运维技巧

五个工具,帮助您在不知道从何处开始时,找到用户 IT 问题的根源。
160 位读者喜欢这篇文章。
10 open source tools for your sysadmin toolbox

Opensource.com

作为一名系统管理员,我每天都面临需要快速解决的问题,因为用户和经理都期望一切顺利运行。在我管理的大型环境中,几乎不可能从头到尾了解所有系统和产品,因此我必须使用创造性的技术来找到问题的根源,并(希望)提出解决方案。

这已经是我 20 多年的日常经验,我喜欢它!每天上班,我永远不知道会发生什么。因此,当问题突然出现,而我不知道从何处开始时,我有一些快速而简便的技巧可以默认使用。

等等! 在您直接跳到命令行之前,花一些时间与您的用户交谈。是的,这可能很乏味,但他们会为您提供一些有用的信息。请记住,用户可能没有您那么多的经验,您需要对他们说的任何内容进行一些解读。尝试清楚地了解正在发生什么以及应该发生什么,然后用技术语言向自己描述故障。请注意,大多数用户不会阅读他们面前屏幕上的内容;这很可悲,但却是事实。确保您和用户都在阅读所有文本,以收集尽可能多的信息。一旦您掌握了这些信息,就可以使用以下五个工具跳到命令行。

Telnet

我从一个经典工具开始。Telnet 是 SSH 的前身,在过去,它像 SSH 一样在 Unix 系统上用于连接到远程终端,但它没有加密。 Telnet 有一个非常简洁且宝贵的技巧,可用于诊断网络连接问题:您可以 Telnet 到未为其保留的 TCP 端口。要做到这一点,请像平常一样使用 Telnet,但在末尾添加 TCP 端口(例如 telnet localhost 80)以连接到 Web 服务器。这使您可以检查服务器以查看服务是否正在运行或防火墙是否正在阻止它。因此,即使没有应用程序客户端,甚至没有应用程序的登录名,您也可以检查 TCP 端口是否正在响应。如果您知道如何操作,有时您可以通过手动在 Telnet 提示符中键入并检查响应来引出来自服务器的响应。Web 服务器和邮件服务器是您可以执行此操作的两个示例。

Getting a response from a webserver with Telnet

Tcpdump

tcpdump 工具可让您检查网络上正在传输的数据。大多数网络协议都相当简单,如果您将 tcpdump 与 Wireshark 之类的工具结合使用,您将拥有一个不错的、简单的方法来浏览您捕获的流量。在下面的示例中,我在底部窗口中检查数据包,并在顶部连接到 TCP 端口 3260。

Inspecting packets in real time with tcpdump

此屏幕截图显示了 Wireshark 在查看 iSCSI 协议的实际应用;在本例中,我能够确定我们的 QNAP 网络附加存储的配置方式存在问题。

Using Wireshark to inspect a TCP session

find

如果您不知道从哪里开始,find 命令是最好的工具。在其最简单的形式中,您可以使用它来“查找”文件。例如,如果我想在所有目录中进行递归搜索并获取 conf 文件的列表,我可以输入

find . -name '*.conf'.

find command output

但是 find 的隐藏技巧之一是,您可以使用它针对它找到的每个项目执行命令。例如,如果我想获取每个文件的长列表,我可以输入

find . -name '*.conf' -exec ls -las {} \;

find command output

一旦您了解了这项技术,您就可以以各种创造性的方式使用它来查找、搜索和执行特定方式的程序。

strace

我在 Solaris 上接触到了 strace 的概念,在 Solaris 上它被称为 truss。它仍然像多年前一样有用。strace 允许您实时检查进程在运行时正在执行的操作。使用它很简单;只需使用 ps -ef 命令并找到您感兴趣的进程 ID。使用 strace -p <pid> 启动 strace;这将开始打印出大量内容,乍一看似乎是垃圾。但是,如果您仔细观察,您会看到您识别的文本,例如 OPENCLOSE 以及文件名之类的词。如果您试图弄清楚为什么程序无法正常工作,这可以引导您朝着正确的方向前进。

grep

将最好的留在最后:grep。这个工具非常有用和强大,以至于我很难想出一个简洁的方法来描述它。简而言之,它是一个搜索工具,但它的搜索方式使其如此强大。在问题分析中,我通常在大量日志上使用 grep 来搜索某些内容。一个名为 zgrep 的配套命令对压缩文件执行相同的操作。在以下示例中,我使用了 zgrep /var/log/* bancroft 在所有日志文件中使用 grep 搜索我在系统上所做的事情。我使用 zgrep 是因为目录中有压缩文件。

grep command output

使用 grep 的另一种好方法是将其他工具的输出通过管道传输到其中;这样,它可以用作某种过滤器。在以下示例中,我列出了 auth 文件并使用 grep 搜索了我的登录名,以查看我一直在做什么,方法是使用 cat auth.log |grep bancroft。这也可以写成 grep bancroft auth.log,但我使用管道 (|) 来演示这一点。

grep command output

其他值得考虑的工具

您可以使用这些工具做更多的事情,但我希望这篇简短的介绍能让您了解如何使用它们来解决您遇到的棘手问题。另一个值得您关注的工具是 Nmap,我没有将其包含在内,因为它非常全面,需要一整篇文章(或更多)来解释它。最后,我建议学习一些白帽和黑客技术;当试图弄清问题的根源时,它们可能非常有用,因为它们可以帮助您收集在决策中至关重要的信息。

接下来阅读什么
User profile image.
我是一名专业的系统管理员,专门从事 Unix 和 Linux 系统。自 90 年代初以来,我一直从事企业网络、Unix 系统、网络/系统安全和 Web 技术方面的工作,甚至还了解了一些关于 Windows 的知识。

8 条评论

非常好!

很棒的文章。我用过所有这些工具,它们都很棒。我希望您考虑写一篇关于 nmap 的文章。我想学习如何更好地使用它。

太棒了,谢谢。

系统管理员的工作是否会完全转向 DevOps 文化,还是他们继续遵循与现在相同的工作流程?

我可以看到每个人都在转向 DevOps 文化,并且大多数公司的系统管理员职位都在减少,系统管理员职位或多或少正在转变为初级 DevOps 工程师(根据印度公司的情况)?

未来还会存在系统管理员职位吗?

我同意。这些天我绝对比过去做了更多的 devops 工作。但我仍然有用户需要照顾(桌面和应用程序用户),我们仍然有一些自己的硬件,所以我认为只要情况如此,就总是需要纯粹的系统管理员工作。

回复 作者 swaroop (未验证)

我使用过的两个最有用的实用程序:strace 和 strings。

跟踪应用程序和所有其他调用的程序,并将输出推送到文件以进行检查
$ strace -f -o output.trace command

有时程序与他们的文档不符。他们的选项要么比他们说的少,要么更多。也许他们将输出写入程序中编码的特定目录。也许程序员在代码中输入了错误,并且它正在尝试读取与文档所说的不同的配置文件(在不同的位置)。也许您的“sshd”或“ssh”已被黑客替换,您可以扫描源代码以找出恶意程序将所有捕获的数据发送到哪里。很多时候在可执行文件上运行“strings”会为您提供大量信息。或者,至少,告诉您您需要开始在其他地方寻找问题。
$ strings /path/to/executable | less

好文章,所有工具都很好。

尽管如此,这些并不是技巧,就像螺丝刀不是拧螺丝的技巧一样。好吧,也许使用 telnet 检查端口有点像技巧,但主要是描述如何将工具用于其预期用途。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.