GNU/Linux >> Tutoriales Linux >  >> Linux

Usar vim para forzar la edición de un archivo cuando lo abrió sin permisos

Parece que hay algunos enfoques diferentes, dependiendo de su problema actual:

  1. Solo lectura por VI. Si su archivo tiene :set readonly tu puedes
    • Utilice :w! forzar la escritura, o
    • Problema :set noreadonly y luego simplemente use :w normal
  2. Un permiso problema (sudo ):no puedes escribir pero tienes derechos de sudo.
    • Problema::w !sudo tee % . Esto escribirá el búfer en tee , un comando que recibe pipe información y puede escribir en archivos. Y como tee se ejecuta con poderes sudo, tee puede modificar el archivo.
  3. Un permiso problema (no sudo ):no tiene derechos para escribir el archivo y no tiene acceso de administrador.
    • Usar :w! ~/tempfile.ext para escribir sus cambios en un archivo temporal y luego tomar medidas para mover el archivo temporal al directorio (enviar el archivo temporal al propietario/administrador del directorio).

Puedes leer más sobre esto aquí:

  1. Desde StackOverflow
  2. De Geekyboy
  3. Del agárico de datos

Acceso directo

Como suele ser el caso, problema #2 (permiso problema, con sudo ), puedes a tu /etc/vim/vimrc (o ~/.vimrc ) el siguiente atajo:

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

Entonces puedes escribir :w!! para guardar con sudo potestades. No lo explicaré aquí, pero las referencias anteriores cubren muchos atajos.


Se me ocurren dos formas de hacerlo.

La primera forma supone que eres el propietario del archivo, pero el archivo es de SÓLO LECTURA.

Simplemente use el sufijo de signo de exclamación de vi en el comando de escritura (:w!) para forzar la sobreescritura de su propio archivo READONLY. Por supuesto, esto supone que tiene permiso para escribir y ejecutar en la carpeta actual.

:w!

hará que vi sobrescriba el archivo READONLY original.

La segunda forma supone que otra persona es propietaria del archivo y que le gustaría guardar los cambios en ese archivo.

Una forma de lograr esto es guardar los cambios realizados en el archivo original como un script de edición desde dentro de vi. Este script de ed se puede aplicar al archivo original (u otros archivos similares) en un momento posterior fuera de vi con el editor de línea de ed.

Una forma de guardar la sesión de edición actual como un script editado es pasar el nombre del archivo original y el búfer vi editado como entrada estándar a la utilidad diff con el interruptor de línea de comando --ed, es decir, mostrar las diferencias como un script editado.

Entonces, suponiendo un búfer vi editado, realice lo siguiente

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

Esto reemplaza todas las líneas en el búfer actual (.,$!) con el script ed generado por diff (diff --ed [archivo_original] -) necesario para convertir el archivo original en el contenido del búfer actual. Luego queremos guardar este script de edición en un lugar seguro y aplicar el script a una versión del archivo original en el que podamos escribir. Por lo tanto, guarde el script en una ubicación en la que se pueda escribir, por ejemplo, su carpeta de inicio de sesión:

:w ~/my_ed_script

Ahora salga de vi y use este script de edición para obtener el archivo editado que no se pudo guardar en primer lugar. A continuación se explica cómo lograrlo desde la línea de comandos de bash, '$':

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

Lo que hace esta secuencia de comandos en palabras es concatenar el script que generamos con diff y repite el comando de escritura ed, 'w', a la entrada estándar de ed. Luego, Ed aplica esta secuencia de comandos a la copia grabable del archivo original y vuelve a escribir esos cambios de búfer modificados en el archivo.

Así que esa es una forma de guardar el trabajo realizado en vi en un archivo que originalmente había sido propiedad de otra persona usando vi, diff y ed.


Linux
  1. Cómo editar varios archivos y cambiar entre ellos en VIM usando búferes

  2. ubicación del archivo temporal cuando se usa tmpfile() en C

  3. Cómo abrir un archivo en vim usando pipe

  4. ¿Adónde van los metadatos cuando guarda un archivo?

  5. ¿Cómo puedo editar varios archivos en VIM?

Permisos de archivos de Linux:todo lo que necesita saber

Cómo editar varios archivos usando Vim Editor

Consejos de Vim:edite archivos remotos con Vim en Linux

Cómo editar un archivo sin cambiar sus marcas de tiempo en Linux

Cómo cambiar los permisos de archivo usando FileZilla

Cómo editar archivos binarios en sistemas Unix