コンテンツにスキップ

1.1.2 ターミナルの基本操作

ターミナルのパスとコマンド実行の関係図

このページを終えたら、この evidence card を残します。

コマンド
実行した正確なターミナルコマンド
作業ディレクトリ
pwd/現在のフォルダと重要ファイルを列挙
出力
コマンド出力または結果のスクリーンショットをコピーしたもの
失敗確認
間違ったパス、コマンド不足、権限の問題、またはシェル不一致
期待される成果
コマンドと結果を並べて示す再現可能なターミナル操作

この節から、いよいよ本格的にターミナルを使っていきます。まずは「今どのディレクトリにいるのか」を判断できるようになり、そのうえでよく使うファイル・ディレクトリ・パス・パイプ・環境変数の操作を身につけます。これは、後で Python を実行したり、依存関係を管理したり、Git を使ったりするための土台になります。

  • 日常操作の 90% をカバーする 10+ 個の基本コマンドを身につける
  • 絶対パスと相対パスを理解する
  • パイプとリダイレクトの使い方を学ぶ
  • 環境変数の考え方を理解する

まず、ターミナルを見つけて開きましょう。

オペレーティングシステム開き方
Windows”PowerShell” または “Windows Terminal” を検索して開く
macOSCommand + 空格 で “Terminal” を検索し、Enter で開く
LinuxCtrl + Alt + T

ウィンドウが開き、点滅するカーソルが表示されていれば、そこがターミナルです。ここにコマンドを入力していきます。


第1部:パス——今どこにいる?

Section titled “第1部:パス——今どこにいる?”

コマンドラインにはグラフィカルな画面がないので、「どのフォルダの中のものを操作するか」を文字で伝える必要があります。これがパスです。

Terminal window
pwd

pwd = Print Working Directory(現在の作業ディレクトリを表示)

出力は次のようになります。

/Users/zhangsan # macOS
/home/zhangsan # Linux
C:\Users\zhangsan # Windows PowerShell

これが今いるフォルダで、作業ディレクトリと呼びます。

/Users/zhangsan/projects/ai-course/data/train.csv

これは絶対パスです。ルートディレクトリ / から始まり、ファイルの場所を完全に表しています。現実の住所でいうと、「中国北京市海淀区中関村大街1号」のような、全部書いた住所です。

data/train.csv

これは相対パスです。今いるフォルダを基準にしたパスです。もし今 /Users/zhangsan/projects/ai-course/ にいるなら、data/train.csv は上の絶対パスと同じ場所を指します。現実でいえば「となりの建物の2階」のような言い方です。

記号意味
/ルートディレクトリ(すべてのファイルの起点)cd /
~現在のユーザーのホームディレクトリcd ~cd /Users/zhangsan と同じ
.現在のディレクトリ./run.py は現在のディレクトリにある run.py を表す
..1つ上のディレクトリcd .. で1つ上へ戻る

理解を助ける練習です。

Terminal window
# もし /Users/zhangsan/projects/ai-course にいると仮定する
pwd # 出力: /Users/zhangsan/projects/ai-course
cd .. # 1つ上へ戻る
pwd # 出力: /Users/zhangsan/projects
cd ~ # Home ディレクトリへ戻る
pwd # 出力: /Users/zhangsan
cd ~/projects/ai-course # 絶対パス風に戻る
pwd # 出力: /Users/zhangsan/projects/ai-course

以下のコマンドは、毎日のように使います。まずは実際に入力してみましょう。暗記する必要はありません。何度も使ううちに自然と覚えられます。

cd — ディレクトリを切り替える

Section titled “cd — ディレクトリを切り替える”
Terminal window
cd projects # projects フォルダに入る
cd .. # 1つ上へ戻る
cd ~ # Home ディレクトリへ戻る
cd ~/Desktop # デスクトップへ移動
cd - # 直前にいたディレクトリへ戻る(とても便利!)
Terminal window
ls # 現在のディレクトリのファイルとフォルダを表示
ls -l # 詳細表示(サイズ、日付、権限を表示)
ls -a # 隠しファイル(. で始まるファイル)も表示
ls -la # 2つを組み合わせる
ls projects/ # projects フォルダの中身を表示
Terminal window
mkdir my-project # フォルダを1つ作成
mkdir -p a/b/c # 複数階層のフォルダをまとめて作成
Terminal window
touch hello.py # 空の Python ファイルを作成
touch README.md # 空の Markdown ファイルを作成
Terminal window
cp file.txt file_backup.txt # ファイルをコピー
cp file.txt ~/Desktop/ # デスクトップへコピー
cp -r my-folder/ my-folder-backup/ # フォルダ全体をコピー(-r は再帰的)
Terminal window
mv old_name.py new_name.py # ファイル名を変更
mv file.txt ~/Desktop/ # デスクトップへ移動
mv project/ ~/projects/ # フォルダを移動
Terminal window
rm file.txt # ファイルを削除
rm -r my-folder/ # フォルダとその中身をすべて削除
Terminal window
cat file.txt # ファイル全体の内容を表示(小さいファイル向き)
head file.txt # 最初の10行を表示
head -20 file.txt # 最初の20行を表示
tail file.txt # 最後の10行を表示
tail -f log.txt # ファイル更新をリアルタイムで追う(ログ確認に便利)
Terminal window
grep "error" log.txt # "error" を含む行を検索
grep -r "import torch" ./ # 現在のディレクトリ配下のすべてのファイルから検索
grep -n "def train" model.py # 行番号付きで検索結果を表示

grep は、今後のデバッグでとても役立つ味方です。たくさんのファイルの中から、ある関数や変数がどこで使われているかをすばやく見つけられます。

