Hice largos cambios en un archivo de configuración en una computadora Ubuntu Linux con el editor vi. Desafortunadamente, olvidé sudo primero, así que ahora estoy en el editor, pero no puedo guardar mis cambios debido a la falta de derechos. ¿Puedo sudar retroactivamente al usuario en ese terminal o cuál sería el mejor curso de acción a seguir?
linux
permissions
sudo
vi
Simón
fuente
fuente

Respuestas:
En este caso, escribo el archivo con
:w /tmp/tmpfile. Luego salgo y me muevo/tmp/tmpfilea mi antiguo archivo con derechos de sudo.fuente
viel predeterminado (que probablemente sea 666, Y junto con el inverso de su "umask"), reemplaza el propietario del archivo con su UID (era "root", ¿no?) y rompe enlaces duros./tmpdirectorio. (2) Si tiene usuarios verdaderamente malvados en su sistema, podrían reemplazarlo/tmp/tmpfileentre cuando lo escribe (desdevi) y cuando lo copia sobre el archivo de configuración del sistema que estaba editando. Es más seguro colocar el archivo temporal en un directorio al que solo usted tiene acceso.De SO :
De hecho, ahora me encuentro usando esta forma para hacerlo con más frecuencia:
Creo que es un poco más intuitivo, ya que sé lo que
:%!hace, mientras que no tengo una comprensión visceral:w !. Además, es fácil perderse el espacio muy importante entre elwy el!.fuente
vicomandos pueden ser varias letras, por lo que en teoría podría haber unwfoocomando " ", por lo que si desea escribir en un archivo llamado "foo", debe decir ":w foo". Es decir, necesitas un espacio después de ":w". En cuanto a ":w !" se refiere, ya sabes lo que es ":!", ¿verdad? ":!date" Ejecuta undatecomando " ". Entonces ":w !xyz" escribe el búfer, pero en un comando en lugar de en un archivo.%aunque?%puede ser más difícil). (3) Bien, te ayudaré un poco.teees un programa que te permite escribir información en múltiples lugares. Por ejemplo,date | tee codyescribirá la fecha y hora actuales en un archivo llamadocody... (Cont.)date | tee cody > bugsteinescribirá la fecha y hora actuales en un archivo llamadocodyy también en un archivo llamadobugstein. - ¿entiendessudo? Le permite ejecutar un comando con los privilegios de otro usuario (generalmente root). Por ejemplo,ls /rootgeneralmente fallará porque no tiene acceso a/root. Perosudo ls /rootfuncionará. - Un desafortunado efecto secundario de la forma en que funciona Unix es quesudo ls /root > /root/codyfallará, porque no tiene acceso y/root, por lo tanto, no puede escribir/root/cody. … (Continúa)¿No podría abrir otra terminal y cambiar temporalmente los derechos de acceso del archivo?
fuente
:w !sudo tee % solutionwfaulk publicada