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

178

J'essaie de modifier sources.list à l'aide de l'éditeur vi mais j'obtiens l'erreur suivante lors de l'enregistrement du fichier:

/etc/apt/sources.list" E212: Can't open file for writing
codeurs du noir
la source
1
J'ai eu cela lorsque le répertoire dans lequel j'essayais d'écrire le fichier a dépassé son maximum. utilisation du disque
Mehdi Nellen
1
En tant que commentaire mentionné dans l'une des réponses, vous pouvez l'obtenir si le dossier dans lequel réside le fichier a été supprimé ou n'existait pas en premier lieu. Recherchez les commandes pour changer de répertoire ou créer un répertoire à partir de vi, selon la situation.
kon psych

Réponses:

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 a un système d'aide intégré. Je viens de citer ce qu'il dit :h E212.

Vous souhaiterez peut-être modifier le fichier en tant que superutilisateur en tant que sudo vim FILE. Ou si vous ne voulez pas quitter votre session vim existante (et que vous avez maintenant les droits sudo appropriés), vous pouvez émettre:

:w !sudo tee % > /dev/null

Ce qui enregistrera le fichier.

HTH

Zsolt Botykai
la source
54
Merci! Dans mon cas, il essayait de modifier un fichier non existant dans un répertoire non existant. Il s'avère que bien que vous puissiez "ouvrir" un fichier non existant et le créer ensuite en l'enregistrant, cela ne fonctionne pas avec un répertoire non existant. Et maintenant, je connais le système d'aide intégré de Vim! :)
Dom Delimar
Merci! Dans mon cas, j'essayais d'écrire sur un lecteur réseau et mes autorisations réseau s'étaient partiellement écrasées pour cette session d'écran. J'ai fini par écrire dans un fichier temporaire dans / var et le copier d'une autre instance ssh vers mon répertoire personnel.
Ross Aiken
Annulé une modification non valide .
class stacker
@Xinus voir ceci: stackoverflow.com/questions/2600783/…
Zsolt Botykai
: h E212 dit: ".bashrc" E212: Impossible d'ouvrir le fichier pour l'écriture E433: Pas de fichier de balises E149: Désolé, pas d'aide pour E212
hello_there_andy
26

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

Au lieu de perdre toutes vos modifications et de rouvrir avec sudo. Regardez cette démo sur la façon d'enregistrer ces modifications:

Démo d'installation unique pour 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

Ouvrez d'abord 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 %

Puis écrivez le fichier:

:wq!

Les autorisations sont étendues et le fichier est enregistré. Vous avez besoin du point d'exclamation car vous modifiez un fichier racine en tant qu'utilisateur moindre.

Explication de ce que fait cette commande:

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

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

Eric Leschinski
la source
13

Pour moi, il y avait une solution assez simple. J'essayais de modifier / créer un fichier dans un dossier qui n'existait pas. Comme j'étais déjà dans le dossier, j'essayais de modifier / créer un fichier dans.

c'est à dire pwd folder/file

et tapait

sudo vim folder/file

et plutôt évidemment il recherchait le dossier dans le dossier et ne réussissait pas à enregistrer.

Simon
la source
9

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

kellogs
la source
1
Cela ne répond pas à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous sa publication.
DmitryG
13
@DmitryG Aucune question n'est posée ici, juste une situation étant énoncée. C'est la raison pour laquelle je me suis retrouvé dans la même situation et je pense que les gens trouveraient utile de le savoir.
kellogs
5

J'ai fait référence à Zsolt au niveau 2, je saisis:

:w !sudo tee % > /dev/null

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

:q! 

alors ça marche

Oscar Zhou1989
la source
2
cela ne fait pas que quitter le fichier et ne pas le sauvegarder?
jsibs
3

pour moi, j'ai travaillé en changeant le système de fichiers de lecture seule avant d'exécuter vim:

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

Essayez de vous connecter en tant que root, puis modifiez le fichier. Cela fonctionne pour moi

Kazman
la source
1

Lorsque vous ouvrez le fichier dans vim, utilisez sudo. ie: fichier texte sudo vim. cela résoudra le problème.

Bugz
la source
Merci d'avoir aidé!
parsecer le
1

changer d'utilisateur en root

sodu su -

naviguer vers etc

vi sudoers

recherchez l'utilisateur root dans la section des privilèges utilisateur. vous l'obtiendrez comme

root ALL=(ALL:ALL) ALL 

faites la même entrée pour votre nom d'utilisateur. si votre nom d'utilisateur est 'myuser', ajoutez

myuser ALL=(ALL:ALL) ALL

ça ressemblera à

root ALL=(ALL:ALL) ALL 

myuser ALL=(ALL:ALL) ALL 

sauvegarde le. remplacez l'utilisateur root par votre utilisateur. essayez maintenant la même chose là où vous aviez le problème sudoers

somspeaks
la source
0

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

Par conséquent, voyez d'abord si un fichier caché existe ou non.

Par exemple, consultez le type de fichiers suivant

.system.conf.swp

En utilisant la commande

ls -a

Et puis, supprimez-le en utilisant ...

rm .system.conf.swp

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

sudo su
Abdullah Khilji
la source
0

J'ai eu cette erreur lorsque j'ai utilisé git rmsur 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 rmsur ce fichier puis essayé de créer un nouveau fichier myNewFile en utilisant vi.

Ubuntu m'a montré comme étant toujours dans le répertoire newFeature mais git rmavait en fait supprimé tout le répertoire.

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

DatabaseShouter
la source
-2

Il vous suffit d'accéder à Gemfile avec un accès root. Avant vi:

commander:

sudo su -

puis:

vi ~/...
Ali G
la source