Linux基本コマンドとその活用法
はじめに
Linuxは、サーバーからクラウド環境、データサイエンスプラットフォーム(Google Colaboratoryなど)に至るまで、現代のITインフラを支える重要なOSです。その操作の核となるのが、シェルを通じて実行されるコマンドラインインターフェース(CLI)です。本記事では、Linux環境で頻繁に使用される基本的なコマンドから、ファイル操作、テキスト処理、プロセス管理、ネットワーク操作といった実践的な活用法までを解説します。これらのコマンドを習得することで、作業効率を大幅に向上させ、開発、研究、システム管理におけるスキルアップを目指すことができます。特に、AI、プログラミング、データベースを学ぶ大学生や若手技術者にとって、Linuxコマンドは不可欠な基礎知識となるでしょう。
【概要】 Linuxでは,ワイルドカード(*,?,[]),パイプ(|),リダイレクト(>,>>),パス指定(/usr/bin,./),標準出力・エラー出力制御などの基本機能を組み合わせることで,ファイル操作,テキスト処理,ネットワーク管理,システム制御など,多様な処理を実行できます.また,環境変数PATHの設定により,コマンドの格納場所を意識することなく操作を行えます.
【目次】
Linuxとシェル入門
Linuxを操作する上で基本となる「シェル」と、コマンド実行の仕組みについて解説します。
シェルとは? コマンドの基本
シェルは、ユーザーが入力したコマンドを解釈し、OS(カーネル)に伝えて実行させるプログラムです。Linuxでは様々なシェルがありますが、一般的に `bash` (Bourne Again SHell) が広く使われています。
環境変数 PATH
とコマンド検索
シェルは,環境変数PATH
に設定されたディレクトリ(例: /usr/bin
,/usr/local/bin
など)から実行したいコマンドを自動的に検索します。これにより、ユーザーはコマンドの正確な格納場所を知らなくても、コマンド名だけで実行できます。
カレントディレクトリと ./
の意味
ユーザーが現在作業しているディレクトリを「カレントディレクトリ」と呼びます。セキュリティ上の理由から、カレントディレクトリにあるプログラムファイルを実行する場合は、ファイル名の前に ./
を付けて、カレントディレクトリにあることを明示的に示す必要があります。
pwd # 現在のカレントディレクトリを表示
cd works # worksディレクトリに移動 (カレントディレクトリを変更)
./my_program # カレントディレクトリにある my_program を実行
基本的なファイル・ディレクトリ操作
ファイルやディレクトリを作成、移動、削除するなど、基本的な操作を行うコマンドです。
ls
- ファイルとディレクトリの一覧表示ディレクトリ内のファイルやサブディレクトリをリスト表示します。
ls # 基本的なファイルリスト表示 ls -l # 詳細情報(パーミッション、所有者、サイズ、更新日時など)を表示 ls -a # 隠しファイル(ドット `.` で始まるファイル)も表示 ls -la # 隠しファイルを含む詳細表示 ls -lh # 詳細情報を人間が読みやすい形式 (例: K, M, G単位) で表示
cd
- ディレクトリの移動カレントディレクトリを変更します。
cd /path/to/directory # 指定したディレクトリに移動 cd .. # 親ディレクトリに移動 cd ~ # ホームディレクトリに移動 cd - # 直前にいたディレクトリに移動
pwd
- 現在のディレクトリ表示現在の作業ディレクトリ(カレントディレクトリ)のフルパスを表示します。
pwd # 現在のディレクトリパスを表示 pwd -P # シンボリックリンクを解決した物理的なパスを表示
mkdir
- ディレクトリの作成新しいディレクトリを作成します。
mkdir newdir # 新しいディレクトリを作成 mkdir -p dir1/dir2/dir3 # 親ディレクトリが存在しない場合もまとめて作成
rmdir
- 空ディレクトリの削除中身が空のディレクトリを削除します。
rmdir mydir # mydir ディレクトリを削除 (空の場合のみ)
touch
- ファイルのタイムスタンプ更新・空ファイル作成ファイルの最終アクセス時刻や最終変更時刻を現在時刻に更新します。ファイルが存在しない場合は、空のファイルを作成します。
touch existing_file.txt # タイムスタンプを更新 touch new_file.txt # 空の new_file.txt を作成
ファイルの内容表示と基本操作
ファイルの内容を確認したり、コピー、移動、削除といった基本的なファイル操作を行うコマンドです。
cat
- ファイルの内容表示・結合ファイルの内容を標準出力(通常は画面)に表示します。複数のファイルを指定すると連結して表示します。
cat file1.txt # file1.txtの内容を表示 cat file1.txt file2.txt # file1.txtとfile2.txtの内容を連結して表示 cat file1.txt file2.txt > combined.txt # 連結結果をcombined.txtに保存 cat header.txt body.txt >> document.txt # header.txtとbody.txtの内容をdocument.txtの末尾に追記
less
- ファイル内容のページ単位表示ファイルの内容を1画面(ページ)ずつ表示します。大きなファイルを見るのに便利です。`cat`と異なり、上下にスクロールできます。
主要な操作キー:
- Space: 1ページ進む
- b: 1ページ戻る
- j or ↓: 1行進む
- k or ↑: 1行戻る
- /文字列: 文字列を前方検索
- ?文字列: 文字列を後方検索
- n: 次の検索結果へ移動
- N: 前の検索結果へ移動
- g: ファイルの先頭へ移動
- G: ファイルの末尾へ移動
- v: 設定されているエディタ(通常はvi)でファイルを編集
- q: lessを終了
less large_logfile.log
head
- ファイルの先頭部分を表示ファイルの先頭から指定した行数を表示します。デフォルトは10行です。
head file.txt # 先頭10行を表示 head -n 5 file.txt # 先頭5行を表示
tail
- ファイルの末尾部分を表示ファイルの末尾から指定した行数を表示します。デフォルトは10行です。ログファイルの監視などによく使われます。
tail file.txt # 末尾10行を表示 tail -n 20 file.txt # 末尾20行を表示 tail -f log.txt # log.txtへの追記をリアルタイムで表示し続ける (Ctrl+Cで終了)
cp
- ファイルやディレクトリのコピーファイルやディレクトリをコピーします。
cp source.txt destination.txt # ファイルをコピー cp file1.txt file2.txt dir/ # 複数のファイルをディレクトリにコピー cp -r sourcedir/ destdir/ # ディレクトリを再帰的にコピー (中身も全て) cp -i source.txt dest.txt # 上書き前に確認を求める cp -v source.txt dest.txt # コピーの過程を表示する
mv
- ファイルやディレクトリの移動・名前変更ファイルやディレクトリを移動させたり、名前を変更したりします。
mv file.txt /path/to/destination/ # ファイルを移動 mv oldname.txt newname.txt # ファイル名を変更 mv dir1/ ../dir2/ # ディレクトリを移動 mv -i source target # 上書き前に確認を求める
rm
- ファイルやディレクトリの削除ファイルやディレクトリを削除します。削除したファイルは基本的に元に戻せないので注意が必要です。
rm file.txt # ファイルを削除 rm file1.txt file2.txt # 複数のファイルを削除 rm -r directory/ # ディレクトリを中身ごと再帰的に削除 (注意!) rm -i file.txt # 削除前に確認を求める rm -f file.txt # 確認なしで強制的に削除 (注意!)
which
- コマンドのパスを表示指定したコマンドの実行ファイルが、どのディレクトリにあるか(フルパス)を表示します。環境変数
PATH
を検索します。which ls # lsコマンドのパスを表示 (例: /bin/ls) which python # pythonコマンドのパスを表示 which -a grep # PATH内で見つかる全てのgrepコマンドの場所を表示
シェルの強力な機能:ワイルドカード、リダイレクト、パイプ
シェルが提供するこれらの機能を活用することで、コマンドの操作をより柔軟かつ強力に行うことができます。
ワイルドカード - ファイル名のパターンマッチング
複数のファイルを一度に指定したい場合などに便利な、特殊な記号(ワイルドカード)です。
*
:0文字以上の任意の文字列に一致します。(例:*.txt
は全てのテキストファイルに一致)?
:任意の1文字に一致します。(例:file?.txt
はfile1.txt
,fileA.txt
などに一致)[]
:角括弧内の任意の1文字に一致します。(例:file[123].txt
はfile1.txt
,file2.txt
,file3.txt
に一致。[a-z]
のように範囲指定も可能)
ls *.log # 拡張子が .log のファイルを一覧表示
cp chapter?.md docs/ # chapter1.md, chapter2.md などを docs/ ディレクトリにコピー
rm report[1-3].txt # report1.txt, report2.txt, report3.txt を削除
標準入出力とリダイレクト - コマンドの入出力先の変更
Linuxのコマンドは通常、以下の3つのデータの流れを持っています。
- 標準入力 (stdin): コマンドがデータを受け取る入力元。デフォルトはキーボード。
- 標準出力 (stdout): コマンドが正常な結果を出力する先。デフォルトは画面。
- 標準エラー出力 (stderr): コマンドがエラーメッセージを出力する先。デフォルトは画面。
リダイレクトは、これらの入出力先をファイルなどに変更する機能です。
> file
: 標準出力 (stdout) をfile
に上書き保存します。ls -l > file_list.txt
>> file
: 標準出力 (stdout) をfile
の末尾に追記します。echo "New log entry" >> system.log
< file
:file
の内容をコマンドの標準入力 (stdin) にします。sort < data.txt
2> file
: 標準エラー出力 (stderr) をfile
に上書き保存します。make 2> error_log.txt
>& file
または&> file
: 標準出力と標準エラー出力の両方をfile
に上書き保存します (シェルの種類により構文が異なる場合あり)。make >& build_log.txt
2>&1
: 標準エラー出力 (stderr) を標準出力 (stdout) と同じ場所に向けます。よく> file 2>&1
のように使い、両方をファイルに保存します。./my_script.sh > output.log 2>&1
パイプ - コマンドの出力を別のコマンドの入力へ
パイプ (|
) は、あるコマンドの標準出力を、別のコマンドの標準入力に直接繋ぐ機能です。複数のコマンドを連携させて複雑な処理を行う際に非常に強力です。
ls -l /etc | less # /etc ディレクトリの詳細一覧を less で表示
ps aux | grep 'httpd' # 実行中プロセスから 'httpd' を含む行を検索
cat access.log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr # アクセスログからIPアドレス毎のアクセス数を集計
テキスト処理
Linux環境では、設定ファイル、ログファイル、プログラムの出力など、多くの情報がテキストデータとして扱われます。ここでは、ファイルから特定の情報を検索したり、内容を加工・集計したりするための強力なコマンドを紹介します。これらのコマンドを組み合わせることで、手作業では時間のかかるテキストデータの処理を自動化し、効率的に行うことができます。
grep
- テキストパターン検索- 主な用途: ファイル内や標準入力から、指定したパターン(文字列や正規表現)に一致する行を検索して表示します。ログ解析や特定の情報抽出に不可欠なコマンドです。
- 基本構文:
grep [オプション] パターン [ファイル...]
- よく使うオプション:
-i
: 大文字・小文字を区別せずに検索します。-v
: パターンに一致 *しない* 行を表示します。-r
または-R
: ディレクトリ内を再帰的に検索します。-n
: 一致した行の行番号を表示します。-l
: パターンに一致したファイル名のみを表示します。-E
: 拡張正規表現を使用して検索します。--color=auto
: 一致した箇所を色付けして表示します(多くの環境でデフォルト)。
- 具体的な使用例:
grep 'error' logfile.txt # logfile.txt から 'error' を含む行を検索。 grep -i 'warning' /var/log/syslog # /var/log/syslog から大文字小文字を区別せず 'warning' を含む行を検索。 grep -r 'function setup()' ./src # ./src ディレクトリ以下で 'function setup()' を含むファイルを再帰的に検索。 ps aux | grep 'nginx' # ps aux の出力から 'nginx' を含む行を検索(プロセス確認)。 grep -v '^#' config.conf # config.conf からコメント行(`#` で始まる行)を除外して表示。
sed
- ストリームエディタ- 主な用途: テキストストリーム(ファイルやパイプからの入力)に対して、置換、削除、挿入などの編集を非対話的に行います。設定ファイルの一括変更などに便利です。
- 基本構文:
sed [オプション] 'コマンド' [ファイル...]
- よく使うコマンド:
s/旧文字列/新文字列/g
: 行内のすべての「旧文字列」を「新文字列」に置換します (`g` がないと各行最初の1つだけ置換)。行番号d
: 指定した行番号の行を削除します (例:5d
は5行目を削除)。/パターン/d
: パターンに一致する行を削除します。
- よく使うオプション:
-i
: 元のファイルを直接編集します(注意: バックアップなしだと元に戻せません)。-i.bak
: 元のファイルを.bak
という拡張子でバックアップしてから編集します。-e 'コマンド'
: 複数の編集コマンドを指定する場合に使用します。
- 具体的な使用例:
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 内の http を https に直接置換 sed -i.bak 's/old_server/new_server/g' settings.conf # バックアップを取りつつ置換 sed '1,5d' data.txt # data.txt の1行目から5行目を削除して表示 sed '/^#/d' config.file # config.file のコメント行を削除して表示
awk
- パターン処理言語- 主な用途: テキストデータをフィールド(列)単位で処理したり、パターンに基づいてアクションを実行したりする強力な言語です。レポート生成やデータ集計に適しています。
- 基本構文:
awk '[パターン] {アクション}' [ファイル...]
- 簡単な使い方:
- デフォルトではスペースやタブで区切られた各部分をフィールド ($1, $2, ...) として扱います。
{print $1, $3}
: 各行の1番目と3番目のフィールドを表示します。'/pattern/ {print $0}'
: patternを含む行全体 ($0) を表示します (grepと似た動作)。
- よく使うオプション:
-F '区切り文字'
: フィールドの区切り文字を指定します (例:-F ':'
)。
- 具体的な使用例:
ls -l | awk '{print $9, $5}' # ls -l の結果からファイル名とサイズを表示 awk -F ':' '{print $1}' /etc/passwd # /etc/passwd からユーザー名 (1番目のフィールド) を表示 awk '$3 > 1024 {print $0}' data.log # 3番目のフィールドが1024より大きい行を表示 cat data.txt | awk '{ sum += $1 } END { print sum }' # data.txt の1列目の合計を計算して表示
sort
- 行の並び替え- 主な用途: テキストファイルの行をアルファベット順、数値順などで並び替えます。
- 基本構文:
sort [オプション] [ファイル...]
- よく使うオプション:
-n
: 数値として並び替えます。-r
: 逆順(降順)で並び替えます。-k N
: N番目のフィールドをキーにして並び替えます。-u
: 重複する行を除去して表示します (uniqコマンドの機能も含む)。-t '区切り文字'
: フィールドの区切り文字を指定します。
- 具体的な使用例:
sort names.txt # names.txt をアルファベット順でソート sort -n numbers.txt # numbers.txt を数値順でソート sort -r scores.txt # scores.txt を降順でソート sort -k 3 -t ',' data.csv # data.csv をカンマ区切りの3番目のフィールドでソート ls -l | sort -k 5 -n -r # ファイル一覧をサイズが大きい順にソート
uniq
- 重複行の処理- 主な用途: **隣接する**重複した行を表示したり、除去したり、カウントしたりします。通常、`sort` と組み合わせて使います。
- 基本構文:
uniq [オプション] [入力ファイル [出力ファイル]]
- よく使うオプション:
-c
: 各行の出現回数を先頭に付けて表示します。-d
: 重複している行のみを表示します。-u
: 重複していない行のみを表示します。
- 具体的な使用例:
sort data.txt | uniq # data.txt をソートし、重複行を除去して表示 sort access.log | uniq -c # access.log をソートし、各行の出現回数をカウント sort words.txt | uniq -d # words.txt をソートし、重複している行のみ表示
wc
- 単語数、行数、バイト数のカウント- 主な用途: ファイル内の行数、単語数、バイト(または文字)数をカウントします。
- 基本構文:
wc [オプション] [ファイル...]
- よく使うオプション:
-l
: 行数をカウントします (lines)。-w
: 単語数をカウントします (words)。-c
: バイト数をカウントします (bytes)。-m
: 文字数をカウントします (multibyte characters)。
- 具体的な使用例:
wc report.txt # report.txt の行数、単語数、バイト数を表示 wc -l *.py # カレントディレクトリの全 .py ファイルの合計行数を表示 ls /bin | wc -l # /bin ディレクトリ内のファイル数をカウント
アーカイブと圧縮
複数のファイルやディレクトリを一つにまとめたり(アーカイブ)、ファイルサイズを小さくしたり(圧縮)するためのコマンドです。
tar
- ファイルのアーカイブ- 主な用途: 複数のファイルやディレクトリを一つのアーカイブファイル (`.tar`) にまとめたり、アーカイブファイルから元のファイルやディレクトリを展開したりします。圧縮機能はありませんが、他の圧縮コマンドと組み合わせて使われることが多いです。
- 基本構文:
tar [オプション] [アーカイブファイル名] [ファイルやディレクトリ...]
- 主な操作モード (通常いずれか一つを指定):
-c
(create): 新しいアーカイブを作成します。-x
(extract): アーカイブからファイルやディレクトリを展開します。-t
(list): アーカイブに含まれるファイルの一覧を表示します。
- よく使うオプション:
-f ファイル名
: 操作対象のアーカイブファイル名を指定します。必須の場合が多いです。-v
(verbose): 処理中のファイル名などを詳細に表示します。-z
(gzip): `gzip` を使って圧縮/解凍を行います (`.tar.gz` または `.tgz`)。-j
(bzip2): `bzip2` を使って圧縮/解凍を行います (`.tar.bz2`)。-J
(xz): `xz` を使って圧縮/解凍を行います (`.tar.xz`)。-C ディレクトリ
: 指定したディレクトリに移動してから展開します。
- 具体的な使用例:
# アーカイブ作成 tar -cvf archive.tar file1.txt dir1/ # file1.txt と dir1/ を archive.tar にまとめる tar -czvf archive.tar.gz documents/ # documents/ を gzip 圧縮して archive.tar.gz にまとめる tar -cjvf backup.tar.bz2 /home/user/data # data ディレクトリを bzip2 圧縮して backup.tar.bz2 にまとめる # アーカイブ展開 tar -xvf archive.tar # archive.tar をカレントディレクトリに展開 tar -xzvf archive.tar.gz # archive.tar.gz を展開 tar -xjvf backup.tar.bz2 -C /tmp/ # backup.tar.bz2 を /tmp/ ディレクトリに展開 # アーカイブ内容表示 tar -tvf archive.tar # archive.tar の内容を表示 tar -tzvf archive.tar.gz # archive.tar.gz の内容を表示
gzip
/gunzip
- ファイルの圧縮と解凍- 主な用途: 単一のファイルを圧縮 (`gzip`) または解凍 (`gunzip`) します。デフォルトでは処理後に元のファイルは削除されます。複数のファイルやディレクトリを扱う場合は、先に `tar` でまとめてから `gzip` を使うのが一般的です。
- 基本構文:
gzip [オプション] ファイル名
gunzip [オプション] ファイル名.gz
- よく使うオプション:
-k
(keep): 元のファイルを削除せずに残します。-d
(decompress): 圧縮ファイルを解凍します (`gunzip` コマンドと同じ動作)。-l
(list): 圧縮ファイルの内容(圧縮率など)を表示します。-r
(recursive): ディレクトリ内を再帰的に処理します (各ファイルを個別に圧縮/解凍)。
- 具体的な使用例:
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 を圧縮して data.csv.gz を生成 (data.csv は残る) gunzip -k image.jpg.gz # image.jpg.gz を解凍して image.jpg を生成 (image.jpg.gz は残る) gunzip -l memo.tar.gz # 圧縮ファイルの情報表示 # 出力例: # compressed uncompr. ratio uncompressed_name # 275 10240 97.5% memo.tar
(参考)
zip
/unzip
- ZIP形式の圧縮と展開Windows環境でよく使われる `.zip` 形式のアーカイブを作成・展開するコマンドです。`tar` と異なり、ディレクトリ構造を維持したまま複数のファイルを一つの `.zip` ファイルに直接圧縮できます。
zip archive.zip file1.txt dir1/ # file1.txt と dir1/ を archive.zip に圧縮 unzip archive.zip # archive.zip をカレントディレクトリに展開 unzip archive.zip -d /path/to/extract # 指定ディレクトリに展開
プロセス管理
Linuxは複数のプログラム(プロセス)を同時に実行できます。ここでは、実行中のプロセスを確認したり、制御したりする方法について説明します。
プロセスの概念
- プロセス: 実行中のプログラムのインスタンスです。各プロセスには一意のプロセスID (PID) が割り当てられます。
- マルチプロセス: 複数のプロセスがCPU時間を細かく分割して利用し、あたかも同時に動いているように見せる仕組みです。
- フォアグラウンドプロセス: ターミナルに接続され、ユーザーと対話的に実行されるプロセス。コマンド実行後、そのプロセスが終了するまで次のコマンドを入力できません。
- バックグラウンドプロセス: ターミナルの制御から切り離され、裏側で実行されるプロセス。コマンドの後ろに `&` を付けて実行します。実行後すぐに次のコマンドを入力できます。
gedit memo.txt # フォアグラウンドで gedit を起動 (gedit が終了するまで操作不可)
firefox & # バックグラウンドで firefox を起動 (すぐに次のコマンドを入力可能)
プロセス状態の確認
ps
- プロセス状態のスナップショット表示- 主な用途: コマンド実行時点でのプロセス状態を表示します。様々なオプションがあり、表示する情報や形式をカスタマイズできます。
- よく使うオプションの組み合わせ:
ps aux
: システム上の全ユーザーの全プロセスを詳細な情報 (ユーザー名, PID, CPU使用率, メモリ使用率, 実行コマンドなど) 付きで表示します (BSD形式)。ps axjf
: プロセスを親子関係がわかるツリー形式で表示します。ps -ef
: システム上の全プロセスを詳細な情報 (UID, PID, 親PID (PPID), 開始時刻など) 付きで表示します (System V形式)。ps -u ユーザー名
: 指定したユーザーが実行しているプロセスを表示します。
- 使用例:
ps aux | grep 'chrome' # chromeに関連するプロセスを表示 ps -ef | grep 'sshd' # sshdに関連するプロセスを表示
top
- プロセス状態のリアルタイム表示- 主な用途: システム全体の負荷状況や、CPU・メモリを多く使用しているプロセスをリアルタイムで監視します。デフォルトでは数秒ごとに情報が更新されます。
- 主な表示情報: システム稼働時間、ログインユーザー数、ロードアベレージ、タスク総数、CPU使用状況、メモリ/スワップ使用状況、プロセスリスト(PID, USER, CPU%, MEM%, COMMANDなど)。
- 主な操作キー (top実行中に使用):
q
: topを終了します。h
: ヘルプを表示します。k
: プロセスを終了 (kill) させます (PIDとシグナルを指定)。r
: プロセスの優先度 (nice値) を変更します。M
: メモリ使用率でソートします。P
: CPU使用率でソートします (デフォルト)。u
: 特定ユーザーのプロセスのみ表示します。1
: CPUごとの使用率を表示/非表示にします。
(推奨)
htop
- 対話的なプロセスビューアtop
をより高機能にし、カラー表示やマウス操作、プロセスのツリー表示、複数プロセスの選択などが可能なツールです。標準でインストールされていない場合もあります (`sudo apt install htop` などでインストール)。
ジョブ管理 (バックグラウンドプロセス)
シェルには、バックグラウンドで実行されているプロセス(ジョブ)を管理する機能があります。
jobs
: 現在のシェルで実行中のジョブ(バックグラウンドプロセスや一時停止中のプロセス)の一覧を表示します。ジョブ番号が表示されます。fg %ジョブ番号
: 指定したジョブ番号のプロセスをフォアグラウンドに戻します (例:fg %1
)。bg %ジョブ番号
: 一時停止中 (Ctrl+Z) のジョブを指定したジョブ番号でバックグラウンドで再開します (例:bg %1
)。Ctrl + Z
: フォアグラウンドで実行中のプロセスを一時停止し、バックグラウンドに移します。bg
コマンドで再開できます。
プロセスの終了
不要になったプロセスや応答しなくなったプロセスを終了させます。
kill
- プロセスにシグナルを送信- 主な用途: プロセスID (PID) を指定して、プロセスに特定のシグナルを送信します。シグナルはプロセスに特定の動作(終了、再起動など)を促すための通知です。
- 主なシグナル:
SIGTERM
(15): 通常の終了要求 (デフォルト)。プロセスに終了処理を行う機会を与えます。SIGKILL
(9): 強制終了。プロセスはクリーンアップ処理を行えません。最終手段として使います。SIGHUP
(1): ハングアップ。設定ファイルの再読み込みなどに使われることがあります。SIGINT
(2): 割り込み (Ctrl+C と同じ)。SIGSTOP
(19): プロセスの一時停止 (Ctrl+Z と似ているが、プロセス側で無視できない)。SIGCONT
(18): 停止したプロセスを再開。
- 基本構文:
kill [-シグナル番号 or -シグナル名] PID
- 使用例:
kill 1234 # PID 1234 のプロセスに SIGTERM を送信 (通常の終了要求) kill -9 5678 # PID 5678 のプロセスに SIGKILL を送信 (強制終了) kill -HUP 9876 # PID 9876 のプロセスに SIGHUP を送信 (設定再読み込みなど) kill -l # 利用可能なシグナルの一覧を表示
pkill
/killall
- プロセス名でプロセスを終了- 主な用途: プロセス名やその他の条件を指定してプロセスにシグナルを送信します。
killall
は基本的にプロセス名のみで指定しますが、pkill
はより柔軟な条件指定が可能です。複数のプロセスを一度に終了できる反面、意図しないプロセスを終了させてしまう危険性もあるため注意が必要です。 - 使用例:
pkill firefox # 'firefox' という名前のプロセスに SIGTERM を送信 killall nginx # 'nginx' という名前のプロセスに SIGTERM を送信 pkill -u user1 java # ユーザー user1 が実行している java プロセスを終了 killall -9 httpd # 'httpd' という名前のプロセスを強制終了
- 主な用途: プロセス名やその他の条件を指定してプロセスにシグナルを送信します。
システム管理の基本
システムのユーザー、権限、パッケージ、ハードウェア情報などを管理するための基本的なコマンドです。
ユーザーと権限
su
- ユーザーの切り替え他のユーザー(デフォルトはroot)に切り替えます。
su # rootユーザーに切り替え (rootのパスワードが必要) su - username # 指定したユーザーに、そのユーザーの環境設定で切り替え (対象ユーザーのパスワードが必要) exit # 元のユーザーに戻る
sudo
- 一時的な管理者権限でのコマンド実行一般ユーザーが、許可されたコマンドを管理者 (root) 権限で一時的に実行できます。
su
と異なり、自身のパスワードを使います。設定ファイル (`/etc/sudoers`) で権限を管理します。sudo apt update # apt update を root 権限で実行 sudo -i # root として対話的なシェルを開始 (root の環境設定を引き継ぐ) sudo -u otheruser command # 指定した他のユーザーとしてコマンドを実行
passwd
- パスワードの変更自身のパスワードを変更します。管理者は他のユーザーのパスワードも変更できます。
passwd # 自身のパスワードを変更 sudo passwd username # (管理者権限で) 指定したユーザーのパスワードを変更
chmod
- ファイル・ディレクトリの権限変更ファイルやディレクトリのアクセス権限(読み取り(r)、書き込み(w)、実行(x))を変更します。権限は所有者、グループ、その他のユーザーに対して設定します。
# 数値モード (r=4, w=2, x=1 の合計) chmod 755 script.sh # 所有者:rwx, グループ:r-x, その他:r-x (実行可能スクリプトによく使う) chmod 644 data.txt # 所有者:rw-, グループ:r--, その他:r-- (通常のファイルによく使う) chmod -R 600 private_dir/ # ディレクトリ内の全ファイルの権限を再帰的に変更 (所有者のみrw) # 記号モード (u:所有者, g:グループ, o:その他, a:全て / +:追加, -:削除, =:設定) chmod u+x script.sh # 所有者に実行権限を追加 chmod go-w config # グループとその他から書き込み権限を削除 chmod a=r file # 全ユーザーに読み取り権限のみを設定
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 # ディレクトリ以下の所有者・グループを再帰的に変更
システム情報
uname
- システム情報の表示OSのカーネル名、バージョンなどのシステム情報を表示します。
uname # カーネル名 (例: Linux) uname -r # カーネルのリリースバージョン uname -m # マシンハードウェア名 (例: x86_64) uname -a # 利用可能な全ての情報を表示
lshw
/lsusb
/lspci
- ハードウェア情報の表示システムの詳細なハードウェア情報を表示します。
sudo lshw # システム全体のハードウェア情報を表示 (要管理者権限) sudo lshw -short # 簡潔なサマリーを表示 sudo lshw -C network # ネットワークデバイスの情報のみ表示 lsusb # 接続されているUSBデバイスの一覧を表示 lspci # 接続されているPCIデバイスの一覧を表示
ディスク管理
df
- ディスク空き容量の表示ファイルシステム(ディスクパーティション)ごとの使用量、空き容量などを表示します。
df # デフォルト表示 (ブロック単位) df -h # 人間が読みやすい形式 (GB, MBなど) で表示 (human-readable) df -T # ファイルシステムのタイプも表示 df -i # iノードの使用状況を表示
du
- ディスク使用量の表示ファイルやディレクトリが使用しているディスク容量を表示します。
du # カレントディレクトリ以下のサブディレクトリ毎のサイズを表示 (ブロック単位) du -h # 人間が読みやすい形式で表示 du -s # 指定したディレクトリの合計サイズのみ表示 (summary) du -sh /path/to/dir # 指定ディレクトリの合計サイズを読みやすい形式で表示 du -a # ファイル毎のサイズも表示 (all) du --max-depth=1 # 1階層下のディレクトリまでのサイズを表示
パッケージ管理 (Debian/Ubuntu系)
apt
- 高水準パッケージ管理ツールソフトウェア(パッケージ)のインストール、更新、削除などを行うためのコマンドです。以前の `apt-get`/`apt-cache` に代わり、現在推奨されています。
# 主なサブコマンド (通常 sudo が必要) sudo apt update # パッケージリストを最新の情報に更新 sudo apt upgrade # インストール済みパッケージをアップグレード (新しいパッケージは導入しない) sudo apt full-upgrade # パッケージをアップグレード (必要なら新しいパッケージも導入/削除) sudo apt install
# パッケージをインストール sudo apt remove # パッケージを削除 (設定ファイルは残る) sudo apt purge # パッケージを完全に削除 (設定ファイルも含む) sudo apt autoremove # 不要になった依存パッケージを自動削除 sudo apt search # キーワードでパッケージを検索 apt list --installed # インストール済みパッケージの一覧を表示 apt show # パッケージの詳細情報を表示 dpkg
- 低水準パッケージ管理ツールDebianパッケージ (`.deb` ファイル) を直接操作する基本的なツールです。`apt` は内部で `dpkg` を利用しています。
sudo dpkg -i package.deb # .deb ファイルをインストール dpkg -l # インストール済みパッケージの一覧を表示 dpkg -l | grep 'nginx' # 特定のパッケージがインストールされているか確認 dpkg -L
# パッケージに含まれるファイルの一覧を表示 dpkg -S /path/to/file # 指定されたファイルがどのパッケージに属するか表示 sudo dpkg -r # パッケージを削除 (remove) sudo dpkg -P # パッケージを完全に削除 (purge)
サービス管理 (Systemd)
systemctl
- システム/サービスマネージャ制御近年の多くのLinuxディストリビューションで採用されている `systemd` システム/サービスマネージャを制御します。デーモン(バックグラウンドサービス)の起動、停止、状態確認などを行います。
# サービス管理 (例: nginx.service) sudo systemctl start nginx # サービスを開始 sudo systemctl stop nginx # サービスを停止 sudo systemctl restart nginx # サービスを再起動 sudo systemctl reload nginx # サービスの設定を再読み込み (対応サービスのみ) systemctl status nginx # サービスの状態を確認 sudo systemctl enable nginx # システム起動時にサービスを自動起動するように設定 sudo systemctl disable nginx # 自動起動を無効化 systemctl is-enabled nginx # 自動起動が有効か確認 # システム全体の管理 systemctl list-units --type=service # 実行中のサービスユニット一覧を表示 systemctl list-unit-files --type=service # インストールされているサービスユニットの一覧と状態を表示 sudo systemctl reboot # システムを再起動 sudo systemctl poweroff # システムをシャットダウン
journalctl
- Systemd ジャーナルログ表示Systemdが収集するシステムログ(ジャーナル)を表示します。
journalctl # 全てのジャーナルを表示 (古いものから) journalctl -r # 逆順 (新しいものから) で表示 journalctl -u nginx.service # 特定のユニット (サービス) のログを表示 journalctl -f # ログをリアルタイムで表示 (tail -f のような動作) journalctl --since "1 hour ago" # 過去1時間分のログを表示
システム終了
shutdown
- システムのシャットダウン・再起動システムを安全にシャットダウンまたは再起動します。時間指定やログインユーザーへの通知も可能です。
sudo shutdown -h now # 直ちにシャットダウン (halt) sudo shutdown -r now # 直ちに再起動 (reboot) sudo shutdown -h +10 # 10分後にシャットダウン sudo shutdown -r 22:00 # 今日の22:00に再起動 sudo shutdown -c # 予定されているシャットダウン/再起動をキャンセル
ネットワーク操作
ネットワーク接続の確認、設定情報の表示、リモートサーバーへの接続、ファイルの転送などを行うコマンドです。
接続確認
ping
- ネットワーク疎通確認指定したホスト(IPアドレスまたはドメイン名)に対して、ネットワーク的に到達可能かを確認します。ICMPエコー要求パケットを送り、応答を待ちます。
ping example.com # example.com に ping を送信 (Ctrl+C で停止) ping 8.8.8.8 # Google Public DNS に ping を送信 ping -c 5 google.com # 5回だけ ping を送信して終了 ping -i 2 192.168.1.1 # 2秒間隔で ping を送信
ネットワーク設定と確認 (最新コマンド)
近年、従来の
ifconfig
,netstat
,route
,arp
に代わり、より高機能なip
やss
コマンドの使用が推奨されています。ip
- ネットワーク設定と情報表示IPアドレス、ルーティングテーブル、ネットワークデバイスの表示や設定を行います。
ip addr show (or ip a) # 全てのネットワークインターフェースのIPアドレス情報を表示 (旧 `ifconfig` 代替) ip link show (or ip l) # 全てのネットワークデバイスの情報を表示 (MACアドレスなど) ip route show (or ip r) # ルーティングテーブルを表示 (旧 `route -n` 代替) ip neigh show (or ip n) # 近隣キャッシュ (ARPテーブル) を表示 (旧 `arp -a` 代替) ip -s link # ネットワークデバイスの統計情報 (送受信パケット数など) を表示 ip addr add 192.168.1.100/24 dev eth0 # eth0 に IPアドレスを追加 (一時的、要管理者権限) ip link set eth0 up # eth0 インターフェースを有効化 (要管理者権限)
ss
- ソケット統計情報ネットワーク接続(ソケット)の状態を表示します。旧 `netstat` より高速で詳細な情報を提供します。
ss # ESTABLISHED状態のソケットを表示 (デフォルト) ss -t # TCPソケットを表示 ss -u # UDPソケットを表示 ss -l # LISTEN状態 (待ち受け) のソケットを表示 ss -p # ソケットを使用しているプロセス情報を表示 (要管理者権限) ss -n # アドレスやポート番号を名前解決せずに数値で表示 ss -a # 全てのソケット (LISTEN含む) を表示 ss -tulnp # よく使う組み合わせ: TCP/UDPの待ち受けソケットをプロセス情報付きで数値表示
データ転送
curl
- URLを使ったデータ転送様々なプロトコル (HTTP, HTTPS, FTP, SCPなど) を使って、URLで指定したリソースとの間でデータを転送します。Web APIのテストなどにも広く使われます。
curl https://example.com # ウェブページの内容を標準出力に表示 curl -o output.html https://example.com # ウェブページの内容を output.html に保存 curl -O https://example.com/file.zip # URLのファイル名でファイルを保存 curl -sL https://example.com/install.sh | bash # URLからスクリプトをダウンロードして実行 (注意!) -s:進捗非表示, -L:リダイレクト追跡 curl -X POST -d "key=value" https://api.example.com # POSTリクエストを送信 curl -H "Authorization: Bearer TOKEN" https://api.example.com # カスタムヘッダーを付けてリクエスト curl -u user:pass ftp://ftp.example.com/file # ユーザー認証付きでFTPダウンロード
wget
- 非対話的なファイルダウンローダーHTTP, HTTPS, FTPプロトコルを使ってファイルをダウンロードします。再帰的なダウンロードや、中断からの再開など、ファイルダウンロードに特化した機能が豊富です。
wget https://example.com/file.zip # ファイルをダウンロード wget -O newname.zip https://example.com/file.zip # ファイル名を指定して保存 wget -c https://example.com/largefile.iso # ダウンロードを再開 (中断された場合) wget -r -np -l 1 https://example.com/docs/ # docs/ ディレクトリ以下を1階層分再帰的にダウンロード (-np:親ディレクトリへ行かない) wget -b https://example.com/bigdata.tar.gz # バックグラウンドでダウンロードを実行
gdown
- Google DriveからのファイルダウンロードGoogle Driveの共有リンクやファイルIDを指定してファイルをダウンロードするコマンドラインツールです。Colab環境などでよく利用されます (別途インストールが必要な場合あり: `pip install gdown`)。
gdown https://drive.google.com/uc?id=YOUR_FILE_ID gdown --id YOUR_FILE_ID -O output_filename.zip gdown --folder https://drive.google.com/drive/folders/YOUR_FOLDER_ID
リモート接続
ssh
- セキュアシェル暗号化された安全な通信路を使って、リモートのLinux/Unixサーバーにログインし、コマンドを実行します。
ssh username@hostname_or_ip # リモートホストにユーザー名で接続 ssh -p 2222 user@server.example.com # ポート番号 2222 を指定して接続 ssh -i ~/.ssh/my_key user@host # 指定した秘密鍵ファイルを使って接続 ssh -X user@host # X11転送を有効にして接続 (リモートのGUIアプリを手元で表示) ssh -L 8080:localhost:80 user@gateway # ローカルポートフォワーディング (ローカル8080番ポートへのアクセスを、gateway経由でリモートのlocalhost:80へ転送) ssh -R 9090:localhost:9090 user@remote # リモートポートフォワーディング
sftp
- セキュアファイル転送プロトコルSSHの仕組みを利用して、安全にファイルを送受信します。FTPと似たコマンド体系を持ちます。
sftp username@hostname_or_ip # SFTPセッションを開始 sftp -P 2222 user@server.example.com # ポート番号指定 (一部のsftp実装、OpenSSHでは -oPort=2222) sftp -i ~/.ssh/my_key user@host # 秘密鍵指定 # SFTPセッション内の主なコマンド put localfile.txt remotepath/ # ローカルファイルをリモートにアップロード get remotefile.txt localpath/ # リモートファイルをローカルにダウンロード ls # リモートのファイル一覧を表示 pwd # リモートの現在のディレクトリを表示 cd remotedir # リモートのディレクトリを移動 lpwd # ローカルの現在のディレクトリを表示 lcd localdir # ローカルのディレクトリを移動 mkdir newdir # リモートにディレクトリを作成 rm remotefile # リモートファイルを削除 help # ヘルプを表示 exit (or quit, bye) # SFTPセッションを終了
バージョン管理システム Git
ソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムです。現代の開発において不可欠なツールとなっています。
git
- 分散バージョン管理システム- 主な用途: ファイルの変更履歴管理、複数人での共同開発、ブランチによる機能開発の並行化など。
- 基本的なワークフロー: 1. リポジトリ作成 (`init`) または取得 (`clone`)。 2. ファイルを編集。 3. 変更したファイルをステージングエリアに追加 (`add`)。 4. ステージングした変更をローカルリポジトリに記録 (`commit`)。 5. (必要なら) リモートリポジトリに変更を送信 (`push`) またはリモートから取得 (`pull`)。
- よく使うコマンド:
git init # カレントディレクトリに新しいGitリポジトリを作成 git clone
# リモートリポジトリをローカルに複製 git status # リポジトリの状態 (変更されたファイルなど) を確認 git add # 指定したファイルの変更をステージングエリアに追加 git add . # カレントディレクトリ以下の全ての変更をステージング git commit -m "Commit message" # ステージングされた変更をローカルリポジトリに記録 git log # コミット履歴を表示 git log --oneline --graph # 履歴を1行でグラフ表示 git diff # ワーキングディレクトリとステージングエリアの差分を表示 git diff --staged # ステージングエリアと最新コミットの差分を表示 git branch # ブランチの一覧を表示 git branch # 新しいブランチを作成 git checkout # 指定したブランチに切り替え git checkout -b # 新しいブランチを作成して切り替え git merge # 指定したブランチを現在のブランチに統合 git pull # リモートリポジトリの変更を取得してマージ (例: git pull origin main) git push # ローカルリポジトリの変更をリモートに送信 (例: git push origin main) git remote -v # 登録されているリモートリポジトリの一覧を表示 git remote add # 新しいリモートリポジトリを追加 git reset HEAD # ステージングしたファイルの変更を取り消し git checkout -- # ワーキングディレクトリでのファイルの変更を取り消し (注意!) git stash # 作業中の変更を一時的に退避 git stash pop # 退避した変更を復元
Google ColaboratoryでのLinux活用
Google Colaboratoryは、ブラウザ上でPythonコードを実行できる便利な環境ですが、その基盤はLinuxです。ここで学んだLinuxコマンドを活用することで、Colab上でのライブラリ管理、データファイルの操作、バージョン管理などをより効率的に行うことができます。特にデータ分析や機械学習のワークフローにおいて役立つテクニックを紹介します。
Colabノートブックでは、セル内で `!` を行頭につけるとLinuxシェルコマンドを実行できます。また、`%cd` のように `%` で始まるものは「マジックコマンド」と呼ばれ、シェルの機能をPython環境から便利に使うためのものです。
1. ライブラリ管理と環境構築
Colab環境に必要なライブラリをインストールしたり、システムのパッケージを管理したりできます。
# Python パッケージのインストール (pip)
!pip install numpy pandas matplotlib
# システムパッケージの更新とインストール (apt) - OpenCVに必要な依存関係の例
!apt-get update
!apt-get install -y libgl1-mesa-glx ffmpeg libsm6 libxext6
# 特定バージョンのライブラリをインストール
!pip install tensorflow==2.8.0
# インストール済みパッケージの確認
!pip list
!dpkg -l | grep opencv
重要な注意点:
- Colabのセッションは一時的なものです。インストールしたパッケージや変更は、セッションが終了すると失われることがあります (ランタイムの種類や設定による)。永続化が必要な場合は、ノートブックの先頭で毎回インストールコマンドを実行するか、Google Driveをマウントして利用します。
- `!apt-get` コマンドは、Colab環境の基盤となっているDebian/Ubuntu系のパッケージマネージャを利用します。
2. データファイルの操作とバージョン管理
Google Driveをマウントしたり、Gitを使ってコードやデータを管理したりします。
# Google Drive のマウント (認証が必要)
from google.colab import drive
drive.mount('/content/drive')
# Drive内のファイルを確認
!ls -l /content/drive/MyDrive/Colab\ Notebooks/
# Gitリポジトリのクローン
!git clone https://github.com/user/repository.git
# リポジトリに移動 (%cd はマジックコマンド)
%cd repository
# ファイルの変更を確認しコミット (事前に認証設定が必要な場合あり)
!git status
!git add .
!git commit -m "Update data processing script from Colab"
# !git push origin main # プッシュには通常アクセストークンなどの設定が必要
# 大容量ファイルをGoogle Driveからダウンロード (gdownが必要な場合: !pip install gdown)
# !gdown --id YOUR_FILE_ID -O data.zip
# !unzip data.zip
重要な注意点:
- Google Driveをマウントすると、
/content/drive/MyDrive/
以下で自分のDriveファイルにアクセスできます。 - Gitでプライベートリポジトリを操作する場合や、変更を `push` する場合は、アクセストークンなどを使った認証設定が必要です。ノートブック内に認証情報を直接記述するのは避け、Colabのシークレット機能などを利用するのが安全です。
- セッション終了時にファイルは失われるため、重要なデータやコードはGoogle Driveに保存するか、Gitでリモートリポジトリに `push` しておきましょう。
3. データファイルの整理と分析準備
ダウンロードしたデータや生成したファイルを整理・確認するためにLinuxコマンドが役立ちます。
# ダウンロードしたデータディレクトリの確認
!ls -lh data/
# ファイルの種類を確認
!file data/image.jpg
# ファイルの行数やサイズを確認
!wc -l data/labels.txt
!du -sh dataset/
# 特定のパターンを含むファイルを検索
!grep -r 'class_A' dataset/annotations/
# 最近変更されたファイルを探す
!find . -name '*.csv' -mtime -1
# 不要になった一時ファイルを削除
!rm -rf temp_output/
重要な注意点:
- Colabのストレージ容量には限りがあります。不要になった中間ファイルや大きなデータセットは適宜 `rm` コマンドで削除し、容量を確保することが重要です。
4. ファイルの圧縮と展開
処理結果やデータセットを圧縮してGoogle Driveに保存したり、逆にDriveからダウンロードした圧縮ファイルを展開したりします。
# 結果ディレクトリを圧縮して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
重要な注意点:
- 大きなファイルを `cp` でDriveにコピー/移動すると時間がかかる場合があります。
- 圧縮形式 (`.tar.gz`, `.zip` など) は、展開する環境や目的に合わせて選択します。
5. ネットワーク接続の診断 (限定的)
Colab環境から外部のサーバーへの基本的な接続性を確認できます。
# 特定のホストへの接続を確認
!ping -c 4 google.com
# APIエンドポイントへの疎通確認 (HTTPレベル)
!curl -I https://api.example.com/status
重要な注意点:
- Colab環境のネットワーク構成は特殊なため、ローカル環境と同じように詳細なネットワーク診断ができるわけではありません。基本的な疎通確認程度に留まります。