Linux基本コマンドとその活用法
【概要】Linuxは、サーバーからクラウド環境、データサイエンスプラットフォームに至るまで、現代のITインフラを支える重要なOSである。本稿では、Ubuntu 24.04環境を前提とし、基本的なファイル操作から、テキスト処理、プロセス管理、ネットワーク操作、バージョン管理に至るまで、Linux環境で使用される必須コマンドを解説する。
【目次】
Linuxとシェル入門
Linuxを操作する上で基本となるシェルと、コマンド実行の仕組みについて解説する。
シェルとは
シェルは、ユーザーが入力したコマンドを解釈し、OS(カーネル)に伝えて実行させるプログラムである。Ubuntu 24.04では、デフォルトでbash (Bourne Again SHell) が使われている。
環境変数PATHとコマンド検索
シェルは、環境変数PATHに設定されたディレクトリ群から実行するコマンドを自動的に検索する。これにより、ユーザーはコマンドの格納場所を知らなくても、コマンド名だけで実行できる。
echo $PATH
export PATH="$HOME/bin:$PATH" # 一時的な追加。永続化するには ~/.bashrc 等に追記
現在の作業ディレクトリと./の意味
ユーザーが現在作業しているディレクトリをカレントディレクトリと呼ぶ。カレントディレクトリにあるプログラムファイルを実行する場合は、セキュリティ上の理由から、ファイル名の前に./を付けて、カレントディレクトリにあることを明示する必要がある。
pwd          # 現在の作業ディレクトリを表示
cd works     # worksディレクトリに移動
./my_program # カレントディレクトリの my_program を実行
which - コマンドのパスを表示
指定したコマンドの実行ファイルが、どのディレクトリに存在するかを表示する。
which ls       # lsコマンドのパスを表示 (例: /usr/bin/ls)
which python3  # 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 # 親ディレクトリが存在しない場合、それらもまとめて作成
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行を表示
tail - ファイルの末尾部分を表示
ファイルの末尾から指定した行数を表示する。デフォルトは10行である。ログファイルの監視によく使われる。
tail file.txt
tail -n 20 file.txt # 末尾20行を表示
tail -f log.txt    # ファイルへの追記をリアルタイムで表示。Ctrl+Cで終了
cp - ファイルやディレクトリのコピー
ファイルやディレクトリをコピーする。
cp source.txt destination.txt   # ファイルをコピー
cp file1.txt file2.txt target_dir/ # 複数のファイルをディレクトリにコピー
cp -r sourcedir/ destdir/       # ディレクトリを中身ごと再帰的にコピー
cp -i source.txt dest.txt      # 上書き前に確認を求める
mv - ファイルやディレクトリの移動・名前変更
ファイルやディレクトリを移動させたり、名前を変更したりする。
mv source.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                  # 確認なしで強制的に削除
シェルの強力な機能:ワイルドカード、リダイレクト、パイプ
シェルが提供するこれらの機能を活用することで、コマンドの操作をより柔軟に行うことができる。
ワイルドカード - ファイル名のパターンマッチング
複数のファイルを一度に指定したい場合に便利な特殊な記号である。*は0文字以上の任意の文字列に一致し、?は任意の1文字に一致する。[]は角括弧内の任意の1文字に一致する。
ls *.log
cp chapter?.md docs/
rm report[1-3].txt # report1.txt、report2.txt、report3.txt に一致
標準入出力とリダイレクト - コマンドの入出力先の変更
Linuxのコマンドは通常、標準入力 (stdin)、標準出力 (stdout)、標準エラー出力 (stderr) という3つのストリームを持つ。
リダイレクトは、これらのストリームの入出力先をファイルなどに変更する機能である。> fileは標準出力をfileに上書き保存し、>> fileは標準出力をfileの末尾に追記する。< fileはfileの内容を標準入力としてコマンドに渡し、2> fileは標準エラー出力をfileに保存する。2>&1は標準エラー出力を標準出力と同じ場所に向ける。
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' を検索
grep -r 'function setup()' ./src  # ./src ディレクトリ以下を再帰的に検索
ps aux | grep 'nginx'             # psコマンドの出力から 'nginx' を含む行を検索
grep -v '^#' config.conf          # '#' で始まる行を除外して表示
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行目を削除して表示
awk - パターン処理言語
テキストデータをフィールド(列)単位で処理するプログラミング言語である。特定の列の抽出、計算、書式設定などに使われる。
ls -l | awk '{print $9, $5}'          # ls -l の出力から9番目(ファイル名)と5番目(サイズ)のフィールドを表示
awk -F ':' '{print $1}' /etc/passwd   # ':' を区切り文字として /etc/passwd の1番目のフィールド(ユーザー名)を表示
awk '$3 > 1024 {print $0}' data.log  # data.log の3番目のフィールドが1024より大きい行全体を表示
sort - 行の並び替え
テキストファイルの行をアルファベット順や数値順に並び替える。
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番目のフィールドでソート
uniq - 重複行の処理
隣接する重複行を検出し、処理する(除去、カウントなど)。通常、事前にsortで並び替えてから使う。
sort data.txt | uniq               # data.txt をソート後、重複行を除去
sort access.log | uniq -c          # 重複する行の出現回数をカウント
sort words.txt | uniq -d           # 重複している行のみを表示
wc - 単語数、行数、バイト数のカウント
ファイル内の行数、単語数、バイト数をカウントする。
wc report.txt                    # report.txt の行数、単語数、バイト数を表示
wc -l *.py                       # 拡張子 .py の全ファイルの行数を表示
ls /bin | wc -l                  # /bin ディレクトリ内のファイル数をカウント
アーカイブと圧縮
複数のファイルを一つにまとめたり(アーカイブ)、ファイルサイズを小さくしたり(圧縮)する。バックアップやファイル転送に使う。
tar - ファイルのアーカイブ
複数のファイルやディレクトリを一つの.tarファイルにまとめたり、アーカイブファイルから元のファイルやディレクトリを展開したりする。圧縮機能も併せ持つ。
# アーカイブ作成
tar -cvf archive.tar file1.txt dir1/     # file1.txtとdir1/を archive.tar にまとめる
tar -czvf archive.tar.gz documents/     # documents/をgzip形式で圧縮しながらまとめる
tar -cjvf backup.tar.bz2 /data          # /dataをbzip2形式で圧縮しながらまとめる
# アーカイブ展開
tar -xvf archive.tar                   # archive.tar を展開する
tar -xzvf archive.tar.gz               # gzip圧縮された archive.tar.gz を展開
tar -xjvf backup.tar.bz2 -C /tmp/      # bzip2圧縮された backup.tar.bz2 を /tmp/ ディレクトリに展開
# 内容表示
tar -tvf archive.tar                   # archive.tar の内容一覧を表示
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 を残して圧縮
gunzip -k image.jpg.gz  # 元のファイル image.jpg.gz を残して解凍
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 # 指定したディレクトリに展開
プロセス管理
システム上で実行中のプログラム(プロセス)の状態を確認したり、制御したりする。
プロセス状態の確認
ps - プロセス状態のスナップショット表示
コマンド実行時点でのプロセス状態を表示する。
ps aux # 全ユーザーの全プロセスを詳細表示
ps -ef # 全プロセスを詳細表示
ps aux | grep 'chrome' # 特定のプロセスを検索
top - プロセス状態のリアルタイム表示
CPU使用率、メモリ使用量などのシステムリソース状況をリアルタイムで更新表示する。qキーで終了する。
htop - 対話的なプロセスビューアー
topより高機能で、カラー表示やマウス操作、プロセスのソート、kill操作などが対話的に行えるツールである。sudo apt install htopでインストールが必要である。
ジョブ管理
現在のシェルセッション内で実行されているジョブを管理する。jobsは現在のシェルで実行中のジョブ一覧を表示し、fg %ジョブ番号は指定したジョブをフォアグラウンド実行に戻す。bg %ジョブ番号は一時停止中のジョブをバックグラウンドで再開させ、Ctrl + Zはフォアグラウンドで実行中のプロセスを一時停止する。
プロセスの終了
kill - プロセスにシグナルを送信
プロセスID (PID) を指定して、プロセスにシグナルを送信する。
kill 1234           # プロセスID 1234 に通常の終了要求 (SIGTERM) を送る
kill -9 5678        # プロセスID 5678 を強制終了 (SIGKILL)
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 - 指定時刻にコマンドを実行
指定した時刻に一度だけコマンドを実行するように予約する。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 <ジョブ番号> # ジョブの予約を取り消す
 システム管理の基本(ユーザー、権限、パッケージ等)
