web-dev-qa-db-ja.com

HaltコマンドとShutdownコマンドの違いは何ですか?

haltコマンドとshutdownコマンドの違いは何ですか?

100
wassimans

通常、 shutdownコマンド を使用します。シャットダウンまたはリブートの前に時間遅延と警告メッセージを許可します。これは、マルチユーザーシェルサーバーのシステム管理にとって重要です。ユーザーにダウンタイムを事前に通知できます。

そのため、shutdownコマンドを次のように使用して、コンピューターをすぐに停止/オフにする必要があります(少なくともLinuxおよびFreeBSDの場合)。

shutdown -h now

または、カスタムの30分の事前警告で再起動するには:

shutdown -r +30 "Planned software upgrades"

遅延後、shutdowninit にランレベル0(停止)または6(再起動)に変更するよう指示します。 (-hまたは-rを省略すると、システムはシングルユーザーモード(ランレベル1)になり、ほとんどのシステムプロセスが強制終了されますが、実際にはシステムが停止するわけではありません。管理者は、 rootとしてログインしたままにします。)

システムプロセスが強制終了され、ファイルシステムがアンマウントされると、システムは自動的に停止/電源オフまたは再起動します。これは haltまたはrebootコマンド を使用して行われます。これにより、変更がディスクに同期され、実際の停止/電源オフまたは再起動が実行されます。

Linuxでは、システムがシャットダウンプロセスをまだ開始していないときにhaltまたはrebootを実行すると、目的のアクションを直接実行するのではなく、shutdownコマンドが自動的に呼び出されます。ただし、 FreeBSDなどのシステム の場合、これらのコマンドは最初に wtmp にアクションを記録し、次にすぐにプロセスを強制終了したり、ファイルシステムをアンマウントしたりせずに、停止/再起動を自分で実行します。

80
PleaseStand

過去

1980年代、BSDにはhaltreboot、およびshutdownがありました。 System 5 UNIXには、BSD互換ツールセットがありました。しかし、ネイティブには独自の異なるshutdownコマンドがありました。 haltまたはrebootがまったくありませんでした。 (一部のSystem 5バリアントには、SCO XENIXのhaltsysのようなものがありました。)

BSDのhaltコマンドとrebootコマンドは、低レベルで徹底的で即時的でした。 considerate BSDシステムをシャットダウンする方法は、shutdownコマンドでした。これにより、予期されるすべてのことが実行されました。ユーザーへのwallメッセージ、サービス強制終了、ログエントリの書き込み、ログインの無効化など。

BSDの大部分は、「shutdown execs halt/reboot」という受け止められた知恵が起源であり、後者は慎重に使用されることでした。 halt/rebootは便利な省略形であり、それ以上のものではないという反対の習慣を人々が知ったのはSystem 5の世界でした。「BSD互換パッケージ」の_/usr/ucb/halt_は、実際には_shutdown -h_とは異なります。彼らはどちらも_init 0_をやってしまいました。

参考文献

今日

今日、私たちはさまざまな可能なシステム管理ツールセットを持っています。 BSDには、1990年代に起こりうるAT&Tismsが一掃されたとしても、依然としてツールセットがあります。 Miquel van Smoorenburgは1992年にLinux init + rcとそれに関連するツールを(再)書きました。 UNIX System 5のソフトウェア(そしてinitだけではありません)。 systemdpstart 、および nosh もあり、それぞれに独自の実装haltrebootfasthaltfastbootなど。

ツールセットも成長し、変更されました。現在、poweroffコマンドがあります。1980年代のオペレーティングシステムには存在しません。ほとんどの現代的なマシンの中央処理装置には、電源を制御する方法がなかったためです。特にLinuxツールセットはBSDコマンドを取得しています。しかし、UNIX System 5のBSD互換性ツールと同様に、それらはまったく同じように動作するわけではなく、物事は大幅にフラット化されています。

この平坦化により、haltshutdownmostlyと同じになるようになりました。ただし、正確な詳細はツールセットごとに異なり、各ツールセットのメカニズムはすべてわずかに異なります。

また、このコマンドセットが互換性オプションで非常に忙しくなり、ユーザーが_reboot --halt_と_poweroff --reboot_のような矛盾する命令をコンピューターに与えることができるようになり、少し恥ずかしい立場にも達しました。 nosh haltfasthaltrebootfastboot、およびpoweroffコマンドのマニュアルページ。 ☺

Systemdツールセット

haltrebootpowerofftelinit、およびshutdownすべて1つのプログラムです。これは実際にはsystemd独自のsystemctlプログラムです。これらのコマンドのさまざまなコマンドライン構文とその独自のコマンドラインパーサーはいくつかありますが、その後、内部的に1つのコードパスに集中します。 haltとそのコマンドオプションを使用してアクションをトリガーするのと、shutdownとそのコマンドオプションを使用して同じアクションをトリガーするのに違いはありません。

