Ubuntuの使い方

【概要】本ページでは、Ubuntuの基本的な使い方について解説する。第1章ではインストールと初期設定、第2章ではシェルの基本操作と管理者権限、第3章では環境変数の設定方法を説明する。第4章では基本的なLinuxコマンド、第5章ではCSVファイルの扱い、第6章ではSSHによるリモート接続を取り上げる。第7章ではPython開発環境、第8章ではGitやCMakeなどの開発ツール、第9章ではJava環境の構築方法を示す。第10章ではシステムの運用保守としてパッケージ管理と更新作業、第11章ではトラブルシューティングの手法を解説する。

【この記事の対象読者】Ubuntu(Linux)環境の本格利用(開発や研究など)を行いたい学生・技術者を対象としている。コマンドライン操作の基礎から、Python・Javaによる開発環境の構築、サーバー運用までを扱う。

【重要概念】

【目次】

  1. Ubuntuのインストールとセットアップ
  2. シェルの利用、管理者権限、基本機能
  3. 環境変数とパスを通す
  4. 基本的なLinuxコマンドとリファレンス
  5. データファイル(CSV)
  6. リモート接続とプロセス継続
  7. プログラミング言語Pythonとツール
  8. プログラミング用ツール類(Git、CMake、GDB)
  9. プログラミング言語Java
  10. オペレーティングシステムの運用保守
  11. トラブルシューティング

【サイト内のUbuntu関連ページ】

【外部リソース】

1. Ubuntuのインストールとセットアップ

Ubuntuのインストールと基本的な初期設定

Ubuntu 24.04 LTS(Noble Numbat)は長期サポート版(Long Term Support)であり、標準で5年間のセキュリティアップデートが提供される。導入には、公式サイトからISOイメージを入手し、Rufus(Windows用)やUbuntu標準の「ブータブルUSBの作成」等で起動用USBメディアを作成する。

インストール形式は、既存OSとの共存(デュアルブート)またはディスクを削除してインストールから選択する。後者はディスク内の全データが消去されるため、実行前に外付けディスク等へバックアップを取る。インストール完了後は、管理者権限(sudo)の確認、システム更新、NVIDIAドライバや日本語入力(Mozc)の導入、ファイアウォール(ufw)の有効化を行う。

【サイト内の関連ページ】

【関連する外部ページ】

Ubuntuの詳細設定

インストール直後に行う設定を以下に示す。

【サイト内の関連ページ】

ソフトウェアのインストール方法

ソフトウェアの追加方法は、GUIとCUIの2種類がある。

【サイト内の関連ページ】

2. シェルの利用、管理者権限、基本機能

ターミナルの起動方法やGNOMEデスクトップ環境での基本操作は「Ubuntu システムの基本操作ガイド」で説明している。

端末

端末(ターミナル)は、コマンド入力でコンピューターを操作するインターフェースである。Ubuntu Desktopでは「GNOME Terminal」が標準で利用できる。端末を開くとシェル(標準ではbash)が起動し、プロンプト(コマンド入力待ちを示す記号列)が表示される。

GNOME Terminalのスクリーンショット

bashシェル

bash(Bourne Again SHell)はUbuntuの標準の対話シェルである。コマンド履歴(↑↓キー)、Tab補完、リダイレクト、パイプ、シェルスクリプトによる処理の自動化などの機能を持つ。

管理者権限での実行(su、sudo)

日常作業は一般ユーザー権限で行い、システム変更時のみ管理者権限を使用する。

シェルの基本機能(リダイレクト、パイプ)

シェルはコマンドの入出力先を変更できる。

ls -l /usr/bin > bin_list.txt      # 一覧をファイルに保存
date >> system_log.txt             # 日時を追記
sort < names.txt                   # ファイルから読み込んでソート
grep 'ERROR' system.log | wc -l    # ERRORを含む行数をカウント

詳細は「Linux基本コマンドとその活用法 - シェルの機能」で説明している。

rootユーザーのパスワード設定について

Ubuntuではrootアカウントのパスワードが初期状態で設定されておらず、rootでのログインはできない。管理作業はsudoで行う。rootパスワードを設定する場合はsudo passwd rootを実行する。

ヒアドキュメント(here document)

複数行のテキストをコマンドの標準入力として与える機能である。設定ファイルの生成やメッセージ表示に使用する。

cat > /tmp/message.txt << 'EOF'
1行目のテキスト
2行目のテキスト
EOF

