A menudo abro un archivo en vim, hago algunos cambios y cuando llega el momento de guardar el archivo es de solo lectura ... (propiedad de otro usuario). Estoy buscando consejos sobre cómo podría volver a abrir el archivo como root y mantener mis cambios sin guardarlo primero en un archivo temporal para copiarlo o volver a editarlo como root.
28
Por favor no me voten por esto. No recomiendo implementar esta respuesta, pero es la respuesta que pide el rkthkr.
La forma de hacerlo es con
:!sudo vim %
Como mencioné a ipozgaj, un% como argumento (incluso un subargumento) se reemplaza con la ruta al búfer actual. (Es posible que se le solicite su contraseña). Termina con un nuevo proceso vim, propiedad de root, que es un proceso secundario del proceso vim original. Suena tonto, ¿verdad? Así es como se ve en ps:
Si tiene permisos de escritura en el directorio que contiene el archivo y ha realizado modificaciones, es posible que se le advierta que existe un archivo de intercambio. Si elige [R] ecover, se reflejará la mayoría * de los cambios realizados por el proceso vim principal. (* Creo que tal vez la actualización de intercambio está programada o tiene un umbral delta. Ya he dedicado demasiado tiempo a esto y no me importa investigarlo). Cuando vaya y salga de vim, no se alarme cuando esté todavía en vim ... abriste un segundo proceso de vim. ¿Recuerda?
Ahora, con todo eso dicho ... Casi nunca haría esto. Tal vez, si no he tenido suficiente o demasiado café, y me di cuenta de que iba a necesitar editar varios archivos más como root ... Podría intentar esto. En 14 años de administración de sistemas, nunca lo he hecho. Pero, hasta que expresaste descontento con mi solución preferida (que es exactamente como la ofrecida por dbr), nunca había pensado en esto.
fuente
:w !sudo tee %
así que creo que esta es una buena respuesta.Por lo general, lo guardo en un archivo temporal en $ HOME / tmp / apache.conf (por ejemplo) y luego
Este es un trabajo adicional para fusionar los cambios, pero valió la pena. Creo que es una buena manera entre la conveniencia y las mediciones contra cambios no deseados.
Antes de eso, pensaba en las ACL o en asignar los grupos correspondientes a los archivos, pero no funcionó con demasiada frecuencia, o bien olvidé cambiar las propiedades o estaba cambiando los archivos donde no tenía la intención de hacerlo.
Eso va solo para los archivos que no se administran hasta ahora. La solución general que utilizamos es una marioneta con un repositorio git donde las personas editan localmente archivos y prueban los cambios en los servidores apropiados, si la configuración funciona como se desea, los cambios se envían al repositorio central donde nuestro motor de configuración extrae los cambios a intervalos regulares.
fuente
Lo que normalmente hago, no necesariamente el más rápido, pero ciertamente seguro, es hacer algo como esto (usando nsswitch.conf como ejemplo):
Salga de vim, luego haga:
Esto eliminará todas las líneas y leerá su versión modificada y actualizada para editarla en su lugar. Usar su directorio personal significa que no tiene que pensar si tiene acceso o no, y es más privado que / tmp. Tenga en cuenta que este es un reemplazo completo del archivo: si no desea agregar todos los cambios, tendrá que elegir.
A pesar del dolor de cabeza involucrado en cualquiera de estas respuestas, no hay razón para perder sus cambios.
fuente