Estoy tratando de seguir lo que supongo son las mejores prácticas de uso de sudo en lugar de la cuenta raíz.
Estoy ejecutando una operación simple de archivo concat como:
sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
Esto falla a la derecha del ">>" que se está ejecutando como el usuario normal. Agregar sudos adicionales también falla (comportamiento esperado desde la conexión al comando sudo y no al archivo).
El ejemplo es solo eso, pero se ha verificado y probado en la cuenta raíz.
shell
sudo
io-redirection
quoting
Oveja Oscura
fuente
fuente
tee
comandos se ejecutan como root, no el comando principal, que podría ser complejo y propenso a un mal comportamiento. (no es el caso deecho
)Otra opción, igualmente segura, es usar
sudo
el-i
interruptor para iniciar sesión como root:Esto sigue las reglas de mejores prácticas ya que la cuenta raíz no está habilitada como tal, pero le permite hacer cosas como root de manera segura. De
man sudo
:fuente
sudo bash
Si expresa su comando sin comillas simples, puede ponerlo dentro de comillas simples y ejecutarlo a través de un shell intermedio.
Para ejecutar esto como root:
Escriba el comando de una manera diferente que no use
'
:Luego invoque
sudo sh -c …
:Alternativamente, para escribir la salida en un archivo en el que solo la raíz puede escribir, llame
sudo tee
. Pase la-a
opción atee
anexar al archivo de destino; de lo contrario, el archivo se truncará.Para las modificaciones de archivos más complejos, puede llamar
sudo sed
,sudo ed
,sudo perl
, ...Alternativamente, use un editor decente y haga que llame a sudo. En Emacs, abierto
/sudo:/etc/conf.d/hwclock
. En Vim, llame:w !sudo tee %
para escribir en el archivo abierto como root, o use el complemento sudo.vim . O ve desde el extremo del sudo y llamasudoedit /etc/conf.d/hwclock
.O puede ceder al lado oscuro y ejecutar un shell como root.
fuente
El comando falla debido a los permisos en el archivo redirigido a. La redirección ocurre incluso antes de que
sudo
se invoque el comando.Tendrá que asegurarse de que es la raíz la que realmente abre el archivo para escribir.
La forma más sencilla de hacerlo:
Se
echo
puede ejecutar como usuario normal, ya que solo produce una cadena de texto. Sintee
embargo, la utilidad tendrá que ejecutarse como root ytee -a
agregará datos. Redirigimos la salida a/dev/null
porquetee
, por defecto, duplicará sus datos de entrada a su salida estándar además de escribir en los archivos indicados.Con
bash
o cualquier shell que entienda "here-strings":Esto es idéntico en efecto a lo anterior. Solo cambia la forma en que producimos la cadena.
Otra forma un poco indirecta de hacerlo:
Aquí, la redirección ocurre dentro de un
sh -c
shell hijo que se ejecuta como root.fuente
sudo dd of=
Para agregar como quieras:
o para recrear el archivo desde cero:
Ventajas:
tee
desde que no hay/dev/null
redirecciónsh
desde que no hay subshelldd
tiene muchas opciones poderosas, por ejemplo,status=progress
para ver el progreso de la transferenciaFunciona porque sudo reenvía stdin al comando.
fuente