Linuxで実行中のサービスをリストする方法:すべてのinitシステムのための完全ガイド
はじめに
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を組み合わせて特定のプロセスを見つけることができます。
この方法は、次のような場合に便利です:
systemctl
やservice
コマンドがない最小限の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
を使用して、特定のポートで実行中のサービスを見つけます。

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. top
やhtop
を使用して実行中のサービスを確認できますか?
はい!top
やhtop
は、実行中のプロセスのライブビューを提供します:
top
を使用する:top
htop
を使用する(インタラクティブでユーザーフレンドリー):
(利用できない場合は、htop
sudo apt install htop
またはsudo yum install htop
でインストールしてください。)