Obtenir les autorisations root sur un fichier à l'intérieur de vi ?

Souvent, lors de l'édition de fichiers de configuration, j'en ouvre un avec vi, puis lorsque je vais le sauvegarder, je me rends compte que je n'ai pas tapé

sudo vi filename

Existe-t-il un moyen de donner à vi sudo des privilèges pour enregistrer le fichier ? Il me semble me souvenir d'avoir vu quelque chose à ce sujet en cherchant des trucs sur vi il y a quelque temps, mais maintenant je ne le trouve pas.

请先 登录 后评论

6 réponses

Chris Jester-Young

Les conseils de Ryan sont généralement bons, cependant, si vous suivez l'étape 3, ne déplacez pas le fichier temporaire ; il aura le mauvais propriétaire et les mauvaises autorisations. Au lieu de cela, sudoedit le fichier correct et lisez le contenu (en utilisant :r ou similaire) du fichier temporaire.

Si vous suivez l'étape 2, utilisez :w! pour forcer l'écriture du fichier.

请先 登录 后评论
Mark Harrison

En général, vous ne pouvez pas modifier l'ID utilisateur effectif du processus vi, mais vous pouvez le faire :

:w !sudo tee myfile
请先 登录 后评论
num1

Un hack rapide que vous pouvez envisager est de faire un chmod sur le fichier que vous éditez, enregistrez avec vim, puis chmod revenez à ce que le fichier était à l'origine.

ls -l test.file (to see the permissions of the file)
chmod 777 test.file
[This is where you save in vim]
chmod xxx test.file (restore the permissions you found in the first step)

Bien sûr, je ne recommande pas cette approche dans un système où vous vous souciez de la sécurité, car pendant quelques secondes, n'importe qui peut lire/modifier le fichier sans que vous vous en rendiez compte.

请先 登录 后评论
Community

% est remplacé par le nom de fichier actuel, vous pouvez donc utiliser :

:w !sudo tee %

(vim détectera que le fichier a été modifié et vous demandera si vous voulez qu'il soit rechargé.)

Comme raccourci, vous pouvez définir votre propre commande. Mettez ce qui suit dans votre .vimrc :

command W w !sudo tee % >/dev/null

Avec ce qui précède, vous pouvez taper :W<Enter> pour enregistrer le fichier. Depuis que j'ai écrit ceci, j'ai trouvé une façon plus agréable (à mon avis) de le faire :

cmap w!! w !sudo tee >/dev/null %

De cette façon, vous pouvez taper :w!! et il sera étendu à la ligne de commande complète, en laissant le curseur à la fin, afin que vous puissiez remplacer le % par un fichier votre propre nom, si vous le souhaitez.

请先 登录 后评论
pisswillis

J'ai ceci dans mon ~/.bashrc :

alias svim='sudo vim'

Maintenant, chaque fois que j'ai besoin de modifier un fichier de configuration, je l'ouvre simplement avec svim.

请先 登录 后评论
ryfm

utilisez gksudo au lieu de sudo pour GVim, c'est-à-dire

cmap w!! w !gksudo tee >/dev/null %
请先 登录 后评论