Ubuntu の使い方

Ubuntu の使い方

要約】 Ubuntuに関する情報がまとめられたページです.主な内容は,Ubuntu関連のリンクや端末の操作方法,環境変数とパスの設定,データファイルの扱い方,リモート接続やSSH鍵の使用方法,Python関連のツールやデバッガの利用,そしてLinux コマンドなどが含まれています.さらに,OpenJDKのインストールとJavaプログラムの実行,Ubuntu の運用保守に関する情報も提供されています.これらはUbuntu上でのプログラミングやシステム管理に役立つ内容です.

目次

  1. 1. Ubuntu のインストールとセットアップ
  2. 2. シェルの利用,管理者として実行
  3. 3. 環境変数,パスを通す
  4. 4. データファイル
  5. 5. リモート接続
  6. 6. プログラミング言語Pythonとツール
  7. 7. プログラミング用ツール類
  8. 8. プログラミング言語Java
  9. 9. オペレーティングシステムの運用保守
  10. 10. システムの観測とファイル管理
  11. 11. Linux コマンド

関連する外部ページ

Ubuntu の各種情報について

サイト内の関連ページ

Ubuntu 関連

WSL2 関連

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

Ubuntu のインストール

Ubuntuの最新LTS(長期サポート)リリースは24.04および22.04です.Ubuntu公式サイトのダウンロードページから,インストールしたいバージョンのISOイメージを入手できます.日本語環境のセットアップが容易な「Ubuntu Desktop 日本語 Remix」も提供されています.

ISOイメージからインストーラを起動し,「日本語」を選択して「Ubuntuをインストール」をクリックします.キーボードレイアウトの選択(通常は自動検出されたもので問題ありません),アップデートと他のソフトウェアの選択(「通常のインストール」または「最小インストール」,「グラフィックスと Wi-Fi ハードウェア用の追加ドライバーをインストールする」など),インストールの種類の選択などを行います.

インストールの種類では,「ディスクを削除してUbuntuをインストール」を選択すると,指定したディスクの内容がすべて消去され,Ubuntuがインストールされます.(注意:既存のデータはすべて消去されます.Windowsとのデュアルブートなどを検討する場合は別の手順が必要です)

その後,タイムゾーンを「Tokyo」に設定し,利用者情報(氏名,コンピュータ名,ユーザ名,パスワード)を入力してインストールを開始します.ログイン画面が表示されたらインストールは完了です.

サイト内の関連ページ

関連する外部ページ

入手先をまとめています.

Ubuntu のインストール直後の設定

Ubuntu のインストール直後の主な設定項目は以下の通りです.これらの設定により,Ubuntuを快適に利用できるようになります.

サイト内の関連ページ

Ubuntu のシステム更新について

ソフトウェアの脆弱性修正や機能改善のため,システムの更新は定期的に行うことが重要です.更新手順の詳細はセクション9を参照してください.

Ubuntu セットアップ全般

2. シェルの利用,管理者として実行

端末 (ターミナル)

端末(ターミナル)は,コンピュータを操作するためのインターフェースです.物理的なハードウェアとしての端末と,ソフトウェアとしてその機能を模倣した端末エミュレータがあります.Ubuntu Desktop の標準端末エミュレータは「GNOME Terminal」です.

端末エミュレータ上で動作し,ユーザーからのコマンドを受け付けて実行するのがシェルです.bashはその代表的なシェルの一つです.端末画面には,通常,シェルのプロンプト(例: `ユーザー名@ホスト名:~$`)が表示され,コマンドを入力してEnterキーを押すと実行結果が表示されます.

Ubuntu での端末ソフトウェア (GNOME Terminal) の例

bash シェル

bash (Bourne Again SHell) シェルは,Linuxで標準的に使われている高機能なシェルです.コマンド履歴の呼び出し,Tabキーによるコマンド名やファイル名の補完,パイプやリダイレクションによるコマンド連携,シェルスクリプトによる処理の自動化など,多くの便利な機能を備えています.Linux コマンドの実行に不可欠なツールです.

Linux のシェルでのリソース制限 (ulimit)

Linuxのシェルでは,プロセスが利用できるシステムリソース(メモリ量,生成できるコアダンプファイルのサイズ,同時に開けるファイルディスクリプタ数など)に制限を設けることができます.この制限値を確認・変更するのが ulimit コマンドです.

例えば,大規模な計算処理や多数のファイルを扱うプログラムを実行する際,デフォルトのリソース制限を超えてエラーになることがあります.そのような場合に `ulimit` コマンドで制限を緩和できますが,不用意に大きな値を設定するとシステム全体の安定性に影響を与える可能性があるため注意が必要です.

コアダンプサイズを無制限にする例 (デバッグ時に有用な場合があります):

$ ulimit -c unlimited

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

ヒアドキュメントは,シェルスクリプト内で複数行にわたる文字列データを,コマンドの標準入力として直接埋め込むための機能です.`<< 区切り文字` で始まり,`区切り文字` だけが書かれた行で終わります.

bash シェルでのヒアドキュメントの例を次に示します.下の bash スクリプトでは,`cat` コマンドの入力として,「COMMAND」を区切り文字とする3行の文字列を与えています.設定ファイルの内容をスクリプト内に記述したり,複数行のメッセージを表示したりする際に便利です.

