Ubuntu Server

まだ始まってもない。



コマンド

Ubuntu Serverでサーバーの現在の状況を把握するためには、いくつかのコマンドが有用です。以下はその例です:

  1. `top` - プロセスの実行とシステムリソースの使用状況をリアルタイムで表示します。

  2. `htop` (別途インストールが必要) - `top` コマンドの強化版で、より直感的なインターフェイスを提供します。

  3. `vmstat` - システムのメモリ、プロセス、CPUの活動状況を報告します。

  4. `iostat` - CPU統計と入出力統計を表示します。

  5. `netstat` - ネットワーク接続、ルーティングテーブル、インターフェース統計などを表示します。

  6. `df` - ファイルシステムのディスクスペースの使用状況を表示します。

  7. `free` - メモリの使用状況を表示します。

  8. `uptime` - システムがどのくらいの期間動作しているか、現在のロードアベレージを表示します。

これらのコマンドは基本的なシステム情報を把握するための出発点ですが、より詳細な情報が必要な場合は、これらのコマンドの出力を解析したり、特定の状況に応じてさらに多くの診断ツールを使用することができます。

systemctl

`sudo systemctl` は、Linuxシステムで使用されるコマンドで、`systemd` システムとサービスマネージャーを制御するために使用されます。`systemd` は、現代の多くのLinuxディストリビューションで初期化システムとして使われており、システム起動時にサービスをスタートさせたり、システムの動作中にサービスを管理したりすることができます。

`sudo` は「superuser do」の略で、システム管理者(スーパーユーザー)の権限でコマンドを実行するために使用されます。これにより、通常のユーザーアカウントで安全にシステム管理タスクを実行することができます。

いくつかの一般的な `sudo systemctl` コマンドの例を以下に挙げます:

  • `sudo systemctl start service_name`: 指定されたサービスを開始します。

  • `sudo systemctl stop service_name`: 指定されたサービスを停止します。

  • `sudo systemctl restart service_name`: 指定されたサービスを再起動します。

  • `sudo systemctl status service_name`: 指定されたサービスの状態を表示します。

  • `sudo systemctl enable service_name`: 指定されたサービスを有効にして、システム起動時に自動的に開始するようにします。

  • `sudo systemctl disable service_name`: 指定されたサービスを無効にして、システム起動時に自動的に開始しないようにします。

サービス管理以外にも、`systemctl` コマンドはタイマーやデバイス、マウントポイントなどの他のシステムコンポーネントを制御するためにも使われます。`sudo systemctl` コマンドは、システム管理者がシステム全体の状態を監視し、問題を診断し、システムの振る舞いをカスタマイズするための強力なツールです。

systemd

`systemd`は、Linuxシステムのためのシステムとサービスマネージャです。これは、システムの起動時や実行中に、さまざまなサービスやプロセスを管理する責任を担います。以下に、`systemd`に関する主要な特徴と概念を説明します:

  1. 初期化システム (init system): `systemd`は、Linuxカーネルが起動した後で実行される最初のプロセスであり、PID 1を持ちます。システムの初期化、サービスの開始、管理を行います。

  2. ユニットファイル (Unit files): `systemd`は、ユニットファイルという設定ファイルを使用してサービスやその他のリソース(タイマー、デバイス、マウントポイントなど)を管理します。これらのファイルは通常、`/etc/systemd/system/`や`/usr/lib/systemd/system/`に置かれ、サービスの開始方法、依存関係、実行時のオプションなどを定義します。

  3. ターゲット (Targets): ターゲットは、特定の実行レベルを表します。例えば、`multi-user.target`はグラフィカルインターフェイスなしのマルチユーザーモードを意味し、`graphical.target`はGUIを含むシステムの状態を意味します。これらは従来のSysVinitの実行レベルに似ていますが、より柔軟です。

  4. 並行処理 (Concurrency): `systemd`は依存関係を解決することで、可能な限り多くのサービスを並行して起動し、ブート時間を短縮します。

  5. サービス管理: `systemd`を使用すると、サービスを簡単に開始、停止、再起動、リロードすることができます。また、サービスが予期せず停止した場合に自動的に再起動するよう設定することも可能です。

  6. ログ管理 (journald): `systemd`には`systemd-journald`というサブシステムがあり、システムのログを収集して保管します。これにより、システム全体のログを一元管理し、分析を容易にします。

  7. ソケットアクティベーション: ソケットアクティベーションにより、サービスは使用されるまで開始されないため、リソースを効率的に使用することができます。

  8. cgroup統合: `systemd`はcgroupを使用して、プロセスのリソース利用を管理します。これにより、システムリソースの制御と分離が可能になり、プロセスごとのリソース使用量の制限や監視が行えます。

  9. セキュリティ機能: サービスに対してAppArmorやSELinuxなどのセキュリティポリシーを適用することができ、セキュリティを強化できます。

