このfuser
コマンドは、どのプロセスがファイルまたはディレクトリを使用しているかを知らせてくれます。
逆のコマンドを探しています。プロセスで使用されているファイルを教えてください。
アップデート
Solarisシステム用であることを忘れてしまいました。
このfuser
コマンドは、どのプロセスがファイルまたはディレクトリを使用しているかを知らせてくれます。
逆のコマンドを探しています。プロセスで使用されているファイルを教えてください。
Solarisシステム用であることを忘れてしまいました。
lsof -p <pid>
ここから
lsofは、「<strong>LiStOpenFiles」の略です。このシェルコマンドは一見シンプルに見えます。UNIXボックスのプロセスによって開かれたファイルに関する情報を一覧表示します。
その(見かけの)控えめなミッションステートメントにもかかわらず、lsofは実際には最も強力で便利なUNIXコマンドの1つです。その生の力は、「UNIXではすべてがファイルである」とよく言われるUNIXの設計原理の1つに由来します。これが意味するのは、開いているファイルのlsofの概念は、通常のファイルだけでなく、次のこともカバーしているということです。
待ってください、システムでlsofが見つかりません!
lsofは非常に人気のあるツールであるため、ほとんどすべてのUNIX方言(Linux、Mac OS X、BSD、Solarisなど)に移植されています。ボックスで利用できない場合は、通常のパッケージ管理システムを使用してインストールしてください。Solaris用のlsofパッケージは、 SunFreewareにあります。
Dtrace を学んだり、ソフトウェアのインストールの経験を積んだりする人を恨むつもりはありませんが、Solaris には、プロセスが開いているファイルを表示するコマンドがあります: /usr/bin/pfiles
% tail -f /etc/motd &
[1] 6033
% pfiles 6033
6033: tail -f /etc/motd
Current rlimit: 256 file descriptors
0: S_IFREG mode:0644 dev:182,65538 ino:163065 uid:0 gid:3 size:54
O_RDONLY|O_LARGEFILE
/etc/motd
1: S_IFCHR mode:0620 dev:299,0 ino:718837882 uid:101 gid:7 rdev:24,3
O_RDWR|O_NOCTTY|O_LARGEFILE
/dev/pts/3
2: S_IFCHR mode:0620 dev:299,0 ino:718837882 uid:101 gid:7 rdev:24,3
O_RDWR|O_NOCTTY|O_LARGEFILE
/dev/pts/3
http://www.sunfreeware.com/programlistsparc10.html#lsofから lsof を取得できます。
pfiles を試すこともできます:
http://docs.oracle.com/cd/E23823_01/html/816-5165/pfiles-1.html#scrolltoc
これはdtraceの古典的なアプリケーションです。
構文を正確に思い出すことはできませんが、システム上のプロセスによってファイルが開かれるたびにトレースを開始することができます。実行中のシステムで、予想したほどのオーバーヘッドなしで実行できます。管理者として solaris を実行している場合は、dtrace が最適です。プログラマーでなくても、非常に簡単に習得でき、非常に強力なシステム クエリ ツールです。
一部の UNIX システム (IE: Linux) では、プロセスによって開かれたすべてのファイルに FD ID があります。
これらは以下で見ることができます
/proc/$PID/fd
ls -la /proc/2055/fd
total 0
dr-x------ 2 kent kent 0 Nov 19 21:44 .
dr-xr-xr-x 7 kent kent 0 Nov 19 21:42 ..
lr-x------ 1 kent kent 64 Nov 19 21:44 0 -> /dev/null
l-wx------ 1 kent kent 64 Nov 19 21:44 1 -> /home/kent/.xsession-errors
lrwx------ 1 kent kent 64 Nov 19 21:44 10 -> socket:[3977613]
lrwx------ 1 kent kent 64 Nov 19 21:44 11 -> /home/kent/.googleearth/Cache/dbCache.dat
lrwx------ 1 kent kent 64 Nov 19 21:44 12 -> /home/kent/.googleearth/Cache/dbCache.dat.index
lrwx------ 1 kent kent 64 Nov 19 21:44 13 -> socket:[3978765]
lrwx------ 1 kent kent 64 Nov 19 21:44 14 -> socket:[3978763]
lrwx------ 1 kent kent 64 Nov 19 21:44 15 -> socket:[3978766]
lrwx------ 1 kent kent 64 Nov 19 21:44 17 -> socket:[3978764]
l-wx------ 1 kent kent 64 Nov 19 21:44 2 -> /home/kent/.xsession-errors
lr-x------ 1 kent kent 64 Nov 19 21:44 3 -> pipe:[3977583]
l-wx------ 1 kent kent 64 Nov 19 21:44 4 -> pipe:[3977583]
lr-x------ 1 kent kent 64 Nov 19 21:44 5 -> pipe:[3977584]
l-wx------ 1 kent kent 64 Nov 19 21:44 6 -> pipe:[3977584]
lr-x------ 1 kent kent 64 Nov 19 21:44 7 -> pipe:[3977587]
l-wx------ 1 kent kent 64 Nov 19 21:44 8 -> pipe:[3977587]
lrwx------ 1 kent kent 64 Nov 19 21:44 9 -> socket:[3977588]
さらに、「FDINFO」を取得することもあります(これはLinuxのカーネルフラグだと思います)
cat /proc/2055/fdinfo/11
pos: 232741818
flags: 02