はじめに
この実験では、systemd を使用して Linux でシステムサービスがマスクされているかどうかを確認する方法を学びます。サービスをマスクすると、そのサービスが起動しなくなります。これはシステム管理とトラブルシューティングにおける重要な概念です。特定のサービスのマスク状態を確認するために systemctl is-masked コマンドを使用し、systemd ユニットファイルの全体像を把握するために systemctl list-unit-files コマンドを使用します。最後に、これらの設定が保存されている場所を理解するために、systemd の設定ディレクトリを調査します。
systemctl is-masked でサービスのマスク状態を確認する
このステップでは、Ubuntu のような最新の Linux ディストリビューションにおけるシステムおよびサービスマネージャである systemd の調査を始めます。systemd は、サービス(Web サーバー、データベースなど)やその他のシステムリソースの起動、停止、管理を担当しています。
systemd における重要な概念の 1 つが、サービスの「マスク」です。サービスをマスクすると、手動でも他のサービスによっても起動できなくなります。これはサービスを完全に無効にする方法です。
systemctl is-masked コマンドを使用して、サービスがマスクされているかどうかを確認できます。一般的なサービスである apache2 の状態を確認してみましょう。Apache は人気のある Web サーバーです。
ターミナルが開いていない場合は開きます。デスクトップの左側にある Xfce Terminal アイコンから開くことができます。
次のコマンドを入力し、Enter キーを押します。
systemctl is-masked apache2
次のような出力が表示されるはずです。
inactive
この出力は、apache2 サービスがマスクされていないことを示しています。マスクされている場合は、出力は masked になります。
この環境ではデフォルトで通常マスクされているサービス、たとえば systemd-udevd-kernel.socket の確認を試してみましょう。これは低レベルのシステムサービスです。
次のコマンドを入力し、Enter キーを押します。
systemctl is-masked systemd-udevd-kernel.socket
出力は次のようになるはずです。
masked
これにより、systemd-udevd-kernel.socket サービスが実際にマスクされていることが確認できます。
サービスがマスクされているかどうかを理解することは、システムのトラブルシューティングと管理において重要です。サービスが起動しない場合、マスク状態を確認することが多くの場合最初のステップの 1 つになります。
Continue をクリックして次のステップに進みます。
systemctl list-unit-files でユニットファイルを一覧表示する
前のステップでは、systemctl is-masked を使用して個々のサービスの状態を確認しました。今度は、systemd が認識しているすべてのユニットファイルの全体像を把握しましょう。
systemd はさまざまな種類の「ユニット」を管理します。これらは、サービス、マウントポイント、デバイス、ソケットなどを定義する設定ファイルです。最も一般的なタイプは .service ユニットで、これはバックグラウンドプロセス(サービス)の実行方法を定義します。
systemctl list-unit-files コマンドは、インストールされているすべてのユニットファイルとその「有効化」状態の一覧を表示します。有効化状態は、ユニットが起動時に自動的に起動するように設定されているかどうかを示します。
ターミナルに次のコマンドを入力し、Enter キーを押します。
systemctl list-unit-files
このコマンドは、長いユニットファイルの一覧を出力します。出力は次のようになります(一部のみ表示)。
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
sys-kernel-tracing.mount static
...
apache2.service disabled
...
出力には 2 つの列があります。
UNIT FILE:ユニットファイルの名前(例:apache2.service)。STATE:ユニットの有効化状態(例:static、enabled、disabled、masked)。
いくつかの一般的な状態の簡単な説明を以下に示します。
enabled:ユニットは起動時に自動的に起動するように設定されています。disabled:ユニットは起動時に自動的に起動するように設定されていません。static:ユニットは有効化または無効化できません。その起動は別のユニットによって制御されます。masked:ユニットは完全に無効化されており、起動できません。
ターミナルのスクロールバーを使用するか、出力を less のようなページャにパイプすることで、出力をスクロールできます。例えば:
systemctl list-unit-files | less
less の中では、矢印キーでスクロールし、スペースバーで 1 ページ下に移動し、q を押して終了できます。
このコマンドは、システムにインストールされているサービスとその起動設定を確認するのに非常に便利です。
Continue をクリックして次に進みます。
/etc/systemd 内の systemd 設定を調査する
前のステップでは、systemctl コマンドを使用して systemd とやり取りしました。今度は、systemd が設定ファイルを保存している場所を見てみましょう。
systemd の設定ファイルの主要なディレクトリは /etc/systemd です。このディレクトリには、さまざまな種類のユニットファイルと設定のサブディレクトリが含まれています。
ls コマンドを使用して /etc/systemd ディレクトリの内容を一覧表示しましょう。 /etc は Linux で設定ファイルを格納する標準的なディレクトリです。
ターミナルに次のコマンドを入力し、Enter キーを押します。
ls /etc/systemd/
次のようなディレクトリとファイルの一覧が表示されます。
journald.conf logind.conf networkd.conf resolved.conf system system.conf timesyncd.conf user user.conf
ここで最も重要なサブディレクトリは /etc/systemd/system です。ここにはシステム全体のユニットファイルが配置されるか、リンクが張られることが多いです。このディレクトリの中身を見てみましょう。
cd コマンドを使用して現在のディレクトリを /etc/systemd/system に変更します。
cd /etc/systemd/system
次に、このディレクトリの内容を一覧表示します。
ls
ファイルとディレクトリの一覧が表示され、その多くは他の場所(多くの場合 /lib/systemd/system)にある実際のユニットファイルを指すシンボリックリンク (->) です。これがサービスを有効または無効にする方法です – これらのシンボリックリンクを作成または削除することです。
たとえば、次のようなものが表示されるかもしれません。
multi-user.target.wants -> /lib/systemd/system/multi-user.target.wants
sockets.target.wants -> /lib/systemd/system/sockets.target.wants
...
.wants ディレクトリには、そのターゲットに到達したときに起動すべきサービスへのシンボリックリンクが含まれています。たとえば、multi-user.target.wants には、システムがマルチユーザー状態(起動後など)にあるときに実行すべきサービスへのリンクが含まれています。
multi-user.target.wants ディレクトリの中身を見てみましょう。
ls multi-user.target.wants/
マルチユーザーターゲットで起動するように有効になっているサービスの一覧が表示されます。
anacron.service -> ../anacron.service
apache2.service -> ../../apache2.service
...
これは、apache2.service がここにリンクされていることを示しており、マルチユーザーターゲットで起動するように有効になっていることを意味します。
/etc/systemd/system ディレクトリを調べることで、systemd がシステム上のサービスをどのように整理し、管理しているかを理解するのに役立ちます。
Continue をクリックしてこの実験を終了します。
まとめ
この実験では、Linux の systemd の探索を始め、システムサービスが「マスク」されているかどうかを判断する方法に焦点を当てました。サービスをマスクすることは、そのサービスを完全に無効化し、どんな状況でも起動しないようにする方法です。systemctl is-masked コマンドを使用して特定のサービスのマスク状態を確認する方法を学び、apache2 はマスクされていない一方で、systemd-udevd-kernel.socket はマスクされていることを確認しました。マスク状態を理解することは、サービスの起動問題をトラブルシューティングする上で基本的なステップです。
次に、systemctl list-unit-files を使用して、systemd によって管理されているすべてのユニットファイル(さまざまなシステムリソースやサービスを表す設定ファイル)の全体像を把握しました。このコマンドは、ユニットとその状態の包括的なリストを提供し、個々のサービスのチェックを超えたシステムの設定の幅広い視点を提供します。



