在 Linux 中使用 strace 跟踪系统调用

目前还没有读者喜欢这个。
Penguins on beach

原始照片由 Rikki Endsley 拍摄。 CC BY-SA 4.0

作为一名系统管理员,就是要了解您维护的机器内部的运作原理。当服务运行或命令执行时,到底发生了什么?strace 是一种工具,可以帮助系统管理员密切关注程序如何与其底层的操作系统交互。

为了更多地了解 strace,我们联系了 Alex Juarez,他将在 SCaLE 14x 上发表演讲:您的系统调用和您:使用 strace 的简要探索

Alex 是 Rackspace 的首席工程师,他在那里担任培训师和导师,为员工提供支持客户管理员需求的服务。作为 RHCA 和 RHCI,Alex 非常喜欢为每项工作找到合适的工具,并帮助其他人也这样做。通过本次访谈,了解更多关于 strace、它的用途以及如何学习更多信息。

Interview

简而言之,strace 是什么?为什么它对 Linux 管理员来说是一个有价值的开源工具?

Strace 是一种用于拦截从您的应用程序到 Linux 内核的系统调用的工具。我发现 strace 对系统管理员来说非常宝贵,原因有两点。

  • 首先,我们并不总是拥有应用程序的源代码,但我们可能仍然需要知道应用程序正在做什么。这可以是任何事情,从打开哪些文件,分配多少内存,甚至应用程序为什么反复崩溃。
  • 其次,即使我们有代码,成为系统管理员并不意味着成为开发人员。我们可能不知道如何跟踪代码。我发现查看系统调用而不是代码行更具描述性

管理员如何在现实世界中使用此工具?

在现实世界中,您可以使用 strace 的例子非常常见。它真的是一个非常通用的工具,您可以在尝试解决问题时随时使用。我的演讲中有一些例子,但我最喜欢的一个例子是使用 strace 来展示 Apache Web 服务器在服务器上启用 .htaccess 文件时的行为。

一旦您弄清楚进程正在进行哪些系统调用,弄清楚这些调用的含义的最佳方法是什么?换句话说,您如何解释 strace 的输出?

解释 strace 的输出是我们演讲中涵盖的内容之一,所以我不想透露太多。但是,简而言之,有两种方法可以让人们更多地了解如何解释输出。第一种方法是系统调用有自己的手册页,其中包含大量信息。第二种方法是通过编写非常小的 C 程序并在其上运行 strace 来了解更多信息。您可以编写小的 C 程序来读取、写入或打开文件,并查看这些函数转换为哪些类型的系统调用。编写小程序并在其上使用 strace 将带您踏上学习之旅。

除了参加您的演讲之外,对于想要了解更多信息的人来说,最好的资源是什么?

我认为获得更多经验并了解更多信息的最佳方法是跟踪一切。浏览您每天使用的跟踪命令的练习,并分解它们正在打开哪些文件以及正在写入哪些文件。有些程序会直接修改文件,而另一些程序可能会先编辑临时文件,然后再将数据复制到原始文件中。

更进一步,编写一些代码并对其进行跟踪。建立您使用的函数与它们进行的系统调用之间的关联。

最后,您今年在 SCaLE 上还对什么特别兴奋?

今年在 SCaLE 上有很多让我兴奋的事情。我认为我对主题的多样性特别兴奋。我密切关注几乎所有的 SysAdmin、Security 和 Kernel 轨道。星期四我将在 UbuCon 上花一些时间,星期天我将在教育轨道上花一些时间。

标签
User profile image.
Jason 是 Opensource.com 的工作人员和红帽员工,时间从 2013 年到 2022 年。此个人资料包含他在此期间与工作相关的文章。其他贡献可以在他的个人帐户中找到。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.