【超入門】Ubuntu Server を触ってみよう!


【超入門】Ubuntu Server を触ってみよう! ~黒い画面と友達になろう~

はじめに

「サーバー」と聞くと、難しそう、黒い画面でよくわからないコマンドを打つんでしょ? と尻込みしてしまう方もいるかもしれません。しかし、インターネットの裏側を支えているのは、まさにそういったサーバーたちです。そして、そのサーバーの多くで使われているのが、LinuxというOSです。

Linuxには様々な種類(ディストリビューションと呼ばれます)がありますが、その中でも特に人気があり、デスクトップ用途でもサーバー用途でも広く使われているのが「Ubuntu」です。特にサーバー用途に特化した「Ubuntu Server」は、安定性が高く、セキュリティ機能も充実しており、世界中の多くの企業や個人に利用されています。

この記事は、まさにその「Ubuntu Server」をこれから初めて触ってみる、という方を対象としています。「サーバーって何?」「Linuxコマンドなんて全く知らない」というレベルの方でも、一つずつステップを踏んで学べるように、できる限り丁寧で詳細な説明を心がけました。

この記事のゴール

  • Ubuntu Serverを自分のPC上に準備し、インストールできるようになる。
  • CUI(キャラクターユーザーインターフェース、いわゆる黒い画面)の基本的な操作に慣れる。
  • ファイル操作、ソフトウェア管理、ネットワーク確認など、サーバー運用の基礎となるコマンドを理解し、使えるようになる。
  • 簡単なWebサーバーを構築し、外部からアクセスできるようになる。
  • 今後の学習につながる足がかりを得る。

この記事を読み終える頃には、Ubuntu Serverの「黒い画面」への抵抗がなくなり、基本的な操作であれば自分でできるようになっているはずです。さあ、一緒にサーバーの世界への第一歩を踏み出しましょう!

なぜUbuntu Serverなのか?

  • 高い人気と安定性: 長年の実績があり、サーバーOSとして非常に安定しています。多くの企業が採用しており、信頼性が高いです。
  • 豊富なソフトウェア: 世界中で利用されているため、ほとんどのソフトウェアがUbuntu向けに提供されています。必要なものを簡単に追加できます。
  • 強力なコミュニティ: 利用者が非常に多いため、困ったときにインターネットで検索すれば、解決策や情報が簡単に見つかります。公式ドキュメントも充実しています。
  • 無償で利用可能: 商用利用も含めて、基本的に無償で利用できます。学習コストが低いのも魅力です。
  • 学習のしやすさ: パッケージ管理システム「APT」が非常に使いやすく、サーバー管理の基本的な概念を学ぶのに適しています。

サーバーOSの基礎知識:GUI vs CUI

普段皆さんがPCで使っているWindowsやmacOSは、マウスでアイコンをクリックしたり、ウィンドウを操作したりする「GUI(Graphical User Interface)」が主流です。一方、サーバー用途で使われるLinuxの多くは、キーボードでコマンドを入力して操作する「CUI(Character User Interface)」が基本となります。

  • GUI: 直感的で分かりやすい。初心者でも操作しやすい。グラフィック処理にリソースを使うため、サーバー用途ではオーバーヘッドになることがある。リモート操作時に画面転送の負荷が大きい。
  • CUI: コマンドを知っている必要があるため、最初は敷居が高いと感じるかもしれない。しかし、キーボードだけで全ての操作ができるため、慣れると非常に効率的。グラフィック処理が不要なため、軽量でサーバーのリソースを効率的に使える。リモート操作(SSHなど)が非常に容易。

Ubuntu Serverは、インストール時にGUI環境を選択することもできますが、デフォルトはCUIのみです。サーバーの学習という観点からも、CUIでの操作に慣れることが重要ですので、この記事ではCUI環境を前提として進めます。

第1章:Ubuntu Serverの準備とインストール

サーバーの練習をするために、いきなり物理的なコンピューターを用意する必要はありません。自分の今使っているPCの中に、仮想的にコンピューターを作り出し、その中にUbuntu Serverをインストールするのが最も手軽で安全な方法です。この仮想的な環境を作るためのソフトウェアを「仮想化ソフトウェア」と呼びます。

なぜ仮想環境を使うのか?

  • 手軽さ: 新しいPCを用意する必要がない。
  • 安全性: 仮想環境内の操作が、ホスト(元々使っているPC)の環境に影響を与えない。失敗しても仮想マシンを削除すれば元に戻せる。
  • 環境構築の容易さ: 複数のサーバーを用意したり、異なるOSを試したりするのが簡単。
  • スナップショット機能: 仮想マシンの状態を保存しておき、いつでもその状態に戻せる。試行錯誤に非常に便利。

ここでは、無償で利用できる代表的な仮想化ソフトウェアである VirtualBox を使用することを前提に説明を進めます。VMware Workstation Player (無償版あり) や、Windows Pro版以上に搭載されているHyper-Vなどでも同様のことができますが、操作方法は若干異なります。

必要なもの

  1. それなりのスペックを持つPC: 仮想マシンを実行するためには、ホストPCのCPU、メモリ、ストレージに余裕が必要です。最近のPCであれば、通常用途+仮想マシン1台程度なら問題ないことが多いです。
    • CPU: Intel Core i5/i7 クラス以上推奨
    • メモリ: 8GB以上推奨(ホストOS+仮想OSで消費するため)
    • ストレージ: 仮想マシン用に数十GBの空き容量が必要。SSDが快適です。
  2. 仮想化ソフトウェア: VirtualBox (Oracle VM VirtualBox) をインストールします。公式サイトからダウンロードできます。
    • Oracle VM VirtualBox ダウンロードページ
    • ご自身のホストOS (Windows, macOS, Linux) に合ったものをダウンロードし、インストールしてください。インストール手順は通常のソフトウェアと同様です。
  3. Ubuntu Server ISOイメージ: Ubuntu Serverのインストールに必要なファイル群がまとまったディスクイメージファイルです。

Ubuntu Server ISOイメージのダウンロード

Ubuntuの公式サイトからダウンロードします。

  1. Ubuntu公式サイトのダウンロードページにアクセスします。
  2. 最新のLTS (Long Term Support) 版をダウンロードするのがおすすめです。LTS版は長期にわたってサポートされるため、安定して利用できます。「Download Ubuntu Server」ボタンをクリックすると、ISOイメージファイルのダウンロードが始まります。ファイルサイズは1GB以上ありますので、時間がかかる場合があります。

仮想マシンの作成 (VirtualBox)

