2013-06-26 3 views
10

Я использую linux mint 13 xfce, и у меня есть файл с именем wv.gold, который я пытаюсь проверить в bash, если он открыт какой-либо программой (например, я открыл его в sublime-text и gedit)проверить, открыт ли файл lsof

во многих форумах люди говорят, что если я бегу lsof | grep filename я должен получить 0, если он открыт или 256(1) если она закрыта, но на самом деле я ничего не получаю (пустая строка), если я бегу с помощью grep "wv.gold", и получить небольшой список если я сделаю это, используя grep gold.

Список нечто вроде:

bash  2045 user cwd DIR 8,1  4096  658031 /home/user/path/to/dir 
bash  2082 user cwd DIR 8,1  4096  658031 /home/user/path/to/dir 
watch  4463 user cwd DIR 8,1  4096  658031 /home/user/path/to/dir 
gedit  16679 user cwd DIR 8,1  4096  658031 /home/user/path/to/dir 
lsof  20823 user cwd DIR 8,1  4096  658031 /home/user/path/to/dir 
grep  20824 user cwd DIR 8,1  4096  658031 /home/user/path/to/dir 
lsof  20825 user cwd DIR 8,1  4096  658031 /home/user/path/to/dir 

Таким образом, я получаю путь к каталогу, он является, но не путь к файлу (есть и другие файлы там), и в любом случае только gedit процесса, не до sublime-text процесс.

Есть ли какой-нибудь простой способ узнать, открыт ли какой-либо файл txt любой другой программой?

EDIT: Оказывается (см. Комментарии от @mata и @ctn), что некоторые редакторы загружают файлы и закрывают их немедленно, и они просто открывают файл при его сохранении. Таким образом, мы можем видеть это только тогда, когда они все еще открывают большой файл (так как у вас есть время наблюдать его при открытии), и он исчезает сразу после этого.

+6

попытка 'fuser' из [' psmisc'] (http://psmisc.sourceforge.net/). Должен быть доступен как пакет psmisc для большинства дистрибутивов. Обратите внимание, что многие текстовые редакторы не сохраняют дескриптор открытого файла открытым файлам. Они читают файл, закрывают его и записывают обратно на сохранение. – mata

+0

Убедитесь, что вы используете lsof как пользователь root, иначе он будет сильно ограничен в том, что он показывает – Magnus

ответ

10

Открытые файлы, отображаемые на выходе lsof. Если ваш файл отсутствует, значит, он не открыт. Среди столбцов PID (идентификатор процесса программы, в которой открыт файл) и FD (файловый дескриптор, связанный с открытым файлом). Никакое конкретное значение для них не указывает на открытие/закрытие. Если он вообще появляется, значит, он открыт.

Заканчивать http://linux.die.net/man/8/lsof и поиск текста contains the first nine characters

+0

, но при запуске 'lsof | grep "wv.gold" ', когда он открыт в' gedit', я не получаю строк, напечатанных – rafa

+2

Поскольку mata прокомментировал ваш вопрос, редакторы могут открыть файл, полностью прочитать его в памяти и закрыть файл. – ctn

+2

Если вы хотите проверить, какие процессы в настоящее время открываются gedit, сначала получите pid gedit: 'pgrep gedit', а затем список открытых файлов:' ls -l/proc//fd'. Вы должны увидеть символические ссылки формы '4 ->/some/file.txt' – ctn