vim заново отредактируйте как root

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

4 ответа

Решение

От этого ответа stackoverflow, по skinp

:w !sudo tee %

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

Пожалуйста, не голосуйте за меня. Я не рекомендую реализовывать этот ответ, но это ответ, который просит rkthkr.

ркткр сказал:
Но было бы неплохо, чтобы vim перезапустился и запустился с правами root

Способ сделать это с :!sudo vim %
Как я упоминал в ipozgaj,% в качестве аргумента (даже под-аргумента) заменяется путем к текущему буферу. (Вам может быть предложено ввести пароль.) В результате вы получите новый процесс vim, принадлежащий root, который является дочерним процессом исходного процесса vim. Звучит глупо, верно? Вот как это выглядит в PS:

~# ps afo pid,ppid,user,stat,comm
  PID  PPID USER         STAT COMMAND
16187 30478 rbronosky    Ss   bash
16510 16187 rbronosky    R+    \_ ps
30482 30478 rbronosky    Ss   bash
16244 30482 rbronosky    S+    \_ vim
16318 16244 root         S+        \_ vim

Если у вас есть права на запись в каталог, содержащий файл, и вы внесли изменения в него, вы можете получить предупреждение о выходе файла подкачки. Выбор [R]ecover отражает большинство * изменений, внесенных родительским процессом vim. (* Я думаю, что, возможно, обновление свопа рассчитано по времени или имеет дельта-порог. Я уже потратил слишком много времени на это и не хочу его исследовать.) Когда вы выходите и выходите из vim, не пугайтесь, когда вы все еще в vim... вы открыли второй процесс vim. Помните?

Теперь, со всем этим сказано... Я бы почти никогда не делал этого. Возможно, если у меня было недостаточно или слишком много кофе, и я понял, что мне нужно будет отредактировать еще несколько файлов от имени root... Я мог бы попробовать это. За 14 лет администрирования систем у меня никогда не было. Но, пока вы не выразили недовольство по поводу моего предпочтительного решения (которое точно соответствует предложению dbr), я никогда не думал об этом.

Обычно я сохраняю его во временный файл в $HOME/tmp/apache.conf (например)

sudo vimdiff $HOME/tmp/apache.conf /etc/apache2/apache.conf

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

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

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

Что я обычно делаю - не обязательно самый быстрый, но наверняка безопасный - это делать что-то вроде этого (используя в качестве примера nsswitch.conf):

:w! ~/%

Выйдите из vim, затем выполните:

sudo vim nsswitch.conf
1GdG
:r ~/%

Это удалит все строки и прочитает в вашей измененной и обновленной версии для редактирования на своем месте. Использование вашего домашнего каталога означает, что вам не нужно думать о том, есть ли у вас доступ или нет - он более приватный, чем / tmp. Обратите внимание, что это полная замена файла: если вы не хотите добавлять все изменения, вам придется выбирать и выбирать.

Несмотря на головную боль, связанную с любым из этих ответов, нет причин терять ваши изменения.

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