VirtualBoxをインストールしたら、Ubuntu Serverをインストールするための仮想マシンを作成します。

  1. VirtualBoxマネージャーを起動します。
  2. 左上の「新規」ボタンをクリックします。
  3. 仮想マシンの作成ウィザードが表示されます。各項目を設定します。
    • 名前: 仮想マシンの名前を任意でつけます。(例: UbuntuServer-Study
    • フォルダー: 仮想マシンが保存される場所です。デフォルトで問題なければ変更不要です。
    • ISO Image: ダウンロードしたUbuntu ServerのISOイメージファイルを選択します。「▼」をクリックして「その他」を選択し、ダウンロードしたISOファイルを選びます。
    • タイプ: ISOを選択すると自動的に Linux が選択されるはずです。
    • バージョン: ISOを選択すると自動的に Ubuntu (64-bit) などが選択されるはずです。
    • [Skip Unattended Installation] にチェックを入れる: ここにチェックを入れることで、GUIインストーラーを使って手動でインストール作業を行うことができます。入門の場合は手動インストールがおすすめです。
    • 「次へ」をクリックします。
  4. ハードウェア設定を行います。
    • メモリー: 仮想マシンに割り当てるメモリ容量です。Ubuntu Server単体であれば2GB (2048MB) あれば十分ですが、もしホストPCのメモリに余裕があれば、4GB (4096MB) など多めに割り当てた方が快適です。割り当てすぎるとホストPCが不安定になるので、ホストPCの物理メモリの半分以下を目安にしましょう。
    • プロセッサー: 仮想マシンに割り当てるCPUコア数です。デフォルトの1コアで問題ありません。
    • 「次へ」をクリックします。
  5. 仮想ハードディスクを設定します。
    • ディスクイメージを作成する: 新しい仮想ハードディスクを作成します。
    • サイズ: 仮想ハードディスクの容量です。Ubuntu Serverのインストールと少しの作業領域があれば20GB〜30GBもあれば十分です。ここでは 30 GB 程度にしておきましょう。
    • VDI (VirtualBox Disk Image): ハードディスクのファイルタイプです。VirtualBox以外で使う予定がなければVDIで問題ありません。
    • 可変サイズ (Dynamically allocated): この設定がおすすめです。最初はほとんど容量を使わず、仮想マシン内でデータを保存していくにつれて仮想ハードディスクのファイルサイズが肥大化します。指定した最大サイズを超えることはありません。固定サイズ (Fixed size) は最初から指定した容量分のファイルが作成されますが、パフォーマンスは少し良いです。入門では可変サイズで問題ありません。
    • 「次へ」をクリックします。
  6. 設定内容の確認画面が表示されます。「完了」をクリックします。

これで仮想マシンの基本設定が完了しました。VirtualBoxマネージャーの左側に、作成した仮想マシンが表示されているはずです。

仮想マシンの追加設定(ネットワーク)

サーバーとして使うためには、ネットワーク設定が重要です。入門時点では、ホストPCから仮想マシンにSSH接続できれば十分でしょう。VirtualBoxのデフォルト設定でこれが可能です。

  1. VirtualBoxマネージャーで、作成した仮想マシンを選択します。
  2. 「設定」ボタンをクリックします。
  3. 左側のリストから「ネットワーク」を選択します。
  4. 「アダプター 1」タブを選択します。
    • 割り当て: デフォルトの NAT のままにしておきます。NAT (Network Address Translation) モードでは、仮想マシンはホストPC経由で外部ネットワーク(インターネットなど)に接続できます。また、ホストPCから仮想マシンへの接続(例: SSH)も設定によって可能になります。
    • 詳細 > ポートフォワーディング: ここを設定することで、ホストPCの特定のポートへの通信を仮想マシンの特定のポートに転送できます。SSH接続のためにこれを設定しましょう。「+」ボタンをクリックして新しいルールを追加します。
      • 名前: 任意(例: SSH
      • プロトコル: TCP
      • ホストIP: 空欄でOK (ホストPCのどのIPでも受け付ける)
      • ホストポート: ホストPCで待ち受けるポート番号。デフォルトのSSHポートは22ですが、ホストPC自身が22番ポートを使っている可能性があるので、ここでは 222210022 など、22番以外の適当な未使用ポート番号を指定します。
      • ゲストIP: 空欄でOK (ゲストOSのどのIPでも受け付ける)
      • ゲストポート: 仮想マシン(ゲストOS)で待ち受けるポート番号。Ubuntu ServerのSSHサーバーはデフォルトで 22 番ポートで待ち受けますので、22 を指定します。
    • 設定後、「OK」をクリックしてネットワーク設定を閉じます。

これで、ホストPCの localhost:[ホストポート] (例: localhost:2222) へのSSH接続が、仮想マシン内の [ゲストIP]:22 へ転送されるようになります。ゲストIPはDHCPで自動割り当てされるIPアドレスです。

Ubuntu Serverのインストール

仮想マシンの設定が完了したら、いよいよインストールです。

  1. VirtualBoxマネージャーで、作成した仮想マシンを選択します。
  2. 「起動」ボタンをクリックします。
  3. 仮想マシンのウィンドウが開きます。しばらくすると、Ubuntu Serverのインストーラーが起動します。
  4. 言語選択: インストーラーの言語を選択します。キーボードの上下カーソルキーで移動し、日本語 を選択してEnterキーを押します。
  5. キーボードレイアウト: キーボードのレイアウトを確認します。通常は自動検出されたもので問題ありませんが、もし異なる場合は修正します。そのままEnterで確定します。
  6. インストーラーの種類:
    • Ubuntu Serverをインストール: 標準的なインストールです。
    • Minimised 'live' server: 必要最小限のパッケージのみをインストールします。
      入門の場合はUbuntu Serverをインストールを選択するのが良いでしょう。Enterキーを押します。
  7. ネットワーク接続: ネットワーク設定が行われます。VirtualBoxのNAT設定であれば、通常はDHCPによって自動的にIPアドレスが割り当てられ、「Done」と表示されます。もしエラーになる場合は、VirtualBoxのネットワーク設定やホストPCのネットワーク環境を確認してください。問題なければ、Done にカーソルを合わせてEnterキーを押します。
  8. プロキシ設定: プロキシサーバーを利用している場合は設定します。通常は不要です。そのまま Done にカーソルを合わせてEnterキーを押します。
  9. ミラー設定: ソフトウェアをダウンロードするサーバー(ミラーサイト)を選択します。通常はデフォルトで選択された、お住まいの地域に近いサーバーで問題ありません。そのまま Done にカーソルを合わせてEnterキーを押します。
  10. ストレージ設定: 仮想ハードディスクへのパーティション設定を行います。
    • Use An Entire Disk: ディスク全体をUbuntu Serverのために使用します。入門の場合はこれを選択してください。
    • Custom storage layout: 手動でパーティションを分割します。複数のパーティションを作成したい場合などに使いますが、入門では不要です。
      Use An Entire Disk にカーソルを合わせてEnterキーを押します。次にどのディスクを使用するか選択画面が出ますが、仮想マシンに接続しているディスクは通常1つだけ(先ほど30GBで作成したもの)なので、それが選択されていることを確認して Done にカーソルを合わせてEnterキーを押します。
      次に、パーティション分割の確認画面が表示されます。入門ではLVM (Logical Volume Management) やディスク暗号化は利用しない設定で問題ありません。表示されているパーティションレイアウト(/ (root), /boot など)を確認し、問題なければ Done にカーソルを合わせてEnterキーを押します。
      警告画面が表示されます。「選択したディスク上のデータは全て消去されます」という内容です。仮想ハードディスクは新品なので問題ありません。Continue にカーソルを合わせてEnterキーを押します。
  11. ユーザー情報の設定:
    • Your name: あなたの名前を入力します。(例: Study User
    • Your server’s name: サーバーのホスト名(コンピューター名)を入力します。半角英数字で、スペースは使えません。(例: ubuntustudy
    • Pick a username: ログイン時に使用するユーザー名です。半角英数字で小文字が推奨されます。(例: studyuser
    • Choose a password: パスワードを設定します。忘れないようにメモしておきましょう。 確認のためにもう一度入力します。
      全て入力したら Done にカーソルを合わせてEnterキーを押します。
  12. SSHセットアップ: サーバーにリモート接続するために、SSHサーバーをインストールします。
    • Install OpenSSH server: ここにスペースキーでチェックを入れてください。 チェックが入ったら Done にカーソルを合わせてEnterキーを押します。
    • Import SSH identity: 既存のSSH鍵をインポートできますが、入門ではスキップで問題ありません。
  13. スナップ選択: よく使われるソフトウェアを簡単にインストールできる「スナップ」が表示されます。ここでは特に何も選択せず、Done にカーソルを合わせてEnterキーを押してスキップして問題ありません。インストール後でもsnapコマンドでインストールできます。
  14. インストール開始: ここまでの設定内容でインストールが開始されます。ファイルのコピーや設定が行われます。しばらく時間がかかります。
  15. インストール完了: インストールが完了すると、「Install complete!」と表示されます。「Reboot Now」にカーソルが合っているので、そのままEnterキーを押して再起動します。
  16. ISOイメージの取り出し: 再起動時、仮想マシンが再びISOイメージから起動しようとすることがあります。「Please remove the installation medium, then press ENTER:」のようなメッセージが表示されたら、VirtualBoxの仮想マシンウィンドウのメニューから「デバイス」>「光学ドライブ」>「ディスクイメージを仮想ドライブから除去」を選択します。(または、ステータスバーのCDアイコンを右クリックして除去) ISOイメージが取り出されたら、仮想マシンウィンドウに戻ってEnterキーを押します。
  17. 起動とログインプロンプト: 仮想マシンが再起動し、黒い画面にテキストが表示され、最後にログインプロンプトが表示されます。

インストール、お疲れ様でした! これでUbuntu ServerがあなたのPC上の仮想マシンにインストールされました。

第2章:最初のログインと基本操作

仮想マシンのウィンドウに表示されているログインプロンプトで、インストール時に設定したユーザー名とパスワードを入力してログインしてみましょう。

[ホスト名] login: の後に、設定したユーザー名を入力してEnterキーを押します。
Password: の後に、設定したパスワードを入力してEnterキーを押します。(パスワードを入力しても画面には何も表示されませんが、入力はされています)

正しく入力できれば、以下のようなメッセージが表示され、最後にプロンプトが表示されます。

“`
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-XX-generic x86_64)

  • Documentation: https://help.ubuntu.com
  • Management: https://landscape.canonical.com
  • Support: https://ubuntu.com/advantage

XX updates can be installed immediately.
XX of these updates are security updates.
To see these additional updates run: apt list –upgradable

<いくつかメッセージが表示される>

[ユーザー名]@[ホスト名]:~$
“`

最後の行 [ユーザー名]@[ホスト名]:~$ が、CUIにおける操作の入り口となる プロンプト です。

  • [ユーザー名] : 現在ログインしているユーザー名
  • [ホスト名] : サーバーのホスト名
  • : : 区切り記号
  • ~ : 現在いるディレクトリがホームディレクトリであることを示します。ホームディレクトリは、ユーザーごとに用意される作業用の場所です。例えば studyuser というユーザーのホームディレクトリは /home/studyuser です。
  • $ : 一般ユーザーのプロンプトであることを示します。管理者権限を持つユーザー(root)のプロンプトは # になります。

プロンプトが表示されたら、そこにコマンドを入力してEnterキーを押すことで、様々な操作を行うことができます。

最初のコマンド

まずは、いくつかの基本的なコマンドを使ってみましょう。

  1. pwd (Print Working Directory)

    • 用途: 今自分がいるディレクトリ(現在位置)を表示します。
    • 書式: pwd
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ pwd
      /home/[ユーザー名]
      [ユーザー名]@[ホスト名]:~$
    • 結果: ログイン直後はホームディレクトリにいるため、/home/[ユーザー名] と表示されます。
  2. ls (List Files)

    • 用途: 今いるディレクトリの中にあるファイルやディレクトリの一覧を表示します。
    • 書式: ls [オプション] [パス]
    • パスを指定しない場合は、現在いるディレクトリの一覧が表示されます。
    • 実行例 (オプションなし):
      bash
      [ユーザー名]@[ホスト名]:~$ ls
      <何も表示されないか、ディレクトリやファイル名が表示される>
      [ユーザー名]@[ホスト名]:~$

      デフォルトでは隠しファイル(ファイル名の先頭が . で始まるファイル)は表示されません。
    • よく使うオプション:
      • -l: ファイルの詳細情報(パーミッション、所有者、サイズ、更新日時など)をリスト形式で表示します。
      • -a: 隠しファイルを含めて全て表示します。
      • -la または -al: -l-a の両方の機能を持ちます。よく使われます。
    • 実行例 (ls -la):
      bash
      [ユーザー名]@[ホスト名]:~$ ls -la
      total 16
      drwxr-xr-x 2 [ユーザー名] [ユーザー名] 4096 Jan 1 00:00 .
      drwxr-xr-x 3 root root 4096 Jan 1 00:00 ..
      -rw-r--r-- 1 [ユーザー名] [ユーザー名] 220 Jan 1 00:00 .bash_logout
      -rw-r--r-- 1 [ユーザー名] [ユーザー名] 3771 Jan 1 00:00 .bashrc
      -rw-r--r-- 1 [ユーザー名] [ユーザー名] 807 Jan 1 00:00 .profile
      [ユーザー名]@[ホスト名]:~$

      結果の見方については、後述の「ユーザーとパーミッション」の章で詳しく説明します。最初の行の . は現在のディレクトリ、次の .. は一つ上の階層のディレクトリを表します。
  3. cd (Change Directory)

    • 用途: 現在いるディレクトリを移動します。
    • 書式: cd [移動先のディレクトリのパス]
    • パスを指定しない場合: ホームディレクトリに戻ります。
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ cd /
      [ユーザー名]@[ホスト名]:/$ pwd
      /
      [ユーザー名]@[ホスト名]:/$ cd /home
      [ユーザー名]@[ホスト名]:/home$ pwd
      /home
      [ユーザー名]@[ホスト名]:/home$ cd [ユーザー名]
      [ユーザー名]@[ホスト名]:~$ pwd
      /home/[ユーザー名]
      [ユーザー名]@[ホスト名]:~$ cd .. # 一つ上のディレクトリに戻る
      [ユーザー名]@[ホスト名]:/home$ pwd
      /home
      [ユーザー名]@[ホスト名]:/home$ cd # パスを指定しないとホームディレクトリに戻る
      [ユーザー名]@[ホスト名]:~$ pwd
      /home/[ユーザー名]
      [ユーザー名]@[ホスト名]:~$
    • / はファイルシステムの一番上の階層(ルートディレクトリ)を表します。
    • .. は一つ上の階層のディレクトリを表します。
    • . は現在のディレクトリを表します(cd . は移動しませんが、コピーなどで「ここに」という意味で使います)。
  4. clear

    • 用途: 画面に表示されている内容を消去し、プロンプトを一番上に表示します。
    • 書式: clear
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ clear
      <画面がクリアされる>
      [ユーザー名]@[ホスト名]:~$

ファイルとディレクトリの概念

Linuxのファイルシステムは、Windowsのエクスプローラーで見慣れているフォルダ構造と似ています。

  • ファイル: データが保存されている実体です。テキストファイル、プログラムファイル、画像ファイルなど様々です。
  • ディレクトリ: ファイルや他のディレクトリをまとめておく「入れ物」です。Windowsでいう「フォルダ」にあたります。
  • パス: ファイルやディレクトリの場所を示す「住所」です。
    • 絶対パス: / (ルートディレクトリ) から始まる完全なパスです。例: /home/studyuser/.bashrc
    • 相対パス: 現在いるディレクトリからの相対的な位置を示すパスです。例: ホームディレクトリにいるときに Documents/myfile.txt と指定する場合など。

ヘルプの使い方

Linuxコマンドは非常にたくさんのオプションを持っています。全てのオプションを覚える必要はありません。困ったときはヘルプを見ましょう。

  1. man (Manual)

    • 用途: コマンドのマニュアル(説明書)を表示します。
    • 書式: man [コマンド名]
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ man ls
    • 結果: lsコマンドに関する詳細なマニュアルがページャー(通常 less)で表示されます。
    • マニュアルの操作:
      • スペースキー: 1ページ進む
      • Enterキー: 1行進む
      • b: 1ページ戻る
      • 矢印キー: 上下左右に移動
      • / + 検索したい文字列: 文字列を検索(nで次、Nで前)
      • q: マニュアルを終了する
  2. --help または -h

    • 用途: 多くのコマンドで、簡単な使い方や主要なオプションの一覧を表示します。manよりも手軽です。
    • 書式: [コマンド名] --help または [コマンド名] -h
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ ls --help
    • 結果: lsコマンドの簡単なヘルプメッセージが表示されます。

困ったらまずは --helpman を試す癖をつけましょう。

スーパーユーザー(root)と sudo コマンド

Linuxシステムでは、全ての権限を持つ特別なユーザーとして root (ルートユーザー) が存在します。システムに関わる重要な設定変更やソフトウェアのインストール、削除などは、この root ユーザーだけが行えます。

しかし、常に root ユーザーでログインして作業するのは非常に危険です。誤ったコマンド一つでシステム全体を壊してしまう可能性があるからです。そこで、通常は一般ユーザーでログインし、管理者権限が必要なコマンドを実行するときだけ、一時的に root ユーザーの権限を借りる、という方法が推奨されます。

この一時的に root 権限を借りるためのコマンドが sudo (Substitute User and Do) です。

  • 書式: sudo [実行したいコマンド]
  • 実行例: sudo apt update
  • sudo を初めて使うときや、一定時間経過後に、現在ログインしているユーザーのパスワードを求められます。これは、本当にその操作を許可されたユーザーなのかを確認するためです。root ユーザーのパスワードではなく、自分のユーザーのパスワードを入力してください。

ほとんどのシステム管理作業は sudo を使って行います。例えば、ソフトウェアのインストールなどは必ず sudo をつけて実行する必要があります。

システムのシャットダウンと再起動

仮想マシンなので、VirtualBoxのメニューから電源オフすることもできますが、OSの中からコマンドで正常にシャットダウン・再起動する練習もしておきましょう。

  • シャットダウン:
    • sudo shutdown now: 今すぐシステムをシャットダウンします。
    • sudo shutdown -h +[分]: 指定した分数後にシャットダウンします。(例: sudo shutdown -h +5 で5分後)
    • sudo poweroff: 今すぐシステムをシャットダウンします(shutdown now と似ています)。
  • 再起動:
    • sudo reboot: 今すぐシステムを再起動します。

これらのコマンドは管理者権限が必要なので、必ず sudo をつけて実行します。

bash
[ユーザー名]@[ホスト名]:~$ sudo reboot
Password: <パスワードを入力>
<システムが再起動する>

シャットダウンや再起動を行う際は、実行中の作業がないか確認しましょう。

第3章:ファイルの操作

Linuxのファイルシステムは階層構造になっています。ここでは、ファイルやディレクトリを作成したり、コピー・移動・削除したりする基本的なコマンドを学びます。

1. ファイルの作成: touch

  • 用途: 新しい空のファイルを作成します。ファイルが既に存在する場合は、そのファイルの最終更新日時を現在時刻に更新します。
  • 書式: touch [ファイル名]
  • 実行例:
    bash
    [ユーザー名]@[ホスト名]:~$ touch myfile.txt
    [ユーザー名]@[ホスト名]:~$ ls
    myfile.txt
    [ユーザー名]@[ホスト名]:~$

2. ディレクトリの作成: mkdir (Make Directory)

  • 用途: 新しいディレクトリを作成します。
  • 書式: mkdir [ディレクトリ名]
  • 実行例:
    bash
    [ユーザー名]@[ホスト名]:~$ mkdir mydir
    [ユーザー名]@[ホスト名]:~$ ls
    myfile.txt mydir
    [ユーザー名]@[ホスト名]:~$
  • オプション:
    • -p: 途中のディレクトリが存在しない場合でも、親ディレクトリごと作成します。例: mkdir -p project/docs/images

3. ファイルのコピー: cp (Copy)

  • 用途: ファイルやディレクトリをコピーします。
  • 書式: cp [コピー元] [コピー先]
  • 実行例 (ファイルのコピー):
    bash
    [ユーザー名]@[ホスト名]:~$ cp myfile.txt myfile_copy.txt
    [ユーザー名]@[ホスト名]:~$ ls
    myfile.txt myfile_copy.txt mydir
    [ユーザー名]@[ホスト名]:~$ cp myfile.txt mydir/
    [ユーザー名]@[ホスト名]:~$ ls mydir
    myfile.txt
    [ユーザー名]@[ホスト名]:~$

    • cp myfile.txt mydir/ は、「myfile.txt を mydir ディレクトリの中にコピーする」という意味です。コピー先の名前を指定しない場合は、元のファイル名と同じ名前でコピーされます。
  • オプション:
    • -r (recursive): ディレクトリをコピーする場合に必須です。ディレクトリとその中身全てを再帰的にコピーします。
    • 実行例 (ディレクトリのコピー):
      bash
      [ユーザー名]@[ホスト名]:~$ cp -r mydir mydir_backup
      [ユーザー名]@[ホスト名]:~$ ls
      myfile.txt myfile_copy.txt mydir mydir_backup
      [ユーザー名]@[ホスト名]:~$ ls mydir_backup/
      myfile.txt
      [ユーザー名]@[ホスト名]:~$

4. ファイルの移動/名前変更: mv (Move)

  • 用途: ファイルやディレクトリを移動したり、名前を変更したりします。
  • 書式: mv [移動元] [移動先]
  • 実行例 (名前変更):
    bash
    [ユーザー名]@[ホスト名]:~$ mv myfile_copy.txt newname.txt
    [ユーザー名]@[ホスト名]:~$ ls
    mydir mydir_backup newname.txt myfile.txt
    [ユーザー名]@[ホスト名]:~$
  • 実行例 (移動):
    bash
    [ユーザー名]@[ホスト名]:~$ mv newname.txt mydir/
    [ユーザー名]@[ホスト名]:~$ ls
    mydir mydir_backup myfile.txt
    [ユーザー名]@[ホスト名]:~$ ls mydir/
    myfile.txt newname.txt
    [ユーザー名]@[ホスト名]:~$

    • 移動元と移動先が同じディレクトリ内で、移動先として新しい名前を指定すると、名前の変更になります。
    • 移動先として別のディレクトリを指定すると、そのディレクトリの中に移動します。移動先のディレクトリ名だけを指定した場合、元のファイル名/ディレクトリ名と同じ名前で移動します。

5. ファイルの削除: rm (Remove)

  • 用途: ファイルやディレクトリを削除します。一度削除すると元に戻すのは難しいので注意が必要です。
  • 書式: rm [オプション] [ファイル名]
  • 実行例 (ファイルの削除):
    bash
    [ユーザー名]@[ホスト名]:~$ rm myfile.txt
    [ユーザー名]@[ホスト名]:~$ ls
    mydir mydir_backup
    [ユーザー名]@[ホスト名]:~$
  • オプション:
    • -r (recursive): ディレクトリを削除する場合に必須です。ディレクトリとその中身全てを再帰的に削除します。
    • -f (force): 確認メッセージを表示せずに強制的に削除します。非常に危険なオプションなので、使う際は十分に注意してください。
    • 実行例 (ディレクトリの削除 – -r オプションが必要):
      bash
      [ユーザー名]@[ホスト名]:~$ rm mydir_backup
      rm: cannot remove 'mydir_backup': Is a directory
      [ユーザー名]@[ホスト名]:~$ rm -r mydir_backup
      [ユーザー名]@[ホスト名]:~$ ls
      mydir
      [ユーザー名]@[ホスト名]:~$

6. ファイルの内容表示: cat, less, head, tail

  • cat (Concatenate and print files)
    • 用途: ファイルの内容を全て画面に表示します。短いファイルを見るのに便利です。複数のファイルを指定すると、それらを連結して表示します。
    • 書式: cat [ファイル名]
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ cat mydir/myfile.txt
      <myfile.txt の内容が表示される>
  • less
    • 用途: ファイルの内容をページャーで表示します。長いファイルを見るのに適しています。画面に収まらない場合は、Enterやスペースキーでスクロールして見ることができます。終了するには q キーを押します。
    • 書式: less [ファイル名]
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ less /etc/services # 長いファイルを見てみよう
      <less画面が表示される>
  • head
    • 用途: ファイルの先頭から指定した行数(デフォルトは10行)を表示します。
    • 書式: head [オプション] [ファイル名]
    • オプション: -n [行数] で表示する行数を指定できます。
    • 実行例: head -n 5 /etc/services (先頭5行を表示)
  • tail
    • 用途: ファイルの末尾から指定した行数(デフォルトは10行)を表示します。ログファイルなど、追記されていくファイルで最新の内容を確認するのに便利です。
    • 書式: tail [オプション] [ファイル名]
    • オプション: -n [行数] で表示する行数を指定できます。-f (follow) オプションを付けると、ファイルに追記された内容をリアルタイムで表示し続けます(終了するには Ctrl+C)。
    • 実行例: tail -n 5 /etc/services (末尾5行を表示), tail -f /var/log/syslog (syslogファイルの追跡)

7. シンボリックリンクの作成: ln -s (Link – Symbolic)

  • 用途: ファイルやディレクトリへの「ショートカット」を作成します。元のファイルを削除したり移動したりするとリンクは無効になります。
  • 書式: ln -s [元のファイルまたはディレクトリ] [作成するリンク名]
  • 実行例:
    bash
    [ユーザー名]@[ホスト名]:~$ ln -s mydir mydir_link
    [ユーザー名]@[ホスト名]:~$ ls -l
    drwxr-xr-x 2 [ユーザー名] [ユーザー名] 4096 Jan 1 00:00 mydir
    lrwxrwxrwx 1 [ユーザー名] [ユーザー名] 5 Jan 1 00:00 mydir_link -> mydir # -> の後に元の場所が表示される
    [ユーザー名]@[ホスト名]:~$ cd mydir_link/
    [ユーザー名]@[ホスト名]:~/mydir_link$ pwd
    /home/[ユーザー名]/mydir_link
    [ユーザー名]@[ホスト名]:~/mydir_link$ ls
    myfile.txt
    [ユーザー名]@[ホスト名]:~/mydir_link$

    • ls -l の表示で、先頭が l になっているのがシンボリックリンクです。矢印 -> でリンク先が表示されます。
    • シンボリックリンクを介して元のファイル/ディレクトリにアクセスできます。

第4章:ユーザーとパーミッション

Linuxは複数のユーザーが同時に利用することを前提としたマルチユーザーOSです。そのため、ファイルやディレクトリに対して、どのユーザーがどのような操作(読み取り、書き込み、実行)をできるかを細かく制御する仕組みがあります。これが「パーミッション(権限)」です。

ユーザーとグループ

  • ユーザー (User): システムを利用する個々のユーザーです。ログイン時に使用するアカウントです。各ファイルやディレクトリには「所有者」のユーザーが設定されています。
  • グループ (Group): 複数のユーザーをまとめて管理する仕組みです。各ファイルやディレクトリには「所有グループ」が設定されており、そのグループに所属するユーザーに対して特定の権限を与えることができます。

パーミッションの種類

各ファイルやディレクトリに対して、以下の3種類の権限を設定できます。

  • r (read): 読み取り権限。
    • ファイル: 内容を読んだり表示したりできる。
    • ディレクトリ: ディレクトリ内のファイル一覧を表示できる (ls)。
  • w (write): 書き込み権限。
    • ファイル: 内容を変更したり保存したりできる。
    • ディレクトリ: ディレクトリ内にファイルを作成したり、既存のファイルを削除/名前変更したりできる。
  • x (execute): 実行権限。
    • ファイル: そのファイルをプログラムとして実行できる。
    • ディレクトリ: そのディレクトリに cd で移動したり、そのディレクトリ内のファイルにアクセスしたりできる。

これらの権限は、以下の3つの対象に対して設定されます。

  1. u (user): 所有者(そのファイル/ディレクトリを作成したユーザーなど)
  2. g (group): 所有グループに所属するユーザー
  3. o (others): その他のユーザー(所有者でもなく、所有グループにも所属しない全てのユーザー)

パーミッションの確認方法 (ls -l)

ls -l コマンドを使うと、ファイルやディレクトリの詳細情報が表示されます。この表示の先頭部分にパーミッション情報が含まれています。

例:
-rw-r--r-- 1 studyuser studyuser 807 Jan 1 00:00 .profile
drwxr-xr-x 2 studyuser studyuser 4096 Jan 1 00:00 mydir

先頭の10文字がパーミッション情報です。

  1. 1文字目: ファイルの種類を示します。
    • -: 通常のファイル
    • d: ディレクトリ
    • l: シンボリックリンク
    • 他にも種類がありますが、入門ではこの3つを知っておけば十分です。
  2. 2~4文字目: 所有者 (u) のパーミッション (rwx の組み合わせ)
  3. 5~7文字目: 所有グループ (g) のパーミッション (rwx の組み合わせ)
  4. 8~10文字目: その他のユーザー (o) のパーミッション (rwx の組み合わせ)

-rw-r--r-- の例:
* -: ファイル
* rw-: 所有者は読み取り(r)と書き込み(w)ができるが、実行(x)はできない。
* r--: 所有グループは読み取り(r)だけができる。
* r--: その他のユーザーは読み取り(r)だけができる。

drwxr-xr-x の例:
* d: ディレクトリ
* rwx: 所有者は読み取り(r)、書き込み(w)、実行(x)ができる。
* r-x: 所有グループは読み取り(r)と実行(x)ができるが、書き込み(w)はできない。(ディレクトリのx権限は非常に重要です。これが無いと cd でそのディレクトリに入れず、その中のファイルにもアクセスできません)
* r-x: その他のユーザーは読み取り(r)と実行(x)ができるが、書き込み(w)はできない。

その次のフィールドは、ハードリンクの数、所有者、所有グループ、ファイルサイズ、最終更新日時、ファイル/ディレクトリ名が続きます。

パーミッションの変更方法: chmod (Change Mode)

ファイルのパーミッションを変更するには chmod コマンドを使用します。変更方法はいくつかありますが、代表的なのは「数値表現」と「記号表現」です。

  • 数値表現: r=4, w=2, x=1 という値を使い、権限の合計値で指定します。権限が無い場合は 0 です。

    • rwx = 4+2+1 = 7
    • rw- = 4+2+0 = 6
    • r-x = 4+0+1 = 5
    • r-- = 4+0+0 = 4
    • -w- = 0+2+0 = 2
    • --x = 0+0+1 = 1
    • --- = 0+0+0 = 0

    パーミッションは「所有者」「所有グループ」「その他」の順に3桁の数値で指定します。
    * 例: rwxr-xr-x は 755
    * 例: rw-r--r-- は 644

    • 書式: chmod [3桁の数値] [ファイル名]
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ touch testfile.txt
      [ユーザー名]@[ホスト名]:~$ ls -l testfile.txt
      -rw-rw-r-- 1 [ユーザー名] [ユーザー名] 0 Jan 1 00:00 testfile.txt # 初期パーミッションは環境による
      [ユーザー名]@[ホスト名]:~$ chmod 600 testfile.txt # 所有者のみ読み書き可
      [ユーザー名]@[ホスト名]:~$ ls -l testfile.txt
      -rw------- 1 [ユーザー名] [ユーザー名] 0 Jan 1 00:00 testfile.txt
      [ユーザー名]@[ホスト名]:~$ chmod 755 testfile.txt # 所有者rwx, グループrx, その他rx
      [ユーザー名]@[ホスト名]:~$ ls -l testfile.txt
      -rwxr-xr-x 1 [ユーザー名] [ユーザー名] 0 Jan 1 00:00 testfile.txt
    • ディレクトリに chmod を使う場合は、-r オプションを付けるとディレクトリの中身全てに再帰的に適用されます(例: chmod -r 755 mydir)。
  • 記号表現: どの対象 (u, g, o, a=all) に、どのような演算子 (+,-,=) で、どの権限 (r, w, x) を設定するかを指定します。

    • 演算子:

      • +: 権限を追加する
      • -: 権限を削除する
      • =: 指定した権限のみにする(それ以外の権限は削除される)
    • 書式: chmod [対象][演算子][権限] [ファイル名]

    • 複数の変更を同時に行う場合はカンマ , で区切ります。
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ touch anotherfile.txt
      [ユーザー名]@[ホスト名]:~$ ls -l anotherfile.txt
      -rw-rw-r-- 1 [ユーザー名] [ユーザー名] 0 Jan 1 00:00 anotherfile.txt
      [ユーザー名]@[ホスト名]:~$ chmod o+w anotherfile.txt # その他のユーザーに書き込み権限を追加
      [ユーザー名]@[ホスト名]:~$ ls -l anotherfile.txt
      -rw-rw-rw- 1 [ユーザー名] [ユーザー名] 0 Jan 1 00:00 anotherfile.txt
      [ユーザー名]@[ホスト名]:~$ chmod g-w anotherfile.txt # 所有グループから書き込み権限を削除
      [ユーザー名]@[host]:~$ ls -l anotherfile.txt
      -rw-r--rw- 1 [ユーザー名] [ユーザー名] 0 Jan 1 00:00 anotherfile.txt
      [ユーザー名]@[host]:~$ chmod a=rw anotherfile.txt # 全てのユーザーに読み書き権限のみを設定
      [user]@[host]:~$ ls -l anotherfile.txt
      -rw-rw-rw- 1 [user] [user] 0 Jan 1 00:00 anotherfile.txt
    • どちらの表現を使うかは好みや状況によりますが、特定の権限だけを変更したい場合は記号表現が、一般的な権限設定 (755, 644など) にしたい場合は数値表現が使いやすいかもしれません。

所有者の変更方法: chown (Change Owner)

ファイルやディレクトリの所有者や所有グループを変更するには chown コマンドを使用します。このコマンドは管理者権限が必要です(sudo を付けて実行します)。

  • 書式: chown [新しい所有者] [ファイル名]
  • 書式: chown :[新しい所有グループ] [ファイル名]
  • 書式: chown [新しい所有者]:[新しい所有グループ] [ファイル名]
  • オプション: -r (recursive) でディレクトリの中身全てに再帰的に適用します。
  • 実行例 (所有者を root に変更):
    bash
    [ユーザー名]@[host]:~$ touch ownedfile.txt
    [ユーザー名]@[host]:~$ ls -l ownedfile.txt
    -rw-rw-r-- 1 [ユーザー名] [ユーザー名] 0 Jan 1 00:00 ownedfile.txt
    [user]@[host]:~$ sudo chown root ownedfile.txt
    Password: <パスワード入力>
    [user]@[host]:~$ ls -l ownedfile.txt
    -rw-rw-r-- 1 root [ユーザー名] 0 Jan 1 00:00 ownedfile.txt # 所有者が root に変わった
  • 実行例 (所有グループを root に変更):
    bash
    [ユーザー名]@[host]:~$ sudo chown :root ownedfile.txt
    Password: <パスワード入力>
    [ユーザー名]@[host]:~$ ls -l ownedfile.txt
    -rw-rw-r-- 1 root root 0 Jan 1 00:00 ownedfile.txt # 所有グループが root に変わった
  • 実行例 (所有者と所有グループを両方変更):
    bash
    [ユーザー名]@[host]:~$ sudo chown [ユーザー名]:[ユーザー名] ownedfile.txt # 元に戻す
    Password: <パスワード入力>
    [ユーザー名]@[host]:~$ ls -l ownedfile.txt
    -rw-rw-r-- 1 [ユーザー名] [ユーザー名] 0 Jan 1 00:00 ownedfile.txt

chown コマンドは非常に強力なので、間違ったファイルを変更しないように注意が必要です。

第5章:ソフトウェアの管理

Linuxサーバーでプログラムやツールを利用するには、それらをインストールする必要があります。Ubuntuでは APT (Advanced Package Tool) という優れたパッケージ管理システムが使われています。

パッケージ管理システムとは?

ソフトウェアをインストール、更新、削除する際に、ソフトウェア本体だけでなく、それが動作するために必要な他のソフトウェア(依存関係)も自動的に解決し、まとめて管理してくれる仕組みです。これにより、手動で一つ一つソフトウェアを探してきてインストールしたり、依存関係に悩まされたりする手間が省け、安全かつ効率的にソフトウェアを管理できます。

リポジトリの概念

APTは、ソフトウェアパッケージが置いてある場所を「リポジトリ」と呼びます。Ubuntuの公式リポジトリには、数万種類の無償ソフトウェアが登録されています。APTは、設定ファイル(/etc/apt/sources.list/etc/apt/sources.list.d/ ディレクトリ内のファイル)に記述されたリポジトリの情報を元に、ソフトウェアの検索やダウンロードを行います。

ソフトウェア管理の基本コマンド

ほとんどのAPTコマンドはシステム全体に影響を与えるため、sudo を付けて実行する必要があります。

  1. リポジトリ情報の更新: sudo apt update

    • 用途: APTが参照するリポジトリにあるソフトウェアのリストやバージョン情報を最新の状態に更新します。ソフトウェアをインストールしたりアップグレードしたりする前には、必ずこのコマンドを実行してください。
    • 書式: sudo apt update
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ sudo apt update
      <パスワード入力>
      <リポジトリ情報がダウンロードされ、更新が行われる>
      Hit:1 http://jp.archive.ubuntu.com/ubuntu jammy InRelease
      Get:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
      ...
      Reading package lists... Done # これが表示されたら完了
    • Hit は変更がないリポジトリ、Get は新しい情報があるリポジトリを示します。
  2. インストール済みのソフトウェアのアップグレード: sudo apt upgrade

    • 用途: apt update で取得した情報に基づき、現在システムにインストールされているソフトウェアのうち、新しいバージョンが利用可能なものを全てアップグレードします。
    • 書式: sudo apt upgrade
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ sudo apt upgrade
      Reading package lists... Done
      Building dependency tree... Done
      Reading state information... Done
      Calculating upgrade... Done
      The following packages will be upgraded:
      <アップグレードされるパッケージ一覧>
      XX upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
      Need to get XX MB of archives.
      After this operation, YY MB of additional disk space will be used.
      Do you want to continue? [Y/n] # アップグレードを実行するか聞かれる
    • アップグレードされるパッケージ一覧を確認し、問題なければ y を入力してEnterキーを押します。n を入力するとキャンセルできます。
    • サーバーを安定した状態に保つためにも、定期的な apt updateapt upgrade の実行は非常に重要です。
  3. ソフトウェアの検索: apt search

    • 用途: リポジトリに含まれるソフトウェアをキーワードで検索します。
    • 書式: apt search [キーワード]
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ apt search nginx
      Sorting... Done
      Full Text Search... Done
      nginx/jammy-updates,jammy,now 1.18.0-6ubuntu14.4 amd64 [installed] # インストール済み
      high performance, highly scalable web server - binaries
      nginx-common/jammy-updates,jammy,now 1.18.0-6ubuntu14.4 all [installed,automatic] # インストール済み
      high performance, highly scalable web server - common files
      ... 多くの候補が表示される
    • キーワードに関連するパッケージ名と簡単な説明が表示されます。[installed] はインストール済みであることを示します。
  4. ソフトウェアのインストール: sudo apt install

    • 用途: 指定したソフトウェアパッケージをインストールします。必要な依存関係も一緒にインストールされます。
    • 書式: sudo apt install [パッケージ名]
    • 複数のパッケージを同時にインストールすることもできます: sudo apt install [パッケージ名1] [パッケージ名2] ...
    • 実行例 (htop というプロセス監視ツールをインストール):
      bash
      [ユーザー名]@[ホスト名]:~$ apt search htop # まず検索してパッケージ名を確認
      ...
      htop/jammy 3.0.5-7build2 amd64 # パッケージ名は htop だとわかる
      interactive processes viewer
      ...
      [ユーザー名]@[ホスト名]:~$ sudo apt install htop
      Reading package lists... Done
      Building dependency tree... Done
      Reading state information... Done
      The following NEW packages will be installed:
      htop
      0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
      Need to get 131 kB of archives.
      After this operation, 418 kB of additional disk space will be used.
      Do you want to continue? [Y/n] # インストールを実行するか聞かれる
    • y を入力してEnterキーを押すとインストールが始まります。
  5. ソフトウェアの削除: sudo apt remove / sudo apt purge

    • 用途: 指定したソフトウェアパッケージを削除します。
    • remove: ソフトウェア本体は削除しますが、設定ファイルなどは残す場合があります。
    • purge: ソフトウェア本体と設定ファイルなど、関連ファイルを全て削除します。完全に綺麗に削除したい場合はこちらを使います。
    • 書式: sudo apt remove [パッケージ名] または sudo apt purge [パッケージ名]
    • 実行例 (htop を削除):
      bash
      [ユーザー名]@[ホスト名]:~$ sudo apt remove htop
      Reading package lists... Done
      Building dependency tree... Done
      Reading state information... Done
      The following packages will be REMOVED:
      htop
      0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
      After this operation, 418 kB disk space will be freed.
      Do you want to continue? [Y/n] # 削除を実行するか聞かれる
    • y を入力してEnterキーを押すと削除が始まります。
  6. 不要になった依存関係の削除: sudo apt autoremove

    • 用途: ソフトウェアのインストール時に依存関係として自動的にインストールされたが、現在はどのソフトウェアからも必要とされなくなったパッケージを削除します。ディスク容量の節約になります。
    • 書式: sudo apt autoremove
    • ソフトウェアを削除した後に実行することが推奨されます。

APTコマンドをマスターすれば、Ubuntu Serverへのソフトウェア導入や管理が格段に楽になります。

第6章:ネットワークの基本

サーバーはネットワークにつながってこそ、その真価を発揮します。Ubuntu Serverにおけるネットワークの基本的な概念と確認方法、そしてリモート操作の要であるSSHについて学びます。

IPアドレス、サブネットマスク、ゲートウェイ、DNS

  • IPアドレス: ネットワーク上の機器を識別するための番号です。192.168.1.10 のような形式(IPv4)や、より複雑な形式(IPv6)があります。
  • サブネットマスク: IPアドレスのどこまでがネットワークアドレス部で、どこからがホストアドレス部かを示す情報です。これにより、同じネットワークに属する機器の範囲が定義されます。255.255.255.0 のような形式(IPv4)で表現されます。
  • ゲートウェイ (Default Gateway): 別のネットワーク(例えばインターネット)に通信する際に経由する機器のIPアドレスです。通常はルーターのアドレスになります。
  • DNS (Domain Name System): www.google.com のような人間にとって分かりやすいドメイン名を、コンピューターが理解できるIPアドレスに変換してくれるシステムです。DNSサーバーのIPアドレスを設定しておく必要があります。

ネットワーク設定の確認: ip コマンド

Ubuntu Server 18.04以降では、ネットワーク設定の確認に ifconfig よりも新しい ip コマンドが推奨されています。

  • IPアドレスなどの確認: ip addr (または ip a)
    • 用途: ネットワークインターフェース(NIC、LANカードなど)の情報(IPアドレス、MACアドレス、状態など)を表示します。
    • 書式: ip addr
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ ip addr
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 ...
      inet 127.0.0.1/8 scope host lo
      ...
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
      link/ether ...
      inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0 # これが仮想マシンに割り当てられたIPアドレス
      valid_lft 86323sec preferred_lft 86323sec
      inet6 fe80::...
      ...
    • lo はループバックインターフェースで、自分自身を示す特別なインターフェースです。
    • eth0 (または ensXX のような名前) が、VirtualBoxで設定したネットワークアダプターに対応するインターフェース名です。inet の後に表示されているのが、そのインターフェースに割り当てられたIPv4アドレスです。(例: 10.0.2.15/24 はIPアドレスが 10.0.2.15、サブネットマスクが /24 (255.255.255.0) であることを示します)
  • ルーティング情報の確認: ip route (または ip r)
    • 用途: ネットワークの経路情報(ルーティングテーブル)を表示します。デフォルトゲートウェイなどもここで確認できます。
    • 書式: ip route
    • 実行例:
      bash
      [ユーザー名]@[ホスト名]:~$ ip route
      default via 10.0.2.2 dev eth0 proto dhcp metric 100 # デフォルトゲートウェイ
      10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100 # 自分のネットワークアドレス帯
    • default via [IPアドレス] がデフォルトゲートウェイのアドレスです。VirtualBoxのNATモードの場合、通常は 10.0.2.2 となります。

ネットワーク接続の確認: ping

  • 用途: ネットワーク上の別のコンピューターやサーバーに通信が可能か確認します。指定した宛先に対して小さなパケットを送信し、応答があるか、応答までの時間がどのくらいかを計測します。
  • 書式: ping [宛先IPアドレスまたはホスト名]
  • 実行例 (GoogleのDNSサーバーにping):
    bash
    [ユーザー名]@[ホスト名]:~$ ping 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=12.3 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=11.9 ms
    ... # Ctrl+C で停止するまで続く
    --- 8.8.8.8 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2003ms
    rtt min/avg/max/mdev = 11.918/12.127/12.300/0.205 ms

    • Ctrl+C キーを押すとpingが停止し、統計情報が表示されます。
    • packet loss が0%であれば、宛先との通信は正常に行えています。
    • time が応答までの時間(ミリ秒)です。
  • 実行例 (ホスト名でping – DNSが正しく設定されているか確認):
    bash
    [ユーザー名]@[ホスト名]:~$ ping google.com
    PING google.com (142.250.199.142) 56(84) bytes of data. # ホスト名がIPアドレスに変換されている
    64 bytes from ...
    ... # Ctrl+C で停止

DNS解決の確認: nslookup, dig

  • 用途: ドメイン名からIPアドレスを調べたり(正引き)、IPアドレスからドメイン名を調べたり(逆引き)して、DNSが正しく機能しているか確認します。dig の方がより詳細な情報が得られます。
  • nslookup もしくは dig コマンドはデフォルトでインストールされていない場合があります。その場合は sudo apt install dnsutils でインストールできます。
  • 書式: nslookup [ホスト名またはIPアドレス]
  • 書式: dig [ホスト名]
  • 実行例 (dig で google.com のIPアドレスを調べる):
    “`bash
    [ユーザー名]@[ホスト名]:~$ dig google.com
    ; <<>> DiG 9.18.1-1ubuntu1.6-Ubuntu <<>> google.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62069
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 65494
    ;; QUESTION SECTION:
    ;google.com. IN A

    ;; ANSWER SECTION: # ここに答えが表示される
    google.com. 213 IN A 142.251.42.110 # google.com のIPアドレス (IPv4)

    複数のIPが表示されることもあります

    ;; Query time: 14 msec
    ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) # 問い合わせたDNSサーバー
    ;; WHEN: Mon Jan 01 00:00:00 UTC 2024
    ;; MSG SIZE rcvd: 59
    “`

SSH (Secure Shell)

SSHは、ネットワーク経由で安全にサーバーに接続し、CUI操作を行うためのプロトコルです。パスワードなどの情報が暗号化されて送受信されるため、盗聴のリスクが低く、サーバーのリモート管理には欠かせません。Ubuntu Serverのインストール時にOpenSSHサーバーをインストールしていれば、すぐにSSH接続を受け付ける状態になっています。

  • なぜSSHを使うのか?

    • 安全性: 通信が暗号化されるため、機密情報(ログイン情報やコマンド内容)が保護されます。
    • リモート操作: 離れた場所にあるサーバーを自宅やオフィスから操作できます。
    • コマンド実行: ファイル転送(SCP/SFTP)などもSSHの仕組みを利用して安全に行えます。
  • SSHクライアント
    ホストPC(VirtualBoxが動いている側のPC)から仮想マシンへSSH接続するには、SSHクライアントソフトウェアが必要です。

    • Windows: PuTTY が有名です。最近のWindows 10/11 ではPowerShellやコマンドプロンプトで標準のOpenSSHクライアントが使えるようになっています。
    • macOS/Linux: ターミナルを開けば標準でOpenSSHクライアント (ssh コマンド) が使えます。
  • SSHでの接続方法 (ssh コマンド)

    • 書式: ssh [ユーザー名]@[サーバーのIPアドレスまたはホスト名]
    • VirtualBoxのNAT設定とポートフォワーディングを利用している場合、ホストPCから仮想マシンへのIPアドレスは直接指定できません。代わりに、ホストPCの特定のポート(例: 2222)に接続し、それを仮想マシンの22番ポートに転送するように設定しました。この場合、接続は以下のようになります。
    • 書式: ssh [ユーザー名]@localhost -p [VirtualBoxで設定したホストポート]
    • 実行例 (ホストPCのターミナル/PowerShell/コマンドプロンプトから):
      bash
      # studyuser で VirtualBoxのホストポート 2222 を経由して接続
      ssh studyuser@localhost -p 2222
    • 初めて接続する際には、接続先のサーバーの公開鍵情報を保存するか確認するメッセージが表示されます(”Are you sure you want to continue connecting (yes/no/[fingerprint])?”)。これは、次回以降、同じサーバーに接続する際に、サーバーが入れ替わっていないか(中間者攻撃を防ぐ)を確認するためのものです。内容を確認して yes と入力し、Enterキーを押します。
    • 次に、ユーザーのパスワードを求められます。「Password:」の後に、接続先のサーバー(仮想マシン)のユーザーパスワードを入力してEnterキーを押します。
    • パスワード認証に成功すれば、仮想マシンのCUIプロンプトが表示され、リモートで操作できるようになります。

これで、VirtualBoxのウィンドウを直接操作する代わりに、ホストPCからターミナル経由で快適にサーバーを操作できるようになりました。CUI操作に慣れてくると、こちらの方がコピー&ペーストなどもできて便利に感じるはずです。

第7章:プロセスの管理

サーバーでは様々なプログラムが常に動作しています。これらの動作しているプログラムを「プロセス」と呼びます。サーバーの負荷状況を確認したり、応答しないプログラムを停止させたりするために、プロセスを管理するスキルが必要です。

プロセスとは?

実行中のプログラムのインスタンスです。例えば、Webサーバーソフトウェア(Nginxなど)を起動すると、そのWebサーバーのプロセスがメモリ上にロードされ、実行されます。それぞれのプロセスには一意のID番号(PID: Process ID)が割り当てられます。

実行中のプロセスの確認

  1. ps (Process Status)

    • 用途: 現在実行されているプロセスを表示します。デフォルトでは自分自身のターミナルに関連するプロセスしか表示されません。
    • 書式: ps [オプション]
    • よく使うオプション:
      • aux: システム上の全プロセスをユーザー、CPU使用率、メモリ使用率など詳細情報とともに表示します。(ps aux は Linux でよく使われるオプションです。他のUnix系システムでは ps -ef が似たような意味を持ちます。)
      • grep [キーワード]: パイプ | と組み合わせて、特定のキーワードを含むプロセスだけを絞り込んで表示するためによく使われます。
    • 実行例 (全てのプロセスを詳細表示):
      bash
      [ユーザー名]@[ホスト名]:~$ ps aux
      USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
      root 1 0.0 0.8 167024 16516 ? Ss Jan01 0:04 /sbin/init
      root 521 0.0 1.6 178240 32944 ? Ss Jan01 0:01 /lib/systemd/systemd-journald
      ...
      [ユーザー名]@[ホスト名]:~$

      • 表示項目の簡単な説明:
        • USER: プロセスを実行しているユーザー
        • PID: プロセスID
        • %CPU: CPU使用率
        • %MEM: メモリ使用率
        • COMMAND: 実行されているコマンド名
      • STAT (State) はプロセスの状態を示します(例: Ss はセッションリーダープロセス、R は実行中、S はスリープ中など)。
    • 実行例 (キーワードで絞り込み – ssh プロセス):
      bash
      [ユーザー名]@[ホスト名]:~$ ps aux | grep sshd # sshd は SSH サーバーのプロセス名
      root 1001 0.0 0.1 108880 3456 ? Ss Jan01 0:00 /usr/sbin/sshd -D
      root 2051 0.0 0.2 114428 4884 ? Ss 00:00 0:00 sshd: [accepter]
      studyuser 2100 0.0 0.3 114428 7064 ? Rs 00:00 0:00 sshd: studyuser@pts/0
      studyuser 2101 0.0 0.1 10912 2620 pts/0 Ss 00:00 0:00 -bash # 自分が実行しているbashシェル
      studyuser 2150 0.0 0.0 14420 1092 pts/0 R+ 00:00 0:00 grep --color=auto sshd # grepコマンド自身

      最後の grep コマンド自身が表示されるのは正常です。
  2. top

    • 用途: システム全体のリソース使用状況(CPU使用率、メモリ使用率、負荷平均など)と、プロセスごとのリソース使用状況をリアルタイムに表示します。サーバーの現在の状態を確認するのに非常に便利です。
    • 書式: top
    • 実行例: top コマンドを実行すると、以下のような画面が継続的に更新されて表示されます。
      “`
      top – 00:00:00 up 0 days, 0:00, 1 user, load average: 0.00, 0.00, 0.00
      Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie
      %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
      MiB Mem : 3951.4 total, 3582.5 free, 145.3 used, 223.6 buff/cache
      MiB Swap: 2047.0 total, 2047.0 free, 0.0 used. 3731.6 avail Mem

      PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
      1 root 20 0 167024 16516 10704 S 0.0 0.4 0:04.23 systemd
      521 root 20 0 178240 32944 12904 S 0.0 0.8 0:01.34 systemd-journal

      ``
      * 画面の見方:
      * 上部: システムの稼働時間、ログインユーザー数、負荷平均 (load average)、タスクの状態などが表示されます。負荷平均は、システムで処理を待っているプロセスの数の平均値です。
      * CPU(s): CPUの使用率が表示されます。
      idがアイドル(何もしていない)時間の割合です。
      * Mem: メモリの使用状況が表示されます。
      * Swap: スワップ領域(メモリが不足したときにストレージを一時的にメモリとして使う領域)の使用状況が表示されます。
      * プロセス一覧: 各プロセスのPID, ユーザー, CPU/メモリ使用率, 実行時間などが表示されます。デフォルトではCPU使用率の高い順などにソートされます。
      *
      topの操作:qキーで終了します。PキーでCPU使用率順、M` キーでメモリ使用率順にソートできます。

  3. pstree

    • 用途: プロセスを親子関係のツリー構造で表示します。どのプロセスがどのプロセスから起動されたのかを把握できます。
    • 書式: pstree [オプション]
    • 実行例: pstree -p (PIDも一緒に表示)
      bash
      [ユーザー名]@[ホスト名]:~$ pstree -p
      systemd(1)─┬─systemd-journa(521)
      ├─systemd-logind(701)
      ├─sshd(1001)─┬─sshd(2051)─┬─sshd(2100)───bash(2101)───pstree(2171)
      │ │ └─sshd(2056)
      │ └─sshd(2078)
      ...

      systemd(1) が一番親のプロセスで、その下に様々なプロセスがぶら下がっているのがわかります。自分がsshで接続して実行したコマンド(pstree)が、どのように起動されたか(systemdsshdsshdsshdbashpstree)も確認できます。

プロセスの終了: kill

応答しなくなったプロセスや、意図しないプロセスを停止させるには kill コマンドを使用します。

  • 用途: 指定したPIDのプロセスに「シグナル」を送信します。シグナルによってプロセスの挙動を制御できます。最も一般的なのはプロセスを終了させるシグナルです。
  • 書式: kill [オプションまたはシグナル番号] [PID]
  • 代表的なシグナル:
    • SIGTERM (15): プロセスに終了を促します。プロセスは終了処理を行うことができます。(デフォルトのシグナル)
    • SIGKILL (9): プロセスを強制的に終了させます。プロセスは終了処理を行えません。(最終手段として使用します)
  • 実行例 (PID 1234 のプロセスを終了させる):
    bash
    # SIGTERMで終了を促す (デフォルトなのでオプション省略可)
    [ユーザー名]@[ホスト名]:~$ kill 1234
    # SIGKILLで強制終了
    [ユーザー名]@[ホスト名]:~$ kill -9 1234
    # またはシグナル名を指定
    [ユーザー名]@[ホスト名]:~$ kill -SIGKILL 1234
  • kill コマンドは通常、そのプロセスを実行しているユーザーか、rootユーザーでないと実行できません。システムプロセスなど、自分のユーザーが実行していないプロセスを終了させるには sudo が必要です。
    bash
    [ユーザー名]@[ホスト名]:~$ sudo kill [PID] # root権限でプロセスを終了させる

バックグラウンド実行とフォアグラウンド実行

コマンドを実行すると、通常はそのコマンドが終了するまでプロンプトが戻ってきません(フォアグラウンド実行)。時間がかかる処理や、継続的に実行しておきたいコマンドを、プロンプトを塞がずに実行するには「バックグラウンド実行」を利用します。

  • コマンドの末尾に & を付けて実行すると、そのコマンドはバックグラウンドで実行されます。
    • 例: [時間のかかるコマンド] &
  • バックグラウンドで実行中のジョブを確認するには jobs コマンドを使います。
  • バックグラウンド実行中のジョブをフォアグラウンドに戻すには fg コマンドを使います。fg %[ジョブ番号] のように指定します。ジョブ番号は jobs コマンドで確認できます。
  • フォアグラウンド実行中のコマンドを一時停止してバックグラウンドに移すには、Ctrl+Z キーを押した後、bg コマンドを実行します。

これらの機能は、サーバー上でスクリプトを実行したり、GUIがない環境で複数の作業を並行して行ったりする場合に役立ちます。

システム起動時に実行されるサービス (Systemd)

サーバーは起動時に自動的に様々なプログラム(Webサーバー、SSHサーバーなど)を実行します。これらは「サービス」または「デーモン」と呼ばれ、バックグラウンドで常駐して特定の機能を提供します。Ubuntu Server 15.04以降では、これらのサービス管理に Systemd が使われています。

Systemdを使うことで、サービスの起動、停止、再起動、状態確認、自動起動設定などが簡単に行えます。これらの操作には管理者権限が必要なため、sudo を付けて実行します。

  • サービスの起動: sudo systemctl start [サービス名]
    • 例: sudo systemctl start nginx (Nginx Webサーバーを起動)
  • サービスの停止: sudo systemctl stop [サービス名]
    • 例: sudo systemctl stop nginx (Nginx Webサーバーを停止)
  • サービスの再起動: sudo systemctl restart [サービス名]
    • 例: sudo systemctl restart nginx (Nginx Webサーバーを再起動)
  • 設定ファイルを読み直して適用 (graceful restart): sudo systemctl reload [サービス名]
    • サービスを完全に再起動するのではなく、設定ファイルだけを読み直して新しい設定を適用します。サービスを止めずに設定変更を反映させたい場合に利用します。対応していないサービスもあります。
    • 例: sudo systemctl reload nginx
  • サービスの状態確認: systemctl status [サービス名]
    • 用途: サービスが起動しているか、エラーが発生していないかなどを確認できます。
    • 書式: systemctl status [サービス名]
    • 実行例:
      “`bash
      [ユーザー名]@[ホスト名]:~$ systemctl status sshd # SSHサーバーの状態を確認
      ● ssh.service – OpenBSD Secure Shell server
      Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
      Active: active (running) since Mon 2024-01-01 00:00:00 UTC; 1 day ago
      Docs: man:sshd(8)
      man:sshd_config(5)
      Main PID: 1001 (sshd)
      Tasks: 1 (limit 4557)
      Memory: 9.4M
      CPU: 1.766s
      CGroup: /system.slice/ssh.service
      └─1001 “sshd: /usr/sbin/sshd -D”

      Jan 01 00:00:00 ubuntustudy systemd[1]: Starting OpenBSD Secure Shell server…
      Jan 01 00:00:00 ubuntustudy systemd[1]: Started OpenBSD Secure Shell server.
      … # 直近のログも表示される
      ``Active: active (running)となっていれば、サービスは正常に動作しています。
      * **サービスの自動起動設定:
      sudo systemctl enable [サービス名]/sudo systemctl disable [サービス名]**
      * 用途: システム起動時にそのサービスを自動的に起動するかどうかを設定します。
      *
      enable: 自動起動を有効にする
      *
      disable: 自動起動を無効にする
      * 実行例:
      sudo systemctl enable nginx(システム起動時にNginxを自動起動するように設定)
      * 現在の自動起動設定状況は
      systemctl status [サービス名]Loaded: …; enabled; …Loaded: …; disabled; …` の部分で確認できます。

Systemdはサーバー管理の根幹となる部分ですので、これらの基本的な systemctl コマンドは覚えておくと良いでしょう。

第8章:ログの確認

サーバーで何か問題が発生した場合、原因究明に欠かせないのが「ログ」です。システムや各サービスは、様々な出来事(エラー、警告、正常な動作状況など)を記録したログファイルを生成します。

なぜログを見るのか?

  • トラブルシューティング: エラーメッセージや異常な挙動に関するログを確認することで、問題の原因を特定できます。
  • セキュリティ監査: 不正アクセス試行やセキュリティ関連のイベントログを確認することで、システムの安全性を監視できます。
  • システム状況の把握: サービスの起動・停止状況や、特定のイベントの発生頻度などを確認できます。

ログファイルが保存されている場所 (/var/log)

Linuxシステムでは、ほとんどのログファイルは /var/log ディレクトリ以下に保存されています。

bash
[ユーザー名]@[ホスト名]:~$ ls /var/log
alternatives.log installer/ syslog.1 wtmp
auth.log journal/ syslog.2.gz wtmp.1
bootstrap.log kern.log syslog.3.gz ...
btmp lastlog syslog.4.gz
btmp.1 mail.log syslog.5.gz
cloud-init-output.log syslog syslog.6.gz
cloud-init.log syslog.d/ syslog.7.gz
dpkg.log syslog.conf
faillog syslog.conf.dpkg-dist

(ファイルは環境によって異なります)

主要なログファイル (一部)

  • /var/log/syslog: システム全体に関する汎用的なログ。カーネル、システムサービスなど、多くの情報がここに記録されます。
  • /var/log/auth.log: 認証関連のログ。ログイン試行、sudoコマンドの実行などが記録されます。セキュリティ関連で重要なログです。
  • /var/log/kern.log: カーネルに関するログ。ハードウェア関連のエラーやドライバのメッセージなどが記録されます。
  • /var/log/dpkg.log: パッケージ管理システム (APTなど) によるソフトウェアのインストール、削除、アップグレードなどのログ。
  • /var/log/messages (Ubuntuでは通常 /var/log/syslog に統合されています): システムの一般的なメッセージ。
  • /var/log/wtmp: ユーザーのログイン/ログアウト履歴。(バイナリファイルなのでcatでは読めません。last コマンドなどで見ます)
  • /var/log/btmp: 不正なログイン試行のログ。(バイナリファイルなのでcatでは読めません。lastb コマンドなどで見ます)

多くのログファイルは、ディスク容量を節約するために定期的に圧縮されたり、古いものから削除されたりします(logrotateという仕組み)。圧縮されたファイルは .gz などの拡張子が付いており、読むには zcatzless といったコマンドを使います。

ログの表示方法

ログファイルはテキストファイルなので、これまでに学んだ cat, less, tail コマンドなどで内容を確認できます。

  • 短いログを見る: cat /var/log/syslog
  • 長いログをページャーで見る: less /var/log/syslog
  • 最新のログを見る: tail /var/log/syslog
  • 最新のログをリアルタイムで追跡する: tail -f /var/log/syslog (終了は Ctrl+C)

ログのフィルタリング: grep コマンド

ログファイルは非常に多くの情報が含まれているため、目的の情報を効率的に見つけるには、特定の文字列を含む行だけを抽出する grep コマンドと組み合わせるのが一般的です。

  • 用途: ファイルの中から、指定したパターン(文字列や正規表現)に一致する行だけを抽出して表示します。
  • 書式: grep [オプション] 'パターン' [ファイル名]
    • よく使うオプション:
      • -i: 大文字・小文字を区別せずに検索します。
      • -v: パターンに一致しない行だけを表示します(パターンを除外)。
      • -n: 一致した行の行番号も表示します。
      • --color=auto: 一致した部分を色付けして表示します(最近の環境ではデフォルトで有効なことが多い)。
  • 実行例 (syslogから「error」という文字列を含む行を抽出):
    bash
    [ユーザー名]@[ホスト名]:~$ grep 'error' /var/log/syslog
  • 実行例 (auth.logからユーザー名「studyuser」を含む行を抽出):
    bash
    [ユーザー名]@[host]:~$ sudo grep 'studyuser' /var/log/auth.log
    <パスワード入力>
    Jan 1 00:00:00 ubuntustudy sshd[2100]: Accepted password for studyuser from 10.0.2.2 port 5xxxx ssh2
    Jan 1 00:00:00 ubuntustudy sudo[2102]: studyuser : TTY=pts/0 ; PWD=/home/studyuser ; USER=root ; COMMAND=/usr/bin/grep studyuser /var/log/auth.log
  • ps aux | grep [キーワード] のように、パイプ | を使って他のコマンドの出力結果を grep に渡す使い方も非常に多いです。パイプは、左のコマンドの標準出力を右のコマンドの標準入力に渡す機能です。

journalctl コマンド (Systemdのログ管理)

Systemdが導入された環境では、従来のテキストファイルによるログ管理だけでなく、バイナリ形式で一元管理されるジャーナルログも利用できます。これを参照するのが journalctl コマンドです。/var/log/syslog などの従来のログファイルも、多くの場合、Systemdのジャーナルに転送されて記録されています。

journalctl の利点:

  • 全てのログが一元管理されているため、複数のログファイルを個別に確認する手間が省けます。
  • 特定のサービス、特定の時間帯、特定の重要度など、様々な条件でログを絞り込んで表示するのが容易です。
  • システム再起動後もログが保持されます(設定による)。

  • 基本的な使い方: journalctl

    • 用途: システムのジャーナルログ全体を古いものから順にページャーで表示します。
    • 書式: journalctl
    • 実行例: journalctl (lessのように操作できます)
  • 最新のログを表示: journalctl -n [行数] または journalctl -f
    • journalctl -n 10: 最新の10行を表示します。
    • journalctl -f: 最新のログをリアルタイムで表示し続けます (tail -f に相当)。
  • 特定のサービスのログを表示: journalctl -u [サービス名]
    • 例: journalctl -u ssh.service または journalctl -u sshd (SSHサーバーのログのみを表示)
  • 特定の時間帯のログを表示: journalctl --since "YYYY-MM-DD HH:MM:SS" / --until "YYYY-MM-DD HH:MM:SS"
    • 例: journalctl --since "today" (今日のログ), journalctl --since "yesterday" --until "today" (昨日のログ), journalctl --since "2 hours ago" (2時間前のログから)
  • 重要度を指定して表示: journalctl -p [重要度]
    • 重要度(低い方から高い方へ): 0:emerg, 1:alert, 2:crit, 3:err, 4:warning, 5:notice, 6:info, 7:debug
    • 指定した重要度以上のログが表示されます。
    • 例: journalctl -p err (エラー以上のログを表示)
  • カーネルログのみ表示: journalctl -k

journalctl は非常に多機能ですが、まずは journalctl でログ全体を見てみる、journalctl -u [サービス名] で特定のサービスのログを見る、journalctl -f で最新のログを追跡する、あたりから使い始めてみましょう。sudo なしで実行できますが、全てのログを見るには sudo が必要な場合があります。

第9章:エディタの基本操作

サーバーの設定ファイルなどを編集するには、CUIで動作するテキストエディタが必要です。Ubuntu Serverにはいくつか代表的なCUIエディタがインストールされていますが、初心者にとって最も操作が簡単なのは Nano (ナノ) です。

なぜサーバーでエディタが必要か?

サーバーの様々な設定は、テキストファイルとして保存されています。例えば、ネットワーク設定、SSHサーバーの設定、Webサーバーの設定などは、全て設定ファイルを編集することで変更します。

Nanoエディタの基本的な使い方

Nanoは画面下部に主要な操作コマンドが表示されるため、初心者でも直感的に使いやすいエディタです。

  • ファイルの編集を開始:

    • 書式: nano [ファイル名]
    • 指定したファイルが存在しない場合は新規作成、存在する場合はそのファイルを開きます。
    • 実行例: nano myconfig.txt

    Nanoを起動すると、以下のような画面になります。
    “`
    GNU nano 6.2 myconfig.txt
    Modified

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^J Justify ^C Cur Pos
    ^X Exit ^R Read File ^\ Replace ^U Uncut Text^T To Spoell^B Backwd ^F Forward
    ``
    * 画面上部: エディタのバージョン、開いているファイル名、状態などが表示されます。
    * 画面中央部: ファイルの内容が表示され、ここでテキストを編集します。
    * 画面下部: よく使う操作のショートカットキーが表示されます。
    ^Ctrlキーを表します。例えば^X ExitCtrl + Xで終了、^O Write OutCtrl + O` で保存を意味します。

  • テキスト編集:

    • 矢印キーでカーソルを移動できます。
    • 通常のテキスト入力のように文字を入力できます。
    • Ctrl+K: 現在カーソルがある行を切り取ります (Cut Text)。
    • Ctrl+U: 切り取った行を貼り付けます (Uncut Text)。
    • Ctrl+A: 行の先頭に移動
    • Ctrl+E: 行の末尾に移動
    • Ctrl+_ または Alt+G: 指定した行番号にジャンプします。
  • 検索:

    • Ctrl+W: 文字列を検索します (Where Is)。画面下部に「Search:」と表示されるので、検索したい文字列を入力してEnter。
    • 見つかった場合はそこにジャンプします。
    • 再度 Ctrl+W を押して検索を続けると、同じ文字列を次に検索します。
  • 保存: Ctrl+O

    • Ctrl+O を押すと、画面下部に「File Name to Write: [ファイル名]」と表示されます。
    • そのままEnterキーを押すと、現在開いているファイル名で保存されます。
    • 別のファイル名を指定してEnterキーを押すと、「別名で保存」になります。
    • 保存後、編集を続ける場合はエディタは開いたままになります。
  • 終了: Ctrl+X

    • Ctrl+X を押すとエディタを終了します。
    • もし変更が保存されていない場合は、画面下部に「Save modified buffer? (Yes/No/Cancel)」と聞かれます。
      • Y または y: 変更を保存して終了
      • N または n: 変更を破棄して終了
      • Ctrl+C: 終了をキャンセルして編集に戻る

Vi/Vimについて

Linuxでは vi (またはその高機能版である vim) というエディタも非常によく使われます。特にサーバー管理者の間ではVimの利用者が多いです。しかし、Vimは操作方法がNanoとは全く異なり、独特のモード切替が必要なため、最初は戸惑うかもしれません。もしCUIエディタに慣れてきたら、Vimにも挑戦してみると良いでしょう。多くのサーバー環境でデフォルトで利用できる信頼性の高いエディタです。

入門段階では、まずはNanoの使い方をしっかりマスターするのがおすすめです。設定ファイルを編集する際には、sudo nano [設定ファイルのパス] のように sudo を付けて実行することが多いです。重要な設定ファイルを誤って壊さないように、編集前にバックアップを取る習慣をつけると安全です(例: sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak)。

第10章:簡単なサーバー構築の例(Webサーバー)

Ubuntu Serverの基本的な操作に慣れてきたところで、実際に簡単なサーバーアプリケーションを動かしてみましょう。ここでは、最も一般的なサーバーの一つである Webサーバー (Nginx) を構築する手順を紹介します。

Nginx (エンジンエックス) は、高速で軽量なWebサーバーソフトウェアです。多くのWebサイトで利用されています。

1. Nginxのインストール

APTを使って簡単にインストールできます。

bash
[ユーザー名]@[ホスト名]:~$ sudo apt update # リポジトリ情報を最新に
[ユーザー名]@[ホスト名]:~$ sudo apt install nginx # Nginxをインストール
<パスワード入力>
<インストールされるパッケージ一覧が表示される>
Do you want to continue? [Y/n] y
<インストールが実行される>

インストールが完了すると、Nginxサービスは自動的に起動するように設定され、すぐに起動されます。

2. Nginxサービスの確認

systemctl コマンドでNginxサービスの状況を確認してみましょう。

“`bash
[ユーザー名]@[ホスト名]:~$ systemctl status nginx
● nginx.service – A high performance web server a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-01 00:00:00 UTC; Xmin ago # active (running) なら起動している
Docs: man:nginx(8)
Main PID: XXXX (nginx)
Tasks: X (limit XXXX)
Memory: X.XM
CPU: Xms
CGroup: /system.slice/nginx.service
└─XXXX “nginx: master process /usr/sbin/nginx -g daemon off;\””
└─XXXX “nginx: worker process”

<ログメッセージが表示される>
“`

Active: active (running) と表示されていれば、Nginxは正常に起動しています。enabled と表示されているため、システム起動時にも自動的に起動します。

Nginxのサービス名が nginx であることがわかります。起動、停止、再起動などは sudo systemctl start/stop/restart nginx で行えます。

3. ファイアウォール設定 (UFW)

サーバーにWebサーバーをインストールしても、外部からアクセスできるようにするには、ファイアウォールでHTTP (80番ポート) や HTTPS (443番ポート) を許可する必要があります。Ubuntuには UFW (Uncomplicated Firewall) というファイアウォール設定ツールが標準で搭載されており、比較的簡単に設定できます。

初期状態ではUFWは無効になっているか、SSHポートのみ許可されていることが多いです。

  • UFWの状態確認: sudo ufw status
    bash
    [ユーザー名]@[ホスト名]:~$ sudo ufw status
    Status: inactive # 無効な状態

    または
    “`bash
    [ユーザー名]@[ホスト名]:~$ sudo ufw status
    Status: active

    To Action From
    — —— —-
    OpenSSH ALLOW Anywhere
    OpenSSH (v6) ALLOW Anywhere (v6)
    “`
    のように表示されることがあります。

  • SSH接続の許可: もしUFWが有効でSSHが許可されていない場合は、SSH接続が切断されてしまう可能性があります。まずSSHを許可しておきましょう。
    bash
    [ユーザー名]@[ホスト名]:~$ sudo ufw allow OpenSSH
    Rule added
    Rule added (v6)

    OpenSSH というサービス名は、内部的にTCPの22番ポートとして定義されています。
    もしVirtualBoxのポートフォワーディングでホスト側のポートを22番以外(例: 2222)に設定している場合でも、仮想マシン側のSSHサーバーはデフォルトで22番ポートで動いているため、許可するのは22番ポート(OpenSSH)で問題ありません。

  • HTTP (80番ポート) の許可: Webサーバーに外部からアクセスするために、HTTP(TCPの80番ポート)を許可します。
    bash
    [ユーザー名]@[ホスト名]:~$ sudo ufw allow http
    Rule added
    Rule added (v6)

    http というサービス名は、内部的にTCPの80番ポートとして定義されています。

  • HTTPS (443番ポート) の許可 (必要であれば): HTTPS(TCPの443番ポート)も利用する場合は許可します。
    bash
    [ユーザー名]@[ホスト名]:~$ sudo ufw allow https
    Rule added
    Rule added (v6)

    https というサービス名は、内部的にTCPの443番ポートとして定義されています。

  • UFWの有効化: 設定が完了したらUFWを有効にします。
    bash
    [ユーザー名]@[ホスト名]:~$ sudo ufw enable
    Command may disrupt existing ssh connections. Proceed with operation (y|n)? y # SSH接続が切断される可能性がある警告
    Firewall is active and enabled on system startup

    警告メッセージが表示されますが、SSHポートを先に許可していれば問題ありません。y と入力してEnterキーを押します。

  • 再度UFWの状態確認:
    “`bash
    [ユーザー名]@[ホスト名]:~$ sudo ufw status
    Status: active

    To Action From
    — —— —-
    OpenSSH ALLOW Anywhere
    80/tcp ALLOW Anywhere # http に対応
    443/tcp ALLOW Anywhere # https に対応 (設定した場合)
    OpenSSH (v6) ALLOW Anywhere (v6)
    80/tcp (v6) ALLOW Anywhere (v6)
    443/tcp (v6) ALLOW Anywhere (v6)
    “`
    これで、ホストPCから仮想マシンへのSSH接続と、仮想マシン上のWebサーバーへのHTTPアクセスがファイアウォールで許可されました。

4. ホストPCのブラウザからのアクセス確認

VirtualBoxのNAT設定とポートフォワーディングを利用している場合、ホストPCのブラウザから仮想マシン上のWebサーバーにアクセスするには、http://localhost:[VirtualBoxで設定したWebサーバー用のホストポート] にアクセスする必要があります。

しかし、今回の設定ではSSH用のポートフォワーディング(例: ホスト2222 -> ゲスト22)しか設定していません。Webサーバー用のポートフォワーディング(例: ホスト8080 -> ゲスト80)を追加で設定することもできますが、もっと簡単な方法として、VirtualBoxのネットワーク設定を ブリッジアダプター に変更するという手があります。

(代替案)VirtualBoxネットワーク設定をブリッジアダプターに変更する場合

ブリッジアダプターモードにすると、仮想マシンがホストPCと同じネットワーク上の独立したコンピューターのように振る舞います。これにより、仮想マシンに割り当てられたIPアドレス(通常、ホストPCと同じネットワークのIPアドレス範囲からDHCPで割り当てられます)に対して、ホストPCだけでなく、同じネットワーク上の他のPCからも直接アクセスできるようになります。

  1. 仮想マシンをシャットダウンします (sudo poweroff)。
  2. VirtualBoxマネージャーで仮想マシンを選択し、「設定」>「ネットワーク」を開きます。
  3. 「アダプター 1」タブの「割り当て」を NAT から ブリッジアダプター に変更します。
  4. 「名前」のドロップダウンリストから、ホストPCがインターネットに接続している物理ネットワークアダプター(Wi-Fiまたは有線LANアダプター)を選択します。
  5. 「OK」をクリックして設定を閉じます。
  6. 仮想マシンを起動します。
  7. 仮想マシンにログイン後、ip addr コマンドを実行し、新しいIPアドレスが割り当てられていることを確認します。通常、ホストPCと同じネットワークセグメントのIPアドレスになっているはずです。(例: ホストPCが 192.168.1.x なら、仮想マシンも 192.168.1.y のようなアドレス)
  8. SSH接続も、ssh studyuser@[新しいIPアドレス] のように、直接仮想マシンのIPアドレスに対して行えるようになります。(ポートフォワーディングは不要になります)

ブリッジアダプター設定で仮想マシンに割り当てられた新しいIPアドレスを確認したら、ホストPCのWebブラウザを開き、その新しいIPアドレスにアクセスしてみてください。

例: 仮想マシンのIPアドレスが 192.168.1.100 の場合、ブラウザで http://192.168.1.100 にアクセス。

Nginxが正常に起動し、ファイアウォールで80番ポートが許可されていれば、以下のようなNginxのデフォルトページが表示されるはずです。

Welcome to nginx!

もし表示されない場合は、以下の点を確認してください。
* Nginxサービスが起動しているか (systemctl status nginx)。
* UFWが有効になっており、80番ポートが許可されているか (sudo ufw status)。
* VirtualBoxのネットワーク設定(特にブリッジアダプターの場合は、正しいホスト側のアダプターを選択しているか、仮想マシンがホストPCと同じネットワークに接続できているか)。

5. デフォルトのWebページの場所

NginxのデフォルトのWebページファイルは、通常 /var/www/html/index.nginx-debian.html に置かれています。このファイルを編集することで、表示されるWebページの内容を変更できます。

bash
[ユーザー名]@[ホスト名]:~$ cat /var/www/html/index.nginx-debian.html # 内容を見てみる (長いので less で見ても良い)
[ユーザー名]@[ホスト名]:~$ sudo nano /var/www/html/index.nginx-debian.html # 編集してみる
<パスワード入力>

Nanoでファイルを開き、内容を書き換えて保存(Ctrl+O → Enter)、終了(Ctrl+X)します。

ファイルを変更しても、Nginxは自動的に新しいファイルを読み込みます。ブラウザをリロードすると、変更した内容が表示されるはずです。

これで、あなたはUbuntu Server上にWebサーバーを構築し、外部からアクセスできるようになりました!

第11章:学習の継続に向けて

ここまでで、Ubuntu ServerのインストールからCUIの基本操作、ファイル・ユーザー・ソフトウェア・ネットワーク・プロセス・ログの管理、そして簡単なWebサーバー構築まで、サーバー運用の「超」基礎を学びました。しかし、サーバーの世界は非常に奥深く、学ぶべきことはまだまだたくさんあります。

この記事を足がかりとして、ぜひさらに学習を進めてみてください。次に何を学ぶべきか、いくつかの方向性を示します。

次に学ぶべきこと(例)

  • セキュリティの基礎:
    • UFWの詳細な設定(特定のIPアドレスからの接続のみ許可するなど)
    • SSHの鍵認証(パスワード認証よりも安全で便利です)
    • Rootkit HunterやFail2Banなどのセキュリティツールの利用
  • ファイルシステム:
    • ディスクパーティションの詳細
    • マウント/アンマウント
    • ファイルシステムのチェックと修復
  • バックアップ:
    • ファイルやディレクトリのバックアップ方法(tar, rsync コマンドなど)
    • 自動バックアップの設定(cron コマンドなど)
    • 仮想環境のスナップショット機能の活用
  • 特定のサービス構築:
    • より高度なWebサーバー設定(バーチャルホスト、SSL/TLS証明書の設定)
    • データベースサーバー (MySQL, PostgreSQLなど) の構築と管理
    • ファイルサーバー (Samba, NFSなど) の構築
    • メールサーバー、VPNサーバーなどの構築
  • 自動化とスクリプト:
    • Bashシェルのより高度な使い方(変数、条件分岐、ループなど)
    • 簡単な自動化スクリプトの作成
    • AnsibleやChef、Puppetといった構成管理ツールの入門
  • コマンドの深掘り:
    • 今回紹介したコマンド(ls, cp, mv, rm, grep, find, awk, sed など)のさらに多くのオプションや高度な使い方
  • トラブルシューティングのスキル:
    • 様々なエラーメッセージの意味を理解する方法
    • ネットワーク問題、ディスク容量不足、リソース不足などの診断方法

役立つリソース

  • Ubuntu公式ドキュメント: 最も信頼できる情報源です。少し難しい部分もありますが、困ったときは参照してみましょう。
  • Linuxコマンドの逆引き辞典やリファレンスサイト: コマンドの目的から探しやすく便利です。
  • Linux/Ubuntuに関する書籍: 初心者向けから専門的なものまで様々な書籍が出ています。
  • オンラインコミュニティ/フォーラム: Ubuntu Japanese Teamのフォーラムや、Stack Overflowなどで質問したり、他の人の質問を見たりすることができます。
  • オンライン学習プラットフォーム: Udemy, Coursera, edXなどでLinuxやサーバーに関するコースが提供されています。

継続的な学習の重要性

サーバー技術は常に進化しています。新しいバージョン、新しいツール、新しい脅威が日々生まれています。一度学んだら終わりではなく、常に新しい情報に触れ、手を動かして試してみることが重要です。インターネット上には膨大な情報がありますので、知りたいことがあれば積極的に検索してみましょう。

まとめ

この長い記事を通して、Ubuntu Serverの仮想環境へのインストールから、CUIでの基本的な操作、ファイル・ユーザー・ソフトウェア・ネットワーク・プロセス・ログといったサーバー管理の基礎、そして簡単なWebサーバー構築までを体験しました。

最初は黒い画面に難しさを感じたかもしれませんが、コマンド一つ一つに意味があり、その組み合わせで様々なことができるという面白さを少しでも感じていただけたなら幸いです。

サーバーを触ることは、インターネットの仕組みをより深く理解することにもつながります。そして、自分で何かサービスを公開したり、実験環境を作ったり、自動化を進めたりと、できることの幅が大きく広がります。

この記事は、あなたのUbuntu Server学習のほんの始まりに過ぎません。しかし、最も重要な第一歩を踏み出すことはできました。今日学んだことを活かして、ぜひUbuntu Serverの世界をさらに探索し、あなた自身のスキルを磨いていってください。

応援しています!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール