Зайдите в vi, внесли изменения, сначала забыли sudo - что теперь

2419
simon

Я сделал длительные изменения в файле конфигурации на компьютере с Ubuntu Linux с помощью редактора vi. К сожалению, я сначала забыл sudo, так что теперь я в редакторе, но не могу сохранить свои изменения из-за отсутствия прав. Могу ли я задним числом судить пользователя на этом терминале, или какой вариант действий лучше всего предпринять?

8
Смотрите также http://stackoverflow.com/questions/1005/getting-root-permissions-on-a-file-inside-of-vi therefromhere 15 лет назад 2

3 ответа на вопрос

36
wfaulk

От ТАК :

:w !sudo tee % 

Я действительно использую этот способ сделать это чаще:

:%!sudo tee % 

Я думаю, что это немного более интуитивно, поскольку я знаю, что :%!делает, тогда как у меня нет интуитивного понимания :w !. Кроме того, легко пропустить очень важное пространство между wи !.

Если это поможет вашей интуиции, помните, что команды `vi` могут состоять из нескольких букв, поэтому теоретически это может быть команда« wfoo », поэтому, если вы хотите записать в файл с именем« foo », вы должны сказать «` W woo` ». То есть вам нужно пробел после «`: w` ». Что касается «`: w! `» - вы знаете, что такое «`:! `», Верно? «`:! Date` »запускает команду« `date`». Поэтому «`: w! Xyz` »записывает буфер, но *** в команду ***, а не в файл. Scott 10 лет назад 2
Это должен быть принятый ответ, так как текущий существующий ответ является довольно длительным решением, в то время как это является немедленным решением. OP? bschlueter 9 лет назад 0
11
Dom

В этом случае я пишу файл с :w /tmp/tmpfile. Затем я выхожу и перехожу /tmp/tmpfileк своему старому файлу с правами sudo.

это то, что я делаю, но мне нравится [ответ wfaulk] (http://superuser.com/questions/53733/logged-in-to-vi-made-changes-forgot-to-sudo-first-now- что / 53743 # 53743) .. если я могу вспомнить это только в следующий раз, когда я сделаю это! :) quack quixote 14 лет назад 0
Я надеюсь, что вы *** копируете *** файл, а не * перемещаете * его. Перемещение заменяет режим файла (права доступа) на значение по умолчанию `vi` (которое, вероятно, равно 666, и с обратным к вашему" umask "), заменяет владельца файла вашим UID (это был" root ", не так ли ?) и ломает жесткие ссылки. Scott 10 лет назад 0
Пара проблем: (1) Если файл считается конфиденциальным, а ваш «umask» равен 22 (а не 66), эта процедура предоставляет содержимое файла другим пользователям, которые могут отслеживать каталог `/ tmp`. (2) Если в вашей системе действительно злые пользователи, они могут заменить ваш `/ tmp / tmpfile` между тем моментом, когда вы его пишете (из` vi`), и когда вы копируете его в файл конфигурации системы, который вы редактировали. Безопаснее поместить временный файл в каталог, к которому есть доступ только у вас. Scott 10 лет назад 0
-2
Terje Mikal

Не могли бы вы открыть другой терминал и временно изменить права доступа к файлу?

Это плохая идея. Вероятно, никогда не будет большой проблемой безопасности, но это может быть, и есть лучшие и более простые решения (например, запись во временный файл или, лучше, опубликованный wfaulk `: w! Sudo tee% solution`) dbr 15 лет назад 1

Похожие вопросы