/etc/apt/sources.list "E212: Datei kann nicht zum Schreiben geöffnet werden

178

Ich versuche, die Datei sources.list mit dem vi-Editor zu bearbeiten, erhalte jedoch beim Speichern der Datei den folgenden Fehler:

/etc/apt/sources.list" E212: Can't open file for writing
codersofthedark
quelle
1
Ich habe dies erhalten, als das Verzeichnis, in das ich die Datei schreiben wollte, das Maximum überschritten hat. Disc-Nutzung
Mehdi Nellen
1
Als Kommentar, der in einer der Antworten erwähnt wird, erhalten Sie diesen möglicherweise, wenn der Ordner, in dem sich die Datei befindet, gelöscht wurde oder überhaupt nicht vorhanden war. Suchen Sie je nach Situation nach Befehlen zum Ändern des Verzeichnisses oder zum Erstellen eines Verzeichnisses aus vi.
Kon Psych

Antworten:

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 hat ein eingebautes Hilfesystem. Ich habe nur zitiert, was es sagt:h E212 .

Möglicherweise möchten Sie die Datei als Superuser als bearbeiten sudo vim FILE. Oder wenn Sie Ihre vorhandene VIM-Sitzung nicht verlassen möchten (und jetzt über die richtigen Sudo-Rechte verfügen), können Sie Folgendes ausgeben:

:w !sudo tee % > /dev/null

Welches wird die Datei speichern.

HTH

Zsolt Botykai
quelle
54
Vielen Dank! In meinem Fall wurde versucht, eine nicht vorhandene Datei in einem nicht vorhandenen Verzeichnis zu bearbeiten. Es stellt sich heraus, dass Sie zwar nicht vorhandene Dateien "öffnen" und dann durch Speichern erstellen können, dies jedoch nicht mit nicht vorhandenen Verzeichnissen funktioniert. Und jetzt weiß ich über das integrierte Hilfesystem des Vim Bescheid! :)
Dom Delimar
Vielen Dank! In meinem Fall habe ich versucht, auf ein Netzwerklaufwerk zu schreiben, und meine Netzwerkberechtigungen waren für diese Bildschirmsitzung teilweise abgestürzt. Am Ende schrieb ich in eine temporäre Datei in / var und kopierte diese von einer anderen ssh-Instanz in mein Home-Verzeichnis.
Ross Aiken
@ Xinus siehe dies: stackoverflow.com/questions/2600783/…
Zsolt Botykai
: h E212 sagt: ".bashrc" E212: Datei zum Schreiben kann nicht geöffnet werden E433: Keine Tags-Datei E149: Entschuldigung, keine Hilfe für E212
hello_there_andy
27

Das passiert mir die ganze Zeit, ich öffne eine Root-Datei zum Schreiben:

Anstatt all deine Änderungen zu verlieren und mit sudo wieder zu öffnen. In dieser Demo erfahren Sie, wie Sie diese Änderungen speichern:

Einmalige Setup-Demo zum Erstellen einer schreibgeschützten Root-Datei für einen niedrigeren Benutzer:

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

Öffnen Sie zuerst die Datei als normaler Benutzer:

vi temp.txt

Nehmen Sie dann einige Änderungen an der Datei vor. Sie wird gewarnt, dass sie schreibgeschützt ist. Verwenden Sie diesen Befehl.

:w !chmod 777 %

Dann schreiben Sie die Datei:

:wq!

Die Berechtigungen werden erweitert und die Datei wird gespeichert. Sie benötigen das Ausrufezeichen, da Sie eine Stammdatei als geringerer Benutzer bearbeiten.

Erläuterung der Funktionsweise dieses Befehls:

Das: w bedeutet, die Datei zu schreiben. Der Knall bedeutet, als Muschel zu interpretieren. chmod bedeutet Änderungsberechtigungen, 777 bedeutet überall vollständige Berechtigungen. Der Prozentsatz bedeutet den aktuellen Dateinamen.

Es wendet die Änderung an. Und es fragt, ob Sie neu laden möchten. Drücken Sie "O" für "Ok". Laden Sie nicht neu, sonst verlieren Sie Ihre Änderungen.

