Согласно тегу в вашем вопросе вы используете Red Hat Enterprise Linux. Начиная с версии 7, он использовал systemd. Ни один из других ответов не подходит для мира systemd; и даже некоторые предположения в вашем вопросе.
halt
из утилит van Smoorenburg "System 5" init
. / sbin / halt
является символической ссылкой на / sbin / reboot
; это не так с systemd. Отдельной программы перезагрузки
нет вообще. останавливают
или перезагружают
, вызывают программу shutdown
с аргументами командной строки; они также не верны с systemd. Отдельной программы выключения
нет вообще. У каждого набора инструментов управления системой есть своя версия этих утилит. systemd, upstart, nosh , van Smoorenburg init
и BSD init
имеют свои собственные halt
, poweroff
, и так далее. На каждом их механика немного отличается. Как и их справочные страницы.
В наборе инструментов systemd halt
, poweroff
, reboot
, telinit
и shutdown
имеют значения ] все символьные ссылки на / bin / systemctl
. Это все прокладки обратной совместимости, которые являются просто сокращениями для вызова основного интерфейса командной строки systemd: systemctl
. Все они отображаются (и фактически являются) одной и той же единственной программой. (По соглашению оболочка сообщает ей, под каким именем она была вызвана.)
Большинство этих команд являются сокращениями для сообщения systemd, используя systemctl
, на изолировать конкретную цель . Изоляция объясняется на странице руководства systemctl
(q.v.), но для целей этого ответа ее можно рассматривать как запуск цели и остановку любых других. Стандартные цели, используемые в systemd, перечислены на странице руководства systemd.special
(8).
Диаграммы на странице руководства bootup
(7) в наборе инструментов systemd, в частности последней, показывают, что здесь есть три «последних» цели:
halt.target
- Как только система достигнет состояния полной изоляции этой цели, она вызовет системный вызов reboot (RB_HALT_SYSTEM)
. Ядро попытается войти в программу монитора ПЗУ или просто остановит ЦП (используя любой подходящий для этого механизм). перезагрузка.target
- Как только система достигнет состояния полной изоляции этой цели, она вызовет системный вызов reboot (RB_AUTOBOOT)
(или эквивалент с волшебной командной строкой). Ядро попытается запустить перезагрузку. poweroff.target
- Как только система достигнет состояния полной изоляции этой цели, она вызовет системный вызов reboot (RB_POWER_OFF)
. Если возможно, ядро попытается отключить питание системы. Это то, о чем вы должны думать в окончательном состоянии системы, а не об уровнях выполнения. Обратите внимание на диаграмму, что целевая система systemd сама кодирует вещи, которые в других системах являются неявными, а неявными: например, представление о том, что каждая из этих конечных целей включает цель shutdown.target
, так что одна описывает службы, которые должны быть остановлены перед завершением работы, поскольку они конфликтуют с целью shutdown.target
.
systemctl
пытается отправить запросы к systemd-logind
, когда вызывающий пользователь не является суперпользователем. Он также передает отложенные отключения на systemd-shutdownd
. А некоторые сокращения вызывают уведомления стены
. Оставим в стороне эти сложности, которые увеличили бы этот ответ в несколько раз, если предположить, что вы в настоящее время являетесь суперпользователем и не запрашиваете запланированное действие:
systemctl изолировать остановку.target
имеет сокращенные обозначения:
shutdown -H now
systemctl halt
halt
systemctl изолировать reboot.target
имеет сокращенные обозначения:
shutdown -r now
telinit 6
systemctl reboot
reboot
systemctl изолировать poweroff.target
имеет сокращение:
выключение -P now
telinit 0
shutdown now
systemctl poweroff
poweroff
systemctl изолировать rescue.target
имеет сокращенные обозначения:
{{1} } telinit 1
systemctl rescue
systemctl изолировать multi-user.target
имеет сокращенные обозначения:
telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
имеет сокращение:
telinit 5
После анализа различных синтаксисов командной строки все они в конечном итоге заканчиваются вверх по тем же путям кода внутри программы systemctl
.
Примечания:
выключения без дополнительных опций
заключалось в переключении в однопользовательский режим . Это не относится к systemd. rescue.target
- однопользовательский режим, переименованный в rescue mode в systemd - недоступен с помощью команды shutdown
. telinit
действительно полностью игнорирует все те уровень выполнения N .target
и default.target
символические ссылки в файловой системе, которые страницы руководства описывают. Вышеуказанные сопоставления жестко зашиты в программу systemctl
в виде таблицы. - force
для команд halt
, reboot
и poweroff
- то же самое, что сказать - -force --force
к командам systemctl halt
, systemctl reboot
и systemctl poweroff
. Это заставляет systemctl
пытаться напрямую вызвать reboot ()
. Обычно он просто пытается изолировать цели. telinit
- это не то же самое, что init
. Это разные программы в мире systemd, причем последняя является другим названием программы systemd
, а не программы systemctl
. Программа systemd
вовсе не обязательно компилируется с какой-либо совместимостью van Smoorenburg, и в некоторых операционных системах systemd жалуется на неправильный вызов при попытке init N
. systemctl
. справочные страницы systemd. freedesktop.org. systemd.special
. справочные страницы systemd. freedesktop.org. загрузка
. справочные страницы systemd. freedesktop.org. init
. nosh Guide . Программное обеспечение. stop
инструктирует аппаратное обеспечение, чтобы остановило все функции процессора , но оставило его в выключенном состоянии. Обычно это означает, что кто-то должен перезагрузить или выключить машину вручную, нажав кнопку питания после этого. Конкретный способ достижения этого - архитектурные особенности, но, например, набор команд x86 предоставляет команды HLT
, которые останавливают центральный процессор (CPU) до следующего внешнего прерывания.
отключение питания
, как остановка
, останавливает центральный процессор, но также посылает аппаратный сигнал ACPI, который дает указание системе начать с полного и немедленного выключения. Это примерно эквивалентно нажатию кнопки питания на обычном настольном компьютере.
Оба сигнала остановки
и выключения питания
обычно являются символическими ссылками на исполняемый файл перезагрузки
, который обычно вызывает инструмент выключения
с соответствующими аргументами (-h
, -P
или r
) в зависимости от того, использовался ли для вызова инструмента остановка
, отключение питания
или перезагрузка
. Однако, когда опция - force
передается на reboot
, или когда на уровне выполнения 0 или 6, reboot
вызывает системный вызов reboot()
с соответствующим кодом команды.
halt
, poweroff
и shutdown -h
полностью эквивалентны. Фактически, halt и poweroff не делают ничего, кроме вызова shutdown -h
. Из справочной страницы halt / poweroff:
Если вызывается остановка или перезагрузка, когда система не находится на уровне запуска 0 или 6, другими словами, когда она работает нормально, вместо этого будет вызываться завершение работы (с флагом -h или -r) . Для получения дополнительной информации см. Справочную страницу shutdown (8).
Завершение работы затем переходит к завершению работы системы путем переключения на уровень выполнения 0.
Остановка и отключение питания (и перезагрузка) выполняют двойную роль; когда они выполняются в процессе выключения (то есть на уровне выполнения 0 или 6), они выполняют операции низкого уровня, необходимые для физической остановки, выключения или перезагрузки машины, как описано в другом ответе.