メインコンテンツへ移動
SEMentor
運用 約10分

Linux基礎コマンド

SE が毎日使う Linux コマンド集。ファイル操作・プロセス管理・ネットワーク確認・ログ調査を体系化

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 コマンド名 でいつでもリファレンスを確認できる

このレッスンは未完了です。

次のレッスンへ