ls -l /proc/`pgrep -n java`/fd
lsofでも調べられます。
lsof - list open files
lsof
うにょうにょと結果が出てきます。が、多すぎて訳わからん。
- -pオプションでプロセスID指定
### プロセスID指定 lsof -p 12345 ### バッククォート使うとこんな感じ lsof -p `pgrep -n java`
- -cオプションでプロセス名指定
lsof -c java
- -uオプションでユーザ指定
lsof -u hoge
- -iオプション [@IPアドレス:ポート番号]
listenしてるポートを出力。指定したポートのみ表示することもできる。
lsof -i # Listenしてるのずらずら表示 lsof -i :22 # ssh lsof -i :22,80 # ssh or http lsof -i :http # 名前でもいける lsof -i @192.168.0.1 # interface指定 lsof -i @192.168.0.1:80 # interfaceとポート指定
- -aオプションでAND
オプション複数指定するとORで出力されるようです。なのでプロセスとユーザの両方を指定したいときは-aをつける。
lsof -a -u hoge -c java
- ファイルシステムを指定
オプションなしでファイルシステム(ディレクトリ、ファイル)を指定すると、そのファイルシステムを使用中のプロセスが出てきます。例えば、こんなときに使う。(パスは絶対パスで指定する必要あり)
root # umount /media/cdrom
umount: /media/cdrom0: デバイスを使用中です
umount: /media/cdrom0: デバイスを使用中です
CD-ROMがアンマウントできない!!なんで?て時にlsofの出番。
root # lsof /media/cdrom COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME zsh 6367 hoge cwd DIR 11,0 2048 1600 /media/cdrom0
ユーザhogeがcdしてた、みたいな。こんな時はwriteコマンドでメッセージでも送って出て行ってもらいましょう :-)