PID


PID 1とは、「Process Identifier 1」の略で、オペレーティングシステムにおいて最初のプロセス、または親プロセスの識別番号を指します。このプロセスは、システムの起動時にカーネルによって最初に生成されるプロセスであり、他のすべてのプロセスの祖先にあたります。

Linuxシステムでは、`systemd`が通常PID 1のプロセスとして動作します。`systemd`がPID 1であることは、システムの起動、サービスの管理、シャットダウンなどの基本的な管理タスクを担っていることを意味します。これは、システムの初期化プロセスであり、システムの起動時に様々なサービスやカーネルタスクを開始し、システムが稼働している間はプロセスの監視と管理を行います。

PID 1のプロセスが終了するとシステムは停止します。そのため、このプロセスは非常に重要であり、安定して動作する必要があります。また、PID 1のプロセスは、孤立したプロセス(その親プロセスが終了したプロセス)を引き取る役割も担います。これにより、システムがクリーンに保たれ、ゾンビプロセス(終了したが親プロセスによる回収が完了していないプロセス)がシステム上に残らないようにします。

サービスマネージャー

サービスマネージャーは、オペレーティングシステムの中でバックグラウンドプロセス(デーモン)を管理するソフトウェアのことです。これらのバックグラウンドプロセスは、ファイルサーバー、プリントサーバー、ウェブサーバーなどのサービスを提供するためにシステムが起動時または要求に応じて実行します。サービスマネージャーは次の機能を提供します:

  1. サービスの起動と停止: システムの起動時にサービスを自動的に開始し、システムのシャットダウン時にサービスを適切に停止します。

  2. サービスの状態管理: サービスが実行中か、停止しているか、エラーが発生しているかなど、サービスの現在の状態を監視し、管理します。

  3. 依存関係の解決: 特定のサービスが他のサービスに依存している場合、それらが正しい順序で起動するようにします。

  4. 自動再起動: サービスが予期せずにクラッシュした場合、自動的に再起動するように設定できます。

  5. リソース管理: サービスが使用するシステムリソース(CPU、メモリ、ディスクI/Oなど)を制御し、制限します。

  6. ログ管理: サービスのログを管理し、エラーが発生したときにトラブルシューティングを行うのに役立つ情報を提供します。

  7. セキュリティ: サービスが実行される際のセキュリティポリシーを適用し、不正アクセスや脆弱性からシステムを保護します。

Linuxシステムでは、`systemd`が最も一般的なサービスマネージャーですが、他にも`SysVinit`、`Upstart`などのサービスマネージャーが存在しています。`systemd`はこれらの旧来のシステムに比べて、より高度な機能と設定オプションを提供し、現代のLinuxディストリビューションのデフォルトとなっています。各サービスは`systemd`のユニットファイルによって管理され、サービスの開始、停止、自動起動の設定などが定義されています。


インストール済みのパッケージ

Ubuntu Serverでインストール済みのパッケージを調べる方法はいくつかあります。以下はいくつかの方法です。

dpkgコマンドを使用する方法: インストール済みのパッケージをリストするには、dpkgコマンドを使用できます。以下のコマンドをターミナルで実行します。

dpkg --list

