А тепер системна відповідь.
Ви використовуєте, відповідно до тегу свого запитання, Red Hat Enterprise Linux. Починаючи з версії 7, що використовує systemd. Жодна з інших відповідей не є правильною для світу systemd; ні навіть деякі припущення у вашому питанні.
- Забудьте про рівні пробігу ; вони існують, але лише у міру сумісності. У системній документації зазначено, що поняття "застаріло". Якщо ви починаєте вивчати цей матеріал у системній операційній системі, не починайте з цього.
- Забудьте про сторінку керівництва, яку цитував marcelm; це зовсім не з потрібного набору інструментів і є описом іншої команди набору інструментів, неправильної для systemd. Це
halt
команда від init
комунальних служб van Smoorenburg "Система 5" .
- Ігноруйте твердження, які
/sbin/halt
є символічним посиланням на /sbin/reboot
; це не вірно з systemd. Окремої reboot
програми взагалі немає.
- Ігноруйте заяви, які викликають
halt
або reboot
викликають shutdown
програму з аргументами командного рядка; вони також не вірні з systemd. Окремої shutdown
програми взагалі немає.
Кожен набір інструментів управління системою має свою версію цих утиліт. Systemd, вискочка, перекус , ван Smoorenburg init
і BSD init
все мають свої власні halt
, poweroff
і так далі. У кожного їх механіка дещо різна. Так само є їхні сторінки керівництва.
У Systemd набір інструментів halt
, poweroff
,reboot
, telinit
, і shutdown
є всі символічні посилання /bin/systemctl
. Вони все регулювальні шайби з зворотною сумісністю, які просто скорочення для виклику інтерфейсу первинного командного рядка Systemd в: systemctl
. Всі вони відображають (і насправді є) ту саму єдину програму. (За умовою, оболонка повідомляє, до якого імені вона викликалася.)
цілі, а не пробіги
Більшість цих команд - це стенограми для того, щоб сказати systemd, використовуючи systemctl
для виділення певної цілі . Ізоляція пояснюється на systemctl
сторінці керівництва (qv), але для цілей цієї відповіді можна вважати запускання цілі та зупинку будь-яких інших. Стандартні цілі, які використовуються в systemd, перелічені на сторінці systemd.special
(8) керівництва.
Діаграми на сторінці bootup
(7) керівництва в наборі інструментів systemd, зокрема останній, показують, що тут є три "остаточні" цілі:
halt.target
- Як тільки система досягне стану повністю ізолюючої цілі, вона буде викликати reboot(RB_HALT_SYSTEM)
системний виклик. Ядро спробує ввести програму монітора ПЗУ або просто зупинило ЦП (використовуючи будь-який механізм, що підходить для цього).
reboot.target
- Як тільки система досягне стану повністю ізолюючої цілі, вона буде викликати reboot(RB_AUTOBOOT)
системний виклик (або еквівалент з магічним командним рядком). Ядро спробує запустити перезавантаження.
poweroff.target
- Як тільки система досягне стану повністю ізолюючої цілі, вона буде викликати reboot(RB_POWER_OFF)
системний виклик. Ядро намагатиметься відключити живлення від системи, якщо це можливо.
Це те, про що ви повинні думати, як фінальна система констатує, а не запуску рівнів. З діаграми зауважте, що сама системна цільова система кодує речі, які в інших системах є неявними, а не явними: такі як поняття, що кожна з цих кінцевих цілей охоплює shutdown.target
ціль, так що описуються послуги, які перед зупинкою повинні бути зупинені маючи їх в конфлікт з до shutdown.target
мети.
systemctl
намагається надсилати запити, systemd-logind
коли користувач, що дзвонить, не є надруковою машиною. Він також передає відкладені відключення до systemd-shutdownd
. І деякі скорочення викликають wall
сповіщення. Ті складнощі, які дозволили б зробити цю відповідь в кілька разів довше, якщо припустити, що ви зараз суперпользователь і не вимагаєте запланованих дій:
systemctl isolate halt.target
має скорочення:
shutdown -H now
systemctl halt
- рівнина без прикрас
halt
systemctl isolate reboot.target
має скорочення:
shutdown -r now
telinit 6
systemctl reboot
- рівнина без прикрас
reboot
systemctl isolate poweroff.target
має скорочення:
shutdown -P now
telinit 0
shutdown now
systemctl poweroff
- рівнина без прикрас
poweroff
systemctl isolate rescue.target
має скорочення:
telinit 1
systemctl rescue
systemctl isolate multi-user.target
має скорочення:
telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
має стенограму:
Після розбору різних синтаксисів командного рядка всі вони в кінцевому підсумку опиняються в одних і тих же кодових шляхах всередині systemctl
програми.
Примітки:
- Традиційною поведінкою без опцій
shutdown now
було перехід на режим одного користувача . Це не так з системою. rescue.target
- однокористувацький режим перейменований в режим порятунку в systemd - недоступний за допомогою shutdown
команди.
telinit
дійсно повністю ігнорувати всі ті і символічні посилання в файлової системі , які описують сторінки керівництва. Заздалегідь задані відображення вбудовані в програму, в таблицю.runlevelN.target
default.target
systemctl
- systemd не має поняття поточного рівня запуску . Дія цих команд не обумовлена будь-яким "якщо ви перебуваєте в рівні N запуску ".
--force
Варіант до halt
, reboot
і poweroff
команди так само , як кажуть --force --force
в systemctl halt
, systemctl reboot
і systemctl poweroff
команду. Це змушує systemctl
спробувати телефонувати reboot()
безпосередньо. Зазвичай він просто намагається ізолювати цілі.
telinit
не те саме, що init
. Вони є різними програмами в системному світі, останні є іншою назвою для systemd
програми, а не для systemctl
програми. systemd
Програма не обов'язково скомпільовано з будь-сумісністю ван Smoorenburg на всіх, і на деяких операційних системах Systemd скаржиться на час виклику неправильно , якщо один спроб .init N
Подальше читання