#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:
- Создайте
/tmp/file.txt
принадлежащий вашему пользователю файл сrw-r--r--
- Откройте два уникальных терминала в /tmp/
- Открыть file.txt для записи в одном из них с использованием vim.
- Vim пометит файл как доступный только для чтения, ожидающий записи, поскольку у кого-то другого он открыт для записи.
- Открыть file.txt для записи в одном из них используется vim в другом терминале.
Вы получаете:
«— INSERT — W10: предупреждение: изменение файла, доступного только для чтения»
Решения:
Найдите другой экземпляр vim, который заблокировал ваш файл для записи, и закройте этот экземпляр vim. Выполнено
Или если у вас нет доступа к другому терминалу, или экземпляр другого редактора умер, не сняв блокировку только для чтения, или если это от другого человека, который открыл файл для записи в сеансе с другого компьютера, тогда единственное, что я знаю, что может очистить всеэти условия перезагружают компьютер.
Если вы хотите больше контролировать это, вам нужно выяснить, как vim решает, когда файл доступен только для чтения для записи, и выяснить, где хранится эта информация, и очистить ее вручную.