chickeninabiscuit Asked: 2009-07-07 19:38:25 +0800 CST2009-07-07 19:38:25 +0800 CST 2009-07-07 19:38:25 +0800 CST Linux 的 SysInternals FileMon 的等价物? 772 我正在尝试在 Ubuntu 上调试应用程序 - 我需要监听文件打开尝试(即使是不存在的文件)。 Process Monitor(以前称为FileMon)在 Windows 上可用 - Ubuntu 的实用工具带上有什么? 谢谢! 阿什利 hard-drive linux ubuntu utilities debugging 9 个回答 Voted Best Answer Evan Anderson 2009-07-07T19:44:22+08:002009-07-07T19:44:22+08:00 你正在寻找 strace。看看这里:https ://wiki.ubuntu.com/Strace pjz 2009-07-07T19:48:25+08:002009-07-07T19:48:25+08:00 这取决于你想要什么: 总的来说,您希望查看inotify以查看任何进程进行的所有文件访问。 在小的情况下,strace 可以让您查看特定进程进行的系统调用。Strace 非常棒。例如,您可以通过执行来跟踪进程对“打开”的调用strace -f -eopen $cmd。当然,手册页包含有关语法的完整详细信息。 ThorstenS 2009-07-07T20:09:33+08:002009-07-07T20:09:33+08:00 strace在启动应用程序之前可以很好地观察应用程序在做什么。 lsof很高兴看到已经运行的应用程序正在使用哪些文件。 顺便说一句: lsof -ni:22显示哪个进程正在使用端口 22。 user10103 2009-07-07T21:44:56+08:002009-07-07T21:44:56+08:00 SGI 有一个您可能想尝试的工具:http: //oss.sgi.com/projects/fam/ waitinforatrain 2013-01-29T04:39:50+08:002013-01-29T04:39:50+08:00 以下是使用 strace 跟踪文件更改的示例: strace -f -e trace=file -p7546 -o /tmp/outputfile -f确保捕获来自子进程的事件。 -e trace=file说我们应该捕获与文件相关的系统调用(例如stat,open等futex) -p是指定输出文件的进程 ID(从ps -aux或其他方式检索) -o(可能有很多数据,您可以改用 grep 作为过滤器。 Singlet 2015-11-14T05:46:14+08:002015-11-14T05:46:14+08:00 尝试sysdig。例如: sysdig -A -c echo_fds syockit 2010-01-23T14:26:34+08:002010-01-23T14:26:34+08:00 这需要 Mortadelo 的帮助。 http://gitorious.org/mortadelo higuita 2013-05-20T07:50:19+08:002013-05-20T07:50:19+08:00 这是旧的,但我认为为今天的现实更新它是个好主意。 对于只调试一个进程及其子进程,strace 仍然是最好的方法。它可以轻松显示所有文件访问权限,即使是丢失的文件。 对于通用系统调试,内核中的审计功能可以做到这一点,并且是推荐的方式。它不需要最新内核的任何补丁,只需安装审计包 这是一个使用它的简单 gui: 审计-gui 这复制了windows filemon,监控所有地方、进程等的文件访问 还要检查这个帖子 Andrew 2019-04-28T15:25:42+08:002019-04-28T15:25:42+08:00 这对我来说很有效(Linux Mint 19.1): sudo lsof 2>&1 | grep programnamehere 不知道为什么2>&1需要,但除非我使用它,否则它不会过滤。
你正在寻找 strace。看看这里:https ://wiki.ubuntu.com/Strace
这取决于你想要什么:
总的来说,您希望查看inotify以查看任何进程进行的所有文件访问。
在小的情况下,strace 可以让您查看特定进程进行的系统调用。Strace 非常棒。例如,您可以通过执行来跟踪进程对“打开”的调用
strace -f -eopen $cmd
。当然,手册页包含有关语法的完整详细信息。strace
在启动应用程序之前可以很好地观察应用程序在做什么。lsof
很高兴看到已经运行的应用程序正在使用哪些文件。顺便说一句:
lsof -ni:22
显示哪个进程正在使用端口 22。SGI 有一个您可能想尝试的工具:http: //oss.sgi.com/projects/fam/
以下是使用 strace 跟踪文件更改的示例:
strace -f -e trace=file -p7546 -o /tmp/outputfile
-f
确保捕获来自子进程的事件。-e trace=file
说我们应该捕获与文件相关的系统调用(例如stat
,open
等futex
)-p
是指定输出文件的进程 ID(从ps -aux
或其他方式检索)-o
(可能有很多数据,您可以改用 grep 作为过滤器。尝试sysdig。例如:
这需要 Mortadelo 的帮助。 http://gitorious.org/mortadelo
这是旧的,但我认为为今天的现实更新它是个好主意。
对于只调试一个进程及其子进程,strace 仍然是最好的方法。它可以轻松显示所有文件访问权限,即使是丢失的文件。
对于通用系统调试,内核中的审计功能可以做到这一点,并且是推荐的方式。它不需要最新内核的任何补丁,只需安装审计包
这是一个使用它的简单 gui:
审计-gui
这复制了windows filemon,监控所有地方、进程等的文件访问
还要检查这个帖子
这对我来说很有效(Linux Mint 19.1):
sudo lsof 2>&1 | grep programnamehere
不知道为什么
2>&1
需要,但除非我使用它,否则它不会过滤。