はじめに
Linuxサーバーの運用・保守をする際に、サーバーがどのような状態であるかを把握することはとても大切です。
サーバーの用途、スペック、動作しているサービスやプロセスなどを把握することで、そのサーバーへの理解が深まり、調査や設定変更、障害対応等で役立てることができます。
基本的な調査コマンド
まず何から調査すればいいのか悩むことがあると思います。
以下に調査時に使用する基本的なコマンドと実行例を記載しますので、ぜひ試してみてください。
①ip a
「ip a」コマンドは、サーバーに設定されているネットワークインターフェースに関する情報を表示します。
IPアドレスやMACアドレス、インターフェースの状態などを確認できます。
実行例
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::111:22ff:fe33:4455/64 scope link
valid_lft forever preferred_lft forever
実行例の注目する箇所
- eth0:インターフェース名になります
- inet 192.168.1.100/24:IPv4アドレス情報です
- inet6 fe80::~:IPv6アドレス情報です
- UP,LOWER_UP:インターフェースの状態です。この例では正常に動作している状態を示します。
※インターフェースの状態でその他によく見られるのは以下になります。
- DOWN,LOWER_DOWN:
インターフェースが論理的に停止していて、物理的なリンクも確立していない状態。管理上の理由等で意図的に停止されている場合や、物理的な接続の問題が考えられます。 - UP,LOWER_DOWN:
インターフェースが論理的に起動しているが物理的なリンクが確立していない状態。ケーブルの接続不良、相手側デバイスの電源断、ポートの故障などが考えられます。
②ip r
「ip r」コマンドはサーバーのルーティングテーブルを表示します。
パケットがどの経路を通ってネットワークに送信されるかを確認できます。
実行例
$ ip r
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100
実行例の注目する箇所
- default via 192.168.1.1 dev eth0:フォルトゲートウェイが192.168.1.1であり、eth0インターフェースを経由することを表しています。
- 192.168.1.0/24 dev eth0:192.168.1.0/24 のネットワーク宛のトラフィックは eth0 インターフェースを直接使用することを表しています。
③ps aux
「ps」コマンドは実行中のプロセスに関する情報を表示するためのコマンドです。
オプションで「aux」を付けると現在実行中の全てのプロセスに関する詳細な情報を表示することができます。
※オプションの意味
- a: 他のユーザーのプロセスを含む全てのプロセスを表示する
- u: プロセスの所有者に関する詳細情報を表示する
- x: 制御端末を持たないプロセスも表示する
実行例
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 5 0.0 0.0 0 0 ? I< 2024 0:00 [rcu_gp]
root 55 0.2 0.5 6800 3920 ? Ss 2025 1:00 /usr/sbin/crond -n
実行例の注目する箇所
ヘッダー行の内容は以下になります。
どんなプロセスが動作していて、誰が動かしているのか、CPUやメモリはどのくらい使用しているのかなどを見ると良いと思います。
- USER: プロセスの所有者
- PID: プロセスのID
- %CPU: CPU使用率(全CPU時間の割合)
- %MEM: メモリ使用率(物理メモリの割合)
- VSZ: 仮想メモリサイズ (KB)
- RSS:プロセスが実際に使用している物理メモリ量 (KB)
- TTY: 制御端末。? はデーモンプロセスなど、端末を持たないプロセスを示します
- STAT: プロセスの状態(例:S=スリープ,R=実行中,I=アイドル状態など)
- START: プロセスの開始時刻
- TIME: CPUの総使用時間
- COMMAND: 実行されたコマンド
④systemctl list-units --type=service --state=running
「systemctl list-units --type=service --state=running」コマンドはsystemd が管理している「ユニット」の中からユニットのタイプが「service」でユニットの現在の状態が「running(実行中)」であるものを一覧で表示します。
簡単に言うと、サーバー上で実行中のサービスを確認できます。
実行例
$ systemctl list-units --type=service --state=running
UNIT LOAD ACTIVE SUB DESCRIPTION
crond.service loaded active running Command Scheduler
NetworkManager.service loaded active running Network Manager
sshd.service loaded active running OpenSSH server daemon
実行例の注目する箇所
ヘッダー行の内容は以下になります。
- UNIT:サービスユニットの名前を示します
- LOAD:ユニットの設定ファイルが systemd に読み込まれたかどうかを示します (loaded は読み込み済み)
- ACTIVE:ユニットの現在の高レベルの状態を示します (active は正常に動作している状態)
- SUB:ユニットのより詳細な状態を示します (running はサービスが実行中の状態)
- DESCRIPTION:サービスユニットの簡単な説明です
今回の例ではcrond、NetworkManager、sshdのサービスが動作していることが分かります。
⑤ss
「ss」コマンドは、ソケットの情報を表示するためのコマンドです。
ネットワーク接続、リスニングポート、ソケットの状態など、ネットワークの状態を監視およびトラブルシューティングする際に役立つコマンドです。
個人的によく使うオプションは以下になります。
- t:TCPソケットのみを表示する
- u:UDPソケットのみを表示する
- n:アドレスとポート番号を数値で表示する
- l:リッスン状態のソケットのみを表示する。サーバーがどのポートでサービスを提供しているかを確認できる。
- p:ソケットを使用しているプロセス名とPIDを表示する。どのプロセスが特定のポートを使用しているか特定できる。
実行例
$ ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 * 123456789 * 987654321
u_str ESTAB 0 0 /run/systemd/journal/stdout 11111 * 22222
u_str ESTAB 0 0 /run/dbus/system_bus_socket 33333 * 44444
tcp ESTAB 0 1000 192.168.1.10:ssh 192.168.1.20:50000
tcp ESTAB 0 0 192.168.1.10:54321 10.0.0.5:microsoft-ds
実行例の注目する箇所
- Netid: u_str:サーバー内部で、Unixドメインソケット (u_str) を利用した通信がされていることが分かります
- Netid: tcp: TCPプロトコルを使用している接続がされていることが分かります。
今回の例では192.168.1.10(ローカルサーバー)から192.168.1.20のポート50000へのSSH接続が確立していることを示します。
また、10.0.0.5のmicrosoft-dsポートへの接続がされており、ファイル共有等で通信している可能性を示します。
⑥hostnamectl
「hostnamectl」コマンドは、Linuxサーバーのホスト名やOS情報等の基本情報を確認することができるコマンドです。
実行例
$ hostnamectl
Static hostname: example-server
Icon name: computer-server
Chassis: server
Machine ID: abcdef0123456789abcdef0123456789
Boot ID: ghijk98765432100ghijk98765432100
Operating System: Generic Linux 8.x
CPE OS Name: cpe:/o:generic:linux:8:ga
Kernel: Linux 4.18.0-xxxx.yy.zz.el8_x.x86_64
Architecture: x86-64
実行例の注目する箇所
- Static hostname:サーバーのホスト名を示します。
- Chassis:筐体の種類を示します。今回の例では「server」となっておりますが、他にも「vm(仮想マシン)」や「desktop(デスクトップ)」などがあります。
- Operating System:このサーバーにインストールされているOSの種類とバージョンを示します。
⑦top
「top」コマンドは、実行中のプロセスとシステム全体のパフォーマンスをリアルタイムに表示するコマンドです。
CPU 使用率やメモリ使用量、実行時間などの情報を一覧で表示します。
topコマンドはサマリーエリアとタスク・プロセスエリアに分かれて表示されます。
実行例
top - 14:00:00 up 1 day, 0:30, 1 user, load average: 0.05, 0.03, 0.01
Tasks: 200 total, 1 running, 198 sleeping, 1 stopped, 0 zombie
%Cpu(s): 1.5 us, 0.3 sy, 0.0 ni, 98.0 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 8175808 total, 1572864 free, 5598080 used, 1004864 buff/cache
KiB Swap: 2097152 total, 2097152 free, 0 used. 2380800 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 175000 4500 3000 S 0.1 0.1 0:01.50 systemd
5678 user 20 0 250000 12000 8000 S 0.1 0.1 0:05.20 web_server
9012 root 20 0 300000 6000 4000 S 0.0 0.1 0:00.80 database_server
実行例の注目する箇所
- %Cpu(s): 1.5 us, 0.3 sy, 0.0 ni, 98.0 id,:CPUの使用率やアイドル状態のCPU使用率を示します。今回の例ではCPU使用率が1.5%、アイドル状態のCPU使用率が98%となっておりシステムに余裕がある状態を示します。(サマリーエリア)
- 1234 root 20 0 175000 4500 3000 S 0.0 0.1 0:01.50 systemd:プロセスの所有者がroot、CPUとメモリの使用率が0.1%、実行コマンドがsystemdであることが分かります。(タスク・プロセスエリア)
⑧cat /etc/passwd
「cat /etc/passwd」コマンドは、システムにどのようなユーザーが存在していて、どのような属性を持っているかを確認することができるコマンドです。
※catは指定されたファイルの内容を標準出力に表示するコマンド、/etc/passwdはシステムに登録されている各ユーザーのアカウント情報が載っているファイルです。
実行例
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
messagebus:x:101:102::/var/run/dbus:/sbin/nologin
dbus:x:81:81:dbus user,,,:/var/run/dbus:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
user01:x:1000:1000:Example User 1:/home/user01:/bin/bash
user02:x:1002:1002:Another User:/home/user02:/bin/sh
実行例の注目する箇所
- user01,user02:今回の例では一般のユーザーアカウントとしてuser01とuser02が設定されていることが分かります。
※一般的に、UIDが1-999のユーザーは通常システムが内部的に使用するアカウント(サービスアカウントやデーモンなど)で、UIDが1000以上のユーザーはユーザーアカウントとなり、システムにログインして作業するために使用します。
最後に
本記事では、Linuxサーバーの基本的な情報を調査するための主要なコマンドを解説しました。
これらのコマンドを組み合わせることで、ネットワークの設定、実行中のプロセスやサービス、サーバーの基本的な情報、リソースの使用状況、そして登録されているユーザーアカウントといった、サーバーの状態を把握するための重要な情報を収集できます。
各コマンドには本記事で紹介した以外にも多くのオプションが存在します。また、この他にも調査用のコマンドはたくさん存在しますので、気になった方は調べてみてください。
Linuxサーバーの調査は最初は難しく感じることが多いと思いますが、一つ一つのコマンドの意味と出力結果を理解していくことで、サーバーの状態が分かるようになってきます。
色々なコマンドを試しながら、Linuxサーバーの理解を深めていきましょう。