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/tmpfile
a mi antiguo archivo con derechos de sudo.fuente
vi
el 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./tmp
directorio. (2) Si tiene usuarios verdaderamente malvados en su sistema, podrían reemplazarlo/tmp/tmpfile
entre 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 elw
y el!
.fuente
vi
comandos pueden ser varias letras, por lo que en teoría podría haber unwfoo
comando " ", 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 undate
comando " ". 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.tee
es un programa que te permite escribir información en múltiples lugares. Por ejemplo,date | tee cody
escribirá la fecha y hora actuales en un archivo llamadocody
... (Cont.)date | tee cody > bugstein
escribirá la fecha y hora actuales en un archivo llamadocody
y también en un archivo llamadobugstein
. - ¿entiendessudo
? Le permite ejecutar un comando con los privilegios de otro usuario (generalmente root). Por ejemplo,ls /root
generalmente fallará porque no tiene acceso a/root
. Perosudo ls /root
funcionará. - Un desafortunado efecto secundario de la forma en que funciona Unix es quesudo ls /root > /root/cody
fallará, 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 % solution
wfaulk publicada