quarta-feira, 31 de março de 2010

Salvando arquivo usando VIM / VI sem ser ROOT

Isto acontece varias vezes. Por exemplo: Estou logado com usuário normal e início uma edição de um arquivo (httpd.conf ou lighttpd.conf) de configuração onde somente o root tem permissão para escrita com o editor VIM / VI. De qualquer maneira eu não tenho permissão para salvar as mudanças. Como faço para salvar o arquivo sem criar um arquivo temporário  (/tmp/httpd.conf) para depois renomeá-lo (mv /tmp/httpd.conf /etc/httpd) como root ? 

Você pode usar a combinação dos comandos "tee" e "sudo" (sendo que sudo deve estar configurado para sua conta) para salvar um arquivo sem criar um outro arquivo temporário.


Edite o arquivo "/etc/apache2/conf.d/mediawiki.conf" como usuário normal:

$ vim /etc/apache2/conf.d/mediawiki.conf

Faça algumas alterações e tente salvar (:w, enter).


Para salvar o arquivo, simplimente digite o comando:

:w !sudo tee %
 
 
Onde,
  • :w - Escreve/salva o arquivo. 
  • !sudo - Executa no shell o comando "sudo". 
  • tee - A saída do comando de escrita (vim :w) é redirecionada para o comando "tee". O "%" representa o arquivo atual (/etc/apache2/conf.d/mediawiki.conf). Em outras palavras o comando "tee" é executado como "root" e recebe como entrada a escrita do arquivo atual. Logo depois será perguntado se deseja recarregar o arquivo.