#!/bin/bash
cat > /tmp/output.txt <<-COMMAND
  これは1行目です.
  これも入力されます.
  最後の行です.
COMMAND

(`<<-` とハイフンを付けると、区切り文字前の行頭のタブ文字が無視されます)

次は,ヒアドキュメントを使ってPythonスクリプトを一時ファイルに書き出し,それをBlenderで実行する例です.

#!/bin/bash
# 一時ファイルを作成 (mktempを使うとより安全)
TMP_PY_FILE="/tmp/blender_script.py"

cat > ${TMP_PY_FILE} <<-BPY
import bpy
import os

# ここにBlender Python APIを使った処理を記述
# 例: レンダリングして画像を保存
try:
    bpy.ops.render.render(write_still=True)
    # 保存パスを指定 (必要に応じて変更)
    output_path = '/tmp/render_image.png'
    bpy.data.images['Render Result'].save_render(filepath=output_path)
    print(f"Rendered image saved to {output_path}")
except Exception as e:
    print(f"Error during Blender script execution: {e}")
BPY

# Blenderをバックグラウンドモードで起動し、Pythonスクリプトを実行
blender -b --python ${TMP_PY_FILE}

# 一時ファイルを削除 (任意)
# rm ${TMP_PY_FILE}

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

Linuxでは,システムの安全性を保つため,日常的な作業は一般ユーザー権限で行うことが推奨されます.システム設定の変更,ソフトウェアのインストールやアップデート,システムファイルの編集など,管理者(root)権限が必要な操作を行う場合にのみ,コマンドの先頭に「sudo」を付けて実行します.

シェル自体を管理者(root)として起動し続けることは,意図しないコマンド実行によるシステムへの影響が大きくなるリスクがあるため,特別な理由がない限り避けるべきです.

sudo コマンド

`sudo` (superuser do または substitute user do) は,一般ユーザーが一時的に管理者(root)権限,または他のユーザーの権限でコマンドを実行するためのコマンドです.`sudo` を付けてコマンドを実行すると,通常はユーザー自身のパスワードが要求され,認証が成功すると指定したコマンドが管理者権限で実行されます.

この仕組みにより,rootアカウントのパスワードを直接使う必要がなくなり,また,どのユーザーがいつ管理者権限を使ったかの記録(ログ)も残るため,セキュリティが向上します.

rootアカウントでの直接ログイン

システム管理者 (root) アカウントで直接システムにログインし,そのシェルを使い始めることです.rootはシステムに対する全ての権限を持つため,操作ミスがシステム全体に致命的な影響を与える可能性があります.セキュリティ上の観点から,サーバー運用などではrootアカウントでの直接ログインは無効化し,一般ユーザーでログインしてから必要に応じて `sudo` を使うのが一般的です.

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

環境変数パスの設定は,Linuxシステムやプログラミングにおいて重要な役割を果たします.これらの設定は,シェルやプログラムが動作する際の挙動を制御したり,コマンドやプログラムの場所をシステムに教えたりするために必要です.適切に設定されていると,コマンド実行が簡略化され,開発作業などが効率化されます.

環境変数

環境変数は,OSやシェルがプロセスに提供する,名前と値のペアで構成される情報です.例えば,使用するエディタ (`EDITOR`),言語設定 (`LANG`),コマンド検索パス (`PATH`) などがあります.

シェルで `変数名=値` の形式で一時的に設定できます.例えば `MY_VAR=Hello` のように設定します.

この設定を,そのシェルから起動される子プロセス(他のシェルやプログラム)でも利用可能にする(引き継がせる)には,`export` コマンドを使用します.

$ MY_VAR="some_value"
$ export MY_VAR

または,まとめて

$ export MY_VAR="some_value"

とします.設定済みの環境変数の一覧は `printenv` や `env` コマンドで,個別の変数の値は `echo $変数名` (例: `echo $PATH`) で確認できます.

パスを通す

環境変数の中でも特に重要なのが `PATH` です.`PATH` 環境変数は,端末でコマンド名のみ(例: `ls` や `python`)を入力して実行した際に,シェルがそのコマンドの実行ファイルを探しに行くディレクトリのリストを,コロン `:` で区切って指定します.

自分でコンパイルしたプログラムやダウンロードしたツールなどを,どのディレクトリからでもコマンド名だけで実行できるようにしたい場合,そのプログラムが置かれているディレクトリを `PATH` 環境変数に追加する必要があります.この操作を一般に「パスを通す」と言います.

例えば、ホームディレクトリの下の `bin` ディレクトリ ( `$HOME/bin` ) に自作の実行ファイルを置いた場合,このディレクトリにパスを通すには,シェルの設定ファイル(bashなら通常 `~/.bashrc` や `~/.profile`)に以下のような行を追記します.

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

これにより,既存の `PATH` のリストの先頭に `$HOME/bin` が追加されます(既存のパスより優先して検索させたい場合).末尾に追加する場合は `$PATH:$HOME/bin` とします.設定ファイルを変更した後は,`source ~/.bashrc` (または `. ~/.bashrc`)のように再読み込みするか,シェル(端末)を再起動すると変更が反映されます.

4. データファイル

