LINUX.ORG.RU

Размер удалённого файла


0

1

Всем привет :) Подскажите плиз по такой проблемке:

Есть firefox, в нём открыл ютуб. Ролик загружается. Новый firefox для флеша запускает отдельный процесс plugin-container. Посмотрев файлы этого процесса можно найти сами видяхи:

ls -lsa /proc/$(pgrep plugin-conta)/fd | grep Flash
0 lrwx------ 1 art art 64 2011-09-05 16:08 77 -> /tmp/FlashXXxaLheo (deleted)
0 lrwx------ 1 art art 64 2011-09-05 16:08 78 -> /tmp/FlashXX2ujGvC (deleted)
0 lrwx------ 1 art art 64 2011-09-05 16:08 79 -> /tmp/FlashXXh0SH1i (deleted)
0 lrwx------ 1 art art 64 2011-09-05 16:08 80 -> /tmp/FlashXXhNHppu (deleted)

Как видно файлы уже удалённые, но так как процесс их держит, то место ещё не свободно. Как узнать их размер без создания копии на диске (cat /proc/xyz/fd/80 >test.flv) ?

В proc-е что-то вроде симлинка, только в отличии от обычного симлинка ему всё равно что файл удалён. Читать его можно. Но вот посмотреть размер уже не получается :(

Посмотреть размер в /tmp/ тоже нельзя - файла в списке уже нет :(



Последнее исправление: shtosm_guest (всего исправлений: 1)

Нда. Искал, искал, написал на LOR-е и прямо осенило!

lsof -p $(pgrep plugin-contain)

показывает кучу информации по открытым файлам, в том числе и размер файла.

shtosm_guest
() автор топика
Ответ на: комментарий от baverman

Да.

 
$ ls -Hlsa /proc/$(pgrep plugin-conta)/fd/ | grep FlashXX7l 
0 lrwx------ 1 art art 64 2011-09-05 16:08 78 -> /tmp/FlashXX7lFBvL (deleted) 
 
$ ls -lsa /tmp/FlashXX7l 
ls: cannot access /tmp/FlashXX7l: No such file or directory 
shtosm_guest
() автор топика
Ответ на: комментарий от shtosm_guest

Вот что я имел в виду:

import os
from subprocess import Popen

fd = os.open('/tmp/some-file', os.O_CREAT | os.O_WRONLY)
os.write(fd, '12345')

os.remove('/tmp/some-file')

Popen("ls -lH /proc/%s/fd/%s" % (os.getpid(), fd), shell=True).wait()
-rwxr-xr-x 0 bobrov users 5 Sep  5 23:58 /proc/15775/fd/3
baverman ★★★
()
Ответ на: комментарий от baverman

О какая штука получается :) Добавил слип в твою прогу, зашёл в /proc/<pid>/fd этой проги:

Если делать ls для всех файлов - то ничего не видно:

$ ls -Hls
total 0
0 lrwx------ 1 art art 64 2011-09-05 17:18 0 -> /dev/pts/6
0 lrwx------ 1 art art 64 2011-09-05 17:18 1 -> /dev/pts/6
0 lrwx------ 1 art art 64 2011-09-05 17:18 2 -> /dev/pts/6
0 l-wx------ 1 art art 64 2011-09-05 17:18 3 -> /tmp/some-file (deleted)
0 l-wx------ 1 art art 64 2011-09-05 17:18 8 -> pipe:[5007468]

А если для определённого, то всё ок:

$ ls -Hls 3
4 -rwxr-xr-x 0 art art 5 2011-09-05 17:18 3

:)

shtosm_guest
() автор топика
Ответ на: комментарий от shtosm_guest

Если делать ls для всех файлов - то ничего не видно:

Тьфу, -H разыменовывает только непосредственный аргумент. Тогда 'ls -L'.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.