Определите, открыт ли файл уже

Я хочу создать bash-скрипт, чтобы определить, открыт ли мой файл другим пользователем.

Я уже пробовал с lsof, но это не сработало, как я хотел. Файлы могут иметь различные типы расширений, например txt, pl, conf, cfg и т. д. Кто-нибудь может мне помочь?

У меня есть один сервер с несколькими файлами .conf. Если я пишу в одном файле, я не могу знать, пишет ли другой пользователь в тот же файл тоже. Поэтому я хотел бы создать сценарий, который позволит мне это знать.

Я пытался что-то вроде этого lsof | grep MyFile или lsof /root/blabla/myfolder/myfile и т. Д. Может быть, я не понимаю, использование этого инструмента.

Я постараюсь лучше объяснить мою проблему. Есть много пользователей, которые могут изменить .conf файл. Если два пользователя работают с одним и тем же файлом, то при последнем сохранении данные, сделанные другим пользователем, будут перезаписаны. Мой скрипт хочет предупредить пользователей, что файл уже открыт другим пользователем, и, возможно, открыть файл в режиме только для чтения. Я уже пробовал использовать ps aux (спасибо за подсказку), но не могу оценить, был ли недавно мой файл закрыт.

1
задан 16 May 2015 в 13:48

2 ответа

lsof точно перечисляет все открытые файлы.

"проблема" состоит в том, что большинство редакторов открывает файл, считайте содержание (в поршень), и затем закройте файл.

Редакторы тогда откроют файл при записи изменений.

, Чтобы видеть, используют ли какие-либо редакторы файл, для всех пользователей, выполнение

ps aux | grep file name

, Пример

Открывает test.file с нано в одном терминале.

В другом терминале выполняет команды follwoing:

bodhi@daemon:~$sudo lsof | grep test.file
[sudo] password for bodhi: 

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.

Примечание: никакой вывод;)

Теперь выполненный PS aux

bodhi@daemon:~$sudo ps aux | grep test.file
bodhi     4736  0.0  0.0 121096  3404 pts/3    S+   17:49   0:00 nano test.file

Теперь мы видим информацию, которую мы хотим;)

нано обнаруживается, и мы редактируем test.file

0
ответ дан 16 May 2015 в 13:48

@bodhi.zazen точно показал что причина Ваших файлов, не показываемых в выводе lsof.

ну, так как мы испытываем недостаток в описании Вашего варианта использования, я предположу, что Ваш сценарий

  • делает что-то, что занимает время
  • изменения содержание других файлов, которые, возможно, были изменены между временем, которое Ваш сценарий запускает и время, это готово изменить файл.

, Если это верно, одна вещь, которую можно сделать:

  • получают контрольную сумму файла, который Ваш сценарий намеревается изменить рано с, например: sha1sum <file>
  • делают что-то трудоемкое
  • проверяет текущую контрольную сумму Вашего файла. Если это совпадает с прежде, это не было изменено, если это не то же, можно тогда принять решение и попросить, чтобы пользователь сценария решил, перезаписать ли, или показать разность, и т.д.

Это не идеально, и это - просто выстрел в темноте, так как мы пропускаем контекст, но возможно это будет полезно в некотором роде Вам.

0
ответ дан 16 May 2015 в 13:48

Другие вопросы по тегам:

Похожие вопросы: