Leitura "Qual é a diferença entre os comandos Halt e Shutdown?" , Geralmente tenho uma ideia do que o comando shutdown faz, com ou sem as opções -h / -r.
O comando "halt" desliga o sistema para executar o nível 0 do sistema.
O comando "shutdown" executa o desligamento do sistema para executar o nível 1 sem o comando -h ou -r.
E o comando "poweroff" entra no nível de execução 0 ou 1? Essa é a única diferença principal entre esses três comandos?
Respostas:
E agora, o sistema responde.
Você está usando, de acordo com a tag da sua pergunta, o Red Hat Enterprise Linux. Desde a versão 7, isso usou o systemd. Nenhuma das outras respostas está correta para o mundo do systemd; nem são algumas das suposições da sua pergunta.
halt
comando dosinit
utilitários "System 5" da van Smoorenburg ./sbin/halt
é um link simbólico/sbin/reboot
; isso não é verdade com o systemd. Não há nenhumreboot
programa separado .halt
oureboot
invocam umshutdown
programa com argumentos de linha de comando; eles também não são verdadeiros com o systemd. Não há nenhumshutdown
programa separado .Todo conjunto de ferramentas de gerenciamento do sistema tem sua versão desses utilitários. systemd, arrivista, nosh , van Smoorenburg
init
e BSDinit
todos têm a sua própriahalt
,poweroff
e assim por diante. Em cada uma delas, sua mecânica é um pouco diferente. O mesmo acontece com as páginas de manual.No conjunto de ferramentas systemd
halt
,poweroff
,reboot
,telinit
, eshutdown
são todos os links simbólicos para/bin/systemctl
. Eles são todos os calços compatibilidade com versões anteriores, que são simplesmente atalhos para invocar interface de linha de comando primário de systemd:systemctl
. Todos eles mapeiam (e de fato são) o mesmo programa único . (Por convenção, o shell diz a que nome foi chamado.)destinos, não níveis de execução
A maioria desses comandos são atalhos para dizer ao systemd, usando
systemctl
, para isolar um destino específico . O isolamento é explicado nasystemctl
página de manual (qv), mas, para os fins desta resposta, pode ser considerado como iniciar um alvo e parar qualquer outro. Os destinos padrão usados no systemd estão listados nasystemd.special
página de manual (8).Os diagramas na
bootup
página de manual (7) no conjunto de ferramentas systemd, em particular o último, mostram que existem três destinos "finais" relevantes aqui:halt.target
- Depois que o sistema atingir o estado de isolar completamente esse destino, ele terá chamado areboot(RB_HALT_SYSTEM)
chamada de sistema. O kernel terá tentado entrar em um programa de monitoramento de ROM ou simplesmente interrompido a CPU (usando qualquer mecanismo apropriado para isso).reboot.target
- Depois que o sistema atingir o estado de isolar completamente esse destino, ele terá chamado areboot(RB_AUTOBOOT)
chamada de sistema (ou o equivalente à linha de comando mágica). O kernel terá tentado acionar uma reinicialização.poweroff.target
- Depois que o sistema atingir o estado de isolar completamente esse destino, ele terá chamado areboot(RB_POWER_OFF)
chamada de sistema. O kernel terá tentado remover a energia do sistema, se possível.Essas são as coisas em que você deve pensar como o sistema final declara, não executar níveis. Observe no diagrama que o próprio sistema systemd de destino codifica coisas que são, em outros sistemas, implícitas e não explícitas: como a noção de que cada um desses destinos finais abrange o
shutdown.target
destino, de modo que se descreve serviços que devem ser interrompidos antes do desligamento por tê-los em conflito com oshutdown.target
alvo.systemctl
tenta enviar solicitações parasystemd-logind
quando o usuário que chama não é o superusuário. Ele também passa os desligamentos atrasados parasystemd-shutdownd
. E algumas atalhos acionamwall
notificações. Essas complexidades à parte, que tornariam essa resposta várias vezes mais longa, supondo que você seja o superusuário no momento e não solicite uma ação agendada:systemctl isolate halt.target
tem as taquigrafia:shutdown -H now
systemctl halt
halt
systemctl isolate reboot.target
tem as taquigrafia:shutdown -r now
telinit 6
systemctl reboot
reboot
systemctl isolate poweroff.target
tem as taquigrafia:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
poweroff
systemctl isolate rescue.target
tem as taquigrafia:telinit 1
systemctl rescue
systemctl isolate multi-user.target
tem as taquigrafia:telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
tem a abreviação:telinit 5
Após analisar as várias sintaxes diferentes da linha de comando, todas elas acabam nos mesmos caminhos de código dentro do
systemctl
programa.Notas:
shutdown now
tem sido mudar para o modo de usuário único . Este não é o caso do systemd.rescue.target
- o modo de usuário único sendo renomeado para modo de recuperação no systemd - não pode ser acessado com oshutdown
comandotelinit
realmente não totalmente ignorar todos aqueles e links simbólicos no sistema de arquivos que as páginas do manual descrever. Os mapeamentos citados anteriormente são conectados ao programa em uma tabela.runlevelN.target
default.target
systemctl
--force
opção para ohalt
,reboot
epoweroff
comandos é o mesmo que dizer--force --force
aossystemctl halt
,systemctl reboot
esystemctl poweroff
comandos. Isso faz com quesystemctl
tente ligarreboot()
diretamente. Normalmente, apenas tenta isolar alvos.telinit
não é o mesmo queinit
. São programas diferentes no mundo sistêmico, sendo este último outro nome para osystemd
programa, não para osystemctl
programa. Osystemd
programa não é necessariamente compilado com nenhuma compatibilidade de van Smoorenburg e, em alguns sistemas operacionais do sistema, reclama de ter sido chamado incorretamente se alguém tentar .init N
Leitura adicional
systemctl
. páginas de manual do systemd. freedesktop.org.systemd.special
. páginas de manual do systemd. freedesktop.org.bootup
. páginas de manual do systemd. freedesktop.org.init
. Guia nosh . Softwares.fonte
systemctl reboot
deve ser equivalente asystemctl start reboot.target --job-mode=replace-irreversible
. Usar qualquer outro modo de trabalho é menos robusto. unix.stackexchange.com/questions/381739/…systemctl reboot
a maneira "segura" de reinicializar, por exemplo,init 6
qual é a maneira que, de outra forma, seria reiniciar com segurança?halt
instrui o hardware a parar todas as funções da CPU , mas o deixa em um estado ligado. Isso geralmente significa que alguém precisa reiniciar ou desligar a máquina manualmente pressionando o botão liga / desliga. A maneira específica de conseguir isso é específica da arquitetura, mas, por exemplo, o conjunto de instruções x86 fornece asHLT
instruções que interrompem a unidade central de processamento (CPU) até que a próxima interrupção externa seja acionada.poweroff
, comohalt
, interrompe a CPU, mas também envia um sinal de hardware ACPI que instruirá o sistema a iniciar com um desligamento completo e imediato. Isso é aproximadamente equivalente a pressionar o botão liga / desliga em um computador desktop típico.Ambos
halt
epoweroff
são geralmente links simbólicos para oreboot
executável, que normalmente irá invocar ashutdown
ferramenta com os argumentos apropriados (-h
,-P
our
), dependendo sehalt
,poweroff
oureboot
foi usado para invocar a ferramenta. No entanto, quando a--force
opção for passada parareboot
ou no nível de execução 0 ou 6,reboot
areboot()
chamada do sistema será chamada com o próprio código de comando apropriado.fonte
/sbin/init 0
ou/sbin/telinit 0
deve ser o mesmo que interromper o sistema, embora as etapas específicas tomadas dependam do sistema init em questão, como System-V init , upstart ou systemd . Se você estiver executando o RHEL, estará usando o systemd.halt
,poweroff
Eshutdown -h
são completamente equivalentes. De fato, parada e desligamento não fazem nada além de chamarshutdown -h
. Na página de manual de interrupção / desligamento:O desligamento prossegue para desligar o sistema alternando para o nível de execução 0.
Parada e desligamento (e reinicialização) desempenham uma função dupla; quando executados no processo de desligamento (ou seja, no nível de execução 0 ou 6), eles executam as operações de baixo nível necessárias para parar, desligar ou reiniciar fisicamente a máquina, conforme descrito em outra resposta.
fonte