标签: strace

列出程序访问的文件

time 如果您想弄清楚给定命令需要多少 CPU 时间,这是一个很棒的命令。

我正在寻找类似的东西,可以列出程序及其子项正在访问的文件。实时或事后报告。

目前我使用:

#!/bin/bash

strace -ff -e trace=file "$@" 2>&1 | perl -ne 's/^[^"]+"(([^\\"]|\\[\\"nt])*)".*/$1/ && print'
Run Code Online (Sandbox Code Playgroud)

但如果要运行的命令涉及sudo. 它不是很智能(如果它只能列出存在的文件或有权限问题的文件,或者将它们分组为读取的文件和写入的文件,那就太好了)。也strace很慢,所以选择更快的会更好。

monitoring files strace

77
推荐指数
3
解决办法
8万
查看次数

连接到 IP 0.0.0.0 成功。如何?为什么?

我们正在本地主机上提供一个端口,如果该端口可用,我们希望检查另一个进程。由于我们代码中的一个错误,它实际上是在尝试连接到 IP 0.0.0.0:<port>,并且由于某种原因它成功了——正如 strace 所证明的那样:

[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]
Run Code Online (Sandbox Code Playgroud)

这是什么意思?为什么有效?

networking tcp strace

46
推荐指数
1
解决办法
1万
查看次数

管道 strace 到 grep

我正在尝试运行stracetrough ccze,但管道没有按预期工作。

我正在运行以测试的命令行是sudo strace -p $(pgrep apache2) | grep open,所有行都是输出,忽略 grep。

有什么特别之处strace会导致这种行为吗?

io-redirection strace

40
推荐指数
1
解决办法
3万
查看次数

什么系统调用用于在 Linux 中加载库?

strace输出中,可执行文件调用的库的路径在调用中open()。这是动态链接的可执行文件使用的系统调用吗?怎么样dlopen()open()不是我猜想的调用会在程序执行中发挥作用。

dynamic-linking strace dynamic-loading shared-library

29
推荐指数
3
解决办法
1万
查看次数

root 无法写入普通用户拥有的文件

我以普通用户身份创建一个文件testuser

$ cat > /tmp/zz
Run Code Online (Sandbox Code Playgroud)

该文件由该用户拥有(如预期):

$ ls -lA /tmp/zz 
-rw------- 1 testuser testuser 0 Feb 20 15:32 zz
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试将其截断为 时root,我的权限被拒绝:

# truncate --size=0 /tmp/zz
truncate: cannot open '/tmp/zz' for writing: Permission denied
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 时strace,我看到以下内容:

openat(AT_FDCWD, "/tmp/zz", O_WRONLY|O_CREAT|O_NONBLOCK, 0666) = -1 EACCES (Permission denied)
write(2, "truncate: ", 10truncate: )              = 10
write(2, "cannot open '/tmp/zz' for writin"..., 33cannot open '/tmp/zz' for writing) = 33
...
write(2, ": Permission denied", 19: Permission denied)     = 19 …
Run Code Online (Sandbox Code Playgroud)

shell root permissions strace

26
推荐指数
1
解决办法
6298
查看次数

如何跟踪命令的网络活动?

我想跟踪一个命令的网络活动,我尝试了 tcpdump 和 strace 没有成功。

例如,如果我正在安装一个软件包或使用任何试图访问某个站点的命令,我想查看该网络活动(它试图访问的站点)。

我想我们可以通过使用 tcpdump 来做到这一点。我试过了,但它正在跟踪我系统的所有网络活动。假设我运行多个与网络相关的命令并且我只想跟踪特定的命令网络活动,那么此时很难找到确切的解决方案。

有没有办法做到这一点?

更新:

我不想跟踪我的网络接口上的所有内容。我只想跟踪命令(例如#yum install -y vim)网络活动。例如它试图到达的站点。

linux networking tcpdump strace wireshark

20
推荐指数
3
解决办法
4万
查看次数

跟踪没有读取权限的可执行文件

strace在我没有读取权限的可执行文件上使用时,我在 Ubuntu 14.04 上发现了一些令人惊讶的行为。我想知道这是一个错误,还是某些标准要求这种模糊的行为。

首先让我们看看当我在后台启动一个普通的可执行文件并附加到它时会发生什么。正如预期的那样,这有效:

$ /bin/sleep 100 &
[2] 8078
$ strace -p 8078
Process 8078 attached
restart_syscall(<... resuming interrupted call ...>
Run Code Online (Sandbox Code Playgroud)

接下来我尝试使用一个可执行文件,我没有读取权限:

---x--x--x 1 root root 26280 Sep  3 09:37 sleep*
Run Code Online (Sandbox Code Playgroud)

不允许附加到这个正在运行的进程:

$ ./sleep 100 &
[1] 8089
$ strace -p 8089
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Run Code Online (Sandbox Code Playgroud)

这也是我所期望的。如果我可以简单地将调试器附加到进程并有效地以这种方式对可执行文件具有读取权限,那么在没有读取权限的情况下授予执行权限不会有多大好处。

但是,如果我在已经跟踪的进程下启动可执行文件,则可以这样做:

$ strace ./sleep 100
execve("./sleep", ["./sleep", "100"], [/* 69 vars */]) = 0
brk(0)                                  = 0x9b7a000
Run Code Online (Sandbox Code Playgroud)

这对我来说是出乎意料的。这是安全漏洞,还是标准强制要求的功能?

permissions strace

17
推荐指数
1
解决办法
2370
查看次数

是否可以将内置命令跟踪到 Bash?

受到这个问题的启发,标题为:内置命令何时加载到内存中,在尝试回答这个问题时,我尝试了以下命令,但对我无法运行它感到有点惊讶:

$ strace cd $HOME
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以用来为 Bash 的内置命令运行 strace?

bash debugging strace

15
推荐指数
2
解决办法
6023
查看次数

从哪里获取“/etc/ld.so.nohwcap”文件?

当我通过strace实用程序运行命令时,我可以看到访问错误,例如

access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)

现在我在某处读到,上面一行中发生的事情是链接器正在寻找我正在运行的命令的优化版本,但找不到它。

我该如何解决这个问题?我需要安装什么软件包才能ld.so.nohwcap在系统上拥有该文件?即使不是出于优化目的而只是为了摆脱strace?

debugging system-calls dynamic-linking strace ld

13
推荐指数
1
解决办法
2万
查看次数

名为“test”的可执行文件在 $PATH 中,但不会运行

我在 $HOME/bin 中有一个文件(在你问之前,是的,它在我的路径中)test我已经确认当我使用文件的完整路径运行它时可以正常执行。但是,当我不以这种方式运行时,我会遇到一个非常奇怪的问题。当我test在终端中运行时,它什么也不做并立即返回。我知道这不是查找文件的问题,原因如下:

  1. 没有错误信息。通常,如果找不到文件或无法执行文件,则会打印出一条消息。

  2. 运行which test仍然返回正确的文件路径。

  3. 可能是最奇怪的 - 脚本在运行时运行良好strace。我试着用strace看看我是否能弄清楚发生了什么,但是当我用 运行它时strace,它按预期工作,有 0 个问题。

bash path executable shell-script strace

13
推荐指数
1
解决办法
1937
查看次数