生成AI研修
Part 2: 開発ツール基礎

Chapter 12: Linux コマンド実践

開発で頻出する Linux コマンドの活用

Chapter 12: Linux コマンド実践

ターミナル基礎(Part 1)では lscdmkdir などの基本コマンドを学びました。この章ではソフトウェア開発の現場で実際によく使うコマンドを実践的に学びます。

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 +1M

12.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.txt

12.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.txt

12.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-123

PATH とは

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/node

PATH に追加する

# ~/.zshrc(または ~/.bashrc)に追記
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

# 設定を反映
source ~/.zshrc

12.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 production

SCP でファイルを転送

# ローカル → リモートにファイルを転送
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プロセスの確認・終了
SSHssh, scpリモートサーバー操作

これらのコマンドは組み合わせることで強力な処理が実現できます。ぜひターミナルで実際に試してみてください。

On this page