En Linux (específicamente, derivados de RHEL CentOS y Fedora), ¿hay alguna diferencia?
echo b > /proc/sysrq-trigger
"Reinicie inmediatamente el sistema, sin desmontar ni sincronizar los sistemas de archivos", según Wikipedia.
reboot -n
"No sincronice antes de reiniciar o detener. Tenga en cuenta que el núcleo y los controladores de almacenamiento aún pueden sincronizarse", según el reinicio de man 8. ¿Existe realmente alguna diferencia en este comportamiento?
Respuestas:
El
/sbin/reboot
es un ejecutable regular en el sistema de archivos. Si su sistema de archivos está alojado (p. Ej., Bloqueo del controlador del sistema de archivos, bloqueo del hardware SATA o bloqueo del firmware del disco), los cambios para ejecutar con éxito ese ejecutable son escasos. Por otro lado, suponiendo que ya tiene un shell raíz abierto,echo b > /proc/sysrq-trigger
no necesita ningún acceso al sistema de archivos.fuente
$ sync; echo b > /proc/sysrq-trigger
$ whereis echo echo: /usr/bin/echo /usr/share/man/man1p/echo.1p.gz /usr/share/man/man1/echo.1.gz
$ whereis reboot reboot: /usr/sbin/reboot /usr/share/man/man2/reboot.2.gz /usr/share/man/man8/reboot.8.gz
echo
generalmente es un shell incorporado, por lo que está disponible si tiene un indicador de shell. Sí, también/bin/echo
existe, porque según las reglas POSIX, todos los comandos deben existir en la ruta pero pueden ser reemplazados por la implementación de shell para aumentar el rendimiento. Elecho
se usa con tanta frecuencia que solo los shells muy básicos no lo implementan. (Compararhelp echo
vs.man echo
)