我有一个由服务器localhost:5000
托管的端口。如何在不知道任何额外信息的情况下知道它提供哪个文件?python3
ubuntu
我正在使用lsof -i :5000
,而且我只知道它由 python 3 托管。我试图在没有任何额外知识的情况下找到由它托管的文件/文件夹。我知道的是,确实有一些文件使用 python3 托管在端口 5000 上。但我不知道托管文件的名称是什么以及它位于哪个目录。
也尝试过fuser 5000/tcp -v
但是 id dones 没有显示托管的文件。
这是可能的吗?我需要什么命令来获取它托管的所有文件/文件夹?
答案1
lsof
应该已经告诉您该进程的 PID。我们将其称为$pid
。调查里面的内容/proc/$pid/
。以下某些命令可能需要 root 访问权限(即您可能需要sudo su -
事先获得)。
cd /proc/$pid
readlink exe # the executable
readlink cwd # current working directory
xxd cmdline # command line (xxd useful because items are null-separated)
cd /proc/$pid/fd
ls -l # file descriptors in use
另外,在使用时与服务器交互(例如下载文件)strace
以查看其功能。请参阅此答案:如何调查某个进程正在做什么?
或者您可以下载文件,然后尝试通过比较内容来查找重复项。初步按大小比较可能会大大加快速度。
file="/path/to/the/downloaded/file"
size=`<"$file" wc -c`
# now you will probably want to use sudo
find / -type f ! -path "/proc/*" ! -path "/sys/*" ! -path "/dev/*" -size ${size}c -exec cmp -s "$file" {} \; -print
unset -v file size # just to clean
注意我排除了/proc/
、/sys/
和/dev/
。您可能还会熟悉-xdev
(参见man 1 find
) 并可能使用它。