/etc/apt/sources.list "E212: Impossibile aprire il file per la scrittura


178

Sto cercando di modificare sources.list usando l'editor vi ma sto ottenendo il seguente errore durante il salvataggio del file:

/etc/apt/sources.list" E212: Can't open file for writing

1
Ho ottenuto questo quando la directory che stavo cercando di scrivere il file ha superato il limite massimo. utilizzo del disco
Mehdi Nellen

1
Come commento menzionato in una delle risposte, potresti ottenere questo se la cartella in cui risiede il file è stata eliminata o non esisteva in primo luogo. Cercare i comandi per cambiare directory o creare una directory da vi, a seconda della situazione.
kon psych,

Risposte:


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.

Vim ha un sistema di aiuto integrato. Ho appena citato ciò che dice :h E212.

Potresti voler modificare il file come superutente come sudo vim FILE. Oppure, se non vuoi lasciare la tua sessione vim esistente (e ora hai i diritti sudo corretti), puoi emettere:

:w !sudo tee % > /dev/null

Che salverà il file.

HTH


54
Grazie! Nel mio caso stava provando a modificare un file inesistente in una directory inesistente. Si scopre, mentre è possibile "aprire" un file inesistente e quindi crearlo salvandolo, questo non funziona con la directory inesistente. E ora conosco il sistema di aiuto integrato di Vim! :)
Dom Delimar,

Grazie! Nel mio caso, stavo cercando di scrivere su un'unità di rete e le mie autorizzazioni di rete si erano parzialmente bloccate per quella sessione dello schermo. Ho finito per scrivere su un file temporaneo in / var e copiarlo da un'altra istanza ssh nella mia directory home.
Ross Aiken,

Rollback di una modifica non valida .
class stacker


: h E212 dice: ".bashrc" E212: Impossibile aprire il file per la scrittura E433: Nessun file tag E149: Spiacente, nessun aiuto per E212
hello_there_andy

26

Mi succede sempre, apro un file root per scrivere:

Invece di perdere tutte le modifiche e riaprire con sudo. Guarda questa demo su come salvare queste modifiche:

Demo di installazione una volta per creare un file di sola lettura di proprietà root per un utente inferiore:

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

Per prima cosa apri il file come utente normale:

vi temp.txt

Quindi apporta alcune modifiche al file, ti avverte che è di sola lettura. Usa questo comando

:w !chmod 777 %

Quindi scrivi il file:

:wq!

Le autorizzazioni vengono espanse e il file viene salvato. È necessario il punto esclamativo perché si sta modificando un file root come utente minore.

Spiegazione di cosa fa quel comando:

Il: w significa scrivere il file. Il botto significa iniziare a interpretare come shell. chmod significa cambiare le autorizzazioni, 777 significa autorizzazioni complete ovunque. La percentuale indica il nome del file corrente.

Applica la modifica. E chiede se si desidera ricaricare. Premere "O" per "Ok". Non ricaricare o perderai le modifiche.


13

Per me c'era una soluzione abbastanza semplice. Stavo cercando di modificare / creare un file in una cartella che non esisteva. Dato che ero già nella cartella, stavo cercando di modificare / creare un file.

vale a dire pwd folder/file

e stava scrivendo

sudo vim folder/file

e piuttosto ovviamente stava cercando la cartella nella cartella e non riusciva a salvare.


9

O forse sei su un fs di sola lettura


1
Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post.
DmitryG

13
@DmitryG Non ci sono domande qui, ma solo una situazione dichiarata. Questo è stato il motivo per cui mi sono trovato nella stessa situazione e penso che la gente lo troverebbe utile conoscerlo.
kellogs

5

Ho fatto riferimento a Zsolt nel livello 2, ho inserito:

:w !sudo tee % > /dev/null

e poi nella mia situazione, non riesco ancora a modificare il file, quindi mi ha chiesto di aggiungere "!". così ho inserito

:q! 

allora funziona


2
questo non chiude semplicemente il file e non lo salva?
jsibs,

3

per me ha funzionato cambiando il filesystem da Sola lettura prima di eseguire vim:

bash-3.2# mount -o remount rw /

1

Prova a connetterti come root, quindi modifica il file. Questo funziona per me


1

Quando apri il file in vim, usa sudo. cioè: sudo vim textfile. questo risolverà il problema.


Grazie ha aiutato!
parsecer

1

cambia utente in root

sodu su -

vai a ecc

vi sudoers

cerca l'utente root nella sezione privilegi utente. lo otterrai come

root ALL=(ALL:ALL) ALL 

inserisci la stessa voce per il tuo nome utente. se il tuo nome utente è "mioutente", aggiungi

myuser ALL=(ALL:ALL) ALL

sembrerà

root ALL=(ALL:ALL) ALL 

myuser ALL=(ALL:ALL) ALL 

salvarla. cambia l'utente root nel tuo utente. ora prova lo stesso dove stavi riscontrando il problema sudoers


0

Potrebbe essere possibile che il file a cui si accede abbia una copia di scambio (o versione di scambio) già presente nella stessa directory

Quindi prima controlla se esiste o meno un file nascosto.

Ad esempio, vedere per il seguente tipo di file

.system.conf.swp

Usando il comando

ls -a

E poi, cancellalo usando ...

rm .system.conf.swp

Di solito, consiglio di iniziare a usare i privilegi di superutente usando ...

sudo su

0

Ho ricevuto questo errore quando l'ho usato git rmsu un file in una directory.

Ero in qualcosa come ~ / gitRepo / code / newFeature

In newFeature c'era solo un file. Ho fatto un git rmfile su quel file, quindi ho provato a creare un nuovo file myNewFile usando vi.

Ubuntu mi ha mostrato di essere ancora nella directory newFeature ma in realtà git rmaveva rimosso l'intera directory.

Ho dovuto uscire da vi, navigare su una directory e quindi ricreare la nuova directory Funzionalità.


-2

Hai solo bisogno di accedere a Gemfile con accesso root. Primavi :

comando:

sudo su -

poi:

vi ~/...
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.