区切り文字(上例ではEOF)をクォートすると、変数展開が抑制される。

リソース制限(ulimit)

ulimitは、シェルとその子プロセスが使用できるリソース(オープンできるファイル数、メモリ等)の上限を確認・設定する。

ulimit -a    # 全制限値を表示
ulimit -n    # 同時に開けるファイル数の上限を表示

3. 環境変数とパスを通す

環境変数

環境変数は、OSやシェルの動作設定を保持する名前付きの値である。子プロセスに引き継がれる。代表的な環境変数として、HOME(ホームディレクトリ)、LANG(言語設定)、PATH(コマンド検索パス)がある。

echo $HOME                      # 環境変数の値を表示
export MY_VAR="value"           # 環境変数を設定(子プロセスにも継承)
printenv | grep MY              # 設定済み環境変数を検索

パスを通す

PATHは、コマンド名だけで実行ファイルを起動できるよう、検索先ディレクトリをコロン区切りで指定する環境変数である。自作スクリプトや追加インストールしたツールをコマンド名で実行するには、そのディレクトリをPATHに追加する(「パスを通す」)。

export PATH="$HOME/myapps/bin:$PATH"

設定を永続化するには、~/.bashrc~/.profileに上記を追記し、source ~/.bashrcで反映させるか、新しい端末を開く。

4. 基本的なLinuxコマンドとリファレンス

日常的に使用する基本コマンドを分類して示す。各コマンドの詳細は--helpオプションまたはmanコマンドで確認できる。

包括的なリファレンスは「Linux基本コマンドとその活用法」で説明している。

5. データファイル(CSV)

CSV(Comma Separated Values)

CSVは、カンマで列を、改行で行を区切るテキスト形式である。表データの保存やアプリケーション間のデータ交換に使用される。フィールド内にカンマ・改行・ダブルクオートを含む場合は、フィールド全体をダブルクオートで囲む。ダブルクオート自体は""で表現する。

ID,Name,"Address",Phone
1,"Yamada, Taro","Tokyo, Japan",090-1234-5678
2,"Sato, Hanako","Osaka ""Big"" City",

6. リモート接続とプロセス継続

SSH(Secure Shell)

SSHは、暗号化された通信で他のコンピューターにログインし、コマンド実行やファイル転送を行うプロトコルである。

ssh user@hostname              # リモートログイン
ssh -i ~/.ssh/id_rsa user@host # 秘密鍵を指定して接続
ssh user@host 'uptime'         # リモートでコマンド実行

SSHの公開鍵認証

パスワードの代わりに鍵ペア(秘密鍵・公開鍵)で認証する方式である。パスワード入力が不要になるため、スクリプトによる自動化に利用できる。

  1. 鍵ペアの生成: クライアントでssh-keygenを実行する。
  2. 公開鍵の登録: ssh-copy-id user@hostでサーバーの~/.ssh/authorized_keysに公開鍵を追加する。
  3. 接続: ssh user@hostで鍵認証によりログインする。

秘密鍵の管理: 秘密鍵(~/.ssh/id_rsa等)が第三者に渡ると不正アクセスに利用される。chmod 600 ~/.ssh/id_rsaで所有者のみが読み書きできるようにし、鍵生成時にパスフレーズを設定する。

設定手順の詳細は別ページ »で説明している。

SFTP/SCP

SSHを利用したファイル転送コマンドである。

sftp user@host                              # 対話セッション開始
scp myfile.txt user@host:/home/user/        # ファイルをアップロード
scp user@host:/var/log/syslog .             # ファイルをダウンロード

リモート接続が切れてもプロセスを継続する(nohup、disown)

SSH切断後も処理を継続させる方法を示す。

指定時刻にコマンドを実行(atコマンド)

atは、指定時刻に一度だけコマンドを実行する。定期実行にはcronを使用する。

sudo apt install at                 # インストール
sudo systemctl enable --now atd     # サービス起動

at now + 5 minutes                  # 5分後に実行(対話入力)
atq                                 # 予約一覧
atrm 3                              # ジョブ3を削除

7. プログラミング言語Pythonとツール

Pythonの詳細情報は別ページで説明している。

UbuntuのシステムPython

UbuntuにはOSの機能が使用するPython(Ubuntu 24.04ではPython 3.12)がプリインストールされている。この「システムPython」に対してパッケージの追加や削除を行うとOSの動作に影響する場合があるため、開発用途では仮想環境(venv)を使用する

