GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de vim pour forcer la modification d'un fichier lorsque vous l'ouvrez sans autorisation

Il semble y avoir différentes approches, selon votre problème actuel :

  1. Lecture seule par vi. Si votre fichier a :set readonly vous pouvez
    • Utilisez :w! pour forcer l'écriture, ou
    • Problème :set noreadonly puis utilisez simplement le :w normal
  2. Une autorisation problème (sudo ):vous ne pouvez pas écrire mais vous avez les droits sudo.
    • Problème ::w !sudo tee % . Cela écrira le tampon dans tee , une commande qui reçoit pipe informations et peut écrire dans des fichiers. Et comme tee est exécuté avec les pouvoirs sudo, tee peut modifier le fichier.
  3. Une autorisation problème (pas de sudo ) :vous n'avez pas le droit d'écrire le fichier et vous n'avez pas d'accès administrateur.
    • Utilisez :w! ~/tempfile.ext pour écrire vos modifications dans un fichier temporaire, puis prendre des mesures pour déplacer le fichier temporaire dans le répertoire (envoyer le fichier temporaire au propriétaire/administrateur du répertoire).

Vous pouvez en savoir plus ici :

  1. Depuis StackOverflow
  2. De Geekyboy
  3. À partir d'agaric de données

Raccourci

Comme c'est souvent le cas problème #2 (permission problème, avec sudo ), vous pouvez à votre /etc/vim/vimrc (ou ~/.vimrc ) le raccourci suivant :

  • cnoremap w!! execute 'silent! write !sudo tee % >/dev/null' <bar> edit!

Ensuite, vous pouvez simplement taper :w!! pour enregistrer avec sudo pouvoirs. Je ne vais pas l'expliquer ici mais les références ci-dessus couvrent de nombreux raccourcis.


Je peux penser à deux façons de procéder.

La première méthode suppose que vous possédez le fichier, mais le fichier est en LECTURE SEULE.

Utilisez simplement le suffixe du point d'exclamation de vi dans la commande d'écriture (:w!) pour forcer l'écrasement de votre propre fichier READONLY. Cela suppose bien sûr que vous avez la permission d'écrire et d'exécuter dans le dossier actuel.

:w!

forcera vi à écraser le fichier READONLY d'origine.

La deuxième méthode suppose que quelqu'un d'autre possède le fichier et que vous souhaitez enregistrer vos modifications dans ce fichier.

Une façon d'y parvenir est d'enregistrer les modifications apportées au fichier d'origine sous forme de script ed à partir de vi. Ce script ed peut être appliqué ultérieurement au fichier d'origine (ou à d'autres fichiers similaires) en dehors de vi avec l'éditeur de ligne ed.

Un moyen de sauvegarder la session d'édition en cours en tant que script ed consiste à transmettre le nom du fichier d'origine et le tampon vi modifié comme entrée standard à l'utilitaire diff avec le commutateur de ligne de commande --ed, c'est-à-dire afficher les différences sous forme de script ed.

Donc, en supposant un tampon vi modifié, effectuez les opérations suivantes

:.,$!diff --ed [original_file] -

Ceci remplace toutes les lignes du tampon courant (.,$!) par le script ed généré par diff (diff --ed [fichier_original] -) nécessaire pour convertir le fichier d'origine dans le contenu du tampon courant. Nous souhaitons ensuite enregistrer ce script ed dans un endroit sûr et appliquer le script à une version du fichier d'origine dans laquelle nous pouvons écrire. Enregistrez donc le script dans un emplacement accessible en écriture, par exemple, votre dossier de connexion :

:w ~/my_ed_script

Maintenant, quittez vi et utilisez ce script ed pour obtenir le fichier modifié qui n'a pas pu être enregistré en premier lieu. Voici comment y parvenir à partir de l'invite de ligne de commande bash, '$' :

$ (cat ~/my_ed_script && echo 'w') | ed - writable_copy_of_original_file

Ce que cette séquence de commandes fait dans les mots est de caténer le script que nous avons généré avec diff et fait écho à la commande d'écriture ed, 'w', à l'entrée standard de ed. Ed applique ensuite ce script à la copie inscriptible du fichier d'origine et réécrit ces changements de tampon modifiés dans le fichier.

C'est donc un moyen d'enregistrer le travail effectué dans vi dans un fichier qui appartenait à l'origine à quelqu'un d'autre en utilisant vi, diff et ed.


Linux
  1. Comment utiliser le fichier Vimrc lors de la modification de la commande sudo de largeur de fichier ?

  2. emplacement du fichier temporaire lors de l'utilisation de tmpfile() en C

  3. Où vont les métadonnées lorsque vous enregistrez un fichier ?

  4. Comment éditer un fichier Excel (xlsx) à l'aide du shell Linux

  5. Forcer dig à résoudre sans utiliser le cache

Autorisations de fichiers Linux :tout ce que vous devez savoir

Comment éditer plusieurs fichiers à l'aide de l'éditeur Vim

Conseils Vim - Modifier des fichiers distants avec Vim sous Linux

Comment éditer un fichier sans changer ses horodatages sous Linux

Comment modifier les autorisations de fichiers à l'aide de FileZilla

Comment éditer un fichier binaire sur les systèmes Unix