CSV (Comma Separated Values)

CSV (Comma Separated Values) ファイルは,データをカンマ (`,`) で区切って記述する,広く使われているテキストファイル形式です.主に表形式のデータを保存したり,異なるアプリケーション間でデータを交換したりするために用いられます.

CSVファイルには厳密な標準規格はありませんが,一般的には以下のようなルールに従います.

例:
商品名,単価,数量,合計金額,備考
りんご,150,4,600,"12月30日に購入した赤いりんご"
みかん,30,10,300,"訳あり品, 甘さにばらつきあり"
バナナ,"",5,,房で購入

この例から,以下の特徴が読み取れます.

  1. 各行が1つのレコード(データセット)を表します.1行目はヘッダ行としてフィールド名を示すことが多いです.
  2. 各レコード内のフィールド(データ項目)は,半角カンマで区切られます.
  3. フィールドのデータ自体に半角カンマ,改行,またはダブルクオート (`"`) が含まれる場合,そのフィールド全体がダブルクオート (`"`) で囲まれます.
  4. フィールドを囲むダブルクオート内のダブルクオート自体は,通常,二重引用符 (`""`) として表現(エスケープ)されます.
  5. 空のフィールドは,カンマが連続するか,`""` のように表現されます.

5. リモート接続

SSH の公開鍵認証

SSH (Secure SHell) でリモートサーバーに接続する際,パスワードの代わりに公開鍵認証を用いると,より安全かつ便利にログインできます.公開鍵認証では,手元のクライアントマシンで生成した鍵ペア(秘密鍵と公開鍵)のうち,公開鍵を事前にサーバーに登録しておきます.ログイン時には,クライアントは秘密鍵を使って認証を行い,パスワードを入力する必要がなくなります.

設定手順の概要は以下の通りです.

  1. クライアントマシンで `ssh-keygen` コマンドを使って鍵ペア(例: 秘密鍵 `~/.ssh/id_rsa` と公開鍵 `~/.ssh/id_rsa.pub`)を作成します.
  2. 公開鍵 (`~/.ssh/id_rsa.pub` ファイルの内容) を,接続先サーバーのユーザーのホームディレクトリにある `~/.ssh/authorized_keys` ファイルに追記します.(`ssh-copy-id` コマンドを使うと簡単です)
  3. サーバー側のSSHデーモン設定 (`/etc/ssh/sshd_config`) で `PubkeyAuthentication yes` となっていることを確認します (通常デフォルトで有効).

重要: 秘密鍵 (`id_rsa`) はパスワードと同様に重要で,絶対に他人に漏らしてはいけません.クライアントマシン上で,所有者のみが読み書きできるようにパーミッションを厳格に設定する必要があります (`chmod 600 ~/.ssh/id_rsa`).

Ubuntu での具体的な設定手順は,別ページ »で説明しています.

リモート接続が切れてもプロセスを実行し続ける (nohup, &)

SSHでリモートサーバーに接続して時間のかかるコマンドを実行する場合,ネットワーク切断などでSSHセッションが終了すると,実行中のコマンドも通常は一緒に終了してしまいます.セッションが切断された後もコマンドの実行を継続させるには,`nohup` コマンドやシェルのバックグラウンド実行機能 (`&`) を利用します.

`nohup` と `&` を使う方法 (一般的):

`nohup` (no hang up) コマンドは,プロセスがハングアップシグナル (SIGHUP,通常セッション切断時に送られる) を無視するように設定して,指定したコマンドを実行します.コマンドの末尾に `&` を付けると,そのコマンドはシェルのバックグラウンドジョブとして実行されます.この二つを組み合わせるのが最も簡単な方法です.

$ nohup <実行したいコマンドとその引数> &

この方法で実行すると,コマンドはバックグラウンドで開始され,端末を閉じてもプロセスは動き続けます.標準出力と標準エラー出力は,デフォルトではカレントディレクトリの `nohup.out` というファイルに追記(リダイレクト)されます.

実行中のプロセスをバックグラウンドに移行する方法:

既にフォアグラウンドで実行を開始してしまったプロセスを,後からバックグラウンド実行に切り替え,セッション終了後も継続させたい場合は,以下の手順で行います.

  1. コマンド実行中に `Ctrl + Z` を押して,プロセスを一時停止 (SIGTSTPを送る) させます.シェルプロンプトに戻ります.
  2. `jobs -l` コマンドで一時停止中のジョブ番号を確認します.
  3. $ jobs -l
    [1]+  12345 Stopped                 <実行していたコマンド>
  4. `bg %<ジョブ番号>` コマンドで,プロセスをバックグラウンドで実行再開させます.
  5. $ bg %1
    [1]+ <実行していたコマンド> &
  6. `disown %<ジョブ番号>` コマンドで,そのジョブをシェルの管理下から切り離します.これにより,シェルを終了してもジョブにSIGHUPが送られなくなり,プロセスは継続します.
  7. $ disown %1

(`screen` や `tmux` といったターミナルマルチプレクサを使う方法も、セッション維持にはより強力で推奨されます)

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

指定した時刻に一度だけコマンドを実行させたい場合,`at` コマンドが利用できます.リモート接続中に時間のかかる処理を夜間に実行予約しておき,接続を切断するような場合に便利です.

