我知道使用命令:
lsof -i TCP
Run Code Online (Sandbox Code Playgroud)
(或 lsof 参数的一些变体)我可以确定哪个进程绑定到特定端口。这很有用,如果我试图启动一些想要绑定到 8080 的东西,而其他人已经在使用该端口,但我不知道是什么。
有没有一种简单的方法可以在不使用 lsof 的情况下做到这一点?我花时间在许多系统上工作,但通常没有安装 lsof。
我想确定哪个进程具有 UNIX 套接字的另一端。
具体来说,我问的是用 来创建的socketpair(),尽管任何 UNIX 套接字的问题都是一样的。
我有一个程序parent可以创建一个socketpair(AF_UNIX, SOCK_STREAM, 0, fds), 和fork()s。父进程关闭fds[1]并保持fds[0]通信。孩子反其道而行之,close(fds[0]); s=fds[1]。然后孩子exec()的另一个程序,child1。两者可以通过这个 socketpair 来回通信。
现在,假设我知道parent是谁,但我想弄清楚是谁child1。我该怎么做呢?
有几种工具可供我使用,但没有一个可以告诉我套接字的另一端是哪个进程。我试过了:
lsof -c prognamelsof -c parent -c child1ls -l /proc/$(pidof server)/fdcat /proc/net/unix基本上,我可以看到两个套接字以及关于它们的所有内容,但无法判断它们是否已连接。我试图确定父进程中的哪个 FD 正在与哪个子进程通信。
我正在尝试让所有进程在 Mac OS X 上侦听网络连接。netstat没有-p选项,我正在尝试使用 lsof
lsof -i -sTCP:LISTEN
Run Code Online (Sandbox Code Playgroud)
给了我一个公平的聆听过程清单,但不是全部。例如,我可以 telnet 到端口 10080,在那里我有一个进程正在侦听连接,但这未显示在lsof. 我错过了什么?
$ telnet localhost 10080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> Connection closed.
Run Code Online (Sandbox Code Playgroud)
但
$ sudo lsof -n -i | grep 10080
$
Run Code Online (Sandbox Code Playgroud) 我知道我可以查看使用过程中打开文件lsof 的时间在那一刻,我的Linux机器上。但是,进程可以如此快速地打开、更改和关闭文件,以至于我在使用标准 shell 脚本(例如watch)监视它时将无法看到它,如“在 linux 上监视打开的进程文件(实时)”中所述.
所以,我想我正在寻找一种简单的方法来审核流程并查看它在过去的时间里做了什么。如果还可以查看它(尝试)建立的网络连接并在进程有时间运行而不启动审计之前开始审计,那就太好了。
理想情况下,我想这样做:
sh $ audit-lsof /path/to/executable
4530.848254 OPEN read /etc/myconfig
4530.848260 OPEN write /var/log/mylog.log
4540.345986 OPEN read /home/gert/.ssh/id_rsa <-- suspicious
4540.650345 OPEN socket TCP ::1:34895 -> 1.2.3.4:80 |
[...]
4541.023485 CLOSE /home/gert/.ssh/id_rsa <-- would have missed
4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80 | this when polling
Run Code Online (Sandbox Code Playgroud)
这是否可以使用strace某些标志来看不到每个系统调用?
root@host [/home2]# lsof /home2
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php 3182 ctxmortg cwd DIR 8,17 4096 32858196 /home2/ctxmortg/public_html/hello
php 3182 ctxmortg 3r REG 8,17 46404 55781766 /home2/ctxmortg/public_html/hello/cache/subprimemortgagemorgage.com/cache-zch-8284-cache.txt
php 3185 ctxmortg cwd DIR 8,17 4096 32858196 /home2/ctxmortg/public_html/hello
php 3185 ctxmortg 3r REG 8,17 4185 35962154 /home2/ctxmortg/public_html/hello/cache/curl/http%3A%2F%2Fimage.yahoo.cn%2Fs%3Fq%3DNudity%26c%3D0%26s%3D%26page%3D277
php 3187 ctxmortg cwd DIR 8,17 4096 32858196 /home2/ctxmortg/public_html/hello
php 3187 ctxmortg 3r REG 8,17 54640 69699731 /home2/ctxmortg/public_html/hello/cache/newdatingfriends.com/cache-zch-1545-cache.txt
php 3188 ctxmortg cwd DIR 8,17 4096 32858196 /home2/ctxmortg/public_html/hello
php 3188 ctxmortg 3r …Run Code Online (Sandbox Code Playgroud) 有没有办法让 lsof 持续工作以实时监控每个正在打开的文件?
我不知道进程的名称。我希望 lsof 连续工作一段时间,直到我看到列表包含我想要的内容。
这里到底发生了什么?
root@bob-p7-1298c:/# ls -l /tmp/report.csv && lsof | grep "report.csv"
-rw-r--r-- 1 mysql mysql 1430 Dec 4 12:34 /tmp/report.csv
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
Run Code Online (Sandbox Code Playgroud) 嗨,我有许多文件已被删除,但由于某种原因,与已删除文件相关的磁盘空间无法使用,直到我明确终止占用磁盘空间的文件的进程
$ lsof /tmp/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cron 1623 root 5u REG 0,21 0 395919638 /tmp/tmpfPagTZ4 (deleted)
Run Code Online (Sandbox Code Playgroud)
上面删除的文件占用的磁盘空间会导致问题,例如在尝试使用 Tab 键自动完成文件路径时出现错误 bash: cannot create temp file for here-document: No space left on device
但是在我运行kill -9 1623该 PID 的空间后,我不再收到错误消息。
我的问题是:
请让我知道我使用过的任何不正确的术语或与这种情况相关的任何其他相关信息。
在许多情况下,“lsof”没有安装在我必须工作的机器上,但是非常需要 lsof 的“功能”(例如在 AIX 上)。:\
在非 Windows 世界中是否有类似“lsof”的应用程序?
更新:例如:我需要知道哪些进程使用“/home/username”目录?
例如sed,命令是程序,程序是文件内的编码逻辑,这些文件位于硬盘上的某处。然而,当命令正在运行时,它们的文件副本从硬盘被放入RAM 中,在那里它们变得生动起来,可以做一些事情,被称为进程。
进程可以使用其他文件,读取或写入它们,如果它们这样做,这些文件称为打开文件。有一个命令可以列出所有正在运行的进程的所有打开的文件:lsof.
好的,所以我想知道一个命令的双重生命,一个在硬盘上,另一个在 RAM 中,是否也适用于其他类型的文件,例如那些没有逻辑编程的文件,但只是容器数据。
我的假设是,进程打开的文件也会加载到 RAM 中。我不知道这是不是真的,这只是一种直觉。
拜托,有人能理解吗?
lsof ×10
open-files ×4
process ×4
files ×2
audit ×1
fuse ×1
memory ×1
networking ×1
osx ×1
privileges ×1
socket ×1
tcp ×1