Linuxシステムを使っていると、「デーモン(Daemon)」や「systemdユニット(Unit)」という言葉をよく目にします。どちらもLinuxオペレーティングシステムにおいて重要な役割を担っていますが、意味や機能は同じではありません。この記事では、初心者にもわかりやすいように、デーモンとsystemdユニットの概念、違い、そして種類について解説します。

1. デーモン(Daemon)とは?

デーモンとは、バックグラウンドで動作するプログラムのことです。ユーザーが直接起動しなくても自動的に立ち上がり、システム上の特定の機能を継続的に担います。主な用途としては、Webサーバー、データベース、ネットワーク関連のサービスなどがあります。デーモンは通常、ユーザーと直接やり取りすることはなく、システムの起動時に開始され、その後も継続して動作し続けます。

デーモンの主な特徴:

  • バックグラウンドで動作する:デーモンは、システムが稼働している間、継続的に動作します。
  • 自動的に起動する:多くのデーモンは、システムの起動時に自動的に開始されます。
  • 名前の付け方に特徴がある:一般的に、デーモンの名前は「d」で終わることが多いです。たとえば、sshd はSSHサービスを提供するデーモンであり、httpd はWebサーバー機能を提供するデーモンです。

2. systemdユニット(Unit)とは?

systemdは、現代のLinuxで広く使われているシステムおよびサービスの管理機構です。システムの起動から各種サービスの開始・停止まで、さまざまな処理を管理しています。その管理を効率よく行うために使われるのが、ユニット(Unit) という概念です。

ユニットとは、systemdがシステム上のさまざまな要素を管理するための基本単位です。対象はデーモンだけではなく、タイマー、マウントポイント、ソケットなど多岐にわたります。

ユニットの主な種類:

  • サービスユニット(.service):デーモンのようなバックグラウンドサービスを管理します。
  • タイマーユニット(.timer):特定の時刻や一定の間隔で処理を実行します。
  • マウントユニット(.mount):ファイルシステムのマウントを管理します。
  • ソケットユニット(.socket):ネットワークソケットを管理し、必要に応じて関連サービスを起動します。
  • ターゲットユニット(.target):複数のユニットをまとめて、システムの特定の状態を表します。

3. デーモンとsystemdユニットの違い

  • デーモン:バックグラウンドで動作するプログラムそのものを指し、システムサービスの一種です。主に、特定の処理を継続的に実行する役割を担います。
  • systemdユニット:サービス、タイマー、マウントなど、システム上のさまざまな要素を管理するための単位です。デーモンはその中の一例にすぎず、すべてのユニットがデーモンというわけではありません。

つまり、systemdはデーモンを含む多様なユニットを制御できる仕組みであり、デーモンはその管理対象のひとつです。systemdはデーモンだけでなく、タイマーやマウントポイントなど、システム運用に欠かせないさまざまな要素を一元的に管理します。

4. 例で見るデーモンとsystemdユニット

  • sshd.service:SSHデーモンを管理するサービスユニットです。ユーザーがリモートから接続できるように、バックグラウンドでSSHサービスを提供します。
  • cron.servicecron は定期的な処理を実行するためのデーモンであり、これもsystemdによって管理されるサービスユニットです。
  • tmp.mount/tmp ディレクトリをマウントするためのマウントユニットです。デーモンではありませんが、システムにとって重要な役割を果たします。

5. まとめ

デーモンは、バックグラウンドで動作するプログラムであり、システムサービスの一形態です。一方、systemdユニットは、システム上のさまざまな要素を管理するための単位であり、デーモンもその中に含まれますが、それだけを指すわけではありません。systemdは、デーモンに加えて、タイマー、マウント、ソケットなど、さまざまな機能を管理する仕組みです。

Linuxに初めて触れる人にとっては、デーモンとユニットの違いが少しわかりにくいかもしれません。しかし、簡単に言えば次のように整理できます。

  • デーモン:バックグラウンドで動作するプログラム
  • systemdユニット:システム上のさまざまな要素を管理するための単位

systemdは、デーモンを含むさまざまなシステム要素を管理することで、Linuxシステムを効率よく動作させています。


次回予告:次の記事では、systemdユニットを操作するコマンド systemctl について解説します。systemctl を使ったユニットの開始・停止の方法や、有効化・無効化の方法などを整理して紹介する予定です。