aptコマンドを使用する方法: aptコマンドはパッケージ管理に使用される一般的なコマンドです。次のコマンドを実行して、インストール済みのパッケージをリストします。

apt list --installed

dpkg-queryコマンドを使用する方法: dpkg-queryコマンドを使用して、インストール済みのパッケージの詳細情報を取得できます。例えば、以下のコマンドを使用して特定のパッケージの情報を取得できます。

dpkg-query -l | grep <パッケージ名>

これらの方法を使用して、Ubuntu Serverにインストール済みのパッケージを調べることができます。選択肢に応じて、最適な方法を選んでください。

apt

`apt`はAdvanced Packaging Toolの略で、DebianベースのLinuxディストリビューション(Ubuntu、Debian等)で使用されるコマンドラインインターフェースを持つパッケージ管理システムです。これにより、ユーザーはソフトウェアパッケージのインストール、アップデート、検索、削除などの管理を簡単に行うことができます。

`apt`は以下のような主要な機能を提供します:

  • ソフトウェアパッケージのインストールと削除

  • システム上のすべてのインストール済みパッケージのアップデート

  • パッケージ依存関係の自動解決

  • リポジトリからのパッケージ情報の取得と更新

  • パッケージキャッシュの検索とパッケージ情報の表示

`apt`はコマンドラインから使用するためのコマンドであり、以下はその一般的な使用例です:

  • `sudo apt update`: パッケージリストを更新し、利用可能なアップデートがあるかどうかを確認します。

  • `sudo apt upgrade`: 新しいパッケージリストに基づいて、システム上のパッケージをアップグレードします。

  • `sudo apt install [package-name]`: 指定されたパッケージをインストールします。

  • `sudo apt remove [package-name]`: 指定されたパッケージを削除します(設定ファイルは残ります)。

  • `sudo apt purge [package-name]`: 指定されたパッケージを削除し、その設定ファイルも完全に削除します。

  • `sudo apt autoremove`: 不要になったパッケージ(依存関係でインストールされたがもはや必要とされていないパッケージ)を自動的に削除します。

  • `apt search [search-term]`: パッケージリストを検索して、指定した検索語に一致するパッケージを見つけます。

  • `apt show [package-name]`: 指定されたパッケージの詳細情報を表示します。

`apt`は、よりユーザーフレンドリーな出力とオプションを提供する`apt-get`や`apt-cache`などの既存のコマンドラインツールの機能を統合し、使いやすいインターフェースを提供することを目的として開発されました。

UFW

UFW(Uncomplicated Firewall)は、Linuxシステム用のユーザーフレンドリーなインターフェースを提供するファイアウォール管理ツールです。"Uncomplicated"という名前が示す通り、複雑さを排除し、ファイアウォールの設定と管理を簡単にすることを目的としています。

UFWはiptablesのフロントエンドとして機能し、iptablesが提供する強力な機能をよりアクセスしやすい方法で利用できるようにするものです。iptablesは非常に強力ですが、その構文は初心者にとっては複雑で理解しづらいものです。UFWは、この複雑さを抽象化し、コマンドラインからシンプルなコマンドでファイアウォールのルールを設定することができます。

基本的なUFWのコマンドは以下の通りです:

  • `sudo ufw status`: ファイアウォールの現在の状態とルールを表示します。

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere

Default: deny (incoming), allow (outgoing), disabled (routed)

deny (incoming), 受信は拒否
allow (outgoing), 
送信は許可
disabled (routed), 
転送は無効

  • `sudo ufw enable`: ファイアウォールを有効にします。つまり上記の設定がシステムの送受信に対して適用されます。

  • `sudo ufw disable`: ファイアウォールを無効にします。

  • `sudo ufw allow [service/port]`: 指定したサービスまたはポートへのアクセスを許可します。

  • `sudo ufw deny [service/port]`: 指定したサービスまたはポートへのアクセスを拒否します。

  • `sudo ufw default allow`: 既定で入力されるトラフィックを許可します(通常はセキュリティ上の理由で推奨されません)。

  • `sudo ufw default deny`: 既定で入力されるトラフィックを拒否します。

