Czytanie „Jaka jest różnica między poleceniami Zatrzymaj i Zamknij?” , Ogólnie mam pojęcie, co robi zamknięcie polecenia, z opcjami -h / -r lub bez nich.
Polecenie „halt” wyłącza system do poziomu 0 systemu.
Komenda „shutdown” wyłącza system z poziomu 1 bez komendy -h lub -r.
Co z poleceniem „poweroff”, czy przechodzi ono na poziom 0 lub 1? Czy to jedyna główna różnica między tymi trzema poleceniami?
Odpowiedzi:
A teraz systemowa odpowiedź.
Używasz, zgodnie ze znacznikiem na swoim pytaniu, Red Hat Enterprise Linux. Od wersji 7 używano systemd. Żadna z pozostałych odpowiedzi nie jest poprawna dla świata systemd; ani nawet niektóre z założeń w twoim pytaniu.
halt
polecenie dla narzędzi van Smoorenburg „System 5”init
./sbin/halt
są dowiązaniem symbolicznym/sbin/reboot
; to nie jest prawda z systemd. W ogóle nie ma osobnegoreboot
programu.halt
lubreboot
wywołująshutdown
program z argumentami wiersza poleceń; nie są one również zgodne z systemd. W ogóle nie ma osobnegoshutdown
programu.Każdy zestaw narzędzi do zarządzania systemem ma swoją wersję tych narzędzi. Systemd, dorobkiewicz, nosh , van Smoorenburg
init
i BSDinit
mają swoje własnehalt
,poweroff
i tak dalej. Na każdym mechanika jest nieco inna. Podobnie jak ich strony podręcznika.W Systemd zestawu narzędzi
halt
,poweroff
,reboot
,telinit
, ishutdown
są wszystkie linki symboliczne/bin/systemctl
. Są wszystkie podkładki wstecznej kompatybilności, które są po prostu dla shorthands powołując interfejs wiersza poleceń podstawową Systemd za:systemctl
. Wszystkie mapują na (i tak naprawdę są) ten sam pojedynczy program. (Zgodnie z konwencją powłoka informuje ją o nazwie, do której została wywołana).cele, a nie poziomy pracy
Większość tych poleceń jest skrótem do informowania systemd, za pomocą
systemctl
, do izolowania określonego celu . Izolacja jest wyjaśniona nasystemctl
stronie podręcznika (qv), ale dla celów tej odpowiedzi może być uważana za rozpoczęcie celu i powstrzymanie innych. Standardowe cele używane w systemd są wymienione na stroniesystemd.special
(8) podręcznika.Schematy na
bootup
(7) stronie podręcznika w zestawach narzędzi systemowych, w szczególności ten ostatni, pokazują, że istnieją trzy „ostateczne” cele, które są tutaj istotne:halt.target
- Gdy system osiągnie stan pełnej izolacji tego celu, wywołareboot(RB_HALT_SYSTEM)
wywołanie systemowe. Jądro będzie próbowało wejść do programu monitorującego ROM lub po prostu zatrzymało procesor (używając odpowiedniego do tego mechanizmu).reboot.target
- Gdy system osiągnie stan pełnej izolacji tego celu, wywołareboot(RB_AUTOBOOT)
wywołanie systemowe (lub odpowiednik magicznej linii poleceń). Jądro podejmie próbę ponownego uruchomienia komputera.poweroff.target
- Gdy system osiągnie stan pełnej izolacji tego celu, wywołareboot(RB_POWER_OFF)
wywołanie systemowe. Jądro będzie próbowało usunąć zasilanie z systemu, jeśli to możliwe.Są to rzeczy, o których powinieneś myśleć, jak stwierdza końcowy system, a nie poziomy uruchamiania. Zauważ z diagramu, że systemowy system docelowy sam koduje rzeczy, które w innych systemach są raczej niejawne, a nie jawne: na przykład pojęcie, że każdy z tych ostatecznych celów obejmuje
shutdown.target
cel, tak że opisuje się usługi, które muszą zostać zatrzymane przed zamknięciem przez po nich sprzeczne z tymshutdown.target
celem.systemctl
próbuje wysłać żądania,systemd-logind
gdy użytkownik wywołujący nie jest superużytkownikiem. Przechodzi również opóźnione przestoje dosystemd-shutdownd
. Niektóre skróty uruchamiająwall
powiadomienia. Pomijając te złożoności, które spowodowałyby, że ta odpowiedź byłaby kilka razy dłuższa, zakładając, że jesteś obecnie superużytkownikiem i nie żądasz zaplanowanej akcji:systemctl isolate halt.target
ma skróty:shutdown -H now
systemctl halt
halt
systemctl isolate reboot.target
ma skróty:shutdown -r now
telinit 6
systemctl reboot
reboot
systemctl isolate poweroff.target
ma skróty:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
poweroff
systemctl isolate rescue.target
ma skróty:telinit 1
systemctl rescue
systemctl isolate multi-user.target
ma skróty:telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
ma skrót:telinit 5
Po przeanalizowaniu różnych składni wiersza poleceń, wszystkie ostatecznie kończą się tymi samymi ścieżkami kodu w
systemctl
programie.Uwagi:
shutdown now
na przełączeniu do trybu pojedynczego użytkownika . Nie jest tak w przypadku systemd.rescue.target
- zmiana nazwy trybu pojedynczego użytkownika na tryb ratunkowy w systemie - nie jest osiągalna za pomocąshutdown
polecenia.telinit
naprawdę całkowicie ignoruje wszystkie te i dowiązania symboliczne w systemie plików, które opisują strony podręcznika. Powyższe odwzorowania są wbudowane w program, w formie tabeli.runlevelN.target
default.target
systemctl
--force
Opcja dohalt
,reboot
ipoweroff
polecenia jest taki sam, jak mówią--force --force
dosystemctl halt
,systemctl reboot
isystemctl poweroff
poleceń. To sprawia, żesystemctl
spróbuj zadzwonićreboot()
bezpośrednio. Zwykle po prostu próbuje izolować cele.telinit
to nie to samo coinit
. Są to różne programy w świecie systemowym, przy czym ta ostatnia jest inną nazwą dlasystemd
programu, a nie dlasystemctl
programu.systemd
Program nie jest koniecznie skompilowany z dowolnego kompatybilności van Smoorenburg w ogóle, a na niektórych systemach operacyjnych Systemd narzeka powołano nieprawidłowo Jeśli jeden prób .init N
Dalsza lektura
systemctl
. systemowe strony podręcznika. freedesktop.org.systemd.special
. systemowe strony podręcznika. freedesktop.org.bootup
. systemowe strony podręcznika. freedesktop.org.init
. Przewodnik nosh . Oprogramowania.źródło
systemctl reboot
powinno być równoważne zsystemctl start reboot.target --job-mode=replace-irreversible
. Korzystanie z dowolnego innego trybu pracy jest mniej niezawodne. unix.stackexchange.com/questions/381739/…systemctl reboot
czy „bezpieczny” sposób ponownego uruchomienia, np.init 6
W jaki sposób moglibyśmy zrestartować komputer w inny sposób?halt
instruuje sprzęt, aby zatrzymał wszystkie funkcje procesora , ale pozostawia go w stanie włączenia. Zazwyczaj oznacza to, że ktoś musi ponownie uruchomić komputer lub ręcznie wyłączyć urządzenie, naciskając przycisk zasilania później. Konkretny sposób na osiągnięcie tego jest specyficzny dla architektury, ale na przykład zestaw instrukcji x86 zawieraHLT
instrukcje, które zatrzymują centralną jednostkę przetwarzającą (CPU) do momentu uruchomienia następnego zewnętrznego przerwania.poweroff
Jakhalt
, zatrzymuje CPU ale również wysyła ACPI sygnał sprzętowy, który poinstruuje system rozpoczyna się od całkowitego i natychmiastowego wyłączenia. Odpowiada to mniej więcej naciśnięciu przycisku zasilania na typowym komputerze stacjonarnym.Zarówno
halt
ipoweroff
są zazwyczaj symboliczne linki doreboot
pliku wykonywalnego, który zazwyczaj powołują sięshutdown
narzędzia z odpowiednimi argumentami (-h
,-P
lubr
) w zależności czyhalt
,poweroff
lubreboot
został wykorzystany do wywołania funkcji. Jednak gdy--force
opcja zostanie przekazana doreboot
, lub gdy jest na poziomie 0 lub 6,reboot
wywoła wywołaniereboot()
systemowe z odpowiednim kodem polecenia.źródło
/sbin/init 0
Lub/sbin/telinit 0
powinno być takie samo jak zatrzymanie systemu, chociaż określone kroki zależą od systemu inicjującego, takiego jak init System-V , upstart lub systemd . Jeśli korzystasz z RHEL, korzystasz z systemd.halt
,poweroff
Ishutdown -h
są w pełni równoważne. W rzeczywistości zatrzymanie i wyłączenie zasilania nie robi nic poza połączeniemshutdown -h
. Ze strony głównej zatrzymania / wyłączenia:Zamknij następnie przechodzi do zamykania systemu, przechodząc do poziomu 0.
Zatrzymanie i wyłączenie (i ponowne uruchomienie) pełnią podwójną rolę; wykonywane w trakcie zamykania (tj. na poziomie 0 lub 6) wykonują operacje niskiego poziomu wymagane do fizycznego zatrzymania, wyłączenia zasilania lub ponownego uruchomienia komputera, jak opisano w innej odpowiedzi.
źródło