システムの基本的な管理操作を行うコマンドである。多くの場合、管理者権限が必要となる。
ユーザーと権限
su - ユーザーの切り替え
他のユーザー(デフォルトはrootユーザー)に切り替える。切り替えたいユーザーのパスワードが必要である。
su -         # rootユーザーに切り替え (rootのパスワード要)
su username  # 指定したユーザーに切り替え (usernameのパスワード要)
exit         # 元のユーザーに戻る
sudo - 一時的な管理者権限でのコマンド実行
一般ユーザーが、設定ファイル(/etc/sudoers)で許可されたコマンドを一時的に管理者権限で実行する。実行時にはユーザー自身のパスワードを入力する。セキュリティ上、常にsu -でrootになるよりも、必要なコマンドだけsudoを使うことが推奨される。
sudo apt update   # apt update コマンドを管理者権限で実行
sudo -i           # rootユーザーとして対話的なシェルを開始
passwd - パスワードの変更
ユーザーアカウントのパスワードを変更する。
passwd                # 自分のパスワードを変更
sudo passwd 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  # 所有者に実行権限を追加
chmod -R 644 data_dir/ # rw-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 に再帰的に変更
システム情報
uname - システム情報の表示
OSの種類、カーネルバージョンなどのシステム情報を表示する。
uname -a # 利用可能な全ての情報を表示
lshw / lsusb / lspci - ハードウェア情報の表示
システムのハードウェア構成に関する情報を表示する。
sudo lshw -short   # ハードウェア構成の概要を表示
lsusb              # USBデバイスの一覧を表示
lspci              # PCIデバイスの一覧を表示
ディスク管理
df - ディスク空き容量の表示
ファイルシステムのマウント状況とディスク空き容量を表示する。
df -h   # 読みやすい単位 (GB、MB) で表示
du - ディスク使用量の表示
ファイルやディレクトリが使用しているディスク容量を表示する。
du -sh /path/to/dir # 指定したディレクトリの合計サイズを読みやすい単位で表示
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 ファイルをインストール
dpkg -l                   # インストール済みの全パッケージ一覧を表示
dpkg -L     # 指定したパッケージに含まれるファイル一覧を表示
dpkg -S /path/to/file     # 指定したファイルがどのパッケージに属するかを表示
 サービス管理 (Systemd)
