vim reedita como root

27

Eu geralmente abro um arquivo no vim, faço algumas alterações e quando é hora de salvar o arquivo, ele é somente leitura. (de outro usuário). Estou procurando dicas sobre como posso reabrir o arquivo como root e manter minhas alterações sem primeiro salvá-lo em um arquivo temporário para copiar ou reeditar como root.

    
por rkthkr 09.06.2009 / 15:11

4 respostas

40

A partir desta resposta do stackoverflow , por skinp

:w !sudo tee %

I often forget to sudo before editing a file I don't have write permissions on. When I come to save that file and get a permission error, I just issue that vim command in order to save the file without the need to save it to a temp file and then copy it back again.

    
por 09.06.2009 / 15:31
15

Por favor, não vote em mim para isso. Eu não recomendo implementar esta resposta, mas é a resposta que o rkthkr está pedindo.

rkthkr said:
But it would be nice to have vim restarted and run as root

A maneira de fazer isso é com :!sudo vim %
Como eu mencionei para ipozgaj, um% como um argumento (mesmo um sub-argumento) é substituído pelo caminho para o buffer atual. (Você pode ser solicitado a fornecer sua senha.) Você acaba com um novo processo de vim, de propriedade do root, que é um processo filho do processo original do vim. Soa pateta, certo? Aqui está o que parece no 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

Se você tiver permissões de gravação no diretório que contém o arquivo e tiver feito edições nele, poderá ser avisado de que um arquivo de troca é encerrado. A escolha de [R] ecover, refletirá mais * das alterações feitas pelo processo pai vim. (* Eu acho que talvez a atualização de troca tenha sido cronometrada ou tenha um limite delta. Eu já dediquei muito tempo a isso e não me importo em pesquisá-la.) Quando você sai do vim, não não se assuste quando você ainda está em vim ... você abriu um segundo processo vim. Lembre-se?

Agora, com tudo isso dito ... eu quase nunca faria isso. Talvez, se eu não tivesse o suficiente ou muito café, e eu percebi que precisaria editar vários arquivos como root ... Eu poderia tentar isso. Em 14 anos de administração de sistemas, nunca o fiz. Mas, até você expressar descontentamento com a minha solução preferida (que é exatamente como dbr oferecido) eu nunca tinha pensado sobre isso.

    
por 16.06.2009 / 07:04
1

Eu costumo salvá-lo em um arquivo temporário em $ HOME / tmp / apache.conf (por exemplo) e depois

sudo vimdiff $HOME/tmp/apache.conf /etc/apache2/apache.conf

este é um trabalho extra para mesclar as alterações, mas valeu a pena. Eu acho que é um bom caminho entre conveniência e medições contra mudanças indesejadas

Antes eu pensava em ACLs ou em atribuir grupos correspondentes aos arquivos, mas não funcionava muito frequentemente, ou esqueci de alterar as propriedades ou estava mudando os arquivos onde eu não pretendia fazê-lo.

Isso vale apenas para arquivos que não são gerenciados até agora. A solução geral que usamos é o fantoche com um repositório git onde as pessoas editam arquivos localmente e testam as mudanças nos servidores apropriados, se a configuração funcionar como desejado, as mudanças são enviadas de volta ao repositório central, onde nosso mecanismo de configuração puxa as mudanças em intervalos regulares. / p>     

por 09.06.2009 / 15:24
0

O que eu normalmente faço - não necessariamente o mais rápido, mas certamente seguro - é fazer algo assim (usando o nsswitch.conf como exemplo):

:w! ~/%

Saia do vim e faça:

sudo vim nsswitch.conf
1GdG
:r ~/%

Isso excluirá todas as linhas e lerá sua versão alterada e atualizada para ser editada em seu lugar. Usando seu diretório home significa que você não precisa pensar se tem acesso ou não - e é mais privado que / tmp. Note bem que esta é uma substituição completa de arquivos: se você não quiser adicionar todas as alterações, terá que escolher.

Apesar da dor de cabeça envolvida em qualquer uma dessas respostas, não há razão para perder suas mudanças.

    
por 23.06.2009 / 20:18