“sudo” con una redirección de la salida
Si alguna vez habéis intentado redireccionar la salida de un comando a un lugar que requiere privilegios de superusuario para escritura, os habréis topado con el siguiente error:
$ sudo echo test > /etc/deleteme bash: /etc/deleteme: Permiso denegado
¿Cómo? ¿Pero sudo no proporciona privilegios de superusuario cuando se ejecutan comandos?
Sí, pero es necesario comprender bien el funcionamiento de una shell para ver lo que está pasando: sudo trata (salvo opciones) todo lo que viene a continuación como un comando; sin embargo es el programa intérprete de órdenes (bash o aquél que estemos ejecutando en ese momento) el que gestiona previamente las redirecciones de las salidas y entradas como ">", "2>", "<" o "|". Debemos, por tanto, evitar que nuestra shell las trate antes de ejecutar el sudo.
Por supuesto, hacer un sudo su[-c], nos libraría de estos problemas, pero no es nada elegante y le quita toda la razón de ser a utilizar sudo. Para evitarlo tenemos varias opciones:
$ sudo sh -c 'echo "test" > /etc/deleteme' $ echo test | sudo tee /etc/deleteme test
(Éste último permite, adicionalmente, escribir al fichero y visualizar la salida simultáneamente).
¿Alguien sugiere más maneras?






septiembre 2nd, 2009 at 01:05
¿Podrías poner un ejemplo más de su uso? Muchas gracias!!
noviembre 28th, 2009 at 23:41
Bueno , eso esta bien pero has intentado usar $DISTRIB_CODENAME en Ubuntu ???
Por lo general no funciona tienes que darle permiso de ejecucion
Si quieres agregar cosas al Sources.list o meter un .list nuevo en sources.list.d puedes hacer esto por ejemplo el PPA de Emesene
sudo chmod +x /etc/lsb-release
sh /etc/lsb-relase
#Obtenemos la GPG de dicha PPA
gpg –keyserver keyserver.ubuntu.com –recv E2314809 && gpg –export –armor E2314809 | sudo apt-key add -
# Obtenermos la version de la distro y creamos emesene.list dentro de sources.list.d
echo deb http://ppa.launchpad.net/bjfs/ppa/ubuntu $DISTRIB_CODENAME main | sudo tee /etc/apt/sources.list.d/emesene.list
# Actualizamos el sistema
sudo apt-get update
# Si queremos instalar usamos esto
sudo apt-get install emesene
====================================
Fuera de eso me he topado con las siguientes curiosidades y esto es solo un ejemplo
1 – Si en vez de usar el echo como puse anteriormente intentas hacer esto
echo deb http://ppa.launchpad.net/bjfs/ppa/ubuntu $DISTRIB_CODENAME main #Emesene-PPA | sudo tee /etc/apt/sources.list.d/emesene.list
el comando no sirve , pues lee desde el # hasta el final como un comentario por ende el sudo tee no hace nada porque es un comentario para la shell
2 – Si usas sudo -c ‘echo “deb http://ppa.launchpad.net/bjfs/ppa/ubuntu $DISTRIB_CODENAME main #Emesene-PPA” >> /etc/apt/sources.list.d/emesene.list
Como dato curioso cuando revisas el archivo no esta el nombre codigo de la distro quedando asi
deb http://ppa.launchpad.net/bjfs/ppa/ubuntu main #Emesene-PPA
Pero tienes alguna idea de como hacer que funcione correctamene el $DISTRIB_CODENAME con el sudo -c ‘echo “…” >> /etc/apt/sources.list.d/emesene.list
noviembre 29th, 2009 at 02:20
El primer comando se arregla rápido: utiliza la barra invertida para escapar la “almohadilla”:
echo deb http://ppa.launchpad.net/bjfs/ppa/ubuntu $DISTRIB_CODENAME main \#Emesene-PPA | sudo tee /etc/apt/sources.list.d/emesene.list
El segundo comando, a mí sí me expande la variable: comprueba que la has establecido para el usuario root, y no sólo para el usuario no privilegiado.
diciembre 22nd, 2009 at 05:01
[...] 22/12/2009 de javcasta Vía: “sudo” con una redirección de la salida « /var/log/jynus. [...]
agosto 19th, 2011 at 05:32
Que tal esto:
$ echo test | sudo tee /etc/deleteme
Asi no necesitas escapar el comando la solución es mucho mas versátil.
Esto es un derivado del truco de vim para salvar archivos cuando no se tienen permisos:
:w !sudo tee % >/dev/null
NOTA: Aprovecho para añadir mi aportación a ese truco de vim. Con >/dev/null se evita que se imprima por pantalla todo el archivo otra vez al salvar. Para sobresaliente queda capturar el Warning que te avisa de que el archivo visualizado se ha modificado externamente y que si lo quieres recargar.
abril 28th, 2012 at 20:05
i discovered your website on reddit as well as thought i would are available in this will let you appear. fascinating concept you have nevertheless i’ll possess a number of other people y you’ve got an interest. they are able to help or perhaps may not nevertheless its well worth a chance.