`at` コマンドを使用するには,`at` パッケージのインストールと `atd` デーモンの起動が必要です(Ubuntu Desktopではデフォルトでインストールされていない場合があります).

$ sudo apt update
$ sudo apt install at
$ sudo systemctl enable --now atd

例: 現在時刻 (`now`) から5分後に `my_script.sh` を実行予約する.

$ at now + 5 minutes
warning: commands will be executed using /bin/sh
at> /path/to/my_script.sh
at>  (入力終了)
job 2 at Tue Jul 30 14:00:00 2024

プロンプト `at>` の後に実行したいコマンド(フルパス推奨)を入力し,`Ctrl + D` で入力を終了するとジョブが予約されます.

予約されたジョブの一覧は `atq` コマンドで,ジョブの内容は `at -c <ジョブ番号>` で確認できます.ジョブの削除は `atrm <ジョブ番号>` で行います.

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

別ページ に Python の機能などをまとめています.

Python 処理系 (インタプリタ)

Python 処理系(Python インタプリタ)は,Pythonで書かれたプログラム(ソースコード)をコンピュータが理解できる形式に解釈し,実行するためのソフトウェアです.最も広く使われている標準実装は C言語で書かれた CPython ですが,他にも Jython (Java上で動作),IronPython (.NET上で動作),PyPy (高速化を目指した実装) などがあります.

Python の起動コマンド

Windows や Ubuntu で Python インタプリタを起動する方法や,Pythonスクリプトファイルを実行する方法については,別ページ で説明しています.通常は端末で `python3` または `python` コマンドを使用します.

Google Colaboratory (Colab)

Google Colaboratory (Colab) は,Googleが提供する無料のクラウドベースの実行環境です.Webブラウザ上でJupyter Notebook形式のインターフェースを使ってPythonコードを作成・実行できます.特に,GPUへの無料アクセスが可能であることから,機械学習の学習や研究開発で広く利用されています.詳細は別ページ で説明しています.

Ubuntu のシステム Python

Ubuntu には,OS自身の動作やシステム管理ツールで利用される「システムPython」が,あらかじめインストールされています.例えば,Ubuntu 24.04 LTS では Python 3.12 がシステムPythonとして含まれています.

このシステムPythonはOSの基盤の一部であるため,ユーザーが直接pipでパッケージを追加したり,別のバージョンに入れ替えたりすると,システムの動作に予期せぬ問題を引き起こす可能性があります.そのため,アプリケーション開発や個別のプロジェクトでPythonを使用する場合は,システムPythonを直接利用するのではなく,後述のvenv(仮想環境)やpyenv(バージョン管理ツール)を利用することが強く推奨されます.

システムPythonの詳細は 別ページ »で説明しています.

Python, pip, 開発環境, コンソール起動

Pythonインタプリタの起動方法,標準的なパッケージ管理ツールpipの使い方,基本的な開発環境のセットアップ,対話的にコードを実行できるPythonコンソール(REPL: Read-Eval-Print Loop)の起動方法などについては,別ページ »で説明しています.

複数の Python の同時インストールと管理

Ubuntu での複数 Python バージョンの利用 (pyenv)

プロジェクトによっては,システム Pythonとは異なる特定のバージョンのPythonが必要になることがあります.また,複数のプロジェクトで異なるPythonバージョンを使いたい場合もあります.このような状況では,pyenvというツールが非常に便利です.pyenvを使うと,複数のPythonバージョンを簡単にインストールし,システム全体,ユーザーごと,またはプロジェクトディレクトリごとに使用するPythonバージョンを切り替えることができます.Linux や macOS で利用可能です.

Ubuntupyenv を使って Python をインストール・管理する方法については,別ページ で説明しています.

venv (Python 仮想環境)

venv は,Python 3.3 以降に標準で付属している,プロジェクトごとに独立したPython実行環境(仮想環境)を作成・管理するためのモジュールです.仮想環境を使うと,各プロジェクトが必要とする特定のバージョンのライブラリ(パッケージ)を,他のプロジェクトやシステムPythonに影響を与えることなくインストールできます.これにより,ライブラリ間の依存関係の衝突を防ぎ,プロジェクトの再現性を高めることができます.Python開発におけるベストプラクティスとされています.

venv の基本的な使い方については,別ページ »で説明しています.

virtualenv, virtualenv-wrapper (仮想環境ツール)

`virtualenv` は,venv が標準化される以前から広く使われてきた,サードパーティ製のPython仮想環境作成ツールです.古いPythonバージョンでも利用できるなどの利点があります.`virtualenv-wrapper` は,`virtualenv` の操作をより簡便にするためのコマンド群を提供するラッパーツールです.詳細は 別ページ »で説明しています.

pyenv (Python バージョン管理ツール)

pyenv は,前述の通り,一つのシステム内に複数のPythonバージョンを共存させ,それらを簡単に切り替えるためのツールです.venvなどの仮想環境ツールと組み合わせて使うことで,特定のPythonバージョンを持つ独立した開発環境を効率的に管理できます.詳細は 別ページ で説明しています.

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

