No Linux (especificamente, derivados do RHEL, CentOS e Fedora), há alguma diferença?
echo b > /proc/sysrq-trigger
"Reinicialize imediatamente o sistema, sem desmontar ou sincronizar sistemas de arquivos", de acordo com a Wikipedia.
reboot -n
"Não sincronize antes de reiniciar ou interromper. Observe que os drivers do kernel e de armazenamento ainda podem sincronizar", de acordo com o man 8 reboot. Existe realmente alguma diferença nesse comportamento?
Respostas:
O
/sbin/reboot
é um executável regular no sistema de arquivos. Se o seu sistema de arquivos estiver conectado (por exemplo, travamento do driver do sistema de arquivos, travamento do hardware SATA ou travamento do firmware do disco), as alterações para a execução bem-sucedida desse executável são reduzidas a zero. Por outro lado, supondo que você já tenha um shell raiz aberto,echo b > /proc/sysrq-trigger
não precisa de nenhum acesso ao sistema de arquivos.fonte
$ 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
geralmente é um shell embutido, portanto está disponível se você tiver um prompt de shell. Sim, também/bin/echo
existe, porque pelas regras do POSIX todos os comandos devem existir no caminho, mas podem ser substituídos pela implementação do shell para aumentar o desempenho. Oecho
é usado com tanta frequência que apenas conchas muito, muito básicas, não o implementam. (Comparehelp echo
vs.man echo
)