Costumo abrir um arquivo no vim, faço algumas alterações e quando é hora de salvar o arquivo é somente leitura .. (de propriedade de outro usuário). Estou procurando dicas sobre como abrir novamente o arquivo como root e manter minhas alterações sem antes salvá-lo em um arquivo temporário para copiar ou reeditar como root.
28
Por favor, não me vote para isso. Eu não recomendo implementar esta resposta, mas é a resposta que o rkthkr está pedindo.
A maneira de fazer isso é com
:!sudo vim %
Como mencionei a ipozgaj, um% como argumento (mesmo um sub-argumento) é substituído pelo caminho para o buffer atual. (Você pode ser solicitado a fornecer sua senha.) Você termina com um novo processo do vim, de propriedade do root, que é um processo filho do processo original do vim. Parece pateta, certo? Aqui está o que parece no ps:
Se você tiver permissões de gravação no diretório que contém o arquivo e tiver feito edições nele, poderá receber um aviso de que existe um arquivo de troca. A escolha de [R] ecover refletirá a maioria * das alterações feitas pelo processo pai vim. (* Acho que talvez a atualização de troca tenha um tempo ou um limite delta. Já dediquei muito tempo a isso e não me importo de pesquisá-la.) Quando você sair do vim, não se assuste quando estiver ainda no vim ... você abriu um segundo processo do vim. Lembrar?
Agora, com tudo isso dito ... eu quase nunca faria isso. Talvez, se eu não tomei café suficiente ou em excesso e percebi que precisaria editar vários outros arquivos como root ... eu poderia tentar isso. Em 14 anos de administração de sistemas, nunca o fiz. Mas, até que você expressasse descontentamento com a minha solução preferida (que é exatamente como a dbr oferecida), eu nunca havia pensado nisso.
fonte
:w !sudo tee %
então acho que essa é uma boa resposta.Normalmente, eu o salvo em um arquivo temporário em $ HOME / tmp / apache.conf (por exemplo) e depois
este é um trabalho extra para mesclar as alterações, mas valeu a pena. Acho que é uma boa maneira entre conveniência e medidas contra alterações indesejadas
Antes disso, eu pensava nas ACLs ou na atribuição de grupos correspondentes aos arquivos, mas não dava certo com frequência. Eu esqueci de mudar a propriedade ou estava mudando os arquivos onde 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 alterações nos servidores apropriados, se a configuração funcionar como desejado, as alterações serão enviadas de volta ao repositório central, onde nosso mecanismo de configuração realiza alterações em intervalos regulares.
fonte
O que normalmente faço - não necessariamente o mais rápido, mas certamente seguro - é fazer algo assim (usando o nsswitch.conf como exemplo):
Saia do vim e faça:
Isso excluirá todas as linhas e lerá sua versão alterada e atualizada para ser editada em seu lugar. Usar o diretório inicial significa que você não precisa pensar se tem acesso ou não - e é mais privado que / tmp. Observe bem que essa é uma substituição completa do arquivo: 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á motivo para perder suas alterações.
fonte