`pip` は,Pythonの公式パッケージリポジトリであるPyPI (Python Package Index) などから,ライブラリやフレームワークといった「パッケージ」をインストール,アンインストール,アップグレードするための標準的なコマンドラインツールです.Python 3.4以降では標準で付属しています.使い方については 別ページ »で説明しています.

2to3 (コード移行ツール)

`2to3` は,古いPython 2系のソースコードを,新しいPython 3系の文法や標準ライブラリの変更に合わせて自動的に変換するためのツールです.Python 2 は2020年に公式サポートが終了しているため,現在では主にレガシーコードをPython 3へ移行する際に補助的に使われることがあります.詳細は 別ページ »で説明しています.

Jupyter Qt Console (高機能コンソール)

Jupyter Qt Console は,標準のPythonコンソールよりも豊富な機能を持つ,対話的なPython実行環境(REPL)です.シンタックスハイライト,インラインでのグラフや画像表示(Matplotlib等と連携),複数行編集などが可能です.詳細は 別ページ で説明しています.

Jupyter Notebook (Webベース対話環境)

Jupyter Notebook は,Webブラウザ上で動作する,コード,テキスト(Markdown記法),数式,グラフなどを組み合わせた「ノートブック」形式のドキュメントを作成・実行・共有できるインタラクティブな環境です.コードセル単位での実行や結果の保持が可能で,データ分析,レポート作成,教育,プロトタイピングなど,様々な分野で活用されています.詳細は 別ページ で説明しています.

JupyterLab (次世代Jupyter環境)

JupyterLab は,Jupyter Notebook の後継となる,より柔軟で高機能なWebベースの統合開発インターフェースです.ノートブック,テキストエディタ,端末,ファイルブラウザなどのコンポーネントを,タブやウィンドウ分割によって自由にレイアウトして利用できます.拡張機能によるカスタマイズも可能です.詳細は 別ページ で説明しています.

Spyder (科学技術計算IDE)

Spyder は,科学技術計算やデータ分析に特化した機能を持つ,オープンソースのPython統合開発環境(IDE)です.MATLABのようなレイアウトを持ち,エディタ,IPythonコンソール,変数エクスプローラ,プロファイラ,デバッガなどが統合されています.Anaconda Distribution に標準で含まれていることが多いです.詳細は 別ページ »で説明しています.

PyCharm (高機能Python IDE)

PyCharm は,JetBrains社が開発・提供する,非常に高機能なPython統合開発環境(IDE)です.強力なコード補完,インスペクション,リファクタリング機能に加え,デバッガ,テスティングフレームワーク連携,Gitなどのバージョン管理システム連携,Webフレームワーク(Django, Flaskなど)サポートなど,プロフェッショナルな開発に必要な多くの機能が統合されています.無料のCommunity版と,より多くの機能を備えた有料のProfessional版があります.詳細は 別ページ で説明しています.

Anaconda Distribution (データサイエンスプラットフォーム)

Anaconda Distribution は,Python本体に加えて,データサイエンス,機械学習,科学技術計算で頻繁に利用される多数のパッケージ(NumPy, SciPy, Pandas, Matplotlib, Scikit-learn, Jupyter Notebook/Lab など)をあらかじめ含んだ,無料のディストリビューションです.パッケージ管理システム兼環境管理ツールである `conda` も同梱されており,ライブラリのインストールや仮想環境の作成・管理を容易にします.詳細は 別ページ で説明しています.

7. プログラミング用ツール類

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

Git は,プログラムのソースコードやドキュメントなどの変更履歴を記録・管理するための,分散型バージョン管理システムです.ファイルの変更内容,変更日時,変更者を記録し,必要に応じて過去の状態に戻したり,変更点を比較したりできます.また,「ブランチ」を作成して機能追加やバグ修正を並行して進め,後で「マージ」して統合するといった,複数人での効率的な共同開発を支援します.GitHubやGitLabといったサービスと連携して使われることが多いです.

`git clone` コマンドは,リモートサーバー上にあるGitリポジトリ(プロジェクトの全履歴を含むデータベース)を,手元のローカルマシンに完全に複製するために使用されます.

次のコマンドは,指定されたURLのリモートリポジトリを,カレントディレクトリ下にリポジトリ名のディレクトリ(通常はURLの最後の部分)を作成してクローンします.

$ git clone https://github.com/username/repository.git

次のコマンドは,`-b` オプションを使って,デフォルトブランチではなく特定のブランチ (`v1.0`) をチェックアウトした状態でクローンします.

$ git clone -b v1.0 https://github.com/username/repository.git

サイト内の関連ページWindows での Git のインストール: 別ページ »で説明しています.

関連する外部ページGit の公式ページ: https://git-scm.com/

Ubuntu での Git のインストール

Ubuntugit をインストールするには,端末で次のコマンドを実行します.

$ sudo apt update
$ sudo apt install git

ビルドツール CMake

CMake は,C,C++,Fortranなどの言語で書かれたソフトウェアのビルド(ソースコードから実行可能なプログラムやライブラリを生成する工程)を自動化・管理するための,クロスプラットフォーム対応のツールです.開発者は `CMakeLists.txt` という設定ファイルに,プロジェクトの構成,依存ライブラリ,コンパイルオプションなどを記述します.CMakeはこの設定ファイルを読み込み,実行環境(OS,コンパイラ,ビルドツール)に応じたネイティブなビルドファイル(例: LinuxのMakefile, WindowsのVisual Studioソリューションファイル)を生成します.これにより,異なる環境でも同じ手順でビルドできるようになります.

