読んで「停止およびシャットダウンコマンドの違いは何ですか?」、-h / -rオプションの有無にかかわらず、コマンドshutdownが何をするのか、一般的に考えています。
「halt」コマンドは、システムの実行レベル0へのシステムの電源オフを実行します。
「shutdown」コマンドは、-hまたは-rコマンドなしで実行レベル1へのシステムの電源オフを実行します。
コマンド「poweroff」は実行レベル0または1になりますか?これが、これら3つのコマンドの唯一の主な違いですか?
読んで「停止およびシャットダウンコマンドの違いは何ですか?」、-h / -rオプションの有無にかかわらず、コマンドshutdownが何をするのか、一般的に考えています。
「halt」コマンドは、システムの実行レベル0へのシステムの電源オフを実行します。
「shutdown」コマンドは、-hまたは-rコマンドなしで実行レベル1へのシステムの電源オフを実行します。
コマンド「poweroff」は実行レベル0または1になりますか?これが、これら3つのコマンドの唯一の主な違いですか?
回答:
質問のタグごとに、Red Hat Enterprise Linuxを使用しています。バージョン7以降、systemdを使用しています。systemdの世界にとって、他の答えはどれも正しくありません。また、あなたの質問にある仮定のいくつかもありません。
halt
は、van Smoorenburgの「System 5」init
ユーティリティからのコマンド用です。 /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
。それらはすべて、同じ単一のプログラムにマップされます(実際はそうです)。(慣例により、シェルはどの名前で呼び出されたかを通知します。)
これらのコマンドのほとんどは、特定のターゲットsystemctl
を分離するためにを使用してsystemdに伝えるための省略形です。分離はマニュアルページ(qv)で説明されていますが、この回答の目的では、ターゲットを開始し、他を停止すると考えることができます。systemdで使用される標準ターゲットは、(8)マニュアルページにリストされています。systemctl
systemd.special
bootup
systemdツールセットの(7)マニュアルページの図、特に最後の図は、ここに関連する3つの「最終」ターゲットがあることを示しています。
halt.target
—システムがこのターゲットを完全に分離する状態に達すると、reboot(RB_HALT_SYSTEM)
システムコールが呼び出されます。カーネルは、ROMモニタープログラムを入力しようとしたか、CPUを単に停止しました(そのために適切なメカニズムを使用します)。reboot.target
—システムがこのターゲットを完全に分離する状態に達すると、reboot(RB_AUTOBOOT)
システムコール(または魔法のコマンドラインと同等のもの)が呼び出されます。カーネルは再起動をトリガーしようとしました。poweroff.target
—システムがこのターゲットを完全に分離する状態に達すると、reboot(RB_POWER_OFF)
システムコールが呼び出されます。可能であれば、カーネルはシステムの電源をオフにしようとします。これらは、実行レベルではなく、最終的なシステム状態として考える必要があるものです。そのようなこれらの最終目標のそれぞれが含まれるという考えのように:にsystemdターゲット・システム自体は、他のシステムでは、あるもの、暗黙的ではなく、明示的な符号化の図からのお知らせshutdown.target
その1がでシャットダウン前に停止しなければならないサービスについて説明しますので、ターゲットをそれらがターゲットと競合するようにし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
速記があります:
telinit 5
さまざまな異なるコマンドライン構文を解析した後、これらは最終的にsystemctl
プログラム内の同じコードパスになります。
ノート:
shutdown now
、シングルユーザーモードに切り替えることでした。これはsystemdには当てはまりません。 rescue.target
— systemdでレスキューモードに名前が変更されているシングルユーザーモード— shutdown
コマンドでアクセスできません。telinit
本当にん完全にそれらのすべてを無視し、マニュアルページを記述するファイルシステムでのシンボリックリンクを。上記のマッピングは、テーブルにプログラムに組み込まれています。runlevelN.target
default.target
systemctl
--force
オプションhalt
、reboot
およびpoweroff
コマンドが言うように同じである--force --force
にsystemctl halt
、systemctl reboot
とsystemctl poweroff
命令。これにより、直接systemctl
呼び出しを試みますreboot()
。通常、ターゲットを隔離しようとします。telinit
はと同じではありませんinit
。システム化された世界では異なるプログラムであり、後者はsystemd
プログラムではなくプログラムの別名systemctl
です。systemd
プログラムは、必ずしもすべての任意のバンSmoorenburgの互換性、およびいくつかにsystemdのオペレーティングシステム上でコンパイルされていない1段のしようとした場合、誤って呼び出されて文句を言います。init N
systemctl
。systemdのマニュアルページ。freedesktop.org。systemd.special
。systemdのマニュアルページ。freedesktop.org。bootup
。systemdのマニュアルページ。freedesktop.org。init
。間食ガイド。ソフトウェア。systemctl reboot
に相当する必要がありますsystemctl start reboot.target --job-mode=replace-irreversible
。他のジョブモードを使用すると、堅牢性が低下します。 unix.stackexchange.com/questions/381739/…– sourcejedi
systemctl reboot
「安全な」再起動init 6
方法です。
halt
すべてのCPU機能を停止するようにハードウェアに指示しますが、電源オン状態のままにします。これは通常、誰かが後で電源ボタンを押して手動でマシンを再起動またはシャットダウンする必要があることを意味します。これを実現する特定の方法はアーキテクチャ固有ですが、たとえば、x86命令セットはHLT
、次の外部割り込みが発生するまで中央処理装置(CPU)を停止する命令を提供します。
poweroff
のようhalt
に、CPUを停止しますが、ACPIハードウェア信号も送信します。これは、完全かつ即時のシャットダウンで開始するようにシステムに指示します。これは、一般的なデスクトップコンピューターで電源ボタンを押すのとほぼ同じです。
両方halt
とはpoweroff
通常へのシンボリックリンクであるreboot
通常起動する実行可能な、shutdown
適切な引数(とツール-h
、-P
またはr
場合に応じて)halt
、poweroff
またはreboot
ツールを起動するために使用しました。ただし、--force
オプションがに渡されるreboot
とき、またはランレベル0または6のときは、適切なコマンドコード自体でシステムコールをreboot
呼び出しreboot()
ます。
/sbin/init 0
たり/sbin/telinit 0
取ら特定のステップのような、問題のinitシステムに依存するものの、システムを停止すると同じにする必要があり、システム-Vの初期化、成り上がりかにsystemd。RHELを実行している場合、systemdを使用します。
halt
、poweroff
およびshutdown -h
完全に同等です。実際、haltとpoweroffはを呼び出すだけshutdown -h
です。halt / poweroffマンページから:
システムがランレベル0または6でない場合、つまり正常に実行されている場合に、haltまたはrebootが呼び出されると、代わりにシャットダウンが呼び出されます(-hまたは-rフラグを使用)。詳細については、shutdown(8)マンページを参照してください。
その後、シャットダウンはランレベル0に切り替えてシステムをシャットダウンします。
停止と電源オフ(および再起動)は二重の役割を果たします。シャットダウンのプロセス(つまり、ランレベル0または6)で実行されると、別の回答で説明されているように、マシンの物理的な停止、電源オフ、または再起動に必要な低レベルの操作を実行します。