systemdはレスキューモード(systemdの人々が名前を変更したものシングルユーザーモード)をシャットダウンシステム状態と見なさず、これらのいずれにも到達できませんコマンド。オプションなしの_shutdown now_はpoweroffと同じです。

参考文献:

BSD

BSDは1980年代のセマンティクスをほとんど保持しています。したがって、haltshutdownは、ツールセットではnotと同等です。 haltrebootは単一のプログラムです。そして、まだ低レベルで、即時的で、抜本的です。一方、shutdownpoweroffも1つのプログラムで、スケジュールされたシャットダウン、wallメッセージの書き込み、アクションのログ記録、ログインの無効化など、思いやりのあるすべてのことを行います。

BSDツールセットでは、従来、shutdown/poweroffは最終的にhalt/rebootを呼び出して最終的なシステム状態の変更を実行していました。 (最近は正しくないことが多い)は、 "shutdown execs halt/reboot"が実際にはNetBSDとOpenBSDでも引き続き有効であるという知恵を受け取りました。ただし、FreeBSD/TrueOS/DragonFlyBSDでは、_-o_オプションが使用されている場合にのみ当てはまります。これらのBSDでは、両方これらのプログラムの通常さまざまな信号(INT、_USR1_、および_USR2_)が#1を処理します。 initallこれらのシステムのシステム状態管理を行います。

それらすべてのオプションなしの_shutdown now_は、haltreboot、またはpoweroffのいずれとも同等ではありません。 BSD シングルユーザーモードに移行し、そこから戻るマルチユーザーモードに移行できます。

参考文献:

Noshツールセット

Noshシステム管理ツールセットでは、haltfasthaltpowerofffastpoweroffreboot、およびfastbootはすべて1つのプログラム。これは後方互換性のあるシムであり、通常は単にshutdown、つまり受け取った知恵のoppositeにチェーンします。 _--force_オプションは、代わりに_system-control_にチェーンします。

そのため、このツールセットでは、haltコマンドとshutdownコマンド(同等のオプションを使用)の間に違いはありません(_--force_はありません)。 "コマンドは単にshutdownの上の薄いシムレイヤーです。

参考文献:

新興ツールセット

Noshと同様に、新興のシステム管理ツールセットでは、受け取ったBSDの知恵の反対が適用されます。 haltreboot、およびpoweroffはすべて1つのプログラムであり、通常はshutdownにチェーンされます。 _--force_オプションを使用しない限り、reboot()システムコール自体が呼び出されます。

そのため、このツールセットでは、haltコマンドとshutdownコマンド(同等のオプションを使用)の間に違いはありません(_--force_がない)。また、オプションなしの_shutdown now_(haltreboot、またはpoweroffはすべて、オプションを設定しているため、最終的には起動できません)により、システムはシングルユーザーモードシャットダウンするのではなく。

参考文献:

Linuxシステム5 init + rcツールセット

繰り返しますが、このツールセットでは、受け取ったBSDの知恵の反対が適用され、haltおよびrebootshutdownに単純にチェーンします—システムがすでに電源オフまたは「実行レベル」を停止していない限り"、その場合、これらのコマンドは実際に最終的なシステム状態の変更を実行します。 shutdownはそのターンでinitにチェーンします。

つまり、前者は後者を呼び出すだけなので、haltshutdownの間には(システムがalready大幅にシャットダウンされていない限り)違いはありません。そして、はい、繰り返しますが、オプションなしの_shutdown now_(haltreboot、またはpoweroffのいずれも、オプションをすべて設定しているため、最終的に呼び出すことができません)システムをシャットダウンするのではなく、シングルユーザーモードにします。

52
JdeBP

これは、使用しているUNIX/Linuxのバージョンに多少依存していると思います。 Centos(および私は他の最新のLinuxを期待しています)では、停止を呼び出してシャットダウンします( runlevel 0または6ではない場合)。したがって、システムは完全にシャットダウンされます。 Solaris 10では、停止はより残酷です。ディスクキャッシュをフラッシュし、システムの電源を切るだけです。スクリプトの実行やシャットダウン smf 機能は試行されません。

11
user591

AWS EC2を使用する場合:AWSではshutdownstopsインスタンス、halt終了の場合。

3
dveim

Linuxでは、「halt」と「reboot」はシャットダウンコマンドのエイリアスです-shutdown -hおよびshutdown -rそれぞれ。一般的なシャットダウンでは、通常-hが想定されます。

0
Shadur