多くのLinuxディストリビューションで採用されているsystemdシステム/サービスマネージャーを制御する。Webサーバーやデータベースなどの起動・停止・状態確認に使う。
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サービス) のログを表示
journalctl -f            # ログをリアルタイムで表示し続ける
システム終了
shutdown - システムのシャットダウン・再起動
システムを安全にシャットダウンまたは再起動する。
sudo shutdown -h now   # 直ちにシャットダウン
sudo shutdown -r now   # 直ちに再起動
sudo shutdown -h +10   # 10分後にシャットダウン
sudo shutdown -c       # 予約されたシャットダウンをキャンセル
ネットワーク操作
ネットワーク接続の確認、設定表示、データ転送などを行う。Ubuntu 24.04では、新しいipやssコマンドの使用が推奨される。
接続確認
ping - ネットワーク疎通確認
指定したホスト(IPアドレスまたはドメイン名)とのネットワーク接続が確立しているかを確認する。
ping example.com       # example.com に ICMP ECHO_REQUEST パケットを送信
ping -c 4 google.com   # google.com に4回送信して終了
ネットワーク設定と確認
ip - ネットワーク設定と情報表示
IPアドレス、ルーティング、ネットワークデバイスなどの情報を表示・設定する。
ip addr show (or ip a)     # IPアドレス情報を表示
ip link show (or ip l)     # ネットワークデバイス情報を表示
ip route show (or ip r)    # ルーティングテーブルを表示
ip neigh show (or ip n)    # ARPキャッシュテーブルを表示
ss - ソケット統計情報
ネットワーク接続、リスニングポートなどのソケット情報を表示する。
ss -tulnp                 # TCP/UDPの待ち受けポートと、それを使用しているプロセスを表示
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 というファイルに保存
curl -O https://example.com/file.zip  # URLのファイル名で保存
curl -sL https://example.com/install.sh | bash # スクリプトをダウンロードして直接bashで実行
wget - 非対話的なファイルダウンローダー
HTTP、HTTPS、FTPからファイルをダウンロードする。再帰的なダウンロードやダウンロードの中断・再開も可能である。
wget https://example.com/file.zip          # file.zip をダウンロード
wget -O newname.zip https://example.com/file.zip # newname.zip という名前で保存
wget -c https://example.com/largefile.iso # ダウンロードを途中から再開
gdown - Google Driveからのファイルダウンロード
Google Driveの共有リンクからファイルをダウンロードするツールである。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      # ポート番号を指定してログイン
ssh -i ~/.ssh/my_key user@host           # 秘密鍵ファイルを指定してログイン
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/    # ローカルディレクトリをリモートに再帰的にコピー
scp user@host:/remote/file.txt .                   # リモートファイルをカレントディレクトリにコピー
バージョン管理システム Git
ソースコードなどの変更履歴を管理するための分散型バージョン管理システムである。開発プロジェクトにおいて、複数人での共同作業や変更履歴の追跡に使うツールである。
git - 分散バージョン管理システム
基本的なワークフローは、リポジトリ準備 → ファイル編集 → 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を使用する。
# 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 repository
# Git操作
!git status
!git add .
!git commit -m "Update from Colab"
注意: 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が使える。
!ping -c 4 google.com
!curl -I https://api.example.com/status # ヘッダー情報のみ取得