Назад | Перейти на главную страницу

vim повторно редактировать как root

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

Из этого ответ stackoverflow, по скинп

:w !sudo tee %

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

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

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. Обратите внимание, что это полная замена файла: если вы не хотите добавлять все изменения, вам придется выбирать.

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