J'ouvre souvent un fichier dans vim, fais quelques changements et quand il est temps de sauvegarder le fichier est en lecture seule .. (appartenant à un autre utilisateur). Je cherche des conseils sur la façon de rouvrir le fichier en tant que root et de conserver mes modifications sans d'abord l'enregistrer dans un fichier temporaire pour le copier ou le rééditer en tant que root.
28
S'il vous plaît, ne me votez pas pour cela. Je ne recommande pas d'implémenter cette réponse, mais c'est la réponse que le rkthkr demande.
La façon de le faire est avec
:!sudo vim %
Comme je l'ai mentionné à ipozgaj, un% en tant qu'argument (même un sous-argument) est remplacé par le chemin d'accès au tampon actuel. (Vous pouvez être invité à entrer votre mot de passe.) Vous vous retrouvez avec un nouveau processus vim, détenu par root, qui est un processus enfant du processus vim d'origine. Ça a l'air maladroit, non? Voici à quoi ça ressemble en ps:
Si vous disposez d'autorisations d'écriture dans le répertoire contenant le fichier et que vous y avez apporté des modifications, vous pouvez être averti qu'un fichier d'échange se ferme. Le choix de [R] ecover, reflétera la plupart * des modifications apportées par le processus parent vim. (* Je pense que la mise à jour du swap est peut-être chronométrée ou a un seuil delta. J'ai déjà consacré trop de temps à cela et je ne me soucie pas de le rechercher.) Lorsque vous quittez Vim, ne vous inquiétez pas lorsque vous êtes toujours dans vim ... vous avez ouvert un 2ème processus vim. Rappelles toi?
Maintenant, avec tout cela dit ... Je ne ferais presque jamais ça. Peut-être, si je n'ai pas eu assez ou beaucoup trop de café, et j'ai réalisé que j'allais avoir besoin d'éditer plusieurs fichiers supplémentaires en tant que root ... Je pourrais essayer cela. En 14 ans d'administration de systèmes, je ne l'ai jamais fait. Mais, jusqu'à ce que vous exprimiez votre mécontentement à l'égard de ma solution préférée (qui est exactement celle proposée par dbr), je n'y avais jamais pensé.
la source
:w !sudo tee %
donc je pense que c'est une bonne réponse.Je l'enregistre généralement dans un fichier temporaire dans $ HOME / tmp / apache.conf (par exemple) puis
c'est un travail supplémentaire pour fusionner les changements, mais cela a payé. Je trouve que c'est un bon moyen entre la commodité et les mesures contre les changements indésirables
Avant cela, je pensais à des listes de contrôle d'accès ou à l'attribution de groupes correspondants aux fichiers, mais cela ne fonctionnait pas trop souvent, j'oubliais de changer les propriétaires ou je changeais des fichiers là où je ne voulais pas le faire.
Cela ne vaut que pour les fichiers qui ne sont pas gérés jusqu'à présent. La solution globale que nous utilisons est une marionnette avec un référentiel git où les gens modifient localement les fichiers et testent les modifications sur les serveurs appropriés, si la configuration fonctionne comme souhaité, les modifications sont repoussées vers le référentiel central où notre moteur de configuration extrait les modifications à intervalles réguliers.
la source
Ce que je fais normalement - pas nécessairement le plus rapide, mais certainement sûr - est de faire quelque chose comme ça (en utilisant nsswitch.conf comme exemple):
Quittez vim, puis faites:
Cela supprimera toutes les lignes et lira votre version modifiée et mise à jour à modifier à sa place. L'utilisation de votre répertoire personnel signifie que vous n'avez pas à vous demander si vous y avez accès ou non - et c'est plus privé que / tmp. Notez bien qu'il s'agit d'un remplacement de fichier entier: si vous ne voulez pas ajouter toutes les modifications, vous devrez choisir.
Malgré les maux de tête impliqués dans l'une de ces réponses, il n'y a aucune raison de perdre vos modifications.
la source