web-dev-qa-db-ja.com

Linuxでsystemdを使用しているかどうかを知る方法は?

私のLinuxがsystemdなどのパッケージで始まっているかどうかをどのようにして知ることができますか?

9
Lucho

PID 1として実行されているプロセスを確認します。これを行うには、ps 1を実行して上部までスクロールします。 systemdがPID 1として実行されている場合は、systemdが実行されています。

または、systemctlを実行して、実行中のsystemdユニットを一覧表示します。

/ sbin/initとは何かを確認することもできます。 file /sbin/initは、それが実際の実行可能ファイルであるか、他のパッケージの実行可能ファイルへのシンボリックリンクであるかを通知します。 systemdボックスでは、例えば:

root@boxy / # file /sbin/init
/sbin/init: symbolic link to ../lib/systemd/systemd

詳細については、こちらをご覧ください: https://en.wikipedia.org/wiki/Linux_startup_process

システムにあるものを正確に確認するもう1つの方法は、man initと入力して、最終的にどのプログラムのmanページが表示されるかを確認することです。

15
ecube

私はこれが古い質問であることを知っていますが、私は自分自身に同じ質問をしていたので、ここに私の2ctがあります。

私が思いついた最善の解決策

ps --no-headers -o comm 1

これはsystemdまたはinitを返し、Linuxディストリビューションとリリース全体で信頼できるようです。

file /sbin/initは、パターンマッチングを利用して機能します。一部のLinuxディストリビューションでは、systemdが使用されているにもかかわらず、「init」(シンボリックリンク)を出力するため、ps 1の出力は役に立ちません。

Debian 8

$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:02 /sbin/init
$ file /sbin/init
/sbin/init: symbolic link to /lib/systemd/systemd

RHEL 7

$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     7:46 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
$ file /sbin/init
/sbin/init: symbolic link to `../lib/systemd/systemd'

SLES 12

$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:24 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
$ file /sbin/init
/sbin/init: symbolic link to `../usr/lib/systemd/systemd'

openSUSE 13.1

$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:33 /sbin/init showopts
$ /sbin/init: symbolic link to `../usr/lib/systemd/systemd'
8
sborsky

これまでに見つけた最良の答えは、どのパッケージが/ sbin/initファイルをインストールしたかをディストリビューションのパッケージマネージャーに尋ねることでした。たとえば、debianベースでは、次のようになります。

dpkg -S /sbin/init

システムに/sbin/initが存在しない場合は、代わりにps 1を使用して、pid 1としてどのプログラムを検索できます。

0
ychaouche