Linuxで実行中のサービスをリストする方法:すべてのinitシステムのための完全ガイド

2025-02-12

はじめに

Linuxサービスは、ネットワークの管理、ユーザーログインの処理、ウェブサーバーの実行など、システムタスクを実行するために継続的に動作するバックグラウンドプロセスです。これらのサービスは、使用しているLinuxディストリビューションやinitシステムに応じて、さまざまなツールを通じて管理できます。

実行中のサービスをリストする方法を知っておくことは、システム管理者や開発者にとって不可欠です。これにより、以下のことが可能になります:

  • 問題のトラブルシューティング – 重要なサービスが実行中か、失敗しているかを確認する。
  • パフォーマンスの監視 – リソースを多く消費しているサービスを特定する。
  • セキュリティ監査 – 必要なサービスのみがアクティブであることを確認する。

systemctlを使用する(systemdベースのシステム向け)

Ubuntu(16.04以降)、CentOS(7以降)、Fedora、Debian(8以降)などのほとんどの現代のLinuxディストリビューションは、initシステムとしてsystemdを使用しています。systemctlコマンドは、これらのシステムでサービスを管理およびリストするための主要なツールです。

単一サービスのステータスを確認する

特定のサービスが実行中かどうかを確認するには、次のコマンドを使用します:

systemctl status <service-name>

たとえば、nginxウェブサーバーが実行中かどうかを確認するには:

systemctl status nginx

出力には、サービスがアクティブ(実行中)非アクティブ、または失敗しているかどうかが表示され、デバッグ用のログも含まれます。

すべてのアクティブなサービスをリストする

実行中のすべてのサービスをリストするには、次のコマンドを使用します:

systemctl list-units --type=service --state=running

このコマンドは、現在実行中のすべてのサービスのテーブルを表示し、そのステータスを示します。

すべてのサービスをリストする(非アクティブなものも含む)

実行中かどうかに関係なく、すべてのサービスを表示したい場合は:

systemctl list-units --type=service

これには、アクティブ非アクティブ失敗、またはその他の状態のサービスが含まれます。

サービスを状態でフィルタリングする

サービスを状態に基づいてフィルタリングするには、次のコマンドを使用します:

systemctl list-units --type=service --state=failed

これにより、失敗したサービスのみがリストされ、トラブルシューティングに役立ちます。

ブート時に有効なサービスをリストする

自動的にブート時に開始されるサービスを確認するには:

systemctl list-unit-files --type=service | grep enabled

例の出力

systemctl list-units --type=service --state=runningの典型的な出力は次のようになります:

UNIT                        LOAD   ACTIVE SUB     DESCRIPTION
cron.service                loaded active running Regular background program processing daemon
networking.service          loaded active running Raise network interfaces
ssh.service                 loaded active running OpenBSD Secure Shell server
systemd-logind.service      loaded active running Login Service

まとめ

  • systemctl status <service>を使用して、単一サービスのステータスを確認します。
  • systemctl list-units --type=service --state=runningを使用して、アクティブなサービスをリストします。
  • systemctl list-units --type=serviceを使用して、すべてのサービスを表示します。
  • systemctl list-unit-files --type=serviceを使用して、ブート時に有効なサービスを表示します。

psとgrepを使用して実行中のプロセスをリストする

systemctlや他のサービス管理ツールに依存せずに実行中のサービスをリストしたい場合は、ps(プロセスステータス)grepを組み合わせて特定のプロセスを見つけることができます。

この方法は、次のような場合に便利です:

  • systemctlserviceコマンドがない最小限のLinuxシステムで作業しているとき。
  • 特定のプロセスが実行中かどうかを確認したいが、initシステムに関係なく確認したいとき。

すべての実行中のプロセスをリストする

ps auxコマンドは、システム上のすべての実行中のプロセスを表示します:

ps aux

これにより、すべての実行中のプロセスの詳細なリストが生成され、プロセスID(PID)、CPU使用率、メモリ使用率、コマンド名が含まれます。

特定のサービスを検索する

特定のサービスが実行中かどうかを確認するには、ps aux | grep <service-name>を使用します:

ps aux | grep nginx

これにより、「nginx」を含む行が出力され、実行中かどうかが示されます。出力は次のようになるかもしれません:

