lunes, 30 de marzo de 2009

Ejecutar comandos complejos con sudo

Si usas sudo para ejecutar comandos como root, quizás te has topado con el mensaje "Permiso Denegado" , esto sucede cuando solo una parte de la linea esta ejecutándose con permisos de root.

Esta falla es debido a que el archivo solo puede ser escrito por el root:

$ echo 12000 > /proc/sys/vm/dirty_writeback_centisecs

Pero ejecutando esto también falla:

$ sudo echo 12000 > /proc/sys/vm/dirty_writeback_centisecs

La causa del error es que si bien el programa /bin/echo esta ejecutándose como root, el shell que esta redireccionando la salida del echo hacia el archivo solo del root esta todavía ejecutándose con tu usuario. Tu shell actual hace la redireccion después que el sudo inicia.

La solución es ejecutar toda linea completa bajo sudo. Hay un par de formas de hacerlo, una es esta:

echo "echo 12000 > /proc/sys/vm/dirty_writeback_centisecs" | sudo sh

De esta forma puedes escribir todo antes del carácter de tubería (|), luego presionas la flecha de arriba y añades "| sudo sh". Esta forma es mas segura para ver antes de ejecutar el comando.

Fuente.

No hay comentarios: