14
декабря
0

Как сохранить файл в vim без прав root-a



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

Есть несколько способов выхода из данной ситуации. Самый простой и логичный — это сделать временный файл,а потом заменить им исходный. Тоесть в редакторе vim набрать:

:w $HOME/tmp/httpd.conf" 

а потом выполнить команду:

sudo mv $HOME/tmp/httpd.conf /etc/httpd 

Второй способ — воспользоваться многочисленным функционалом редактора vim (более подробно комбинации клавиш vim описаны в предыдущей статье), набрав комбинацию tee и команды sudo (предполагается, как и в первом случае, что использования команды sudo разрешено для вашей учетной записи). Для сохранения необходимо выполнить команду:

:w !sudo tee % 

где:
w — сохранить файл
!sudo — вызов команды sudo
tee % — в vim «%» —  это текущее имя файла, таким образом tee принимает стандартный входной поток (тоесть содержимое файла) и записывает его в текущий файл.

В принципе и все, для меня второй способ является самим эффективным, действенным и простым для выхода из сложившейся ситуации. Если дальше развивать эту тему, то можно предложить скрипт, который бы, например, проверял, доступен ли файл на запись, перед его открытием.
Создаем скрипт с названием vim.sh в ~/bin/:

#!/bin/bash
if [ -w $1 ]
then
        vim $1
else
        echo "You must enter root password to edit this file"
        su -c "vim $1"
fi 

Потом прописываем алиас на него в своем shell, например в ~/.zshrc:

alias vim='~/bin/vim.sh' 

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

Понравилась статья?
Подписаться на RSS feed
Оставить комментарий