«Предупреждение» о редактировании файла, доступного только для чтения, хотя у меня есть разрешение

#linux

#linux

Вопрос:

Я использую VSCode для удаленного подключения к файловому серверу через SSH. У меня есть другой человек, который также использует его, и они входят в систему под своей учетной записью, которая является частью группы, которая имеет доступ ко всей структуре каталогов.

Каждый раз в blue moon права доступа изменяются и возвращаются к root:root (владение), и я должен изменить его обратно root:groupname , чтобы другой человек мог иметь доступ. Однако, даже когда я делаю это, иногда другой человек не может вносить изменения с помощью VS Code. Если я su обращусь к этому пользователю, я смогу сохранить изменения.

Одна вещь, которую я заметил, это то, что если я запущу vim <filename> и попытаюсь отредактировать его от имени этого пользователя, он скажет, "-- INSERT -- W10: Warning: Changing a readonly file" . Однако в ту минуту, когда я пытаюсь сохранить файл, он фактически сохраняется.

Похоже, что разрешения отстают или что-то в этом роде и не обновлялись.

Есть идеи, как я могу это исправить?

Комментарии:

1. Возможно, один редактор разрешает принудительную запись. Если у вас есть разрешение на запись в каталог, вы всегда можете «отредактировать» файл, удалив его и создав новую копию. Для этого не требуется разрешения на изменение файла, поскольку, если бы на него была жесткая ссылка в другом каталоге, он все равно был бы там без изменений.

2. Хм. Даже при удалении редактора из изображения Vim по-прежнему говорит, что он редактирует файл, доступный только для чтения, но все же он действительно позволяет вам сохранять?

3. ДА. Я только что попробовал. Vim требовал использования восклицательного знака, как в «w!», Для принудительной записи. Если вы это сделаете, vim будет использовать любой трюк, который у него есть, для записи файла.

4. Я думаю, что если вы принудительно сохраняете в Vim, он изменяет разрешения (если может), сохраняет файл, а затем изменяет их обратно. Похоже , что он сохранен в файле, доступном только для чтения. Я думаю, мораль в том, что вы не можете полагаться на Vim, чтобы сообщить вам, каковы права доступа к файлам.

Ответ №1:

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

Vim говорит вам очень терпеливо ждать, пока другой пользователь закончит запись этого файла.

Узнайте больше с :help W10

Воспроизвести эту ошибку в vim 9.0:

  1. Создайте /tmp/file.txt принадлежащий вашему пользователю файл с rw-r--r--
  2. Откройте два уникальных терминала в /tmp/
  3. Открыть file.txt для записи в одном из них с использованием vim.
  4. Vim пометит файл как доступный только для чтения, ожидающий записи, поскольку у кого-то другого он открыт для записи.
  5. Открыть file.txt для записи в одном из них используется vim в другом терминале.

Вы получаете:

«— INSERT — W10: предупреждение: изменение файла, доступного только для чтения»

Решения:

Найдите другой экземпляр vim, который заблокировал ваш файл для записи, и закройте этот экземпляр vim. Выполнено

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

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