Google ColaboratoryでのLinuxコマンド活用ガイド
Colabでのコマンド実行
コマンドの前に!を付けることで,Linuxコマンドを実行できる。
!ls
!pwd
!pip install numpy
Colabのランタイムは一時的である。ランタイムがリセットされると,/content/以下のファイルやインストール済みパッケージは消去される。継続して使用するデータはGoogle Driveに保存する。ランタイムがリセットされる条件の詳細はセッション切断のリスクで説明している。
基本的なファイル・ディレクトリ操作
pwd - カレントディレクトリの表示
カレントディレクトリ(現在作業しているディレクトリ)のフルパスを表示する。
!pwd
ls - ファイルとディレクトリの一覧表示
ディレクトリ内のファイルとディレクトリを一覧表示する。引数を省略するとカレントディレクトリが対象となる。
!ls
!ls -l # 詳細情報を表示
!ls -lh # サイズを読みやすい形式で表示
!ls -a # 隠しファイルも表示
cd - ディレクトリの移動
カレントディレクトリを変更する。Colabでは%cdマジックコマンドを使用する。!cdは別プロセス(サブシェル)で実行され,コマンド終了とともにそのプロセスが終了するため,カレントディレクトリの変更がノートブックに反映されない。
%cd /content/drive/MyDrive/ # このパスはS03でGoogle Driveをマウントした後に利用可能となる
%cd dataset
%cd .. # 親ディレクトリへ移動
mkdir - ディレクトリの作成
新しいディレクトリを作成する。-pオプションを指定すると,存在しない親ディレクトリも含めて一括作成できる。
!mkdir output
!mkdir -p data/train/images # 親ディレクトリも同時に作成
cat - ファイル内容の表示
ファイルの内容を画面に表示する。設定ファイルやログの内容を確認する際に使用する。
!cat config.txt
!cat data/labels.txt
cp - ファイルのコピー
ファイルまたはディレクトリをコピーする。ディレクトリをコピーする場合は-rオプションを指定する。
!cp source.txt destination.txt
!cp model.h5 /content/drive/MyDrive/backup/
!cp -r dataset/ backup_dataset/ # ディレクトリごとコピー
mv - ファイルの移動・名前変更
ファイルまたはディレクトリを移動する。同一ディレクトリ内で実行すると名前変更となる。
!mv old_name.txt new_name.txt
!mv results.csv /content/drive/MyDrive/
rm - ファイルの削除
ファイルを削除する。ディレクトリを削除する場合は-rオプションを,確認なしで削除する場合は-fオプションを指定する。削除したファイルは復元できない。特にrm -rfやワイルドカードとの併用は,意図しないファイルまで一括削除する事故につながるため,実行前に対象パスを確認すること。
!rm temp.txt
!rm -rf temp_output/ # ディレクトリごと削除
ワイルドカード - 複数ファイルの指定
*は任意の文字列に一致するワイルドカードである。複数のファイルを一括で操作できる。
!ls *.csv
!ls data/*.jpg
!rm temp_*.txt
パイプ - コマンドの連結
|(パイプ)は,あるコマンドの出力を次のコマンドの入力として渡す。複数のコマンドを組み合わせて処理する際に使用する。
!ls *.jpg | wc -l # 画像ファイル数をカウント
!cat log.txt | grep error # ログからエラー行を抽出
リダイレクト - 出力先の変更
>(リダイレクト)は,コマンドの標準出力をファイルに保存する(既存ファイルは上書きされる)。>>は既存ファイルに追記する。
!ls -l > file_list.txt # 一覧をファイルに保存
!echo "done" >> log.txt # ログに追記
Google Driveの利用
Colabのランタイムがリセットされてもデータを保持するため,Driveをマウントして使用する。初回実行時は認証画面が表示されるので,画面の指示に従ってアクセスを許可する。マウント後に/content/drive/MyDrive/が利用可能になる。マウント手順やデータ保存の詳細はGoogle Driveのマウントで説明している。
# Driveのマウント
from google.colab import drive
drive.mount('/content/drive')
# Drive内のファイル確認
!ls /content/drive/MyDrive/
# Driveとのファイルのやり取り
!cp /content/drive/MyDrive/dataset.zip .
!cp results.csv /content/drive/MyDrive/
パッケージ管理
pip - Pythonパッケージの管理
Pythonパッケージのインストールと管理を行う。pipによるパッケージ導入の詳細はパッケージのインストールを参照のこと。
!pip install numpy pandas matplotlib
!pip list # インストール済みパッケージの確認
apt-get - システムライブラリの管理
Ubuntuのパッケージ管理システム(APT)を使用して,OSレベルのシステムライブラリをインストールする。Pythonパッケージではなくシステムライブラリが必要な場合に使用する。APTの実行にはroot権限が必要だが,Colabではデフォルトユーザーがrootのためsudoは不要である(詳細は冒頭の注意を参照)。-qqオプションは出力を抑制する。インストール前にapt-get updateでパッケージ情報を更新しておく。
!apt-get update
!apt-get -qq install -y libgl1
dpkg - インストール済みパッケージの確認
システムにインストールされているパッケージを確認する。特定のライブラリがインストール済みか調べる際に使用する。
!dpkg -l # 全パッケージの一覧
!dpkg -l | grep libgl1 # 特定のパッケージを検索
データファイルの確認
cat - ファイル全体の表示
ファイルの内容を全て画面に表示する(S02参照)。小さなファイルの確認に適する。
!cat data/labels.txt
head / tail - 先頭・末尾の表示
ファイルの先頭または末尾の数行のみを表示する。大きなデータファイルやログ全体を表示せず,一部だけ確認する際に使用する。行数を省略すると10行が既定となる。-nオプションで行数を指定する。
!head data/labels.txt # 先頭10行を表示(既定)
!head -n 3 data/labels.txt # 先頭3行を表示
!tail data/labels.txt # 末尾10行を表示(既定)
!tail -n 20 training.log # 末尾20行を表示
wc - 行数・単語数のカウント
ファイルの行数,単語数,バイト数をカウントする。-lオプションは行数のみを表示する。データセットのサイズ確認に使用する。
!wc -l data/labels.txt
!ls *.csv | wc -l # ファイル数のカウント
grep - テキスト検索
指定したパターンに一致する行を検索して表示する。ログファイルからエラーを検索する際などに使用する。
!grep 'error' training.log
!grep -i 'warning' output.txt # 大文字小文字を区別しない
!grep -r 'class_A' dataset/ # ディレクトリ内を再帰的に検索
df / du - ディスク容量の確認
ディスクの空き容量や,ファイル・ディレクトリの使用量を確認する。Colabはストレージ容量が限られるため,データセット展開前後の容量確認に使用する。-hオプションは読みやすい形式で表示する。
!df -h # ディスク全体の空き容量を表示
!du -sh dataset/ # 指定ディレクトリの合計使用量を表示
ファイルの圧縮と展開
zip / unzip
ZIP形式でファイルを圧縮・展開する。
# 展開
!unzip dataset.zip
!unzip archive.zip -d target_directory/
# 圧縮
!zip -r results.zip output_files/
tar
tar.gz形式でファイルをアーカイブ・圧縮する。Linux環境で広く使用される形式であり,ファイルの権限情報も保持できる。
# 圧縮
!tar -czvf results.tar.gz output_files/
# 展開
!tar -xzvf dataset.tar.gz
ファイルのダウンロードとネットワーク
wget
URLからファイルをダウンロードする。-Oオプションで保存時のファイル名を指定できる。
!wget https://example.com/dataset.zip
!wget -O custom_name.zip https://example.com/file.zip
curl
URLを指定してデータを転送する。ファイルのダウンロードやAPIへのリクエストに使用する。-OはURL上のファイル名で保存し,-oは指定した名前で保存する。
!curl -O https://example.com/file.zip
!curl -o output.html https://example.com
gdown - Google Driveからのダウンロード
Google Drive上の共有ファイルをダウンロードする。大容量ファイルではGoogle側のウイルススキャン確認ページによりダウンロードに失敗する場合があり,その際は--fuzzyオプション(共有URLをそのまま渡せる形式)を用いる。
!pip install --upgrade gdown
!gdown --fuzzy https://drive.google.com/file/d/YOUR_FILE_ID/view
ping - ネットワーク接続の確認
指定したホストとの通信が可能か確認する。Colab環境ではICMP(pingが使用する通信規約)が制限され応答が得られない場合があり,その場合はcurlで疎通を確認する。
!ping -c 4 google.com
!ping -c 4 api.example.com
Git操作
Gitを使用してバージョン管理を行う。リポジトリのクローンから基本操作までをColab上で実行できる。commitにはユーザー情報の設定が必須であり,未設定だとcommitが失敗する(fatal: unable to auto-detect email address)。git pushのHTTPS認証はパスワードではなくPersonal Access Token(PAT)が必要である(GitHubは2021年8月にパスワード認証を廃止した)。なお,URLにトークンを直接埋め込む方法は簡便だが,トークンがシェル履歴やノートブックの出力,.git/configに平文で残る点に注意する。共有するノートブックには実トークンを記載しないこと。
# リポジトリのクローン
!git clone https://github.com/user/repository.git
%cd repository
# commit前にユーザー情報を設定(未設定だとcommitが失敗する)
!git config --global user.email "you@example.com"
!git config --global user.name "Your Name"
# 基本操作
!git status
!git add .
!git commit -m "Update from Colab"
# pushはPATによる認証が必要(URLにトークンを埋め込む。トークンの取り扱いに注意)
!git push https://YOUR_TOKEN@github.com/user/repository.git main
実践例
作業フローに沿った使用例を,演習形式で示す。
演習1:データセットの準備
テーマ:データセットのダウンロードから作業ディレクトリ作成までの流れを実行する。
手順:
# Driveをマウント(初回実行時は認証画面が表示される)
from google.colab import drive
drive.mount('/content/drive')
# データセットをダウンロードして展開
!wget https://example.com/dataset.zip
!unzip dataset.zip
# ファイル数を確認(パイプでコマンドを連結)
!ls dataset/images/*.jpg | wc -l
# 展開後のディスク使用量を確認
!du -sh dataset/
# 作業ディレクトリを作成
!mkdir -p output/models output/logs
ヒント:wgetのダウンロード先とunzipの展開先はいずれもカレントディレクトリである。%cdで位置を確認しておくとよい。
考察ポイント:wc -lで表示された画像枚数が想定どおりか,du -shで表示された使用量がColabの空き容量に収まっているかを確認する。
演習2:訓練結果の保存
テーマ:作業結果を一覧化し,圧縮してDriveに保存する。
手順:
# 結果をリスト化(リダイレクトでファイルに保存)
!ls -lh output/ > file_list.txt
# 結果を圧縮してDriveに保存
!tar -czvf results.tar.gz output/
!cp results.tar.gz /content/drive/MyDrive/
ヒント:Driveに保存したファイルはランタイムがリセットされても残る。/content/に置いたままだと消去される。
考察ポイント:file_list.txtの内容と,Drive上に保存されたresults.tar.gzのサイズを照合し,保存が完了したかを確認する。
演習3:環境の確認
テーマ:割り当てられたパッケージ・計算資源・容量・ネットワークを確認する。
手順:
# インストール済みパッケージの確認
!pip list
!dpkg -l | grep libgl1
# 割り当てられた計算資源の確認(GPU割り当て時に有効)
!nvidia-smi
# ディスクの空き容量を確認
!df -h
# ネットワーク接続の確認(ICMP制限時はcurlで確認する)
!ping -c 4 google.com
ヒント:nvidia-smiはGPUが割り当てられているときだけ情報を表示する。GPUなしのランタイムではエラーになる。GPUの有効化方法はGPUの有効化で説明している。
考察ポイント:df -hの空き容量とnvidia-smiのGPUの有無から,これから行う処理にこのランタイムが足りるかを判断する。
演習4:Gitとの連携
テーマ:リポジトリをクローンし,訓練後に結果をコミット・プッシュする。
手順:
# リポジトリをクローン
!git clone https://github.com/user/ml-project.git
%cd ml-project
# ユーザー情報を設定(未設定だとcommitが失敗する)
!git config --global user.email "you@example.com"
!git config --global user.name "Your Name"
# 必要なパッケージをインストール
!pip install -r requirements.txt
# 訓練実行
!python train.py
# 結果をコミット
!git add results/
!git commit -m "Add training results"
# pushはPATによる認証が必要(URLにトークンを埋め込む。トークンの取り扱いに注意)
!git push https://YOUR_TOKEN@github.com/user/ml-project.git main
ヒント:git configのユーザー情報は--global付きで設定すれば,ランタイムが続く間は再設定不要である。YOUR_TOKENは自分のPATに置き換える。
考察ポイント:git statusでコミット対象が想定どおりか,push後にGitHub上のリポジトリへ反映されたかを確認する。