次のようなもの:
PID = 3187:/ home / morganc / test1.out
findコマンドを使用して、test1.outファイルのPID番号と場所のディレクトリを一覧表示するにはどうすればよいですか。見つかりましたか?
よろしくお願いします。
コメント
回答
2つの解決策を試すことができます:
fuser /path/to/opened/file
または
lsof /path/to/opened/file
回答
ファイルを作成したプロセスの所有者であるか、ファイルを開いている場合は、君は
ls -o /proc/*/fd 2> /dev/null
これにより、ユーザーIDのPIDのすべてのファイルが一覧表示されます。実行中のプロセスが多くない場合は、手動で出力を確認してください。サンプル:vmstat.out
が開いているプロセスを探します:
mark (/home/mark)> ls -l /proc/*/fd 2> /dev/null /proc/27669/fd: total 0 lrwx------. 1 mark mark 64 Feb 13 19:51 0 -> /dev/pts/0 lrwx------. 1 mark mark 64 Feb 13 19:51 1 -> /dev/pts/0 lrwx------. 1 mark mark 64 Feb 13 19:53 10 -> /dev/pts/0 lr-x------. 1 mark mark 64 Feb 13 19:53 12 -> /home/mark l-wx------. 1 mark mark 64 Feb 13 19:51 2 -> /dev/null lrwx------. 1 mark mark 64 Feb 13 19:53 4 -> /home/mark/.sh_history /proc/27737/fd: total 0 lrwx------. 1 mark mark 64 Feb 13 19:53 0 -> /dev/pts/0 lrwx------. 1 mark mark 64 Feb 13 19:53 1 -> /dev/pts/0 lrwx------. 1 mark mark 64 Feb 13 19:53 2 -> /dev/pts/0 lr-x------. 1 mark mark 64 Feb 13 19:53 3 -> /home/oracle/log/vmstat.out lr-x------. 1 mark mark 64 Feb 13 19:53 4 -> anon_inode:inotify
したがって、PID 27737
ではファイルvmstat.out
が開いており、フルパスは
出力の大部分を除外する場合は、次のことを試してください。
mark (/home/oracle/log)> ls -l /proc/*/fd 2> /dev/null | grep -E "(^/proc|vmstat.out)" /proc/27669/fd: /proc/27943/fd: lr-x------. 1 mark mark 64 Feb 13 20:00 3 -> /home/oracle/log/vmstat.out /proc/28047/fd: /proc/28048/fd: /proc/self/fd: mark (/home/oracle/log)>
次に、対象のファイルのすぐ上のPID。
他のプロセスを無視するために、awkにパイプして前の行を保存し、現在の行が
:
ls -l /proc/*/fd 2> /dev/null | \ grep -E "(^/proc|vmstat.out)" | \ awk "BEGIN { prev = $0} /proc/ { prev = $0 } /^l/ { print prev $NF }" /proc/27943/fd:/home/oracle/log/vmstat.out
find
コマンドとps
?