詳細は別ページ »で説明している。

Python、pip、開発環境

詳細は別ページ »で説明している。

複数のPythonバージョンの管理(pyenv)

pyenvは、複数のPythonバージョンをインストールし、プロジェクトごとに切り替えるツールである。システムPythonとは別の場所にインストールされる。

インストール方法は別ページで説明している。

venv(Python仮想環境)

venvは、Python 3.3以降に標準搭載された仮想環境機能である。プロジェクトごとに独立した環境を作成し、ライブラリの依存関係を分離できる。

python3 -m venv myenv           # 仮想環境を作成
source myenv/bin/activate       # 有効化(プロンプトが変化)
pip install requests pandas     # ライブラリをインストール
python my_script.py             # スクリプト実行
deactivate                      # 無効化

詳細は別ページ »で説明している。

pip(Pythonパッケージインストーラ)

pipは、PyPI(Python Package Index、Pythonパッケージの公式リポジトリ)からライブラリをインストールするツールである。仮想環境を有効化した状態で使用する。

pip install <package>                # インストール
pip install -r requirements.txt      # 依存関係を一括インストール
pip list                             # インストール済み一覧
pip freeze > requirements.txt        # 依存関係をファイル出力

詳細は別ページ »で説明している。

Jupyter Notebook/JupyterLab

Webブラウザ上でコード実行、テキスト記述、グラフ表示を組み合わせた「ノートブック」を作成できる環境である。JupyterLabは、ファイルブラウザやタブ表示を備えたインターフェースである。

pip install notebook jupyterlab
jupyter notebook                     # Notebook起動
jupyter lab                          # JupyterLab起動

詳細はJupyter NotebookJupyterLabのページで説明している。

Python IDE(統合開発環境)

コードエディタ、デバッグ、プロジェクト管理等を統合したソフトウェアである。

Anaconda Distribution

Python本体とデータサイエンス系パッケージ(NumPy、Pandas等)、パッケージ管理ツールcondaを同梱したディストリビューションである。condaはpipやvenvとは別のパッケージ管理体系であるため、混在させる場合は導入元を統一するなどの管理が必要である。

詳細は別ページで説明している。

Google Colaboratory(Colab)

Googleが提供するクラウドベースのPython実行環境である。Jupyter Notebook互換のインターフェースで、無料枠でGPU等のアクセラレータを利用できる。セッション終了時に仮想マシン上のデータは消去されるため、必要なファイルはGoogle Driveやローカルに保存する。

詳細は別ページおよび「Linux基本コマンドとその活用法 - Google Colaboratory」で説明している。

8. プログラミング用ツール類(Git、CMake、GDB)

バージョン管理システムGit

Gitは、ソースコードの変更履歴を記録・管理する分散型バージョン管理システムである。変更内容・日時・変更者が記録され、過去の状態への復元や差分比較ができる。複数人での開発では、変更の統合や競合の解決に用いられる。

インストール

sudo apt update
sudo apt install git

基本操作

git clone https://github.com/user/repo.git   # リポジトリを複製
cd repo
git status                                    # 変更状態を確認
git add .                                     # 変更をステージング
git commit -m "変更内容"                      # コミット
git push                                      # リモートに反映

詳細は「Linux基本コマンドとその活用法 - Git」で説明している。

【サイト内の関連ページ】WindowsでのGit: 別ページ »

【外部ページ】Git公式: https://git-scm.com/

ビルドツールCMake

CMakeは、C/C++プロジェクトのビルド手順を管理するクロスプラットフォームツールである。CMakeLists.txtに設定を記述し、使用環境に応じたビルドファイル(Makefile、Ninja、Visual Studioプロジェクト等)を生成する。

インストール

sudo apt update
sudo apt install cmake cmake-curses-gui cmake-gui

基本操作

ソースディレクトリとは別のディレクトリでビルドする「アウトオブソースビルド」を行う。生成物がソースツリーに混在しない。

mkdir build && cd build    # ビルドディレクトリ作成
cmake ..                    # 設定生成(親ディレクトリのCMakeLists.txtを参照)
make                        # ビルド実行

Ninjaビルドシステム

Ninjaは、ビルドの実行速度を重視して設計されたビルドシステムである。CMakeのジェネレータとして指定して使用できる。

sudo apt install ninja-build
cmake -G Ninja ..           # Ninja用ビルドファイルを生成
ninja                       # ビルド実行

デバッガgdb(GNU Debugger)