UFWはGUI(グラフィカルユーザーインターフェース)ツールを使用して設定することもでき、たとえば`gufw`はその一例です。これは、特にデスクトップ環境でUFWをさらに使いやすくするものです。

セキュリティにおいて、ファイアウォールはシステムを保護する最初の防線の一つとなります。不要なポートやサービスへのアクセスをブロックすることで、潜在的な攻撃や不正アクセスからシステムを守ることができます。UFWを使用することで、このプロセスを簡単に管理できます。

iptables

`iptables`はLinuxカーネルのネットワークパケットフィルタリングシステムであり、ユーザーが定義したルールに基づいてパケットを許可、拒否、または転送することができるツールです。それは、Linuxオペレーティングシステムの内部に組み込まれたファイアウォール機能とも言えます。

iptablesはNetfilterプロジェクトの一部であり、その主な用途は、入ってくる、出ていく、そしてシステムを通過する(転送される)トラフィックを制御することです。これにより、ネットワークセキュリティの面でシステムを保護することができます。

`iptables`は非常に強力なツールで、以下のような多くの機能を提供します:

  • トラフィックのフィルタリング:特定のIPアドレス、ポート番号、プロトコル(TCP、UDP、ICMPなど)を基準にしてトラフィックを許可または拒否します。

  • NAT(ネットワークアドレス変換):プライベートネットワークのIPアドレスを公開IPアドレスに変換するなど、IPアドレスやポート番号の変換を行います。

  • パケットのマスカレード、リダイレクト、そしてSNAT(Source NAT)やDNAT(Destination NAT)といった操作。

`iptables`を使用する際には、ルールがチェーン(INPUT、OUTPUT、FORWARDなど)に整理されています。これらのチェーンは特定のタイプのトラフィックを処理します。たとえば、INPUTチェーンはシステムに入ってくるパケットを処理し、OUTPUTチェーンはシステムから出ていくパケットを処理します。

iptablesのルールを設定する際の基本的な構文は次のようになります:

sudo iptables [オプション] チェーン名 [ルール条件] -j アクション

例えば、特定のIPアドレスからのすべての入ってくるトラフィックを拒否するには、以下のようにします:

sudo iptables -A INPUT -s 123.123.123.123 -j DROP

ここで、`-A INPUT`はINPUTチェーンにルールを追加することを指定し、`-s`はソースIPアドレスを指定するオプション、`123.123.123.123`はブロックしたい特定のIPアドレス、そして`-j DROP`はそのパケットをドロップする(拒否する)というアクションを表します。

`iptables`は非常に複雑になり得るため、正確に理解し、慎重に使用する必要があります。設定ミスはサービスの中断につながる可能性があるからです。そのため、初心者やよりシンプルなインターフェースを好むユーザーには、前述のUFWのようなフロントエンドツールがしばしば推奨されます。

Netfilter

Netfilterは、Linuxオペレーティングシステムの一部で、ネットワークパケットのフィルタリング、ネットワークアドレス変換(NAT)、ポート変換、パケットの記録と追跡を行うフレームワークです。これは、Linuxカーネルの内部に組み込まれており、主にセキュリティとネットワークの管理に使用されます。Netfilterは、Iptablesというユーザースペースのツールによって操作されることが一般的です。

Netfilterの主な機能は以下の通りです:

  1. パケットフィルタリング:これはNetfilterの最も基本的な機能で、入ってくる(インバウンド)、出ていく(アウトバウンド)、および内部の通過(フォワード)するパケットを制御します。このフィルタリングは、セキュリティポリシーやその他の基準に基づいて行われます。

  2. ネットワークアドレス変換(NAT):NATは、プライベートIPアドレスを公開IPアドレスに変換するプロセスです。これは、複数のデバイスが単一の公開IPアドレスを共有するネットワーク環境で一般的に使用されます。

  3. ポート変換:これは、特定のポート番号のトラフィックを別のポート番号にリダイレクトすることで、ネットワークサービスのアクセスを制御します。

  4. パケットの記録と追跡:ネットワークの監視とデバッグに役立つ、通過するパケットの詳細情報を記録します。

  5. 状態依存フィルタリング:Netfilterは接続の状態(例:新規、確立済み、関連済みなど)を追跡し、これに基づいてパケットフィルタリングの決定を行います。

