/etc/apt/sources.list "E212: Não é possível abrir o arquivo para gravação

178

Estou tentando editar o sources.list usando o editor vi, mas obtendo o seguinte erro ao salvar o arquivo:

/etc/apt/sources.list" E212: Can't open file for writing
codersofthedark
fonte
1
Eu peguei isso quando o diretório em que estava tentando gravar o arquivo excedeu seu máximo. uso do disco
Mehdi Nellen
1
Como um comentário mencionado em uma das respostas, você pode obtê-lo se a pasta na qual o arquivo reside foi excluída ou não existia. Procure comandos para alterar o diretório ou criar um diretório a partir do vi, dependendo da situação.
Kon psych

Respostas:

278
For some reason the file you are writing to cannot be created or overwritten.
The reason could be that you do not have permission to write in the directory
or the file name is not valid.

O Vim possui um sistema de ajuda embutido. Eu apenas citei o que diz :h E212.

Você pode editar o arquivo como um superusuário como sudo vim FILE. Ou, se você não quiser sair da sessão vim existente (e agora tiver direitos sudo adequados), poderá emitir:

:w !sudo tee % > /dev/null

O que salvará o arquivo.

HTH

Zsolt Botykai
fonte
54
Obrigado! No meu caso, ele estava tentando editar um arquivo inexistente em um diretório inexistente. Acontece que, embora você possa "abrir" o arquivo inexistente e depois criá-lo salvando-o, isso não funciona com o diretório inexistente. E agora eu sei sobre o sistema de ajuda interno do Vim! :)
Dom Delimar
Obrigado! No meu caso, eu estava tentando gravar em uma unidade de rede e minhas permissões de rede haviam travado parcialmente nessa sessão de tela. Acabei escrevendo para um arquivo temporário em / var e copiando-o de outra instância ssh para o meu diretório pessoal.
Ross Aiken
Recuperou uma edição inválida .
empilhador classe
@Xinus ver isto: stackoverflow.com/questions/2600783/...
Zsolt Botykai
: h E212 diz: ".bashrc" E212: O arquivo não pode aberto para escrever E433: Nenhuma tag arquivo E149: Desculpe, nenhuma ajuda para E212
hello_there_andy
26

Isso acontece comigo o tempo todo, abro um arquivo raiz para escrever:

Em vez de perder todas as suas alterações e reabrir com o sudo. Veja esta demonstração de como salvar essas alterações:

Demonstração de instalação única para criar um arquivo somente leitura de propriedade raiz para um usuário mais baixo:

sudo touch temp.txt
sudo chown root:root temp.txt
sudo chmod 775 temp.txt
whoami
el

Primeiro abra o arquivo como usuário normal:

vi temp.txt

Em seguida, faça algumas alterações no arquivo, ele avisa que é somente leitura. Use este comando.

:w !chmod 777 %

Em seguida, escreva o arquivo:

:wq!

As permissões são expandidas e o arquivo é salvo. Você precisa do ponto de exclamação porque está editando um arquivo raiz como um usuário menor.

Explicação do que esse comando faz:

O: w significa escrever o arquivo. O estrondo significa começar a interpretar como concha. chmod significa alterar permissões, 777 significa permissões totais em todos os lugares. A porcentagem significa o nome do arquivo atual.

Aplica a mudança. E pergunta se você deseja recarregar. Pressione "O" para "Ok". Não recarregue ou você perderá suas alterações.

Eric Leschinski
fonte
13

Para mim, havia uma solução bastante simples. Eu estava tentando editar / criar um arquivo em uma pasta que não existia. Como eu já estava na pasta, estava tentando editar / criar um arquivo.

ie pwd folder/file

e estava digitando

sudo vim folder/file

e, obviamente, estava procurando a pasta na pasta e falhando ao salvar.

Simon
fonte
9

Ou talvez você esteja em um FS montado apenas para leitura

kellogs
fonte
1
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem.
DmitryG #
13
@DmitryG Não há perguntas aqui, apenas uma situação sendo declarada. Essa foi a razão pela qual entrei na mesma situação e acho que as pessoas achariam útil saber sobre isso.
Kellogs #
5

Eu referenciei o Zsolt no nível 2, insiro:

:w !sudo tee % > /dev/null

e, em seguida, na minha situação, ainda não consigo modificar o arquivo, por isso solicitou que adicione "!". então eu insiro

:q! 

então funciona

Oscar Zhou1989
fonte
2
isso não fecha o arquivo e não o salva?
jsibs
3

para mim trabalhou alterando o sistema de arquivos de Somente leitura antes de executar o vim:

bash-3.2# mount -o remount rw /
Przemysław Czechowski
fonte
1

Tente conectar-se como root e edite o arquivo. Isso funciona para mim

Kazman
fonte
1

Ao abrir o arquivo no vim, use sudo. ou seja: sudo vim textfile. isso resolverá o problema.

Bugz
fonte
Graças ajudou!
parsecer 17/04
1

alterar usuário para root

sodu su -

navegue para etc

vi sudoers

procure o usuário root na seção privilégio do usuário. você vai entender

root ALL=(ALL:ALL) ALL 

faça a mesma entrada para o seu nome de usuário. se o seu nome de usuário for 'myuser', adicione

myuser ALL=(ALL:ALL) ALL

vai parecer

root ALL=(ALL:ALL) ALL 

myuser ALL=(ALL:ALL) ALL 

Salve isso. altere o usuário root para o seu usuário. Agora tente o mesmo em que você estava recebendo o problema de sudoers

somspeaks
fonte
0

Pode ser possível que o arquivo que você está acessando tenha uma cópia de troca (ou versão de troca) já existente no mesmo diretório

Portanto, primeiro veja se existe ou não um arquivo oculto.

Por exemplo, consulte o seguinte tipo de arquivo

.system.conf.swp

Usando o comando

ls -a

E então, exclua-o usando ...

rm .system.conf.swp

Normalmente, recomendo começar a usar privilégios de superusuário usando ...

sudo su
Abdullah Khilji
fonte
0

Eu recebi esse erro quando usei git rmum arquivo em um diretório.

Eu estava em algo como ~ / gitRepo / code / newFeature

No newFeature, havia apenas um arquivo. Eu fiz um git rmnesse arquivo e tentei criar um novo arquivo myNewFile usando o vi.

O Ubuntu me mostrou ainda estar dentro do diretório newFeature, mas na verdade git rmhavia removido o diretório inteiro.

Eu tive que sair do vi, navegar em um diretório e recriar o diretório newFeature.

DatabaseShouter
fonte
-2

Você só precisa acessar o Gemfile com acesso root. Antes vi:

comando:

sudo su -

então:

vi ~/...
Ali G
fonte