Por que precisamos da função de reinicialização em diferentes binários?

12

Por que precisamos da função de reinicialização em diferentes binários?

shutdown -r

e

reboot

Ou eles diferem em algo?

LanceBaynes
fonte
1
Veja unix.stackexchange.com/questions/8690/… para obter a distinção - os comandos podem se comportar de maneira diferente dependendo do sistema operacional (mas geralmente fazem a mesma coisa no Linux).
PleaseStand
Conforme observado abaixo e explicado em detalhes em unix.stackexchange.com/a/196014/5132 , a premissa dessa pergunta é falsa nos sistemas operacionais Linux systemd. Esses não são binários diferentes nesses sistemas.
JdeBP

Respostas:

15

Nós não precisamos necessariamente dos dois, mas os temos por causa da história do Unix e de sua multiplicidade de versões.

Nas respectivas páginas de manual:

  • O utilitário de desligamento apareceu no 4.0BSD.
  • Um utilitário de reinicialização apareceu na Versão 6 AT&T UNIX.

O desligamento é mais geral e mais poderoso, enquanto a reinicialização é mais amigável e fácil de lembrar.

O shutdown permite especificar um argumento temporal (para reiniciar em 5 minutos, por exemplo) e permite que você faça muitas coisas além da reinicialização, incluindo:

  • você pode simplesmente lançar usuários e não desligar
  • você pode colocar o sistema em suspensão em vez de desligar
  • você pode simplesmente desligar sem reiniciar (como o comando halt)
  • você pode incluir uma mensagem de aviso personalizada para usuários no sistema

No entanto, se você só quer reiniciar o sistema agora, é mais fácil de escrever rebootdo que shutdown -r now.

iconoclasta
fonte
1
Curiosidade: algumas versões de shutdownuso agora como padrão. Não tente obter ajuda para desligar shutdown -hsempre, especialmente em um servidor em algum lugar do datacenter.
Residuum 10/10/11
6

Os dois comandos fazem algo diferente, no entanto, podem acabar chamando um ao outro, e é por isso que parecem fazer a mesma coisa!

rebootinvocará o kernel para realmente acionar uma reinicialização do hardware. No entanto, isso só será feito se o sistema estiver pronto para o desligamento - todos os daemons e processos do usuário devem ser parados, sistemas de arquivos desmontados etc. Por isso, verifica o nível de execução do sistema e, se não for 0 ou 6, na verdade, ele chamará o shutdowncomando para você.

shutdownfaz com que o nível de execução do sistema seja alterado. A alteração no nível de execução (para 0 para parada ou 6 para reinicialização) executa muitos scripts em /etc/rc0.d ou rc6.d que encerram daemons, desmontam sistemas de arquivos etc. Finalmente, esses scripts invocam haltou reboot- desta vez o sistema está em o nível de execução correto e eles instruem o kernel a reiniciar (ou parar).

Richard Downer
fonte
6

Além do que o iconoclasta escreveu, há uma distinção importante entre os dois programas: shutdownestá dentro /sbin, enquanto rebootestá dentro /usr/bin.

Por que isso importa, você pergunta? Eu vou te contar.

Os itens abaixo /usrsão aqueles que não precisam estar disponíveis até que o sistema seja inicializado o suficiente para que ele seja minimamente funcional. Diretórios de nível superior que são tradicionalmente não montados em sistemas de arquivos separados - /bin, /etc, /sbin, etc. - são esperados para estar disponível enquanto o sistema está a atingir este estado minimamente útil. Existem várias implicações desse design; por exemplo, é péssimo escrever a cláusula "stop" de um script de inicialização do SysV que usa programas /usr/binse houver uma alternativa em /binou /sbin.

shutdowné o principal utilitário, sempre disponível. rebooté apenas um utilitário de conveniência.

Warren Young
fonte
1
rebootestá no /sbinDebian (com SysVinit) e Ubuntu (com iniciante).
Gilles 'SO- stop be evil'
Ok, então meta-resposta: conheça o seu sistema. :) Eu uso o CentOS com mais frequência.
Warren Young
Mesmo para Arch (systemd), tanto in / sbin
daisy
De fato, nos sistemas operacionais Linux systemd também não é o utilitário principal, pois com systemd todos esses comandos são (como diz o systemd doco) comandos "compatibilidade". De fato, a premissa da pergunta é falsa. Eles não estão em binários diferentes. Para detalhes, consulte unix.stackexchange.com/a/196014/5132 .
JdeBP