私のLinuxがsystemd
などのパッケージで始まっているかどうかをどのようにして知ることができますか?
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ページが表示されるかを確認することです。
私はこれが古い質問であることを知っていますが、私は自分自身に同じ質問をしていたので、ここに私の2ctがあります。
ps --no-headers -o comm 1
これはsystemd
またはinit
を返し、Linuxディストリビューションとリリース全体で信頼できるようです。
file /sbin/init
は、パターンマッチングを利用して機能します。一部のLinuxディストリビューションでは、systemdが使用されているにもかかわらず、「init」(シンボリックリンク)を出力するため、ps 1
の出力は役に立ちません。
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:02 /sbin/init
$ file /sbin/init
/sbin/init: symbolic link to /lib/systemd/systemd
$ 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'
$ 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'
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:33 /sbin/init showopts
$ /sbin/init: symbolic link to `../usr/lib/systemd/systemd'
これまでに見つけた最良の答えは、どのパッケージが/ sbin/initファイルをインストールしたかをディストリビューションのパッケージマネージャーに尋ねることでした。たとえば、debianベースでは、次のようになります。
dpkg -S /sbin/init
システムに/sbin/init
が存在しない場合は、代わりにps 1
を使用して、pid 1としてどのプログラムを検索できます。