Блокирует ли vim/vi/nano/etc файлы для записи?

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

Я никогда не слышал об этом раньше, и только некоторые первоначальные испытания показывают, что это не так. Кроме того, я не могу найти ничего об этом в поиске Google, чтобы предположить, откуда он мог получить эту идею.

2 ответа

Решение

Вим не делает этого, но я не уверен насчет остальных. Однако, есть очень простой способ проверить это:

Откройте два окна терминала (konsole, gnome-терминал и т. Д.) И выполните следующие команды в первой консоли:

touch ~/test.txt
vim ~/test.txt

Теперь во второй консоли введите следующее:

echo "This is a test" >> ~/test.txt

Если файл заблокирован с помощью vim, ваша команда во второй консоли не будет выполнена, так как файл не может быть записан. Это не подведет. Повторите с любым редактором, который вы хотите, как шаг #2 в первой консоли.

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

Некоторые редакторы, такие как vim, gedit и другие, создают "теневой" файл при открытии файла, чтобы указать, что файл открыт в редакторе. Это не блокировка и ничего не делает с другими приложениями в вашей системе - это просто дает редактору возможность узнать, что файл открыт.

vim а также vi do ( пример эффекта). Они не предотвращают запись файлов, но выдают предупреждение, если вы используете другой экземпляр vi / vim редактировать тот же файл. nano а также emacs (v24.3.1) нет (по крайней мере по умолчанию). Я должен искать другие редакторы. На самом деле, большинство достойных редакторов действительно способны отслеживать внешние изменения в файле, решительно полагая, что они не могут предотвратить внешние изменения.

Это может быть верно, если приложение использует некоторую функцию блокировки (либо используя O_EXLOCK в системах, которые его поддерживают, или flock или что-то еще в Windows).

Думаю, я понимаю вашу проблему. Я сам пытался решить ту же проблему

Если вы создаете документ с помощью команды:

sudo nano nanoCreated.py 

Документ создается, но документ заблокирован. Его можно редактировать только в редакторе nano. Это будет проблемой, когда вы попытаетесь отредактировать его в других редакторах.

Однако я не думаю, что у других редакторов, таких как Vim, есть такая же проблема.

Чтобы обойти проблему блокировки файлов:

  1. Создайте файл с помощью команды: touch nameOfFile.pyили с любым другим расширением. Вы также можете использовать любые другие команды, например: cat>nameOfFile.py

  2. Затем вы можете получить доступ к документу, используя: sudo nano nameOfFile.py

  3. Затем вы можете отредактировать документ оттуда, и после того, как вы его сохраните, он не будет заблокирован и может быть отредактирован другими текстовыми редакторами.
    Если вы посмотрите на загруженное мной изображение. Я создал файлы nameOfFile и nanoCreated.py, используя sudo nano nameOfFile.pyи оба файла были заблокированы, как вы можете видеть значок замка. Эти два файла можно редактировать только в Nano. Однако я создал другие файлы, используя предоставленные мной шаги, и ни один из них не был заблокирован.

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