GDBは、C/C++等のプログラムをデバッグするツールである。ブレークポイント設定、ステップ実行、変数値の確認ができる。

sudo apt install gdb
gcc -g program.c -o program  # デバッグ情報付きでコンパイル
gdb ./program                # デバッガ起動

基本操作

デバッグの流れは、ブレークポイント設定、実行、停止箇所でのステップ実行と変数確認、バグ原因の特定である。主なコマンドはbreak(ブレークポイント設定)、run(実行)、next/step(ステップ実行)、print(変数表示)、continue(続行)である。

9. プログラミング言語Java

OpenJDKのインストールとJavaプログラムの実行

Javaの開発・実行にはJDK(Java Development Kit)が必要である。OpenJDKはJavaのオープンソース実装で、aptで導入できる。Ubuntu 24.04ではOpenJDK 17(openjdk-17-jdk)とOpenJDK 21(openjdk-21-jdk)が利用できる。

sudo apt update
sudo apt install openjdk-21-jdk    # JDK 21をインストール
java -version                       # 実行環境を確認
javac -version                      # コンパイラを確認

複数のJDKを導入した場合は、sudo update-alternatives --config javaで使用するバージョンを選択する。

【コンパイルと実行】

// HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Ubuntu!");
    }
}
javac HelloWorld.java    # コンパイル(.classファイル生成)
java HelloWorld          # 実行

詳細は別ページ »で説明している。

【サイト内のJava関連資料】

10. オペレーティングシステムの運用保守

本章では、システムの継続運用に必要なパッケージ管理、更新作業、ドライバ管理を解説する。

Ubuntuのバージョンとコードネームの確認

バージョン番号(24.04等)やコードネーム(noble等)は、ソフトウェアの対応状況の確認やリポジトリ設定で参照する。

lsb_release -a     # 詳細情報を表示
lsb_release -sc    # コードネームのみ表示

パッケージ管理(apt、dpkg)

aptはパッケージのインストール・更新・削除を行うツールであり、依存関係を自動的に解決する。dpkgは個別の.debファイルを扱う低水準ツールで、依存関係の解決は行わない。

主なaptコマンド:

詳細は「Linux基本コマンドとその活用法 - パッケージ管理」で説明している。

システム更新

セキュリティ修正や不具合修正を適用するため、定期的に更新を行う。

手動更新

sudo apt update              # パッケージリスト更新
sudo apt full-upgrade        # パッケージ更新
sudo apt autoremove          # 不要パッケージ削除
sudo apt autoclean           # キャッシュ削除

apt upgradeはパッケージの追加・削除を伴う更新を保留するため、システム全体を更新する場合はapt full-upgradeを使用する。カーネル更新後は再起動が必要である。

自動更新(unattended-upgrades)

Ubuntuにはセキュリティ更新を自動適用するunattended-upgradesがあり、標準で有効になっている。設定は「ソフトウェアとアップデート」または/etc/apt/apt.conf.d/50unattended-upgradesで確認・変更できる。自動更新の対象はセキュリティ更新が中心であるため、上記の手動更新も定期的に実施する。

更新の運用テクニック

再起動の要否確認

カーネル更新等で再起動が必要な場合、/var/run/reboot-requiredファイルが作成される。

[ -f /var/run/reboot-required ] && echo "再起動が必要"

パッケージバージョンの固定(Hold)

特定パッケージの更新を抑止する。動作確認済みのバージョンを維持する場合に使用する。

sudo apt-mark hold <pkg>       # 更新を保留
sudo apt-mark unhold <pkg>     # 保留を解除
apt-mark showhold              # 保留中パッケージを確認

保留したパッケージにはセキュリティ更新も適用されない。apt-mark showholdで保留中のパッケージを定期的に確認し、不要になったらsudo apt-mark unhold <pkg>で解除する。

設定ファイルの競合解決

更新時に設定ファイルを置き換えるかどうかを問われた場合は、Dで差分を表示し、変更内容を確認してから選択する。

NVIDIAドライバのインストール

NVIDIA GPUを使用する場合、プロプライエタリドライバ(NVIDIA提供の非公開ソースドライバ)をインストールすることで、グラフィック性能の向上やCUDAの利用が可能になる。

sudo ubuntu-drivers autoinstall    # 推奨ドライバを自動インストール
sudo reboot                        # 再起動
nvidia-smi                         # ドライバ動作確認