Netfilterは、高度なネットワーク管理機能と柔軟性を提供し、Linuxベースのファイアウォール、ルーター、プロキシサーバーなどで広く利用されています。

apache2

1. サービスの状態を確認する

Apacheサービスの状態は、以下のコマンドで確認できます。

sudo systemctl status apache2

このコマンドは、Apacheサーバーの現在の状態(アクティブかどうか、問題が発生していないかなど)に関する情報を提供します。"active (running)" と表示されれば、サーバーは正常に動作しています。

2. サーバーの応答を確認する

サーバーが外部からアクセス可能かどうかを確認するには、curl コマンドやWebブラウザを使ってHTTPリクエストを行います。

コマンドラインからの確認:

curl http://localhost

または、サーバーのIPアドレスを使用して:

curl http://サーバーのIPアドレス

3. ポートの確認

Apacheがリスニングしているポート(通常はポート80と443)を確認するには、以下のコマンドを使用します。

sudo netstat -tuln | grep apache2

これにより、ApacheがどのTCPポートでリスニングしているかが表示されます。

4. ログの確認

Apacheの動作に関する詳細な情報は、ログファイルに記録されています。主なログファイルは以下の二つです:

  • アクセスログ: /var/log/apache2/access.log

  • エラーログ: /var/log/apache2/error.log

これらのログファイルを確認するには、catless、またはtailコマンドを使用します。例えば、最新のエラーログを確認するには:

sudo tail -f /var/log/apache2/error.log


netstat

`netstat`(ネットワークステータスの略)コマンドは、コンピュータネットワークの接続、ルーティングテーブル、インターフェース統計などのネットワーク関連情報を表示するために使用されるコマンドラインツールです。このツールは、ほとんどのUnix系オペレーティングシステム(Linux、macOSなど)およびWindowsで利用可能です。

netstatコマンドの主な機能は次のとおりです:

  1. アクティブな接続の表示:現在開いているTCPおよびUDPネットワーク接続を表示します。

  2. ルーティングテーブルの表示:ネットワークルート(データパケットが目的地に到達するための経路)の情報を提供します。

  3. インターフェース統計の表示:ネットワークインターフェース(Ethernet、Wi-Fiなど)の統計情報(送受信されたパケットとエラーの数など)を表示します。

  4. マルチキャストメンバーシップの表示:マルチキャストネットワークグループのメンバーとして登録されているインターフェースを表示します。

コマンドラインオプションを使用すると、表示される情報をカスタマイズできます。たとえば、特定のタイプの接続のみを表示するか、数値形式でアドレスを表示するかなどを指定できます。このツールはネットワークのトラブルシューティングや監視に非常に有用です。

オプション

`netstat` コマンドには多くのオプションがあり、これらを使って表示する情報をカスタマイズできます。オプションはオペレーティングシステムによって異なる場合があるので、以下の一覧は一般的なものですが、使用しているシステムのマニュアルページ(`man netstat`)を確認することをお勧めします。

  1. -a (すべての接続とリスニングポートを表示): アクティブおよび非アクティブなソケット(接続)をすべて表示します。

  2. -n (数値形式での表示): ホスト名、ポート番号、ユーザーIDなどを数値形式で表示します。名前解決を行わないため、応答が速くなります。

  3. -r (ルーティングテーブルを表示): システムのルーティングテーブルを表示します。

  4. -t (TCP接続のみを表示): TCP接続のみを表示します。

  5. -u (UDP接続のみを表示): UDP接続のみを表示します。

  6. -i (インターフェース情報を表示): ネットワークインターフェースの状態と統計情報を表示します。

  7. -s (プロトコルごとの統計を表示): 各プロトコル(TCP、UDP、ICMPなど)の統計情報を表示します。

  8. -p (プロセスIDと名前を表示): 各接続に関連するプロセスIDとそのプロセス名を表示します(root権限が必要な場合があります)。

