web-dev-qa-db-fra.com

/etc/apt/sources.list "E212: Impossible d'ouvrir le fichier en écriture

J'essaie d'éditer sources.list à l'aide de l'éditeur vi, mais l'erreur suivante s'affiche lors de l'enregistrement du fichier:

/etc/apt/sources.list" E212: Can't open file for writing
140
codersofthedark
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 a un système d’aide intégré. Je viens de citer ce qu'il dit de :h E212.

Vous voudrez peut-être modifier le fichier en tant que superutilisateur en tant que Sudo vim FILE. Ou, si vous ne souhaitez pas quitter votre session vim existante (et que vous disposez maintenant des droits Sudo appropriés), vous pouvez émettre:

:w !Sudo tee % > /dev/null

Ce qui sauvera le fichier.

HTH

217
Zsolt Botykai

Cela m'arrive tout le temps, j'ouvre un fichier racine pour l'écriture:

Au lieu de perdre tous vos changements et de rouvrir avec Sudo. Voir cette démo pour savoir comment enregistrer ces modifications:

Une démo d'installation vous permettant de créer un fichier en lecture seule appartenant à la racine pour un utilisateur inférieur:

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

Commencez par ouvrir le fichier en tant qu'utilisateur normal:

vi temp.txt

Ensuite, apportez quelques modifications au fichier, il vous avertit qu'il est en lecture seule. Utilisez cette commande.

:w !chmod 777 %

Ensuite, écrivez le fichier:

:wq!

Les autorisations sont développées et le fichier est enregistré. Vous avez besoin du point d'exclamation, car vous modifiez un fichier racine en tant qu'utilisateur moins important.

Explication de ce que fait cette commande:

Le: w signifie écrire le fichier. Le bang signifie commencer à interpréter comme Shell. chmod signifie changer les autorisations, 777 signifie les autorisations complètes partout. Le pourcentage signifie le nom du fichier actuel. 

Il applique le changement. Et il demande si vous voulez recharger. Appuyez sur "O" pour "Ok". Ne rechargez pas ou vous perdrez vos modifications.

24
Eric Leschinski

Ou peut-être êtes-vous sur un fs monté en lecture seule

8
kellogs

Pour moi, la solution était simple. J'essayais de éditer/créer un fichier dans un dossier qui n'existait pas. Comme j'étais déjà dans le dossier, j'essayais de éditer/créer un fichier dans.

i.e. pwd folder/file

et tapait 

Sudo vim folder/file

et plutôt évidemment, il cherchait le dossier dans le dossier et n'a pas pu enregistrer.

6
Simon

pour moi a travaillé à changer le système de fichiers à partir de lecture seule avant d'exécuter vim:

bash-3.2# mount -o remount rw /
2

J'ai référencé à Zsolt au niveau 2, j'ai entré: 

:w !Sudo tee % > /dev/null

et puis dans ma situation, je ne peux toujours pas modifier le fichier, donc il a été demandé d'ajouter "!" donc je saisis 

:q! 

alors ça marche 

1
Oscar Zhou1989

Il est possible que le fichier auquel vous accédez ait déjà une copie (ou une version) de swap dans le même répertoire.

Par conséquent, vérifiez d’abord si un fichier caché existe ou non.

Par exemple, voir pour le type de fichiers suivant

.system.conf.swp

En utilisant la commande 

ls -a

Et ensuite, supprimez-le en utilisant ...

rm .system.conf.swp

D'habitude, je recommande de commencer à utiliser les privilèges de super utilisateur en utilisant ...

Sudo su
0
Abdullah Khilji

Essayez de vous connecter en tant que root, puis éditez le fichier. Ça marche pour moi

0
Kazman

J'ai eu cette erreur quand j'ai utilisé git rm sur un fichier dans un répertoire. 

J'étais dans quelque chose comme ~/gitRepo/code/newFeature

Dans newFeature, il n'y avait qu'un seul fichier. J'ai fait un git rm sur ce fichier puis j'ai essayé de créer un nouveau fichier myNewFile en utilisant vi. 

Ubuntu m'a montré que j'étais toujours dans le répertoire newFeature mais que git rm avait supprimé tout le répertoire.

J'ai dû quitter vi, naviguer dans un répertoire, puis recréer le répertoire newFeature. 

0
DatabaseShouter