Eric Leschinski
quelle
13

Für mich gab es eine recht einfache Lösung. Ich habe versucht , eine Datei in einem Ordner zu bearbeiten / erstellen , der nicht vorhanden war. Da ich mich bereits im Ordner befand, habe ich versucht, ihn zu bearbeiten / zu erstellen eine Datei in .

dh pwd folder/file

und tippte

sudo vim folder/file

und ziemlich offensichtlich suchte es nach dem Ordner im Ordner und konnte nicht speichern.

Simon
quelle
9

Oder vielleicht bist du auf einem schreibgeschützten fs

Kellogs
quelle
1
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klarstellung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag.
DmitryG
13
@DmitryG Hier wird keine Frage gestellt, nur eine Situation angegeben. Dies war der Grund, aus dem ich in die gleiche Situation geriet und ich denke, die Leute würden es nützlich finden, darüber Bescheid zu wissen.
Kellogs
5

Ich habe in Level 2 auf Zsolt verwiesen und Folgendes eingegeben:

:w !sudo tee % > /dev/null

und dann kann ich in meiner Situation die Datei immer noch nicht ändern, sodass das Hinzufügen von "!" veranlasst wurde. also gebe ich ein

:q! 

dann funktioniert es

Oscar Zhou1989
quelle
2
Beendet dies nicht einfach die Datei und speichert sie nicht?
Jsibs
3

Ich habe das Dateisystem von Read-Only geändert, bevor ich vim ausgeführt habe:

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

Versuchen Sie, eine Verbindung als root herzustellen und die Datei dann zu bearbeiten. Das funktioniert bei mir

Kazman
quelle
1

Wenn Sie die Datei in vim öffnen, verwenden Sie sudo. dh: sudo vim textfile. Dadurch wird das Problem behoben.

Bugz
quelle
Danke, es hat geholfen!
Parsecer
0

Möglicherweise befindet sich in der Datei, auf die Sie zugreifen, bereits eine Auslagerungskopie (oder Auslagerungsversion) im selben Verzeichnis

Überprüfen Sie daher zunächst, ob eine versteckte Datei vorhanden ist oder nicht.

Siehe beispielsweise den folgenden Dateityp

.system.conf.swp

Mit dem Befehl

ls -a

Und dann löschen Sie es mit ...

rm .system.conf.swp

Normalerweise empfehle ich, Superuser-Berechtigungen mit ...

sudo su
Abdullah Khilji
quelle
0

Ich habe diesen Fehler erhalten, als ich verwendet habe git rm eine Datei in einem Verzeichnis verwendet habe.

Ich war in so etwas wie ~ / gitRepo / code / newFeature

In newFeature gab es nur eine Datei. Ich habe eingit rm Datei erstellt und dann versucht, mit vi eine neue Datei myNewFile zu erstellen.

Ubuntu zeigte mir, dass ich mich immer noch im newFeature-Verzeichnis befand, aber tatsächlich git rmdas gesamte Verzeichnis entfernt hatte.

Ich musste vi verlassen, ein Verzeichnis nach oben navigieren und dann das Verzeichnis newFeature neu erstellen.

DatabaseShouter
quelle
0

Benutzer in root ändern

sodu su -

Navigieren Sie zu etc.

vi sudoers

Suchen Sie im Abschnitt Benutzerprivilegien nach Root-Benutzern. Sie werden es wie bekommen

root ALL=(ALL:ALL) ALL 

Machen Sie den gleichen Eintrag für Ihren Benutzernamen. Wenn Ihr Benutzername "myuser" ist, fügen Sie hinzu

myuser ALL=(ALL:ALL) ALL

es wird so aussehen

root ALL=(ALL:ALL) ALL 

myuser ALL=(ALL:ALL) ALL 

Speichern Sie es. Ändern Sie den Root-Benutzer in Ihren Benutzer. Versuchen Sie jetzt dasselbe, wo Sie das Sudoers-Problem hatten

Somspeaks
quelle
-2

Sie müssen nur mit Root-Zugriff auf Gemfile zugreifen. Vorher vi:

Befehl:

sudo su -

dann:

vi ~/...
Ali G.
quelle