GNU/Linux >> Linux の 問題 >  >> Linux

システムが SysV、Upstart、または Systemd initsystem を使用しているかどうかを確認する方法

init プロセスには常に PID 1 が割り当てられます。 filesystem は、PID を指定して実行可能ファイルへのパスを取得する方法を提供します。

つまり:

[email protected]:~$ sudo stat /proc/1/exe
  File: '/proc/1/exe' -> '/sbin/upstart'

ご覧のとおり、私の Ubuntu 14.10 ボックスの init プロセスは Upstart です。 Ubuntu 15.04 は systemd を使用するため、代わりにそのコマンドを実行すると次の結果が得られます:

[email protected]:~$ sudo stat /proc/1/exe
  File: '/proc/1/exe' -> '/lib/systemd/systemd'

あなたが使用しているシステムが 11 を与える場合 その結果、そのファイルを stat してみることをお勧めします:

[email protected]:~$ sudo stat /proc/1/exe
  File: '/proc/1/exe' -> '/sbin/init'
[email protected]:~$ stat /sbin/init
  File: ‘/sbin/init’ -> ‘/lib/systemd/systemd’

実行して詳細を確認することもできます:

[[email protected] ~]$ /sbin/init --version
init (upstart 0.6.5)
Copyright (C) 2010 Canonical Ltd.

システムを調べてインジケーターを見つけることができます。 1 つの方法は、3 つのディレクトリの存在を確認することです:

  • 28 systemd ベースのシステムを使用していることがわかります。

  • 38 Upstart ベースのシステムを使用していることを示す良い指標です。

  • 45 ボックスの履歴に SysV init があることを示します

問題は、これらはヒューリスティックであり、特定の指標だけではなく、おそらく他のデータと一緒に検討する必要があるということです。私が今見ているUbuntu 14.10ボックスには、3つのディレクトリすべてがあります。なんで? Ubuntu はそのバージョンで Upstart から systemd に切り替えたばかりですが、下位互換性のために Upstart と SysV init を保持しているためです。

結局のところ、ベストアンサーは「経験」だと思います。 CentOS 7 ボックスにログインしたことがわかり、それが systemd であることがわかります。これをどのように学びますか?遊んで、RTFMing など。すべての経験を積むのと同じ方法です。

これはあまり満足のいく答えではないことは承知していますが、それは市場に断片化があり、標準外の設計が作成されたときに起こることです. 53 かどうかをどうやって知るかを尋ねるようなものです 68 を受け入れます 、または 72 、またはカラー出力をまったく行いません。繰り返しますが、答えは「経験」です。


これは実際にはかなり難しい問題です。主な困難の 1 つは、これを最も頻繁に実行したい場所が、インストールまたは変更の途中である可能性が非常に高い場所であるということです。もう 1 つは、インストールされているシステム管理ツールセットの間に微妙ではあるが非常に重要な違いがあることです。 、現在実行中のシステム管理ツールセット 、および次回の起動時に実行されるシステム管理ツールセット .

もちろん、インストールされているものを決定するには、パッケージマネージャーを使用します。しかし、これは、複数のシステムを並べてインストールできるという事実によって複雑になります。

たとえば、Debian Linux では、systemd パッケージをインストールできますが、別の systemd-sysv パッケージをインストールすると、システムがアクティブになります。 systemd と sysvinit パッケージを同時にインストールできるようにすることを目的としています。実際、Debian Linux クラウドは Debian 8 で、すべてのプログラムが異なる名前 (8597104117125 など) まさにこの理由から、「非アクティブ化」パッケージは名前 135 で競合しません。 . 140 次に、「アクティブ化パッケージ」によって次回の起動時に実行するように構成されたものへのシンボリック リンクです。

現在実行されているものと次に実行する準備ができているものを判断するには、一連のツールセット固有のテスト、誤検知によるさまざまな程度のリスク、およびさまざまな程度のドキュメントを使用する必要があります。システム マネージャが現在実行しているものを確認するには、具体的には、プロセス リストまたはシステム マネージャが公開しているさまざまな API を実際に確認する必要があります。しかし、これには落とし穴がまったくないわけではありません。

一般的な初心者

