Файлы, используемые процессом Unix - PullRequest
14 голосов
/ 19 ноября 2008

Команда fuser позволяет узнать, какие процессы используют файл или каталог.

Я ищу команду, которая делает обратное: позволяет мне узнать, какие файлы используются процессом.


Обновление

Забыл упомянуть, что это для системы Solaris.

Ответы [ 6 ]

41 голосов
/ 19 ноября 2008
lsof -p <pid>

С здесь

lsof означает « LiSt Open Files ». Эта команда оболочки кажется обманчиво простой: она перечисляет информацию о файлах, открытых процессами в окне UNIX.

Несмотря на свое (кажущееся) скромное утверждение миссии, lsof на самом деле является одной из самых мощных и полезных команд UNIX. Его сырая мощь проистекает из одного из принципов разработки UNIX, часто описываемых как «в UNIX все является файлом». Это означает, что концепция открытого файла lsof охватывает не только обычные файлы, но и следующее:

  • Директории
  • Потоки или сетевые файлы (например, доменные сокеты Internet или UNIX и файлы NFS)
  • Собственные библиотеки (например, библиотеки .soor .dylibdynamic, связанные с процессом)
  • Блочные и символьные специальные файлы (например, том диска, внешний жесткий диск, консоль или мышь)

Подождите, я не могу найти lsof в моей системе!

lsof является настолько популярным инструментом, что он был портирован практически на все диалекты UNIX (Linux, Mac OS X, BSD, Solaris и т. Д.). Если он недоступен на вашем устройстве, используйте его обычную систему управления пакетами для его установки. Вы можете найти пакеты lsof для Solaris на Sun Freeware .

13 голосов
/ 24 декабря 2008

Несмотря на то, что я не стал бы жалеть кого-либо, кто изучает 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
1 голос
/ 16 июля 2014
  1. вы можете использовать команду ls и grep , чтобы узнать файлы, используемые chrome

$ ls -l / proc / * / fd | grep "хром"

lrwx ------ 1 ba abc 64 июля 16 22:19 104 -> /home/abc/.config/google-chrome/Default/Cookies

lr-x ------ 1 abc abc 64 июля 16 22:19 113 -> /opt/google/chrome/nacl_irt_x86_64.nexe

lrwx ------ 1 abc abc 64 июля 16 22:19 121 -> /home/abc/.cache/google-chrome/Default/Cache/data_0

lrwx ------ 1 abc abc 64 июля 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 "хром"

хром 2204 abc cwd DIR 8,5 4096 1441794 / home / abc

хром 2204 abc rtd DIR 8,5 4096 2 /

chrome 2204 abc txt REG 8,5 87345336 5111885 / opt / google / chrome / chrome

chrome 2204 abc mem REG 8,5 4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache / data_3

chrome 2204 abc mem REG 8,5 1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache / data_2

chrome 2204 abc mem REG 8,5 270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache / data_1

chrome 2204 abc mem REG 8,5 45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache / data_0

1 голос
/ 19 ноября 2008

В некоторых системах 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
1 голос
/ 19 ноября 2008

Это классическое приложение для dtrace .

Я не могу точно вспомнить синтаксис, но у вас может возникнуть трассировка при каждом открытии файла любым процессом в системе. Это может быть сделано на работающей системе без каких-либо дополнительных затрат, как я ожидал. Если вы работаете в Solaris с правами администратора, dtrace - ваш лучший друг. Даже если вы не программист, он довольно прост в освоении и является ОЧЕНЬ мощным инструментом для системных запросов.

1 голос
/ 19 ноября 2008

Вы можете получить lsof от http://www.sunfreeware.com/programlistsparc10.html#lsof

Вы также можете попробовать pfiles:

http://docs.oracle.com/cd/E23823_01/html/816-5165/pfiles-1.html#scrolltoc

...