バージョンを指定してインストールする場合は、次のように利用可能なドライバを確認してからパッケージ名を指定する。

ubuntu-drivers devices              # 利用可能なドライバを確認
sudo apt install nvidia-driver-550  # バージョンを指定してインストール
sudo reboot

11. トラブルシューティング

本章では、Ubuntu運用時の問題診断と対処方法を解説する。基本的なトラブルシューティングは「Ubuntu システムの基本操作ガイド」で説明している。

システムログの確認(journalctl)

journalctlは、systemdが収集するシステムログ(ジャーナル)を表示する。エラー原因の調査やサービスの動作確認に使用する。

journalctl -xe                  # 最新ログを説明付きで表示
journalctl -u nginx.service     # 特定サービスのログ
journalctl -p err -b            # 今回起動後のエラー以上
journalctl -f                   # リアルタイム表示

主なオプション: -x説明付加、-e末尾表示、-uユニット指定、-p優先度フィルタ、-b現在ブート、-f追跡表示。

パッケージ管理の問題解決

dpkg設定の中断復旧

sudo dpkg --configure -a

依存関係の修復

sudo apt --fix-broken install

パッケージリストの再構築

sudo rm -rf /var/lib/apt/lists/*
sudo apt clean
sudo apt update

問題パッケージの強制削除

上記の方法で解決できない場合に使用する。依存関係の検査を省略するため、実行後はsudo apt --fix-broken installで整合性を回復させる。

sudo dpkg --remove --force-remove-reinstreq <pkg>
sudo apt --fix-broken install

ディスク関連の診断

使用量の確認

df -h                                             # ファイルシステムごとの使用量
sudo du -sh /* 2>/dev/null | sort -hr | head -20  # 大きいディレクトリを特定

SMART情報(ディスク健康状態)

ディスクの自己診断機能(SMART)で健康状態やエラー履歴を確認する。

sudo apt install smartmontools
sudo smartctl -a /dev/sda

ファイルシステムチェック(fsck)

ファイルシステムの整合性を検査・修復する。電源断後の破損診断に使用する。マウント中のファイルシステムに対して直接fsckを実行するとデータ破損の原因となるため、次のように次回起動時に実行させるか、Live環境から未マウント状態で実行する。

sudo touch /forcefsck    # 次回起動時にfsckを実行
sudo reboot

ネットワーク診断

接続状態の確認

ip addr show           # IPアドレス確認
ip route show          # ルーティング確認
resolvectl status      # DNS設定確認
ping -c 4 8.8.8.8      # IP到達性確認
ping -c 4 google.com   # DNS解決確認

IPアドレスへのpingは成功するがドメイン名で失敗する場合は、DNS設定を確認する。

ポート・サービスの確認

ss -tlnp               # リッスン中のTCPポート
sudo lsof -i :80       # ポート80を使用するプロセス

ファイアウォールの確認

sudo ufw status verbose
sudo iptables -L -n -v

サービス管理とsystemd

サービス制御

systemctl status nginx      # 状態確認
sudo systemctl start nginx  # 起動
sudo systemctl stop nginx   # 停止
sudo systemctl restart nginx # 再起動
sudo systemctl reload nginx  # 設定再読み込み(サービス継続)
sudo systemctl enable nginx  # 自動起動有効
sudo systemctl disable nginx # 自動起動無効

失敗サービスの確認

systemctl --failed

依存関係の確認

systemctl list-dependencies nginx

起動時の問題

GRUBはUbuntuの標準ブートローダーである。

GRUBメニューからの復旧

「Advanced options for Ubuntu」から以前のカーネルを選択して起動できる。カーネル更新後に起動しなくなった場合に使用する。

リカバリーモード

GRUBメニューで「(recovery mode)」を選択すると、ファイルシステムチェック、パッケージ修復、rootシェルへのアクセスができる。

カーネルパニック

カーネルが回復不能なエラーを検出した状態である。対処法:

  1. GRUBメニューから以前のカーネルで起動する
  2. リカバリーモードで、直前に導入したパッケージやドライバを削除する
  3. メモリやディスクなどのハードウェアを確認する

メモリ診断

動作が不安定な場合やクラッシュが繰り返される場合は、メモリの診断を行う。

free -h                         # メモリ使用状況
sudo apt install memtester
sudo memtester 1G 1             # 1GBを1回テスト

memtesterは使用中のメモリ領域を検査できないため、全領域を検査する場合はGRUBメニューからMemtest86+を起動する。