А тепер системна відповідь.
Ви використовуєте, відповідно до тегу свого запитання, 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.targetdefault.targetsystemctl
- 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
Подальше читання