我有一个问题,我如何才能看到linux中正在使用哪个文件。说实话,这个操作系统不是Linux的正常版本,它非常瘫痪,例如没有像“lsof”这样的命令。我找到了命令“strace”,但这不是我想要的。我听说我可以用黑客内核列出这个文件?
我想看看哪个文件正在使用中,因为在这台机器上有一点空闲空间,我想删除程序运行时没有使用的文件。
我很抱歉我的英语不好。
答案 0 :(得分:1)
您可以通过走/proc virtual filesystem
来按流程检查打开的文件每个正在运行的进程都在/ proc / PID中有一个条目。每个进程目录中都有一个名为“fd”的目录,它代表当前打开的进程file descriptors。它们显示为实际资源的链接。
e.g。在我运行的VM上
root@wvm:/proc/1213/fd# pidof dhclient
1213
root@wvm:/proc/1213/fd# cd /proc/1213/fd
root@wvm:/proc/1213/fd# ls -l
total 0
lrwx------ 1 root root 64 Apr 8 09:11 0 -> /dev/null
lrwx------ 1 root root 64 Apr 8 09:11 1 -> /dev/null
lrwx------ 1 root root 64 Apr 8 09:11 2 -> /dev/null
lrwx------ 1 root root 64 Apr 8 09:11 20 -> socket:[4687]
lrwx------ 1 root root 64 Apr 8 09:11 21 -> socket:[4688]
l-wx------ 1 root root 64 Apr 8 09:11 3 -> /var/lib/dhcp/dhclient.eth0.leases
lrwx------ 1 root root 64 Apr 8 09:11 4 -> socket:[4694]
lrwx------ 1 root root 64 Apr 8 09:11 5 -> socket:[4698]
root@wvm:/proc/1213/fd#
查看'dhclient'的内核进程信息 - 我找到它的pid,然后查看fd子目录中的进程id。它有一小组开放描述符 - stdin,stdout和stderr(0,1,2)都已连接到/ dev / null,有四个套接字打开,但文件描述符3附加到数据文件{{1} }
所以你可以使用shell工具复制lsof的功能来walk / proc并从这些链接中过滤出文件名。
答案 1 :(得分:0)
你能使用“顶级”命令吗?如果是这样,那么这应该显示在linux上运行的所有顶级OS利用操作的列表。你可以做到
ps -ef|grep <process_no>
这将给出细节。要么可以停止该过程,要么使用
将其终止kill -9 <process no>
答案 2 :(得分:0)
使用lsof command按流程列出所有打开的文件。