Наши системные администраторы входят в ящики, используя непривилегированные учетные записи с правами sudo. Я часто по привычке открываю файлы в vim
вместо того sudoedit
. Я не хочу иметь привычку использовать sudoedit
. Мой коллега предложил создать vim
символическая ссылка в пути, который указывает на sudoedit
. Мне это кажется ужасной идеей.
Я обычно просто :w /tmp/service.conf
а потом mv -i /tmp/service.conf /etc/
Это кажется неуклюжим, но я почти склонен сказать, что доверяю этому процессу больше, чем привыкаю использовать sudoedit
или sudo vim
.
Мнения?
Примечание: Обычно у нас есть легкодоступные резервные копии этих файлов, так что это не проблема.
С участием sudo.vim, ты можешь сделать vim sudo:path-to-file
. Если вы уже открыли файл без sudo:
, ты можешь сделать :f sudo:%
перейти на использование sudo
читать / писать. (Вы можете захотеть :set noro
также, чтобы избежать предупреждений при попытке изменить / записать файл, который Vim считал доступным только для чтения при первом открытии.)
Имейте в виду, что оба Алекса :w !sudo tee %
solution и sudo.vim страдают от проблем с экранированием оболочки. Не используйте, если не знаете, что имена файлов безопасны.
Я бы просто продолжал использовать VIM и заставлял его делать всю работу за вас. Когда вы открываете файл, к которому у вас нет доступа на запись, вы все равно можете сохранить его, введя в VIM следующее: <ESC>:w !sudo tee %
Это позволит вам выполнить sudo и внести ваши изменения в файл, который вы редактируете в данный момент. После этого файл эффективно редактируется вне VIM, поэтому вам будет предложено загрузить новое содержимое.
Если у вас есть права sudo, чтобы вы могли запускать любую команду как root, sudoedit
на самом деле не дает никаких преимуществ. Он существует для того, чтобы в противном случае непривилегированным пользователям могла быть безопасно предоставлена возможность редактировать определенные файлы, не позволяя им запускать весь редактор с правами root в каком-то ограниченном режиме (что трудно сделать правильно).
Итак, ваш подход кажется прекрасным, хотя я думаю, что не забудьте ввести sudo vim
не так ли уж плохо, учитывая, что вам нужно напечатать sudo whatever
для выполнения других команд от имени root.
Примечание к вашему примечанию: я думаю, что меня больше беспокоит случайная перезапись другого файла (-i
несмотря на то, что вы ожидаете ответить «да» на этот вопрос, так что вы легко получите привычку делать это), чем я бы сказал о внесении изменений в файл, который вы собираетесь редактировать. Поэтому убедитесь, что у вас есть резервная копия всего остального.
sudo su -
В противном случае напишите сценарий оболочки, что-то вроде этого. Обратите внимание, что он сломается, если вы захотите передать аргументы в vim (хотя вы можете расширить его для работы, это скорее PoC)
#!/bin/sh
# Pretend to be vim, write to /tmp then sudo copy to original file
$TMPFILE = $(mktemp)
cp $1 $TMPFILE
vim $TMPFILE
sudo mv -i $TMPFILE $1
Это может сделать то, что вам нужно? Вы также можете легко настроить его для создания двух копий файла и перед перемещением предупредить вас, если они все еще не идентичны (то есть кто-то с тех пор изменил оригинал)