Linux を使う理由
本番サーバーの多くは Linux(主に Ubuntu / RHEL / Amazon Linux)で動いています。SSH でサーバーに接続してコマンドで操作するスキルは、バックエンド・インフラ問わず必須です。
ファイル・ディレクトリ操作
# 現在地の確認
pwd # /home/user
# ディレクトリの移動
cd /var/log # 絶対パスで移動
cd .. # 1つ上へ
cd ~ # ホームディレクトリへ
cd - # 直前のディレクトリへ
# ファイル一覧
ls # 基本
ls -la # 詳細 + 隠しファイル表示
ls -lh # ファイルサイズを人間が読みやすい形式で
# ディレクトリ作成・削除
mkdir logs # ディレクトリ作成
mkdir -p a/b/c # 中間ディレクトリも含めて一括作成
rmdir empty_dir # 空のディレクトリのみ削除
rm -r logs/ # ディレクトリを再帰的に削除(注意!)
# ファイル操作
cp file.txt backup.txt # コピー
cp -r src/ dest/ # ディレクトリごとコピー
mv old.txt new.txt # リネームまたは移動
rm file.txt # 削除(復元不可!)
touch newfile.txt # 空ファイル作成 or タイムスタンプ更新
# ファイル内容の確認
cat file.txt # 全表示
less file.txt # スクロールして表示(q で終了)
head -n 20 file.txt # 先頭20行
tail -n 50 file.txt # 末尾50行
tail -f /var/log/app.log # リアルタイムで末尾を追跡(ログ監視)
ファイル検索
# ファイル名で検索
find /var/log -name "*.log" # .log ファイルを検索
find . -name "*.py" -mtime -7 # 7日以内に変更された .py ファイル
find /tmp -size +100M # 100MB 超のファイル
# ファイル内容でテキスト検索(grep)
grep "ERROR" /var/log/app.log # ERROR を含む行
grep -r "TODO" ./src/ # ディレクトリを再帰検索
grep -n "function" main.py # 行番号付き
grep -i "error" log.txt # 大文字小文字を無視
grep -v "DEBUG" log.txt # 一致しない行を表示
# パターンの組み合わせ
grep -r "password" . --include="*.py" # .py ファイルのみ検索
grep "ERROR" app.log | grep "2026-04" # パイプで絞り込み
テキスト処理
# パイプ(前のコマンドの出力を次のコマンドに渡す)
cat /var/log/app.log | grep "ERROR" | tail -20
# 行数・文字数をカウント
wc -l file.txt # 行数
wc -w file.txt # 単語数
# 並び替え・重複排除
sort names.txt # アルファベット順ソート
sort -n numbers.txt # 数値順ソート
sort -r file.txt # 逆順
uniq sorted.txt # 連続する重複行を削除(要ソート)
sort file.txt | uniq -c # 出現回数をカウント
# 列の抽出
cut -d',' -f2 data.csv # CSVの2列目を取得
awk '{print $1, $3}' log.txt # スペース区切りで1列目と3列目
# 文字列の置換
sed 's/old/new/g' file.txt # old を new に全置換して標準出力
sed -i 's/old/new/g' file.txt # ファイルを直接書き換え(注意!)
プロセス管理
# プロセス一覧
ps aux # 全プロセスを表示
ps aux | grep nginx # nginx プロセスを探す
top # CPU/メモリ使用率のリアルタイム表示
htop # top の見やすい版(要インストール)
# バックグラウンド実行
./long_task.sh & # バックグラウンドで起動
jobs # バックグラウンドジョブ一覧
fg %1 # ジョブをフォアグラウンドに戻す
nohup ./server.py & # ログアウト後も継続実行
# プロセスの終了
kill 1234 # PID 1234 に SIGTERM(正常終了を要求)
kill -9 1234 # PID 1234 に SIGKILL(強制終了)
pkill nginx # プロセス名で終了
# システムリソース確認
free -h # メモリ使用量
df -h # ディスク使用量
du -sh /var/log/ # ディレクトリのサイズ
権限管理
# ファイル権限の読み方
ls -la
# -rwxr-xr-- 1 user group 1234 Apr 25 10:00 script.sh
# |||||||||
# |------+-- user: rwx(読み・書き・実行)
# +-- group: r-x(読み・実行)
# +-- other: r--(読みのみ)
# 権限変更(chmod)
chmod 755 script.sh # rwxr-xr-x
chmod +x script.sh # 実行権限を付加
chmod -w file.txt # 書き込み権限を削除
chmod -R 644 ./static/ # ディレクトリ内を再帰的に変更
# 所有者変更(chown)
chown user:group file.txt # 所有者とグループを変更
chown -R www-data:www-data /var/www/ # 再帰的に変更
# 一時的に管理者権限で実行
sudo apt update # root権限でコマンド実行
sudo -u www-data ./script.sh # 別ユーザーとして実行
ネットワーク確認
# 接続確認
ping google.com # 疎通確認(Ctrl+C で停止)
ping -c 4 8.8.8.8 # 4回だけ
# ポート確認
ss -tlnp # LISTEN 中のポート一覧
netstat -tlnp # 旧コマンド(ss推奨)
lsof -i :8080 # ポート8080を使っているプロセス
# HTTPリクエスト
curl https://api.example.com/users # GETリクエスト
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"test"}' https://api.example.com/users
curl -o output.html https://example.com # ファイルに保存
curl -I https://example.com # ヘッダのみ取得
# DNS確認
nslookup example.com # DNS解決の確認
dig example.com # 詳細なDNS情報
ログ調査の実践
# Nginxのエラーログから404を探す
grep " 404 " /var/log/nginx/access.log | tail -20
# 直近1時間のエラーを集計
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
# ログをリアルタイム監視しながらフィルタ
tail -f /var/log/app.log | grep --line-buffered "ERROR"
# 特定時間帯のログを抽出
grep "2026-04-25 10:" /var/log/app.log > morning_errors.log
# journalctl (systemdのログ)
journalctl -u nginx # nginxサービスのログ
journalctl -f # リアルタイム追跡
journalctl --since "1 hour ago" # 直近1時間
よく使うショートカット
| キー | 動作 |
|---|---|
Ctrl+C | 実行中のコマンドを中断 |
Ctrl+Z | バックグラウンドに送る |
Ctrl+D | 入力の終了 / ログアウト |
Ctrl+L | 画面クリア(clearと同等) |
↑ / ↓ | コマンド履歴の移動 |
Ctrl+R | コマンド履歴の検索 |
Tab | コマンド・パスの補完 |
まとめ
Linux コマンドは**「頭で覚える」より「手で慣れる」**が重要です。
- ローカルに Linux 仮想マシン(VirtualBox / WSL2)を用意して毎日触る
- 実際のログファイルを grep / awk で分析してみる
man コマンド名でいつでもリファレンスを確認できる