CMake の設定オプションは,コマンドライン (`cmake -DOPTION=VALUE ..`) で指定するほか,Ubuntu など Linux 系では `ccmake` (テキストベースの対話型インターフェース) や `cmake-gui` (グラフィカルなインターフェース) を使って確認・変更できます.

Ubuntu での CMake のインストール

Ubuntu では,端末で次のコマンドを実行して,cmake 本体と,設定を対話的に行うためのツール (`ccmake`, `cmake-gui`) をインストールします.

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

CMake のジェネレータ

CMake は,様々なビルドシステムに対応したビルドファイルを生成する能力を持ちます.この生成機能を「ジェネレータ」と呼びます.`-G` オプションでジェネレータを指定できます.例えば,Linux では `Unix Makefiles` (デフォルト) や `Ninja`,Windows では `Visual Studio 17 2022` などが利用できます.利用可能なジェネレータとその詳細は,公式ドキュメントで確認できます.

https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html

Ninja ビルドシステム

Ninja は,特にソースファイル数が非常に多い大規模プロジェクトにおいて,高速なビルドを実現することを目標に設計されたビルドシステムです.Makefileなどに比べて,依存関係の解析やビルドコマンド実行のオーバーヘッドが小さくなるように作られています.CMakeなどのビルドファイルジェネレータと組み合わせて使用されることが多く,CMakeに `-G Ninja` オプションを指定することでNinja用のビルドファイル (`build.ninja`) を生成できます.

デバッガ gdb (GNU Debugger)

GDB (GNU Debugger) は,主にUnix系OSで広く使われている,強力なコマンドラインデバッガです.C, C++, Objective-C, Fortran, Ada, Go など,多くのプログラミング言語に対応しています.プログラムを実行中に特定の箇所で停止させ(ブレークポイント),変数の中身を調べたり,メモリの状態を確認したり,プログラムの実行を一歩ずつ進めたり(ステップ実行)することで,バグの原因を特定し修正する作業(デバッグ)を支援します.

GDBを使用するには,通常,プログラムをデバッグ情報付きでコンパイルする必要があります(例: GCCやClangで `-g` オプションを付ける).

起動は,デバッグ対象の実行ファイルを引数に指定します.

$ gcc -g my_program.c -o my_program  # デバッグ情報付きでコンパイル
$ gdb ./my_program

GDB の対話モードを終了するには `quit` (または `q`) コマンドを入力します.

(gdb) quit

デバッガ GDB の主なコマンド例:

デバッグの基本操作

デバッグは,プログラムが期待通りに動作しない原因(バグ)を発見し,修正する一連の作業プロセスです.デバッグを効率的に行うためのツールが「デバッガ」です.GDBのようなコマンドラインデバッガの他に,多くの統合開発環境(IDE)には,グラフィカルなインターフェースで操作できるデバッガ機能が組み込まれています(例: Visual Studio Code, PyCharm).

デバッガの基本的な機能と操作には,以下のようなものがあります.

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

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

JDK (Java Development Kit) は,Javaプログラムを開発(コンパイル)し,実行するために必要なソフトウェアのセットです.コンパイラ (`javac`),Java仮想マシン (`java`),標準ライブラリ,デバッガなどのツールが含まれています.OpenJDK は,この JDK のオープンソース実装であり,Ubuntuを含む多くのLinuxディストリビューションで標準的に利用できます.

【OpenJDK のインストール】

$ sudo apt update
$ sudo apt install openjdk-17-jdk

【Java のバージョンの確認】

インストールされ,現在有効になっている Java (実行環境 JRE の一部) と Java コンパイラ (JDKの一部) のバージョンは,以下のコマンドで確認できます.

$ java -version
$ javac -version

【Ubuntu での Java プログラムのコンパイルと実行】

例として,以下の内容で `Main.java` という名前のファイルを作成したとします.

// Ball.java (別ファイルにしても良いが、ここでは内部クラスとして定義)
class Ball {
    double x;
    double y;
    String color;

    // コンストラクタ
    public Ball(double x, double y, String color) {
        this.x = x;
        this.y = y;
        this.color = color;
    }

    // 原点からの距離を計算するメソッド (本来の意図はこちらかもしれません)
    public double distanceFromOrigin() {
        return Math.sqrt(this.x * this.x + this.y * this.y);
    }

    // 元のコードの dist() メソッド (x + y を返す)
    public double dist() {
        return this.x + this.y;
    }
}

// Main.java
public class Main {
    public static void main(String[] args) {
        Ball a = new Ball(1, 2, "red");
        Ball b = new Ball(3, 4, "green");

        // 元のコードの dist() メソッドを呼び出す
        System.out.printf("a.dist() の結果: %f%n", a.dist()); // "a.dist() の結果: 3.000000" と表示される
        // 原点からの距離を計算するメソッドを呼び出す例
        // System.out.printf("a の原点からの距離: %f%n", a.distanceFromOrigin());
    }
}

この `Main.java` ファイルをコンパイルし,生成されたクラスファイルを実行するために,端末で以下のコマンドを実行します.ソースファイルがUTF-8でエンコードされている場合,`-encoding UTF-8` オプションを `javac` に指定します.

$ javac -encoding UTF-8 Main.java
$ java Main

`javac` コマンドはソースコードをコンパイルし,Javaバイトコードを含む `Main.class` ファイル(および `Ball.class` ファイル)を生成します.`java` コマンドはJava仮想マシンを起動し,指定されたクラス (`Main`) の `main` メソッドを実行します.上記の例では,実行結果として「a.dist() の結果: 3.000000」のような出力が表示されます.

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

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

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

現在使用している Ubuntu のバージョン情報(リリース番号やコードネーム)を確認するには,`lsb_release` コマンドが便利です.特にコードネームは,サードパーティのリポジトリを追加する際などに必要になることがあります.

# コードネームのみ表示
$ lsb_release -sc
# すべての情報を表示
$ lsb_release -a

主なLTS(長期サポート)リリースのコードネーム例:

サードパーティのリポジトリを追加する際の設定例(`lsb_release -sc` をコマンド置換で利用):

$ sudo add-apt-repository "deb [arch=amd64] https://example.com/ubuntu `lsb_release -sc` main"

Ubuntu のシステム更新

システムを最新の状態に保つことは,セキュリティ脆弱性の修正やソフトウェアの安定性向上のために非常に重要です.端末から以下の `apt` コマンドを使ってシステム更新を行います.

1. パッケージリストの更新:

$ sudo apt update

リポジトリから利用可能なパッケージの最新情報をダウンロードします.実際のパッケージ更新の前に必ず実行します.

2. インストール済みパッケージのアップグレード:

$ sudo apt upgrade

`apt update` で取得した情報に基づき,インストールされているパッケージを新しいバージョンに更新します.ただし,このコマンドはシステム全体の安定性を優先し,更新によって他のパッケージの削除が必要になったり,新たなパッケージのインストールが必須になったりするような更新(主にカーネルや主要ライブラリの更新時)は保留します.

3. 保留された更新を含むシステム全体のアップグレード (推奨):

$ sudo apt full-upgrade  # または sudo apt dist-upgrade

`apt upgrade` では保留されたパッケージも含め,システム全体を最新の状態に更新します.依存関係の変更を解決するために,必要に応じてパッケージの削除や追加も行います.セキュリティ更新などを確実に適用するため,定期的にこのコマンドを実行することが推奨されます.`-V` オプション (`sudo apt -yV full-upgrade`) を付けると,更新されるパッケージの詳細が表示されます.

4. 不要になったパッケージの自動削除:

$ sudo apt autoremove

システムの更新などによって,他のパッケージから依存されなくなり不要になったパッケージ(古いバージョンのカーネルなど)を自動的に検出して削除します.ディスク容量の節約に役立ちます.

5. ダウンロード済みパッケージキャッシュの削除:

$ sudo apt clean      # キャッシュをすべて削除
$ sudo apt autoclean  # 古いバージョンのキャッシュのみ削除

`apt` はダウンロードしたパッケージファイル (`.deb`) を `/var/cache/apt/archives/` に一時保存します.`clean` はこのキャッシュをすべて削除し,`autoclean` は既にインストールされていないバージョンや古くなったバージョンのキャッシュのみを削除します.ディスク容量を節約したい場合に実行します.

6. 再起動 (必要な場合):

Linuxカーネルやシステムの基幹ライブラリが更新された場合は,変更を完全に有効にするためにシステムの再起動が必要です.

$ sudo reboot  # または sudo shutdown -r now

Ubuntu のパッケージ管理 (apt, dpkg)

Ubuntu では,`apt` (Advanced Package Tool) コマンドや `dpkg` (Debian Package) コマンドを用いて,ソフトウェアパッケージのインストール,更新,削除,検索などの管理を行います.`apt` は `dpkg` をより使いやすくした高水準のツールで,依存関係の解決などを自動で行います.通常は `apt` コマンドを使用します.

主なコマンド:

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

NVIDIA製のグラフィックカード(GPU)を使用している場合,NVIDIAが提供するプロプライエタリなドライバをインストールすることで,グラフィック性能やCUDA(GPUコンピューティング)機能などを最大限に活用できます.Ubuntu には,システムに接続されているハードウェアを検出し,適切な推奨ドライバを自動で選択・インストールするためのコマンドが用意されています.

$ sudo ubuntu-drivers autoinstall

このコマンドを実行すると,推奨されるNVIDIAドライバがインストールされます.インストール後,システムを再起動するとドライバが有効になります.

ドライバが正しくロードされ,GPUが認識されているかを確認するには `nvidia-smi` コマンドを使用します.このコマンドはGPUのモデル名,温度,メモリ使用率,実行中のプロセスなどを表示します.

$ nvidia-smi

隣接ノード(ARPテーブル/ネイバーキャッシュ)の表示

同じローカルエリアネットワーク(LAN)セグメントに接続されている他のコンピュータやネットワーク機器のIPアドレスと,それに対応するMACアドレス(物理アドレス)の情報を表示するには,`ip neigh` コマンドを使用します.これは,ARP (Address Resolution Protocol) や NDP (Neighbor Discovery Protocol, IPv6) によって収集された情報(ネイバーキャッシュ)を表示します.

$ ip neigh show

(古いシステムでは `arp -a` コマンドが使われていましたが,現在は `ip` コマンドスイートの一部である `ip neigh` の使用が推奨されます.)

10. システムの観測とファイル管理

最近更新されたファイルの検索

特定の時刻以降に変更(内容の更新または新規作成)されたファイルを効率的に検索するには,`find` コマンドの `-newer` オプションと `touch` コマンドを組み合わせる方法があります.

# 検索の基準となる時刻を持つ一時ファイルを作成
$ touch -t YYYYMMDDhhmm.ss /tmp/timestamp_marker
# または現在の時刻で作成
# $ touch /tmp/now

# カレントディレクトリ以下で、基準時刻より新しいファイルを検索して表示
$ find . -newer /tmp/timestamp_marker

# GNOME設定の全リストをファイルに出力する例 (これはfindとは別のコマンド例)
# $ gsettings list-recursively > /tmp/gnome_settings.txt

`touch -t` で特定の時刻を指定するか,引数なしで現在の時刻のファイルを作成し,それを `-newer` オプションの比較対象として指定します.

ファイルシステムの変更監視 (inotifywait)

Linuxカーネルが持つ `inotify` という機能を利用すると,指定したファイルやディレクトリに対する変更(ファイルの作成,削除,内容の更新,属性の変更,アクセスなど)が発生したことをリアルタイムに検知できます.`inotifywait` コマンドは,この `inotify` 機能を使ってファイルシステムのイベントを監視し,イベントが発生したら通知するツールです(`inotify-tools` パッケージに含まれます).ログファイルの監視や,ファイルの変更をトリガーとした自動処理などに利用できます.

(`inotify-tools` パッケージが必要です: `$ sudo apt update && sudo apt install inotify-tools`)

例: `/tmp` ディレクトリ以下で,ファイルの作成(`create`)またはファイルへの書き込み完了後に閉じられた(`close_write`)イベントを再帰的(`-r`)に監視し続け(`-m`),イベントが発生したファイル名などを標準出力とログファイル(`/var/tmp/log-inotifywait`)の両方に出力します (`tee -a`).

$ inotifywait -e create -e close_write -r -m /tmp | tee -a /var/tmp/log-inotifywait

(監視するイベントタイプ `-e` は複数指定可能.詳細は `man inotifywait` を参照)

重複ファイルの検出と除去(fdupes)

注意:以下のファイル削除操作は元に戻せません.実行前に必ず重要なデータのバックアップを取得してください.また,削除対象となるファイルリスト(例: `/tmp/remove.lst`)の内容を十分に確認し,誤って必要なファイルを削除しないように細心の注意を払ってください.

ディスクスペースを圧迫する原因の一つである重複ファイル(内容が全く同じファイル)を検出するには `fdupes` コマンドが便利です.

(`fdupes` パッケージが必要です: `$ sudo apt update && sudo apt install fdupes`)

手順例:

1. `/home` ディレクトリ以下で重複ファイルを再帰的(`-r`)に検索し,各重複グループのうち最初のファイル以外(`-f`)をリストアップして `/tmp/remove.lst` に保存します.(`sort | uniq | grep -v '^$'` は重複行や空行を除去するためですが、fdupesの出力によっては不要かもしれません)

$ sudo fdupes -rf /home > /tmp/duplicates_all.txt # まず全重複リストを確認(推奨)
$ sudo fdupes -rf /home | sort | uniq | grep -v '^$' > /tmp/remove.lst # 削除候補リスト作成

2. 重要: `/tmp/remove.lst` の内容をエディタなどで開き,削除しても問題ないファイルだけがリストアップされているか必ず確認します.

3. 確認後,リスト内のファイルを一行ずつ読み込んで削除します (`while read ...` ループを使用).`-v` オプションで削除したファイル名を表示します.リスト内のファイルパスにスペースなどが含まれる可能性を考慮し,`read -r` と `"$file"` のようにクォートします.

# while IFS= read -r file; do sudo rm -v "$file"; done < /tmp/remove.lst

空のディレクトリの削除

注意:以下の操作はディレクトリを削除します.意図しないディレクトリが削除されないよう,特に広範囲のディレクトリを指定する場合は注意が必要です.心配な場合は `-delete` の代わりに `-print` を使って削除対象を確認してから実行してください.

中身が空(ファイルもサブディレクトリも含まない)のディレクトリを検索して削除するには `find` コマンドの `-empty` と `-delete` オプションを組み合わせます.

例: `/home` ディレクトリに移動してから,その下の空のディレクトリ (`-type d -empty`) を検索し,見つかったものを削除 (`-delete`) します.

$ cd /home
# まず削除対象を確認する場合 (-print)
# $ find . -type d -empty -print
# 確認後、削除を実行 (-delete)
$ sudo find . -type d -empty -delete

11. Linux コマンド リファレンス

日常的によく使われる基本的な Linux コマンドの例です.各コマンドには多くのオプションがあり,組み合わせることで複雑な操作も可能です.詳細な使い方やオプションについては `<コマンド名> --help` や `man <コマンド名>` でマニュアルを参照してください.