"HaltコマンドとShutdownコマンドの違いは何ですか?" を読んで、一般に、-h/-rオプションの有無にかかわらず、コマンドshutdownが何を行うかを理解しています。
「halt」コマンドは、システムの電源オフを実行して、システムの実行レベル0にします。
「shutdown」コマンドは、-hまたは-rコマンドを使用せずにシステムの電源オフを実行レベル1に実行します。
コマンド「poweroff」は、実行レベル0または1になりますか?これがこれら3つのコマンドの唯一の主な違いですか?
質問のタグごとに、Red Hat Enterprise Linuxを使用しています。バージョン7以降、systemdを使用しています。他の答えはどれもsystemdの世界では正しくありません。また、質問の前提条件の一部でもありません。
halt
ユーティリティからのinit
コマンド用です。/sbin/halt
が/sbin/reboot
へのシンボリックリンクであるというステートメントは無視してください。これはsystemdでは当てはまりません。個別のreboot
プログラムはまったくありません。halt
またはreboot
がコマンドライン引数を使用してshutdown
プログラムを呼び出すステートメントは無視してください。また、systemdでは正しくありません。個別のshutdown
プログラムはまったくありません。すべてのシステム管理ツールセットには、これらのユーティリティのバージョンがあります。 systemd、upstart、 nosh 、van Smoorenburg init
、およびBSD init
には、それぞれ独自のhalt
、poweroff
などがあります。前方へ。それぞれのメカニズムは少し異なります。マニュアルページも同様です。
Systemdツールセット halt
、poweroff
、reboot
、 telinit
、 shutdown
は、all/bin/systemctl
へのシンボリックリンクです。これらはall下位互換性シムであり、systemdの主要なコマンドラインインターフェースsystemctl
を呼び出すための単なる省略形です。それらはすべて、同じsingleプログラムにマップされます(実際にはそうです)。 (慣例により、シェルは呼び出された名前をシェルに通知します。)
これらのコマンドのほとんどは、systemctl
を使用して特定のtargetをisolateするようにsystemdに指示するための省略形です。分離はsystemctl
のマニュアルページ(q.v.)で説明されていますが、この回答では、ターゲットを開始し、他のターゲットを停止すると考えることもできます。 systemdで使用される標準ターゲットは、systemd.special
(8)マニュアルページにリストされています。
Systemdツールセットのbootup
(7)マニュアルページの図、特に最後の図は、ここに関連する3つの「最終的な」ターゲットがあることを示しています。
halt.target
—システムがこのターゲットを完全に分離する状態に達すると、reboot(RB_HALT_SYSTEM)
システムコールが呼び出されます。カーネルは、ROM監視プログラムに入るのを試みるか、単にCPUを停止しました(適切なメカニズムを使用して)。reboot.target
—システムがこのターゲットを完全に分離する状態に到達すると、reboot(RB_AUTOBOOT)
システムコール(または同等の魔法のコマンドライン)が呼び出されます。カーネルは再起動をトリガーしようとしました。poweroff.target
—システムがこのターゲットを完全に分離する状態に達すると、reboot(RB_POWER_OFF)
システムコールが呼び出されます。カーネルは、可能であれば、システムの電源を切断しようとしました。これらは、実行レベルではなく、最終的なシステムの状態として考慮する必要があることです。図から、systemdターゲットシステム自体が、他のシステムでは明示的ではなく暗黙的であるものをエンコードしていることに注意してください。たとえば、これらの最終ターゲットのそれぞれがshutdown.target
ターゲットを包含しているため、シャットダウン前に停止する必要のあるサービスを記述できるshutdown.target
ターゲットとconflictすることで.
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
の略記:telinit 5
さまざまな異なるコマンドライン構文を解析した後、これらすべては最終的にsystemctl
プログラム内の同じコードパスになります。
ノート:
shutdown now
の従来の動作は、シングルユーザーモードに切り替えることでした。これはsystemdには当てはまりません。 rescue.target
— systemdで名前が変更されているシングルユーザーモードレスキューモード— shutdown
コマンドで到達できません。telinit
は、マニュアルページで説明されているファイルシステム内のrunlevelN.target
およびdefault.target
シンボリックリンクのすべてを完全に無視します。前述のマッピングは、テーブル内のsystemctl
プログラムに組み込まれています。halt
、reboot
、およびpoweroff
コマンドの--force
オプションは、--force --force
、systemctl halt
、およびsystemctl reboot
コマンドにsystemctl poweroff
を指定するのと同じです。これにより、systemctl
はreboot()
を直接呼び出そうとします。通常、ターゲットを分離しようとします。telinit
はinit
と同じではありません。これらはsystemdの世界では異なるプログラムであり、後者はsystemd
プログラムではなくsystemctl
プログラムの別名です。 systemd
プログラムは、必ずしもファンスモーレンブルクの互換性を備えてコンパイルされているとは限りません。また、一部のsystemdオペレーティングシステムでは、init N
を実行しようとすると、誤って呼び出されるという不満があります。systemctl
。 systemdのマニュアルページ。 freedesktop.org。systemd.special
。 systemdのマニュアルページ。 freedesktop.org。bootup
。 systemdのマニュアルページ。 freedesktop.org。init
。 noshガイド。ソフトウェア。halt
ハードウェアに すべてのCPU機能を停止する を指示しますが、電源が入った状態のままにします。これは通常、後で電源ボタンを押して手動でマシンを再起動またはシャットダウンする必要があることを意味します。これを実現する特定の方法はアーキテクチャ固有ですが、たとえばx86命令セットは、次の外部割り込みが発生するまで中央処理装置(CPU)を停止する HLT
命令を提供します。
poweroff
は、halt
と同様に、CPUを停止しますが、 [〜#〜] acpi [〜#〜] ハードウェア信号も送信します。完全な即時シャットダウンを開始するようにシステムに指示します。これは、一般的なデスクトップコンピュータの電源ボタンを押すのとほぼ同じです。
halt
とpoweroff
は通常、reboot
実行可能ファイルへのシンボリックリンクであり、通常は適切な shutdown
ツールを呼び出しますツールの呼び出しにr
、halt
またはpoweroff
が使用されたかどうかに応じて、引数(_-h
_、_-P
_またはreboot
) 。ただし、_--force
_オプションがreboot
に渡される場合、またはランレベル0または6の場合、reboot
は reboot()
を呼び出します=適切なコマンドコード自体を使用したシステムコール。
halt
、poweroff
およびshutdown -h
は完全に同等です。実際、haltとpoweroffはshutdown -h
を呼び出すだけです。 halt/poweroffマンページから:
システムがランレベル0または6ではないときに停止または再起動が呼び出された場合、つまり、システムが正常に実行されている場合、代わりにシャットダウンが呼び出されます(-hまたは-rフラグを使用)。詳細については、shutdown(8)のマンページを参照してください。
シャットダウンは、ランレベル0に切り替えてシステムをシャットダウンします。
停止と電源オフ(および再起動)は2つの役割を果たします。シャットダウンのプロセスで実行されると(つまり、ランレベル0または6)、別の回答で説明されているように、マシンを物理的に停止、電源オフ、または再起動するために必要な低レベルの操作を実行します。