これらのオプションは組み合わせて使用することができ、より具体的な情報を得ることができます。たとえば、`netstat -ant` はアクティブなTCP接続を数値形式で表示します。また、Windowsでは`netstat`に似たオプションがありますが、若干異なる場合があるため、Windowsで使用する場合は、適切なオプションを確認することが重要です。

インストール

Ubuntu Serverで`netstat`コマンドが利用できない場合、主に2つのアプローチがあります。まずは`net-tools`パッケージをインストールして`netstat`を利用可能にする方法、そして`netstat`の代替コマンドを使用する方法です。

1. `net-tools`パッケージのインストール

Ubuntu Serverにはデフォルトで`net-tools`がインストールされていないことがあります。`net-tools`パッケージには`netstat`が含まれています。このパッケージをインストールするには、以下のコマンドを実行します:

sudo apt update
sudo apt install net-tools

このコマンドはパッケージリストを更新し、`net-tools`パッケージをインストールします。インストール後に`netstat`コマンドが利用できるようになります。

2. 代替コマンドの使用

`netstat`と同様の機能を提供する代替コマンドも多く存在します。これらのコマンドは通常、Ubuntuにデフォルトでインストールされています。

ssコマンド: ss(socket statisticsの略)はnetstatに似た機能を提供します。接続、ルーティングテーブル、ソケットのリスニング状態などの情報を表示できます。

例:アクティブなTCPソケットを表示するには、以下のコマンドを使用します:

ss -t

ipコマンド: ipコマンドはネットワークインターフェースとルーティングに関する情報を扱います。netstatのルーティングテーブルの表示機能に相当します。

例:ルーティングテーブルを表示するには、以下のコマンドを使用します:

ip route

これらの代替コマンドは、`netstat`よりも現代的で、高速な応答を提供する場合が多いです。また、これらのコマンドはより多くの詳細情報を提供し、柔軟な出力オプションがあります。

netstat例

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 192.168.1.5:22          10.0.0.1:53670          ESTABLISHED
  • 最初の行は、ローカルマシン(自分自身)がポート22(SSH)でリスニング(接続待ち)していることを示しています。

  • 二番目の行は、ローカルマシン(192.168.1.5)のポート22が、外部アドレス(10.0.0.1)のポート53670との間で確立された接続があることを示しています。

192.168.1.5のようなIPアドレスを持つなら、そのローカルマシンはなにがしかのネットワークに接続され、IPを割り当てられていることを意味する。



Recv-QとSend-Q

「Recv-Q」と「Send-Q」は、ネットワーク関連のコマンド出力、特にUNIXやLinuxシステムで見られるものです。これらは、ネットワークインターフェースやソケットの状態を示す際に用いられます。以下にそれぞれの意味を説明します。

  1. Recv-Q(受信キュー):

    • これは、ネットワークインターフェースが処理を待っている受信データの量を示します。

    • 基本的に、Recv-Qはそのソケットがアプリケーションによってまだ読まれていない受信データのバイト数を表示します。

    • この値が大きい場合、それは受信データが適切に処理されていない、またはアプリケーションが受信データを迅速に読み取っていないことを意味する可能性があります。

  2. Send-Q(送信キュー):

    • これは、ネットワークインターフェースが送信するデータを保持しているバッファの大きさを示します。

    • この値は、ネットワーク経由で送信されるべきだが、まだ送信されていないデータのバイト数を表示します。

    • この値が大きい場合、ネットワークの遅延、送信側の処理の遅れ、またはネットワークの問題が原因でデータが送信キューに滞留していることを意味する可能性があります。

これらの値をモニタリングすることで、ネットワークのパフォーマンス問題やアプリケーションの問題を診断するのに役立ちます。通常、これらの値は小さく、またはゼロであるべきです。大きな値が表示される場合は、深刻な問題の兆候である可能性があります。

この記事が気に入ったらサポートをしてみませんか?