Enregistrer avec « vim » sans droits administrateur

Après avoir passé un certain temps à modifier, avec « vi » ou « vim », le fichier de configuration du dernier service installé sur votre serveur, il est particulièrement désagréable de constater que le dit fichier est ouvert en tant qu’utilisateur lambda et que vous ne disposez pas des droits nécessaires à son enregistrement…

Vous obtenez au moment de sortir de votre fichier, par la séquence « 😡 » par exemple quelque chose du genre :

E45: L'option 'readonly' est activée (ajoutez ! pour passer outre)
Appuyez sur ENTRÉE ou tapez une commande pour continuer

… et en ajoutant un point d’exclamation :

"/etc/auto.sshfs"
"/etc/auto.sshfs" E212: Impossible d'ouvrir le fichier pour y écrire
Appuyez sur ENTRÉE ou tapez une commande pour continuer

pour les systèmes francisés et

"/etc/auto.master"
"/etc/auto.master" E212: Can't open file for writing
Press ENTER or type command to continue

pour les autres…

Afin de ne pas avoir à effectuer une gymnastique du genre : j’enregistre le fichier sous mon compte et « root » viens le rechercher pour le mettre à sa place ; vous pouvez utiliser la commande « tee » qui copie l’entrée standard sur la sortie standard, et dans tous les fichiers qui lui sont fournis en argument en plus de « sudo » pour obtenir une commande du type :

:w !sudo tee %

qui envois le contenu du fichier (« :w ») à la commande « tee % » invoquée avec les droits administrateurs (« sudo »)…
« % » Est le chemin complet vers le fichier en cour d’édition.

:w !sudo tee %
[sudo] password for fhh:
backup	-fstype=fuse :sshfs\#sbackup\:
...
 
Appuyez sur ENTRÉE ou tapez une commande pour continuer

vi / vim Vous signale ensuite que le fichier à été modifié et vous propose de le recharger. C’est tout à fait normale car le fichier à en réalité été modifié par la commande « tee » et non par vi(m) :

W12: Alerte: Le fichier "/etc/auto.sshfs" a été modifié, ainsi que le tampon dans Vim
Consultez ":help W12" pour plus d'information.
[O]k, (C)harger le fichier:

En appuyant sur « c », votre fichier modifié est rechargé dans votre éditeur de texte…

Pour ceux à qui ce genre de mésaventure arrive (assez) régulièrement, vous pouvez définir une commande type « Saveasroot » ou « Wroot » dans votre fichier « ~/.vimrc » :

fhh@mafalda ~ $ cat ~/.vimrc
...
" Nouvelle commande :
command! Wroot :w !sudo tee %
fhh@mafalda ~ $

Notez au passage que dans vi(m), une commande utilisateur doit commencer par une majuscule.

L’enregistrement des fichiers est alors simplifiée par l’appel de la commande « :Wroot » :

:Wroot
[sudo] password for fhh:
backup	-fstype=fuse :sshfs\#sbackup\:
...
 
Appuyez sur ENTRÉE ou tapez une commande pour continuer

Reportez vous au « Mémo sudo » pour la configuration de sudo.

Références

Mémo sudo : https://www.admin-linux.fr/?p=1025
Save A File In Vim / Vi Without Root Permission : http://www.cyberciti.biz/faq/vim-vi-text-editor-save-file-without-root-permission/
Man de tee : http://ss64.com/bash/tee.html
Le site officiel de vim : http://www.vim.org/

2 réflexions au sujet de « Enregistrer avec « vim » sans droits administrateur »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *