Linux基本コマンドとその活用法
はじめに
Linuxは、サーバーからクラウド環境、データサイエンスプラットフォーム(Google Colaboratoryなど)に至るまで、現代のITインフラを支える重要なOSです。その操作の核となるのが、シェルを通じて実行されるコマンドラインインターフェース(CLI)です。本記事では、Ubuntu 24.04環境を前提とし、頻繁に使用される基本的なコマンドから、ファイル操作、テキスト処理、プロセス管理、ネットワーク操作といった実践的な活用法までを解説します。これらのコマンドを習得することで、作業効率を大幅に向上させ、開発、研究、システム管理におけるスキルアップを目指すことができます。AI、プログラミング、データベースを学ぶ場合にも、Linuxコマンドは不可欠な基礎知識となるでしょう。本記事では、基本的なファイル操作から、テキスト処理、プロセス管理、ネットワーク操作、さらにはバージョン管理まで、Linux環境での必須コマンドを解説します。特に、ワイルドカード、パイプ、リダイレクトといったシェルの強力な機能を組み合わせることで、複雑なタスクも効率的に実行可能になることを示します。これらの知識は、AI、プログラミング、データベース分野での開発や研究を力強くサポートするでしょう。
【目次】
Linuxとシェル入門
Linuxを操作する上で基本となる「シェル」と、コマンド実行の仕組みについて解説します。
シェルとは? コマンドの基本
シェルは、ユーザーが入力したコマンドを解釈し、OS(カーネル)に伝えて実行させるプログラムです。Ubuntu 24.04では、デフォルトで `bash` (Bourne Again SHell) が広く使われています。
環境変数 PATH
とコマンド検索
シェルは、環境変数PATH
に設定されたディレクトリ群(例: /usr/bin
、/usr/local/bin
など)から実行したいコマンドを自動的に検索します。これにより、ユーザーはコマンドの正確な格納場所(パス)を知らなくても、コマンド名だけで実行できます。
echo $PATH
export PATH="$HOME/bin:$PATH" # 一時的な追加。永続化するには ~/.bashrc 等のシェル設定ファイルに追記
現在の作業ディレクトリと ./
の意味
ユーザーが現在作業しているディレクトリを「現在の作業ディレクトリ」(カレントディレクトリ)と呼びます。カレントディレクトリにあるプログラムファイルを実行する場合は、意図しないプログラムの実行を防ぐセキュリティ上の理由から、ファイル名の前に ./
を付けて、カレントディレクトリにあることを明示的に示す必要があります。
pwd # 現在の作業ディレクトリを表示します
cd works # worksディレクトリに移動します (現在の作業ディレクトリを変更)
./my_program # 現在の作業ディレクトリにある my_program を実行します
which
- コマンドのパスを表示
指定したコマンドの実行ファイルが、どのディレクトリに存在するか(フルパス)を表示します。環境変数PATH
で指定されたディレクトリを検索します。
which ls # lsコマンドのパスを表示します (例: /usr/bin/ls)
which python3 # python3コマンドのパスを表示します (Ubuntuでは python ではなく python3 が標準)
基本的なファイル・ディレクトリ操作
ファイルやディレクトリを作成、移動、削除するなど、基本的な操作を行うコマンドを紹介します。
pwd
- 現在のディレクトリ表示現在の作業ディレクトリ(カレントディレクトリ)のフルパスを表示します。
pwd
ls
- ファイルとディレクトリの一覧表示ディレクトリ内のファイルやサブディレクトリをリスト表示します。
ls ls -l # 詳細情報 (パーミッション, 所有者, サイズ, 更新日時など) を表示 ls -a # ドット(.)で始まる隠しファイル・ディレクトリも表示 ls -la # 隠しファイルを含む詳細表示 ls -lh # 詳細情報を人間が読みやすい形式 (例: KB, MB) で表示
cd
- ディレクトリの移動現在の作業ディレクトリを変更します。
cd /path/to/directory # 指定したディレクトリへ移動 cd .. # 親ディレクトリへ移動 cd ~ # ホームディレクトリへ移動 cd # 引数なしでもホームディレクトリへ移動 cd - # 直前にいたディレクトリへ移動
mkdir
- ディレクトリの作成新しいディレクトリを作成します。
mkdir newdir mkdir -p dir1/dir2/dir3 # 親ディレクトリが存在しない場合、それらもまとめて作成 (-p)
rmdir
- 空ディレクトリの削除中身が空のディレクトリのみを削除します。
rmdir mydir
touch
- ファイルのタイムスタンプ更新・空ファイル作成ファイルの最終アクセス時刻や最終変更時刻を現在時刻に更新します。ファイルが存在しない場合は、中身が空のファイルを作成します。
touch existing_file.txt # タイムスタンプ更新 touch new_file.txt # 空ファイル作成
ファイルの内容表示と基本操作
ファイルの内容を確認したり、コピー、移動、削除といった基本的なファイル操作を行うコマンドを紹介します。
cat
- ファイルの内容表示・結合ファイルの内容を標準出力(通常は画面)に表示します。複数のファイルを指定すると、それらを連結して表示します。
cat file1.txt cat file1.txt file2.txt cat file1.txt file2.txt > combined.txt # 連結結果をファイルに上書き保存 (リダイレクト)
less
- ファイル内容のページ単位表示ファイルの内容を1画面(ページ)ずつ表示します。大きなファイルの内容を確認するのに適しています。スペースキーで次ページ、
b
で前ページ、/
で検索、q
で終了します。less large_logfile.log
head
- ファイルの先頭部分を表示ファイルの先頭から指定した行数を表示します。デフォルトは10行です。
head file.txt head -n 5 file.txt # 先頭5行を表示 (-n オプション)
tail
- ファイルの末尾部分を表示ファイルの末尾から指定した行数を表示します。デフォルトは10行です。ログファイルの監視などによく使われます。
tail file.txt tail -n 20 file.txt # 末尾20行を表示 (-n オプション) tail -f log.txt # ファイルへの追記をリアルタイムで表示し続ける (-f オプション)。Ctrl+Cで終了。
cp
- ファイルやディレクトリのコピーファイルやディレクトリをコピーします。
cp source.txt destination.txt # ファイルをコピー cp file1.txt file2.txt target_dir/ # 複数のファイルをディレクトリにコピー cp -r sourcedir/ destdir/ # ディレクトリを中身ごと再帰的にコピー (-r オプション) cp -i source.txt dest.txt # 上書き前に確認を求める (-i オプション)
mv
- ファイルやディレクトリの移動・名前変更ファイルやディレクトリを移動させたり、名前を変更したりします。
mv source.txt /path/to/destination/ # ファイルを移動 mv oldname.txt newname.txt # ファイル名を変更 mv dir1/ ../dir2/ # ディレクトリを移動 (相対パスも利用可能) mv -i source target # 上書き前に確認を求める (-i オプション)
rm
- ファイルやディレクトリの削除ファイルやディレクトリを削除します。削除したファイルやディレクトリは基本的に元に戻せないため、実行には細心の注意が必要です。
rm file.txt # ファイルを削除 rm file1.txt file2.txt # 複数のファイルを削除 rm -r directory/ # ディレクトリを中身ごと再帰的に削除 (**非常に危険なため、実行前にパスを要確認!**) rm -i file.txt # 削除前に確認を求める (-i オプション) rm -f file.txt # 確認なしで強制的に削除 (**データ損失のリスク大!使用は慎重に!**)
シェルの強力な機能:ワイルドカード、リダイレクト、パイプ
シェルが提供するこれらの機能を活用することで、コマンドの操作をより柔軟かつ強力に行うことができます。
ワイルドカード - ファイル名のパターンマッチング
複数のファイルを一度に指定したい場合などに便利な、特殊な記号(メタ文字)です。
*
:0文字以上の任意の文字列に一致。(例:*.log
は拡張子が .log の全ファイルに一致)?
:任意の1文字に一致。(例:file?.txt
は file1.txt, fileA.txt などに一致)[]
:角括弧内の任意の1文字に一致。(例:[abc]
は a, b, c のいずれか1文字。[0-9]
は 0から9のいずれかの数字1文字。)
ls *.log
cp chapter?.md docs/
rm report[1-3].txt # report1.txt, report2.txt, report3.txt に一致
標準入出力とリダイレクト - コマンドの入出力先の変更
Linuxのコマンドは通常、以下の3つの標準ストリームを持ちます。
- 標準入力 (stdin, 0): コマンドがデータを受け取る入力元(通常はキーボード)。
- 標準出力 (stdout, 1): コマンドの正常な実行結果が出力される先(通常は画面)。
- 標準エラー出力 (stderr, 2): コマンドのエラーメッセージが出力される先(通常は画面)。
リダイレクトは、これらの標準ストリームの入出力先をファイルなどに変更する機能です。
> file
: 標準出力(1)を `file` に上書き保存。>> file
: 標準出力(1)を `file` の末尾に追記。< file
: `file` の内容を標準入力(0)としてコマンドに渡す。2> file
: 標準エラー出力(2)を `file` に上書き保存。&> file
または>& file
: 標準出力(1)と標準エラー出力(2)の両方を `file` に上書き保存。2>&1
: 標準エラー出力(2)を標準出力(1)と同じ場所に向ける。(例: `command > file 2>&1` は、正常結果もエラーもまとめて`file`に保存)
ls -l > file_list.txt # lsの結果を file_list.txt に上書き保存
echo "Log entry" >> system.log # 文字列を system.log の末尾に追記
sort < data.txt # data.txt の内容を sort コマンドの入力とする
make 2> error_log.txt # make 実行時のエラーメッセージを error_log.txt に保存
./my_script.sh > output.log 2>&1 # スクリプトの全出力 (標準出力+エラー) を output.log に保存
パイプ - コマンドの出力を別のコマンドの入力へ
パイプ (|
) は、あるコマンドの標準出力を、別のコマンドの標準入力に直接繋ぐ(パイプライン化する)機能です。複数のコマンドを連携させて複雑な処理を行う際に非常に強力です。
ls -l /etc | less # /etc ディレクトリの詳細一覧を less で表示
ps aux | grep 'httpd' # 全プロセス情報から 'httpd' を含む行を検索
cat access.log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr # アクセスログからIPアドレス毎のアクセス数を集計
テキスト処理
テキストデータの検索、加工、集計を行うコマンドです。ログ解析やデータ整形に役立ちます。
grep
- テキストパターン検索ファイルや標準入力から、指定したパターン(文字列や正規表現)に一致する行を検索し、表示します。
grep 'error' logfile.txt # logfile.txt から 'error' を含む行を検索 grep -i 'warning' /var/log/syslog # 大文字小文字を区別せずに 'warning' を検索 (-i) grep -r 'function setup()' ./src # ./src ディレクトリ以下を再帰的に検索 (-r) ps aux | grep 'nginx' # psコマンドの出力から 'nginx' を含む行を検索 (パイプと連携) grep -v '^#' config.conf # '#' で始まる行 (コメント行など) を除外して表示 (-v)
sed
- ストリームエディタテキストストリーム(ファイルやパイプからの入力)に対して、置換、削除、挿入などの編集を行います。特に文字列置換によく使われます。
sed 's/apple/orange/g' input.txt > output.txt # input.txt内の'apple'を'orange'に全て置換しoutput.txtへ出力 sed -i 's/http/https/g' config.html # config.html ファイルを直接編集して置換 (**元に戻せないため注意!**) sed '1,5d' data.txt # data.txt の1行目から5行目を削除して表示 (dコマンド)
awk
- パターン処理言語テキストデータをフィールド(列)単位で処理する強力なプログラミング言語です。特定の列の抽出、計算、書式設定などに使われます。
ls -l | awk '{print $9, $5}' # ls -l の出力から9番目(ファイル名)と5番目(サイズ)のフィールドを表示 awk -F ':' '{print $1}' /etc/passwd # ':' を区切り文字(-F)として /etc/passwd の1番目のフィールド(ユーザー名)を表示 awk '$3 > 1024 {print $0}' data.log # data.log の3番目のフィールドが1024より大きい行全体($0)を表示
sort
- 行の並び替えテキストファイルの行をアルファベット順や数値順に並び替えます。
sort names.txt # names.txt の行をアルファベット順にソート sort -n numbers.txt # numbers.txt の行を数値順 (-n) にソート sort -r scores.txt # scores.txt の行を逆順 (-r) にソート sort -k 3 -t ',' data.csv # data.csv をカンマ(,)区切り(-t)とし、3番目のフィールド(-k 3)でソート
uniq
- 重複行の処理隣接する重複行を検出し、処理します(除去、カウントなど)。通常、事前に `sort` で並び替えてから使います。
sort data.txt | uniq # data.txt をソート後、重複行を除去 sort access.log | uniq -c # 重複する行の出現回数をカウント (-c) sort words.txt | uniq -d # 重複している行のみを表示 (-d)
wc
- 単語数、行数、バイト数のカウントファイル内の行数、単語数、バイト数(または文字数)をカウントします。
wc report.txt # report.txt の行数、単語数、バイト数を表示 wc -l *.py # 拡張子 .py の全ファイルの行数 (-l) を表示 ls /bin | wc -l # /bin ディレクトリ内のファイル数 (lsの出力行数) をカウント
アーカイブと圧縮
複数のファイルを一つにまとめたり(アーカイブ)、ファイルサイズを小さくしたり(圧縮)します。バックアップやファイル転送に便利です。
tar
- ファイルのアーカイブ複数のファイルやディレクトリを一つの `.tar` ファイル(アーカイブファイル)にまとめたり、アーカイブファイルから元のファイルやディレクトリを展開したりします。圧縮機能も併せ持ちます。
# アーカイブ作成 tar -cvf archive.tar file1.txt dir1/ # file1.txtとdir1/を archive.tar にまとめる (-c: 作成, -v: 詳細表示, -f: ファイル指定) tar -czvf archive.tar.gz documents/ # documents/をgzip形式で圧縮しながらまとめる (-z: gzip) tar -cjvf backup.tar.bz2 /data # /dataをbzip2形式で圧縮しながらまとめる (-j: bzip2) # アーカイブ展開 tar -xvf archive.tar # archive.tar を展開する (-x: 展開) tar -xzvf archive.tar.gz # gzip圧縮された archive.tar.gz を展開 tar -xjvf backup.tar.bz2 -C /tmp/ # bzip2圧縮された backup.tar.bz2 を /tmp/ ディレクトリに展開 (-C: 展開先指定) # 内容表示 tar -tvf archive.tar # archive.tar の内容一覧を表示 (-t: 一覧表示)
gzip
/gunzip
- ファイルの圧縮と解凍単一のファイルを `gzip` 形式 (`.gz`) で圧縮・解凍します。デフォルトでは元のファイルは削除されます。
gzip report.txt # report.txt を圧縮 (report.txt.gz が生成され、report.txt は消える) gunzip report.txt.gz # report.txt.gz を解凍 (report.txt が復元され、report.txt.gz は消える) gzip -k data.csv # 元のファイル data.csv を残して圧縮 (-k: keep) gunzip -k image.jpg.gz # 元のファイル image.jpg.gz を残して解凍 (-k: keep)
zip
/unzip
- ZIP形式の圧縮と展開Windows環境で広く使われている `.zip` 形式の圧縮ファイルを扱います。
zip archive.zip file1.txt dir1/ # file1.txt と dir1/ を archive.zip に圧縮 unzip archive.zip # archive.zip をカレントディレクトリに展開 unzip archive.zip -d /path/to/extract # 指定したディレクトリに展開 (-d オプション)
プロセス管理
システム上で実行中のプログラム(プロセス)の状態を確認したり、制御したりします。
プロセス状態の確認
ps
- プロセス状態のスナップショット表示コマンド実行時点でのプロセス状態を表示します。オプションによって表示形式や内容が変わります。
ps aux # 全ユーザーの全プロセスを詳細表示 (BSD形式オプション、よく使われる) ps -ef # 全プロセスを詳細表示 (System V形式オプション、こちらもよく使われる) ps aux | grep 'chrome' # 特定のプロセス ('chrome') を検索
top
- プロセス状態のリアルタイム表示CPU使用率、メモリ使用量などのシステムリソース状況と、リソースを多く消費しているプロセスをリアルタイムで更新表示します。
q
キーで終了。htop
- 対話的なプロセスビューア (推奨)top
より高機能で、カラー表示やマウス操作、プロセスのソート、kill操作などが対話的に行えるツールです。(Ubuntu 24.04では標準で入っていないため、sudo apt install htop
でインストールが必要です)。
ジョブ管理 (バックグラウンドプロセス)
現在のシェルセッション内で実行されているジョブ(フォアグラウンド/バックグラウンドプロセス)を管理します。
jobs
: 現在のシェルで実行中のジョブ一覧を表示。fg %ジョブ番号
: 指定したジョブをフォアグラウンド実行に戻す。bg %ジョブ番号
: 一時停止中のジョブをバックグラウンドで再開させる。Ctrl + Z
: フォアグラウンドで実行中のプロセスを一時停止し、バックグラウンドジョブにする。
プロセスの終了
kill
- プロセスにシグナルを送信プロセスID (PID) を指定して、プロセスにシグナル(終了要求など)を送信します。
kill 1234 # プロセスID 1234 に通常の終了要求 (SIGTERM, 15番シグナル) を送る kill -9 5678 # プロセスID 5678 を強制終了 (SIGKILL, 9番シグナル) (**最終手段。データ破損の可能性あり**)
pkill
/killall
- プロセス名でプロセスを終了プロセス名を指定して該当するプロセスにシグナルを送ります。
pkill
はパターンマッチング、killall
は完全一致に近い挙動をします。同名の意図しないプロセスも終了させてしまう可能性があるため、使用前に `ps aux | grep [プロセス名]` などで対象をよく確認してください。pkill firefox # 'firefox' という名前を含むプロセスを終了 killall nginx # 'nginx' という名前のプロセスを終了
リモート接続とプロセス継続
SSHでのリモート作業や、長時間かかる処理を実行する際に役立つ機能です。
nohup
と&
- 接続が切れてもプロセスを実行し続けるSSHセッションからログアウトした後もコマンドを実行し続けたい場合に使います。
nohup
はハングアップシグナル(SIGHUP)を無視させ、&
はコマンドをバックグラウンドで実行します。nohup ./long_script.sh & # 標準出力・標準エラー出力は通常、カレントディレクトリの nohup.out ファイルにリダイレクトされる
disown
- シェルからジョブを切り離す既に実行中のジョブをシェルから切り離し、シェルを終了してもジョブが継続するようにします。(例:
Ctrl+Z
で一時停止 →bg
でバックグラウンド再開 →disown %ジョブ番号
)at
- 指定時刻にコマンドを実行指定した時刻に一度だけコマンドを実行するように予約します。(Ubuntu 24.04では標準で入っていないため、
sudo apt install at
でインストールが必要です)。at now + 5 minutes # 5分後に実行する場合 warning: commands will be executed using /bin/sh at> /path/to/my_script.sh # 実行したいコマンドを入力 at>
# Ctrl+D を押して入力を終了 job 2 at Mon Aug 5 10:30:00 2024 # 予約されたジョブ情報が表示される atq # 予約済みのジョブ一覧を表示 atrm <ジョブ番号> # ジョブの予約を取り消し
システム管理の基本(ユーザー、権限、パッケージ等)
システムの基本的な管理操作を行うコマンドです。多くの場合、管理者権限(root権限)が必要になります。
ユーザーと権限
su
- ユーザーの切り替え他のユーザー(デフォルトはrootユーザー)に切り替えます。切り替えたいユーザーのパスワードが必要です。
su - # rootユーザーに環境変数等を引き継いで切り替え (rootのパスワード要) su username # 指定したユーザー(username)に切り替え (usernameのパスワード要) exit # 元のユーザーに戻る
sudo
- 一時的な管理者権限でのコマンド実行一般ユーザーが、設定ファイル(`/etc/sudoers`)で許可されたコマンドを一時的に管理者権限で実行します。実行時にはユーザー自身のパスワードを入力します。セキュリティ上、常に `su -` でrootになるよりも、必要なコマンドだけ `sudo` を使うことが強く推奨されます。
sudo apt update # apt update コマンドを管理者権限で実行 sudo -i # rootユーザーとして対話的なシェルを開始 (パスワードは自身のもの。注意して使用)
passwd
- パスワードの変更ユーザーアカウントのパスワードを変更します。
passwd # 自分のパスワードを変更 sudo passwd username # 指定ユーザー(username)のパスワードを変更 (管理者権限が必要)
chmod
- ファイル・ディレクトリの権限変更ファイルやディレクトリのアクセス権限(読み取り(r)、書き込み(w)、実行(x))を、所有者(u)、グループ(g)、その他(o)に対して変更します。
chmod 755 script.sh # rwxr-xr-x (所有者:RWX, グループ:R-X, その他:R-X) - スクリプト等によく使う数値モード chmod u+x script.sh # 所有者(u)に実行権限(x)を追加 (+) する記号モード chmod -R 644 data_dir/ # rw-r--r-- (所有者:RW-, グループ:R--, その他:R--) - データファイル等によく使う。ディレクトリ配下に再帰的(-R)に適用
chown
- ファイル・ディレクトリの所有者/グループ変更ファイルやディレクトリの所有者や所属グループを変更します。通常、管理者権限が必要です。
sudo chown newuser file.txt # file.txt の所有者を newuser に変更 sudo chown user:group report.pdf # report.pdf の所有者を user、グループを group に変更 sudo chown -R www-data:www-data /var/www/html # /var/www/html 以下全ての所有者・グループを www-data に再帰的(-R)に変更
システム情報
uname
- システム情報の表示OSの種類、カーネルバージョンなどのシステム情報を表示します。
uname -a # 利用可能な全ての情報を表示
lshw
/lsusb
/lspci
- ハードウェア情報の表示システムのハードウェア構成に関する情報を表示します。
lshw
は詳細な情報を表示しますが、管理者権限が必要で、場合によっては `sudo apt install lshw` でのインストールが必要です。sudo lshw -short # ハードウェア構成の概要を表示 (sudoが必要) lsusb # USBデバイスの一覧を表示 lspci # PCIデバイスの一覧を表示
ディスク管理
df
- ディスク空き容量の表示ファイルシステムのマウント状況とディスク空き容量を表示します。
df -h # 人間が読みやすい単位 (GB, MBなど) で表示 (-h)
du
- ディスク使用量の表示ファイルやディレクトリが使用しているディスク容量を表示します。
du -sh /path/to/dir # 指定したディレクトリの合計サイズを読みやすい単位で表示 (-s: 合計, -h: 単位) du -h --max-depth=1 . # カレントディレクトリの1階層下のディレクトリ毎のサイズを表示
パッケージ管理 (Debian/Ubuntu系)
ソフトウェア(パッケージ)のインストール、更新、削除を行います。
apt
- 高水準パッケージ管理ツールUbuntuで最も一般的に使われるパッケージ管理コマンドです。
sudo apt update # 利用可能なパッケージリストを最新の情報に更新 sudo apt upgrade # インストール済みパッケージを新しいバージョンに更新 (システム設定等は維持) sudo apt full-upgrade # より大規模な更新。必要ならパッケージの削除や追加も伴う (カーネル更新等も含む) sudo apt install
# 指定したパッケージをインストール sudo apt remove # パッケージを削除 (設定ファイルは残る場合がある) sudo apt purge # パッケージを完全に削除 (設定ファイルも含む) sudo apt autoremove # 他のパッケージから依存されなくなった不要なパッケージを削除 apt search # キーワードでパッケージを検索 apt show # パッケージの詳細情報を表示 dpkg
- 低水準パッケージ管理ツール`.deb` 形式のパッケージファイルを直接操作する際に使います。依存関係の解決は行いません。
sudo dpkg -i package.deb # ローカルにある .deb ファイルをインストール (-i) dpkg -l # インストール済みの全パッケージ一覧を表示 (-l) dpkg -L
# 指定したパッケージに含まれるファイル一覧を表示 (-L) dpkg -S /path/to/file # 指定したファイルがどのパッケージに属するかを表示 (-S)
サービス管理 (Systemd)
多くのLinuxディストリビューションで採用されている `systemd` システム/サービスマネージャを制御します。Webサーバー(nginx, apache2)やデータベース(mysql, postgresql)などの起動・停止・状態確認に使います。
systemctl
- システム/サービスマネージャ制御sudo systemctl start nginx # nginxサービスを開始 sudo systemctl stop nginx # nginxサービスを停止 sudo systemctl restart nginx # nginxサービスを再起動 sudo systemctl reload nginx # nginxサービスの設定ファイルを再読み込み (サービスは停止しない) systemctl status nginx # nginxサービスの状態 (動作中か、エラーなど) を確認 sudo systemctl enable nginx # システム起動時にnginxサービスが自動起動するように設定 sudo systemctl disable nginx # 自動起動を無効化
journalctl
- Systemd ジャーナルログ表示systemdが管理するシステム全体のログ(ジャーナル)を表示します。
journalctl # 全てのジャーナルログを表示 (新しいものが下) journalctl -u nginx.service # 特定のユニット (nginxサービス) のログを表示 (-u) journalctl -f # ログをリアルタイムで表示し続ける (-f)
システム終了
shutdown
- システムのシャットダウン・再起動システムを安全にシャットダウンまたは再起動します。
sudo shutdown -h now # 直ちにシャットダウン (-h: halt) sudo shutdown -r now # 直ちに再起動 (-r: reboot) sudo shutdown -h +10 # 10分後にシャットダウン (メッセージを通知) sudo shutdown -c # 予約されたシャットダウンをキャンセル (-c)
ネットワーク操作
ネットワーク接続の確認、設定表示、データ転送などを行います。Ubuntu 24.04では、旧来の `ifconfig` や `netstat` コマンドよりも、新しい `ip` や `ss` コマンドの使用が推奨されます。
接続確認
ping
- ネットワーク疎通確認指定したホスト(IPアドレスまたはドメイン名)とのネットワーク接続が確立しているかを確認します。
ping example.com # example.com に ICMP ECHO_REQUEST パケットを送信 ping -c 4 google.com # google.com に4回 (-c 4) 送信して終了
ネットワーク設定と確認 (推奨コマンド)
ip
- ネットワーク設定と情報表示IPアドレス、ルーティング、ネットワークデバイスなどの情報を表示・設定します。
ip addr show (or ip a) # IPアドレス情報を表示 (旧 ifconfig 代替) ip link show (or ip l) # ネットワークデバイス (インターフェース) 情報を表示 ip route show (or ip r) # ルーティングテーブルを表示 (旧 route -n 代替) ip neigh show (or ip n) # ARPキャッシュテーブル (近隣ノード情報) を表示 (旧 arp -a 代替)
ss
- ソケット統計情報ネットワーク接続、リスニングポートなどのソケット情報を表示します。
ss -tulnp # TCP/UDPの待ち受け(Listen)ポートと、それを使用しているプロセスを表示 (旧 netstat -tulnp 代替) ss -tan # 全てのTCP接続を表示
データ転送
curl
- URLを使ったデータ転送様々なプロトコル (HTTP, HTTPS, FTPなど) を使って、URLで指定したリソースとの間でデータを転送します。Web APIのテストなどにも使われます。
curl https://example.com # URLの内容を標準出力へ表示 curl -o output.html https://example.com # 内容を output.html というファイルに保存 (-o) curl -O https://example.com/file.zip # URLのファイル名 (file.zip) で保存 (-O) curl -sL https://example.com/install.sh | bash # スクリプトをダウンロード(-L:リダイレクト追従, -s:進捗非表示)して直接bashで実行 (**内容を十分に確認・理解できない限り、極めて危険なため実行しないこと!**)
wget
- 非対話的なファイルダウンローダーHTTP, HTTPS, FTPからファイルをダウンロードします。再帰的なダウンロードやダウンロードの中断・再開も可能です。
wget https://example.com/file.zip # file.zip をダウンロード wget -O newname.zip https://example.com/file.zip # newname.zip という名前で保存 (-O) wget -c https://example.com/largefile.iso # ダウンロードを途中から再開 (-c)
gdown
- Google DriveからのファイルダウンロードGoogle Driveの共有リンクからファイルをダウンロードするツールです。(Ubuntu 24.04には標準で含まれません。
pip install gdown
でインストールが必要です)# pip install gdown # まずインストールが必要 gdown https://drive.google.com/uc?id=YOUR_FILE_ID gdown --id YOUR_FILE_ID -O output.zip
リモート接続
ssh
- セキュアシェル暗号化された安全な通信路を通して、リモートのLinux/Unixマシンにログインしたり、コマンドを実行したりします。
ssh username@hostname_or_ip # 指定ユーザーでリモートホストにログイン ssh -p 2222 user@server.example.com # ポート番号を指定してログイン (-p) ssh -i ~/.ssh/my_key user@host # 秘密鍵ファイルを指定してログイン (-i)
sftp
- セキュアファイル転送プロトコルSSH接続を利用して、リモートホストとの間で対話的にファイルを転送します。
sftp username@hostname_or_ip # (sftpセッション内でのコマンド例) sftp> put localfile.txt remotepath/ # ローカルファイルをリモートにアップロード sftp> get remotefile.txt localpath/ # リモートファイルをローカルにダウンロード sftp> ls # リモートのファイル一覧表示 sftp> pwd # リモートの現在のディレクトリ表示 sftp> cd remotedir # リモートのディレクトリ移動 sftp> exit # sftpセッション終了
scp
- セキュアコピーSSH接続を利用して、リモートホストとの間で非対話的に(コマンド一発で)ファイルをコピーします。
scp localfile.txt username@hostname:/remote/path/ # ローカルファイルをリモートにコピー scp -r localdir/ user@host:/remote/parentdir/ # ローカルディレクトリをリモートに再帰的にコピー (-r) scp user@host:/remote/file.txt . # リモートファイルをカレントディレクトリ(.)にコピー
バージョン管理システム Git
ソースコードなどの変更履歴を管理するための分散型バージョン管理システムです。開発プロジェクトにおいて、複数人での共同作業や変更履歴の追跡に不可欠なツールです。
git
- 分散バージョン管理システム- 基本的なワークフロー: (
init
またはclone
でリポジトリ準備) → ファイル編集 →add
(変更をステージング) →commit
(変更を記録) → (必要ならpush
/pull
でリモートと同期) - よく使うコマンド:
git init # 新規リポジトリをカレントディレクトリに初期化 git clone
# リモートリポジトリをローカルに複製 git status # 作業ツリーとステージングエリアの状態を表示 git add # 指定したファイルの変更をステージングエリアに追加 git add . # カレントディレクトリ以下の全ての変更・新規ファイルをステージング git commit -m "Message" # ステージングされた変更内容をメッセージ付きでローカルリポジトリに記録 git log # コミット履歴を表示 git diff # 作業ツリーとステージングエリアの差分を表示 git branch # ブランチの一覧表示 / 現在のブランチ表示 git branch # 新しいブランチを作成 git checkout # 指定したブランチに切り替え git checkout -b # 新しいブランチを作成して、すぐにそのブランチに切り替え git merge # 指定したブランチの変更内容を現在のブランチに統合 (マージ) git pull # リモートリポジトリの指定ブランチから最新の変更を取得し、現在のブランチにマージ git push # ローカルリポジトリのコミットをリモートリポジトリの指定ブランチに送信 git remote -v # 登録されているリモートリポジトリの一覧を表示 git stash # 作業ツリーの未コミットの変更を一時的に退避 git stash pop # 退避した変更内容を復元し、退避リストから削除
- 基本的なワークフロー: (
Google ColaboratoryでのLinux活用
Google Colaboratory (Colab) は、バックエンドでLinux (主にUbuntu) が動作しているため、ノートブックのセル内でLinuxコマンドを利用できます。コマンドの前に感嘆符 `!` を付けます。
1. ライブラリ管理と環境構築
Pythonライブラリのインストールには `pip` を、システムライブラリのインストールには `apt` (または `apt-get`) を使用します。
# Python パッケージのインストール (pip)
!pip install numpy pandas matplotlib
# システムパッケージの更新とインストール (apt-get)
!apt-get update
!apt-get install -y libgl1-mesa-glx # 例: グラフィック関連ライブラリ
# インストール済みパッケージの確認
!pip list
!dpkg -l | grep libgl1
注意: Colabのランタイム(実行環境)は一時的なものです。ランタイムがリセットされると、インストールしたパッケージも消えるため、ノートブックを開くたびに実行が必要になる場合があります。
2. データファイルの操作とバージョン管理
Google Driveをマウントしてファイルを永続化したり、Gitを使ってコードやデータを管理したりできます。
# Google Drive のマウント
from google.colab import drive
drive.mount('/content/drive')
# Drive内のファイルを確認
!ls -l /content/drive/MyDrive/
# Gitリポジトリのクローン
!git clone https://github.com/user/repository.git
# リポジトリに移動 (%cd マジックコマンド)
# !cd はサブシェルで実行されるため、カレントディレクトリが維持されない。%cd を使う。
%cd repository
# Git操作 (pushには認証設定が必要な場合あり)
!git status
!git add .
!git commit -m "Update from Colab"
# !git push # pushには通常、認証情報の設定が必要
# 大容量ファイルをGoogle Driveからダウンロード (要 gdown)
# !pip install gdown # 必要ならインストール
# !gdown --id YOUR_FILE_ID -O data.zip
# !unzip data.zip
注意: Colabのローカルストレージ (`/content/` 以下) のファイルは、ランタイム終了時に消去されます。重要なデータはGoogle Driveに保存するか、Gitリポジトリに push してください。
3. データファイルの整理と分析準備
データセットの確認、前処理、整理などにLinuxコマンドが役立ちます。
!ls -lh data/ # dataディレクトリ内のファイルサイズを読みやすく表示
!file data/image.jpg # ファイルの種類を判別
!wc -l data/labels.txt # ラベルファイルの行数をカウント
!du -sh dataset/ # datasetディレクトリの合計サイズを表示
!grep -r 'class_A' dataset/annotations/ # annotationsディレクトリ以下で 'class_A' を含む行を再帰的に検索
!find . -name '*.csv' -mtime -1 # カレントディレクトリ以下で最近1日以内に変更されたCSVファイルを検索
!rm -rf temp_output/ # 不要なディレクトリを削除 (**削除すると元に戻せません!パスをよく確認してください!**)
4. ファイルの圧縮と展開
処理結果をまとめてダウンロードしたり、データセットを展開したりする際に使います。
# 結果を圧縮してDriveに保存
!tar -czvf results.tar.gz output_files/
!cp results.tar.gz /content/drive/MyDrive/
# Driveから圧縮ファイルを展開
!cp /content/drive/MyDrive/dataset.zip .
!unzip dataset.zip
5. ネットワーク接続の診断 (限定的)
外部APIへの接続確認などに `ping` や `curl` が使えますが、Colab環境のネットワーク構成によっては制限がある場合があります。
!ping -c 4 google.com
!curl -I https://api.example.com/status # ヘッダー情報のみ取得 (-I)