Я часто открываю файл в vim, делаю некоторые изменения, и когда приходит время сохранять файл, доступен только для чтения .. (принадлежит другому пользователю). Я ищу советы о том, как я могу заново открыть файл как root и сохранить свои изменения без предварительного сохранения его во временный файл для копирования или повторного редактирования как root.
28
Пожалуйста, не голосуйте за меня. Я не рекомендую реализовывать этот ответ, но это ответ, который просит rkthkr.
Способ сделать это с помощью
:!sudo vim %
ipozgaj:% в качестве аргумента (даже субаргумента) заменяется путем к текущему буферу. (Вам может быть предложено ввести пароль.) В результате вы получите новый процесс vim, принадлежащий root, который является дочерним процессом исходного процесса vim. Звучит глупо, верно? Вот как это выглядит в PS:
Если у вас есть права на запись в каталог, содержащий файл, и вы внесли изменения в него, вы можете получить предупреждение о выходе файла подкачки. Выбор [R] ecover отражает большинство * изменений, внесенных родительским процессом vim. (* Я думаю, что, возможно, обновление свопа рассчитано по времени или имеет дельта-порог. Я уже слишком много времени уделяю этому и не хочу исследовать его.) Когда вы выходите и выходите из vim, не пугайтесь, когда вы все еще в vim ... вы открыли второй процесс vim. Помнить?
Теперь, со всем этим сказано ... Я бы почти никогда не делал этого. Возможно, если у меня было недостаточно или слишком много кофе, и я понял, что мне нужно будет отредактировать еще несколько файлов от имени root ... Я мог бы попробовать это. За 14 лет администрирования систем у меня никогда не было. Но, пока вы не выразили недовольство по поводу моего предпочтительного решения (которое точно соответствует предложению dbr), я никогда не думал об этом.
источник
:w !sudo tee %
поэтому я думаю, что это хороший ответ.Обычно я сохраняю его во временный файл в $ HOME / tmp / apache.conf (например)
это дополнительная работа по объединению изменений, но она окупилась. Я считаю, что это хороший путь между удобством и измерениями против нежелательных изменений
До этого я думал о ACL-списках или назначении соответствующих групп файлам, но это не всегда удавалось, я часто забывал сменить владельца или менял файлы там, где я не хотел этого делать.
Это относится только к файлам, которые не управляются до сих пор. Общее решение, которое мы используем, - это марионетка с git-репо, где люди локально редактируют файлы и тестируют изменения на соответствующих серверах, если конфигурация работает так, как нужно, изменения передаются обратно в центральный репозиторий, где наш механизм конфигурации извлекает изменения с регулярными интервалами.
источник
Что я обычно делаю - не обязательно самый быстрый, но наверняка безопасный - это делать что-то вроде этого (используя в качестве примера nsswitch.conf):
Выйдите из vim, затем выполните:
Это удалит все строки и прочитает в вашей измененной и обновленной версии для редактирования на своем месте. Использование вашего домашнего каталога означает, что вам не нужно думать о том, есть ли у вас доступ или нет, и он более приватный, чем / tmp. Обратите внимание, что это полная замена файла: если вы не хотите добавлять все изменения, вам придется выбирать и выбирать.
Несмотря на головную боль, связанную с любым из этих ответов, нет причин терять ваши изменения.
источник