Part 2: 開発ツール基礎
Chapter 12: Linux コマンド実践
開発で頻出する Linux コマンドの活用
Chapter 12: Linux コマンド実践
ターミナル基礎(Part 1)では ls、cd、mkdir などの基本コマンドを学びました。この章ではソフトウェア開発の現場で実際によく使うコマンドを実践的に学びます。
12.1 ファイル操作
コピー(cp)
# ファイルをコピー
cp original.txt copy.txt
# フォルダごとコピー(-r = recursive: 再帰的に)
cp -r src/ backup/
# コピー時に確認を求める(-i = interactive)
cp -i important.txt /tmp/移動・名前変更(mv)
# ファイルを移動
mv old-location.txt new-location/
# ファイル名を変更
mv old-name.txt new-name.txt
# 複数ファイルをまとめて移動
mv *.log /var/log/old/削除(rm)
# ファイルを削除
rm file.txt
# 確認なしで削除(-f = force)
rm -f file.txt
# フォルダごと削除(-r = recursive)
rm -r old-folder/
# ※ rm -rf / は絶対に実行しないこと(全ファイルが消える)注意:
rmで削除したファイルはゴミ箱に入りません。永久に消えます。特にrm -rfは慎重に使ってください。
ファイルを探す(find)
# 名前でファイルを検索
find . -name "*.log"
# ./logs/app.log
# ./logs/error.log
# 特定のディレクトリ以下を検索
find /var/log -name "*.log"
# 更新日時で検索(7日以内に更新されたファイル)
find . -mtime -7
# ファイルサイズで検索(1MB以上のファイル)
find . -size +1M12.2 テキスト検索・処理
テキストを検索する(grep)
grep はファイルの中から特定の文字列を含む行を探すコマンドです。
# ファイル内を検索
grep "error" app.log
# 2024-03-01 10:00:00 [error] Database connection failed
# 2024-03-01 10:05:00 [error] Timeout occurred
# 大文字小文字を区別しない(-i)
grep -i "ERROR" app.log
# 行番号を表示(-n)
grep -n "error" app.log
# 42: [error] Database connection failed
# 再帰的にフォルダ内を検索(-r)
grep -r "TODO" src/
# マッチした行の前後を表示(-A: 後ろ, -B: 前, -C: 前後)
grep -A 3 "error" app.log # エラー行の後ろ3行も表示テキストを置換する(sed)
# 文字列を置換(s/元の文字/新しい文字/)
sed 's/Hello/こんにちは/' greeting.txt
# ファイルを直接書き換える(-i)
sed -i 's/http:/https:/g' config.txt
# g = global: 行内の全マッチを置換
# 特定の行を削除(例: 3行目を削除)
sed '3d' file.txt
# コメント行(#で始まる行)を削除
sed '/^#/d' config.txtデータを加工する(awk)
# CSVの特定列を抽出($1 = 1列目, $2 = 2列目...)
awk -F',' '{print $1, $3}' data.csv
# 条件に合う行だけ表示(2列目が100以上の行)
awk '$2 >= 100' scores.txt
# 合計を計算
awk '{sum += $1} END {print sum}' numbers.txt12.3 パイプとリダイレクト
パイプ(|)
パイプはコマンドの出力を別のコマンドの入力につなぐ仕組みです。
# ls の結果を grep に渡す(.js ファイルだけ表示)
ls -la | grep ".js"
# ログファイルからエラー行だけ抽出して行数を数える
cat app.log | grep "error" | wc -l
# プロセス一覧から特定のプロセスを探す
ps aux | grep "node"
# コマンドの組み合わせ例
cat access.log | grep "404" | awk '{print $7}' | sort | uniq -c | sort -rn | head -10
# → 404エラーのURLを集計してアクセス数順に上位10件を表示リダイレクト
# コマンドの出力をファイルに保存(上書き)
ls -la > file-list.txt
# コマンドの出力をファイルに追記
echo "新しいログ" >> app.log
# エラー出力をファイルに保存
command 2> error.log
# 標準出力とエラー出力を両方保存
command > output.log 2>&1
# 入力をファイルから受け取る
sort < unsorted.txt12.4 環境変数と PATH
環境変数
環境変数はプログラムが参照する設定値です。
# 環境変数を表示
echo $HOME # /Users/yamada
echo $USER # yamada
echo $PATH # /usr/local/bin:/usr/bin:/bin:...
# 全環境変数を一覧表示
env
# 環境変数を設定(このターミナルセッションのみ有効)
export API_KEY="secret-key-123"
echo $API_KEY # secret-key-123PATH とは
PATH はコマンドを探す場所のリストです。コマンドを打つと、PATHに登録されたフォルダを順番に検索します。
# PATH の内容を見やすく表示
echo $PATH | tr ':' '\n'
# /usr/local/bin
# /usr/bin
# /bin
# /usr/sbin
# コマンドがどこにあるか確認
which python3 # /usr/bin/python3
which node # /usr/local/bin/nodePATH に追加する
# ~/.zshrc(または ~/.bashrc)に追記
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
# 設定を反映
source ~/.zshrc12.5 権限(chmod、chown)
Linuxではすべてのファイルに**権限(パーミッション)**が設定されています。
# ファイルの権限を確認
ls -la
# -rw-r--r-- 1 yamada staff 1234 Mar 1 10:00 file.txt
# ↑ ここが権限情報権限の読み方:
- rw- r-- r--
│ │ │ └── その他ユーザーの権限
│ │ └────── グループの権限
│ └────────── ファイル所有者の権限
└──────────── ファイルの種類(- = ファイル, d = ディレクトリ)
r = 読み取り(read)
w = 書き込み(write)
x = 実行(execute)権限を変更する(chmod)
# スクリプトに実行権限を付与
chmod +x script.sh
# 数値で権限を設定(よく使う例)
chmod 644 file.txt # rw-r--r-- (一般的なファイル)
chmod 755 script.sh # rwxr-xr-x (実行可能ファイル)
chmod 600 secret.key # rw------- (秘密鍵など)所有者を変更する(chown)
# ファイルの所有者を変更
chown yamada file.txt
# 所有者とグループを変更
chown yamada:developers file.txt
# フォルダ以下を再帰的に変更
chown -R yamada:developers /var/www/12.6 プロセス管理
プロセスを確認する(ps)
# 実行中のプロセスを表示
ps aux
# USER PID %CPU %MEM VSZ RSS COMMAND
# yamada 1234 0.1 0.5 12345 6789 node server.js
# 特定のプロセスを探す
ps aux | grep "node"
# プロセスをリアルタイムで監視
top
# または(より見やすい)
htopプロセスを終了する(kill)
# プロセスIDで終了(PIDは ps で確認)
kill 1234
# 強制終了
kill -9 1234
# プロセス名で一括終了
pkill nodeバックグラウンド実行
# バックグラウンドで実行(& をつける)
python server.py &
# [1] 1234 ← プロセスIDが表示される
# バックグラウンドジョブを確認
jobs
# [1]+ Running python server.py
# バックグラウンドのジョブをフォアグラウンドに戻す
fg 1
# Ctrl+C で終了、Ctrl+Z でバックグラウンドに送る12.7 SSH 接続の基本
SSH(Secure Shell)はネットワーク越しに別のマシンにコマンドを送る仕組みです。クラウドサーバーの操作によく使います。
# SSHで接続(ユーザー名@サーバーのIPアドレスまたはホスト名)
ssh yamada@192.168.1.100
# 鍵ファイルを指定して接続
ssh -i ~/.ssh/my-server-key.pem ec2-user@54.123.45.67
# SSHで特定のコマンドを実行(接続せずに)
ssh yamada@server.example.com "ls -la"~/.ssh/config で設定を簡略化
# ~/.ssh/config に追記
Host myserver
HostName 192.168.1.100
User yamada
IdentityFile ~/.ssh/my-key
Host production
HostName 54.123.45.67
User ec2-user
IdentityFile ~/.ssh/aws-key.pem# 設定後は短縮形で接続できる
ssh myserver
ssh productionSCP でファイルを転送
# ローカル → リモートにファイルを転送
scp local-file.txt yamada@server:/home/yamada/
# リモート → ローカルにファイルを転送
scp yamada@server:/var/log/app.log ./
# フォルダごと転送
scp -r local-folder/ yamada@server:/home/yamada/まとめ
| カテゴリ | コマンド | 主な用途 |
|---|---|---|
| ファイル操作 | cp, mv, rm, find | ファイルのコピー・移動・削除・検索 |
| テキスト処理 | grep, sed, awk | ログ解析、テキスト置換、集計 |
| パイプ | ` | , >, >>` |
| 環境変数 | export, $PATH | 設定値の管理 |
| 権限 | chmod, chown | ファイルのアクセス制御 |
| プロセス | ps, kill | プロセスの確認・終了 |
| SSH | ssh, scp | リモートサーバー操作 |
これらのコマンドは組み合わせることで強力な処理が実現できます。ぜひターミナルで実際に試してみてください。