Файлы, используемые процессом unix
Команда fuser
позволяет узнать, какие процессы используют файл или каталог.
Я ищу команду, которая делает обратное: позволяет узнать, какие файлы используются процессом.
Update
Забыл упомянуть, что это для системы Solaris.
Ответы
Ответ 1
В то время как я не стал бы жалеть кого-либо, кто учил Dtrace или приобретал опыт установки программного обеспечения, в Solaris там есть команда для просмотра файлов, которые процесс открыл: /USR/ бен/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
Ответ 2
lsof -p <pid>
От здесь
lsof означает " LiSt Open Files". Эта команда оболочки кажется обманчиво простой: она содержит информацию о файлах, открытых процессами в окне UNIX.
Несмотря на свою (кажущуюся) скромную миссию, lsof на самом деле является одной из самых мощных и полезных команд UNIX. Его исходная мощность исходит из одного из принципов проектирования UNIX, который часто описывается как "в UNIX все - файл". Это означает, что концепция lsof открытого файла охватывает не только обычные файлы, но и следующее:
- Каталоги
- Потоки или сетевые файлы (например, сокеты доменов Интернета или UNIX и файлы NFS)
- Собственные библиотеки (например,.soor.dylibdynamic библиотеки, связанные с процессом)
- Блокировать и использовать специальные файлы (например, объем диска, внешний жесткий диск, консоль или мышь).
- Трубы
Подождите, я не могу найти lsof в моей системе!
lsof - такой популярный инструмент, что он портирован практически во все диалекты UNIX (Linux, Mac OS X, BSD, Solaris и т.д.). Если он недоступен в вашем поле, используйте его обычную систему управления пакетами для ее установки. Вы можете найти lsof пакеты для Solaris на Sun Freeware.
Ответ 3
Вы можете получить lsof из http://www.sunfreeware.com/programlistsparc10.html#lsof
Вы также можете попробовать pfiles:
http://docs.oracle.com/cd/E23823_01/html/816-5165/pfiles-1.html#scrolltoc
Ответ 4
Это классическое приложение для dtrace.
Я не могу точно запомнить синтаксис, но вы можете иметь огонь трассировки каждый раз, когда файл открывается любым процессом в системе. Это можно сделать в бегущей системе, где бы не было столько накладных расходов, сколько ожидалось. Если вы используете Solaris в качестве администратора, dtrace - ваш лучший друг. Даже если вы не программист, его довольно просто изучить и очень мощный инструмент системных запросов.
Ответ 5
В некоторых Unix-системах (IE: Linux) все файлы, открытые процессом, имеют идентификатор FD.
Это можно увидеть под
/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
Ответ 6
- вы можете использовать команду ls и grep, чтобы узнать файлы, используемые хром
$ls -l/proc/*/fd | grep "chrome"
lrwx ------ 1 ba abc 64 Jul 16 22:19 104 → /home/abc/.config/google-chrome/Default/Cookies
lr-x ------ 1 abc abc 64 Jul 16 22:19 113 → /opt/google/chrome/nacl_irt_x86_64.nexe
lrwx ------ 1 abc abc 64 Jul 16 22:19 121 → /home/abc/.cache/google-chrome/Default/Cache/data_0
lrwx ------ 1 abc abc 64 Jul 16 22:19 122 → /home/abc/.cache/google-chrome/Default/Cache/data_1
lrwx ------ 1 abc abc 64 Jul 16 22:19 123 → /home/abc/.cache/google-chrome/Default/Cache/data_2
lr-x ------ 1 abc abc 64 Jul 16 22:19 125 → /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic
Еще одна команда, чтобы узнать результат с помощью lsof и grep
$lsof | grep "chrome"
chrome 2204 abc cdd DIR 8,5 4096 1441794/home/abc
chrome 2204 abc rtd DIR 8,5 4096 2/
chrome 2204 abc txt REG 8,5 87345336 5111885/opt/google/хром/хром
chrome 2204 abc mem REG 8,5 4202496 1443927/home/abc/.cache/google-chrome/Default/Media Кэш /data _3
chrome 2204 abc mem REG 8,5 1056768 1443926/home/abc/.cache/google-chrome/Default/Media Кэш /data _2
chrome 2204 abc mem REG 8,5 270336 1443925/home/abc/.cache/google-chrome/Default/Media Кэш /data _1
chrome 2204 abc mem REG 8,5 45056 1443924/home/abc/.cache/google-chrome/Default/Media Кэш/data_0