root      1034  0.0  0.3  49536  3412 ?        Ss   12:34   0:00 nginx: master process /usr/sbin/nginx
www-data  1035  0.0  0.2  49536  2824 ?        S    12:34   0:00 nginx: worker process
user      2045  0.0  0.0  14856   900 pts/0    S+   12:35   0:00 grep --color=auto nginx

ここで:

  • 最初の2行は、nginxサービスが実行中であることを示しています。
  • 最後の行(grep --color=auto nginx)は、grepコマンド自体です。これを除外するには、次のようにします:
ps aux | grep nginx | grep -v grep

階層形式でプロセスを表示する

より構造化されたビューを得るには、次のコマンドを使用します:

ps fax

これにより、実行中のプロセスのツリー構造が表示され、どのサービスが実行中であるか、またその子プロセスを特定しやすくなります。

ポートでサービスを見つける

特定のポートでサービスが実行されていると思われるが、サービス名が不明な場合は、次のコマンドを使用します:

netstat -tulnp | grep :80

または、netstatが利用できない場合:

ss -tulnp | grep :80

これにより、ポート80(通常はNginxやApacheなどのウェブサーバーが使用)を使用しているプロセスがリストされます。

まとめ

  • ps auxを使用して、すべての実行中のプロセスをリストします。
  • ps aux | grep <service-name>を使用して、特定のサービスを確認します。
  • ps faxを使用して、プロセスのツリー表示を取得します。
  • netstat -tulnpまたはss -tulnpを使用して、特定のポートで実行中のサービスを見つけます。
Linuxで実行中のサービスをリストする方法

FAQ(よくある質問)

1. Linuxでサービスが実行中かどうかを確認するにはどうすればよいですか?

Linuxディストリビューションに応じて、さまざまな方法を使用できます:

  • systemdベースのシステムの場合:
    systemctl status <service-name>
    
  • SysVinitベースのシステムの場合:
    service <service-name> status
    
  • psとgrepを使用する場合:
    ps aux | grep <service-name>
    

2. すべての実行中のサービスをリストするにはどうすればよいですか?

  • systemdベースのシステムの場合:
    systemctl list-units --type=service --state=running
    
  • SysVinitベースのシステムの場合:
    service --status-all
    
  • psコマンドを使用する場合:
    ps aux
    

3. サービスがブート時に開始されるかどうかを確認するにはどうすればよいですか?

  • systemdの場合:
    systemctl is-enabled <service-name>
    
  • SysVinit(RHELベースのシステム)の場合:
    chkconfig --list <service-name>
    

4. サービスを再起動するにはどうすればよいですか?

  • systemdベースのシステムの場合:
    sudo systemctl restart <service-name>
    
  • SysVinitベースのシステムの場合:
    sudo service <service-name> restart
    

5. サービスを停止または無効にするにはどうすればよいですか?

  • サービスを一時的に停止するには:
    sudo systemctl stop <service-name>
    
  • ブート時にサービスが開始されないようにするには:
    sudo systemctl disable <service-name>
    

6. 特定のポートを使用しているサービスを見つけるにはどうすればよいですか?

特定のポートで実行中のサービスを見つけるには、netstatまたはssを使用できます:

netstat -tulnp | grep :80

または

ss -tulnp | grep :80

7. systemctlが見つからない場合はどうすればよいですか?

command not found: systemctlというエラーが表示された場合、システムがsystemdを使用していない可能性があります。次のコマンドを試してください:

service --status-all

または

ps aux | grep <service-name>

8. 失敗したサービスをリストするにはどうすればよいですか?

systemdベースのシステムの場合、次のコマンドを実行します:

systemctl list-units --type=service --state=failed

9. 特定のサービスのログを有効にするにはどうすればよいですか?

systemdによって管理されているサービスのログを確認するには、次のコマンドを使用します:

journalctl -u <service-name>

リアルタイムでログを表示するには:

journalctl -u <service-name> -f

10. tophtopを使用して実行中のサービスを確認できますか?

はい!tophtopは、実行中のプロセスのライブビューを提供します:

  • topを使用する:
    top
    
  • htopを使用する(インタラクティブでユーザーフレンドリー):
    htop
    
    (利用できない場合は、sudo apt install htopまたはsudo yum install htopでインストールしてください。)