GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di vim per forzare la modifica di un file quando è stato aperto senza autorizzazioni

Sembra che ci siano alcuni approcci diversi, a seconda del tuo problema attuale:

  1. Sola lettura di vi. Se il tuo file contiene :set readonly puoi
    • Usa :w! per forzare la scrittura, o
    • Numero :set noreadonly e poi usa il normale :w
  2. Un permesso problema (sudo ):non puoi scrivere ma hai i diritti sudo.
    • Problema::w !sudo tee % . Questo scriverà il buffer in tee , un comando che riceve pipe informazioni e può scrivere su file. E poiché tee viene eseguito con sudo powers, tee può modificare il file.
  3. Un permesso problema (no sudo ):non hai i diritti per scrivere il file e non hai accesso come amministratore.
    • Usa :w! ~/tempfile.ext per scrivere le modifiche in un file temporaneo e quindi adottare misure per spostare il file temporaneo nella directory (inviare il file temporaneo al proprietario/amministratore della directory).

Puoi leggere di più qui:

  1. Da StackOverflow
  2. Da Geekyboy
  3. Da Data Agarico

Scorciatoia

Come spesso accade, il problema n. 2 (permesso problema, con sudo ), puoi al tuo /etc/vim/vimrc (o ~/.vimrc ) la seguente scorciatoia:

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

Quindi puoi semplicemente digitare :w!! per salvare con sudo poteri. Non lo spiegherò qui, ma i riferimenti sopra coprono molte scorciatoie.


Mi vengono in mente due modi per farlo.

Il primo modo presuppone che tu sia il proprietario del file, ma il file è READONLY.

Basta usare il suffisso del punto esclamativo di vi al comando di scrittura (:w!) per forzare la sovrascrittura del proprio file READONLY. Questo ovviamente presuppone che tu abbia il permesso di scrivere ed eseguire nella cartella corrente.

:w!

farà in modo che vi sovrascriva il file READONLY originale.

Il secondo modo presuppone che qualcun altro sia il proprietario del file e tu desideri salvare le modifiche a quel file.

Un modo per farlo è salvare le modifiche apportate al file originale come uno script ed dall'interno di vi. Questo script ed può essere applicato al file originale (o ad altri file simili) in un secondo momento al di fuori di vi con l'editor della linea ed.

Un modo per salvare la sessione di modifica corrente come script ed è passare il nome del file originale e il buffer vi modificato come input standard all'utilità diff con l'opzione della riga di comando --ed, ovvero visualizzare le differenze come script ed.

Quindi, assumendo un buffer vi modificato, esegui quanto segue

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

Questo sostituisce tutte le righe nel buffer corrente (.,$!) con lo script ed generato da diff (diff --ed [file_originale] -) necessario per convertire il file originale nel contenuto del buffer corrente. Vogliamo quindi salvare questo script ed in un posto sicuro e applicare lo script a una versione del file originale su cui possiamo scrivere. Quindi, salva lo script in una posizione scrivibile, ad esempio la tua cartella di accesso:

:w ~/my_ed_script

Ora esci da vi e usa questo script ed per ottenere il file modificato che non è stato possibile salvare in primo luogo. Ecco come farlo dal prompt della riga di comando di bash, '$':

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

Ciò che questa sequenza di comandi fa in parole è concatenare lo script che abbiamo generato con diff e fa eco al comando ed write, 'w', all'input standard di ed. Ed quindi applica questo script alla copia scrivibile del file originale e riscrive le modifiche apportate al buffer nel file.

Quindi questo è un modo per salvare il lavoro eseguito in vi in ​​un file che era originariamente di proprietà di qualcun altro usando vi, diff ed ed.


Linux
  1. Linux:cosa succede quando esegui la sincronizzazione senza un percorso di destinazione??

  2. Il registro di accesso di Apache imposta automaticamente le autorizzazioni

  3. Come aprire un file in vim usando pipe

  4. Come modificare il file Excel (xlsx) utilizzando la shell Linux

  5. Forza dig a risolversi senza usare la cache

Permessi dei file Linux:tutto ciò che devi sapere

Come modificare più file usando Vim Editor

Suggerimenti Vim:modifica file remoti con Vim su Linux

Come modificare un file senza modificarne i timestamp in Linux

Come modificare le autorizzazioni dei file utilizzando FileZilla

Come modificare file binari su sistemi Unix