LINUX怎么查看进程打开了哪些文件_Linux查看进程打开文件方法

哎哟,这Linux系统里的文件管理,真是让人头大啊。
我以前就踩过不少坑,现在给你说说,免得你也跟着跌跟头。

记得那会儿,我负责一个项目,系统突然卡死了,排查了好久才发现是某个进程不小心把日志文件给占满了。
当时就是用lsof命令救的急。
那会儿我记得,我先用ps命令找到了那个进程的PID,然后直接用lsof -p PID,结果一出来,那文件路径看得我眼花缭乱,幸好我之前有经验,很快就找到了那个占满空间的日志文件。

还有一次,是在一个服务器上,有个程序突然崩溃了,我需要找出它崩溃前打开了哪些文件。
我就用了/proc文件系统,直接cd到/proc/进程PID/fd下,然后ls -l看了一圈,发现它打开了一个临时文件,没关,结果导致内存溢出崩溃了。

还有时候,我需要同时分析好几个进程的文件占用情况,这时候我就用pgrep和lsof结合用。
比如,我需要找出所有nginx进程打开的文件,我就先pgrep nginx,然后lsof -p $(pgrep nginx),这样就能一次性看到所有nginx进程的文件打开了啥。

不过说真的,有时候我也挺头大的,比如要分析的网络连接或者设备文件,那lsof的输出就复杂了,得仔细看。
不过好在这些方法都能解决实际问题,至少我这些年没少用它们。

说到这里,我突然想到,我之前还遇到过一次,有个同事不知道怎么的,把数据库的配置文件改了,结果数据库启动不了。
我当时就是用lsof和/proc文件系统结合,才找出来问题所在,原来是他不小心把配置文件给锁了。

总之,这些方法都是我亲身实践过的,虽然有时候操作起来有点复杂,但关键时刻还是能救场的。
希望这些经验能帮到你。

linux查看进程所在路径

直接用ps-ef|grep进程名,看输出里的路径。

比如ps-ef|grep nginx,看到/usr/sbin/nginx就是路径。

或者用cat /proc/PID/cmdline,把PID换成进程号,看输出。

比如cat /proc/1 2 3 4 /cmdline,输出可能是/usr/bin程序名。

ltrace-pPID -aexecve能跟踪动态路径,但得装ltrace。

pwdxPID看工作目录,不是启动路径。

readlink -f /proc/PID/exe看实际路径。

优先用前两种,简单直接。
动态跟踪用ltrace。
别混进程路径和脚本路径。

你自己掂量。

Linux通过进程ID查找文件路径

直接说结论。

/proc/[PID]/exe 指向实际文件路径。

时间:现在。
地点:Linux系统。
数字:PID。

权限不够就报错。
简单直接。