絶対にしないことから始めましょう

  • 158 同じ 168 を指します upstart または System 5 176 の場合 実行中です。また、一部のシステムでは、180 でもあります。 systemd が実行されているとき。

    前述のように、Debian Linux の群集は、すべてのプログラムに異なる名前を付けたいと考えていました。しかし、これは Debian 固有のもので、遠い ユニバーサルから、プログラムが 199 として呼び出された場合、実際には役に立ちません (ブートストラップの initramfs フェーズによって)とにかく。 Felix von Leitner の minit のみが実際に Debian 8 によってパッケージ化され、独自の名前で呼び出されます。

  • 制御 API ファイル 204 の存在 System 5 218 に固有のものではありません . systemd には (非プロセス #1) 223 があります これを提供するサーバー。 Joachim Nilsson の 234 それも提供します。 (さらに楽しくするために、Debian では 243 に配置されています .詳細については、https://superuser.com/a/888936/38062 を参照してください。)
  • systemd、upstart、System 5 255 、および OpenRC はすべて 266 を処理します 、前者の 2 つの場合の後方互換性のため。その存在は、特定のシステムの存在を示すものではありません。

検出システム 5 279

皮肉なことに、https://unix.stackexchange.com/a/196197/5132 で説明されているように、少なくとも Debian Linux では一方向です。 System 5 283 の不在を検出するため 293 がないことです .ただし:

  • これは、305 のようなものをパッケージ化する Debian の方法の副作用です。 .
  • 全体的な問題の一部は、317 です。 System 5 326 の場合は固執します 過去の任意の時点で使用されました 、パッケージをアンインストールしてもその構成ファイルは削除されないためです。 (Debian 7 には 331 にエントリを追加してインストールするパッケージがいくつかあるため、これは Debian 8 の作業にとって大きな問題でした。 .)
  • これは反転テストです。

systemd の検出

「公式」の方法で実行中のシステム マネージャーとして systemd を確認するには、344 の存在を確認します。 .これは 358 のディレクトリです 、systemd 自体がブート時に作成し、他のシステム マネージャーが作成する可能性は低いです。

しかし、それは単にありそうにない .このチェックはすでに壊れています これは、uselessd もこのディレクトリを作成するためです。

その他の非公式のチェックは機能しません:

  • systemd は D-Bus 経由で RPC API 全体を発行します。これにはバージョン名と番号も含まれています。 but:
    • これは、悪名高い「インターフェイスの安定性保証」の対象外であり、明日または気まぐれに変更される可能性があります。
    • systemd-shim のそっくりな D-Bus サーバーも同様です。
    • 役に立たないものもそうです。
  • 362の存在 同様に保証されておらず、同様に uselessd によって複製されています。

ノッシュの検出

376 in nosh は 385 を作成します ディレクトリ。しかし、これは同等の systemd チェックの弱点を共有しています。

その他の非スターター:

  • ノッシュ 393 設計上、ファイルシステムにパイプやソケットを作成せず、そもそも RPC API を持っていません。
  • ノッシュ 409 従来、410 に API ソケットがあります。 、しかし nosh service を実行できます 他のシステム マネージャーの下にあるマネージャー。そのため、これではシステムがわかりません manager はプロセス #1 として実行されています。いずれにせよ、その名前自体は設定されません。呼び出されたものは何でも。
  • 420 によって出力される nosh バージョン文字列の存在 、 430 (systemd 互換シムがインストールされている場合) および 441 (upstart 互換性シムがインストールされている場合) これらのツールは実行中のシステムのクエリを行わないため、ツールセットの存在のみを示します。

新興企業の検出

Upstart 独自の 458 D-Bus 経由で API 呼び出しを行い、公式のチェックは 467 を実行できることの両方をチェックすることです その出力には文字列「upstart」がどこかに含まれています。

ただし、systemd API と同様:

  • API が明日にも使用できる、または気まぐれに変更されないという保証はありません。
  • 一部の互換性シムが存在しない、または将来存在しないという保証はありません。

    実際、すでに互換性シムが 1 つあります。 nosh には、upstart 478 にシムを提供する upstart 互換パッケージがあります。 、 484497 、および 506 コマンド。幸いなことに (これは意図的なものでしたが)、510 shim は「成り上がり」という言葉を発しません。

    root ~ #initctl version
    nosh version 1.14
    root ~ #

Linux
  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. Systemdは/etc/init.dスクリプトをどのように使用しますか?

  3. Firefoxのビンがどこにあるかを知る方法は?

  1. Centos – / usr / lib / systemd/systemと/etc/ systemd / systemの違いは何ですか?

  2. プロセスが実行されているフォルダーを見つける方法は?

  3. /usr/sbin、/usr/local/sbin、/usr/local/bin の意味は何ですか?

  1. Linux –システムに搭載されているハードディスクを確認する方法は?

  2. Linux で systemd を使用しているかどうかを確認するにはどうすればよいですか?

  3. サーバーに何らかの IPMI があるかどうかを確認するにはどうすればよいですか?