Terminal window
clear # 画面をきれいにする(または Ctrl + L)
history # これまで実行したコマンドを表示
which python # python コマンドの場所を確認(環境の問題調査でよく使う)
echo "hello" # 文字を表示する

ターミナルのパイプ、リダイレクト、PATH のデータ流

この2つは、コマンドラインを本当に強力にする仕組みです。

パイプの意味は、「前のコマンドの出力を、次のコマンドの入力として渡す」ことです。

Terminal window
# すべてのファイルを一覧表示し、その中から .py ファイルを探す
ls -la | grep ".py"
# 履歴の中から使った git コマンドを探す
history | grep "git"
# 現在のディレクトリにある Python ファイルの数を数える
ls *.py | wc -l

パイプは、工場の流れ作業のようなものだと考えるとわかりやすいです。ある工程の出力が、次の工程の材料になります。

コマンドの出力を画面に表示する代わりに、ファイルに保存できます。

Terminal window
# ls の結果を filelist.txt に保存する(上書き)
ls -la > filelist.txt
# 結果をファイルの末尾に追加する(上書きしない)
echo "新しい1行" >> notes.txt
# Python スクリプトの出力をファイルに保存する
python train.py > training_log.txt

> は上書き、>> は追記です。実務では、学習ログの保存によく使います。

Terminal window
# スクリプトを実行し、通常出力とエラー出力の両方をログファイルに保存する
python train.py > log.txt 2>&1
# 1つの Python ファイルに何行コードがあるか数える
cat model.py | wc -l
# "TODO" を含むファイルを見つけ、その件数を数える
grep -r "TODO" ./ | wc -l

環境変数は、システムに保存されている「全体設定」のようなものです。多くのプログラムは、これを読み取って動作を決めます。

Terminal window
# すべての環境変数を表示
env
# 特定の環境変数の値を見る
echo $PATH
echo $HOME

PATH は、ターミナルでコマンドを入力したとき、システムがどのディレクトリを見に行ってそのコマンドを探すかを決めます。

/Users/zhangsan/miniconda3/bin
echo $PATH

これらのパスは : で区切られています。python と入力すると、システムはこれらのディレクトリを順に探し、最初に見つかった python を実行します。

command not found(コマンドが見つからない)というエラーが出たら、多くの場合、そのプログラムが PATH に含まれるどのディレクトリにもないことが原因です。

Terminal window
# 一時的に設定する(今開いているターミナルウィンドウでのみ有効)
export MY_API_KEY="your_api_key_here"
echo $MY_API_KEY # 出力: your_api_key_here
# 確認:ターミナルを閉じて再度開くと MY_API_KEY は消える
Terminal window
# 永続的に設定する(設定ファイルに書き込む)
# macOS/Linux で zsh を使う場合:
echo 'export MY_API_KEY="your_api_key_here"' >> ~/.zshrc
source ~/.zshrc # すぐに反映
# bash を使う場合:
echo 'export MY_API_KEY="your_api_key_here"' >> ~/.bashrc
source ~/.bashrc

ターミナルを開いて、次の操作を順番に行ってみましょう。

Terminal window
# 1. 今どこにいるか確認
pwd
# 2. Home ディレクトリへ移動
cd ~
# 3. 学習用プロジェクトフォルダを作成
mkdir -p ai-study/ch01-tools/terminal-practice
# 4. そのフォルダへ移動
cd ai-study/ch01-tools/terminal-practice
# 5. いくつかファイルを作成
touch hello.py notes.txt data.csv
# 6. 作成されたファイルを確認
ls -la
# 7. ファイルに少し書き込む
echo "print('Hello, AI!')" > hello.py
echo "1日目の学習メモ" > notes.txt
# 8. ファイルの内容を確認
cat hello.py
cat notes.txt
# 9. notes.txt をコピーしてバックアップを作る
cp notes.txt notes_backup.txt
# 10. バックアップが成功したか確認
ls
# 11. notes.txt に内容を追加
echo "cd, ls, mkdir, touch, cp, cat コマンドを学んだ" >> notes.txt
cat notes.txt
# 12. "AI" を含むファイルを検索
grep -r "AI" ./
# 13. 1つ上のディレクトリへ戻る
cd ..
pwd

すべての手順がうまくいけば、おめでとうございます。これでコマンドラインの最も重要な操作を身につけました。

操作例と確認ポイント
  1. 最後の pwd は、ai-course-practice の 1 つ上のフォルダを指しているはずです。
  2. ls では hello.pynotes.txtnotes_backup.txt が確認できます。
  3. cat notes.txt には最初のメモと、>> で追記したコマンド一覧の両方が表示されます。> を使うと上書きされます。
  4. grep -r "AI" ./hello.pyHello, AI! を見つけるはずです。
  5. うまくいかない場合は、まず pwdls で今いる場所とファイル名を確認します。多くの失敗はコマンドではなく場所のずれです。

コマンド用途よく使う引数
pwd現在のディレクトリを表示
cdディレクトリを切り替える.. 上へ、~ Home、- 前回
lsファイルを一覧表示-l 詳細、-a 隠しファイル
mkdirフォルダを作る-p 多階層作成
touch空ファイルを作る
cpコピーする-r フォルダをコピー
mv移動/名前変更
rm削除する-r フォルダ削除
catファイルを見る
head / tail先頭/末尾を見る-n 数字 で行数指定
grepテキスト検索-r 再帰的、-n 行番号
echo文字を表示
clear画面を消去
historyコマンド履歴
whichコマンドの場所を確認