Developer Tools

すべての開発者が知っておくべきLinuxコマンドラインの基礎

開発現場で毎日使うLinuxコマンドの実践的なリファレンス — ファイルシステムのナビゲーション、パーミッション、プロセス管理、テキスト処理、ネットワーキングまで網羅。

9分で読めます

暗い画面に緑のテキストが表示されたターミナル

Linuxコマンドラインは、サーバー、コンテナ、CIパイプライン、開発環境を問わず共通のインターフェースです。深夜2時に本番サーバーにSSH接続しているときも、Dockerコンテナをデバッグしているときも、これらのコマンドを使いこなせるかどうかが、混乱と自信の差を生みます。

ナビゲーションとファイル管理

# ディレクトリの移動
pwd                      # カレントディレクトリを表示
cd /var/log              # 絶対パスで移動
cd ..                    # 一つ上の階層へ
cd -                     # 直前のディレクトリに戻る
cd ~                     # ホームディレクトリへ

# ファイルの一覧表示
ls                       # 基本的な一覧表示
ls -la                   # 詳細表示 + 隠しファイルを含む
ls -lh                   # ファイルサイズを人間が読みやすい形式で表示
ls -lt                   # 更新日時でソート(新しい順)

# 作成・コピー・移動・削除
mkdir -p path/to/dir     # ディレクトリを親ディレクトリごと作成
cp -r source/ dest/      # 再帰的にコピー
mv oldname newname       # 名前変更または移動
rm -rf directory/        # ディレクトリとその中身を削除(元に戻せない!)
touch file.txt           # 空ファイルの作成 / タイムスタンプの更新

# ファイルの表示とナビゲーション
cat file.txt             # ファイル全体を出力
less file.txt            # ページ送り表示(qで終了、/で検索)
head -n 20 file.txt      # 先頭20行を表示
tail -n 20 file.txt      # 末尾20行を表示
tail -f /var/log/app.log # リアルタイムでログを追跡

ファイルパーミッション

Linuxのパーミッションは、オーナー・グループ・その他のユーザーそれぞれに対する読み取り・書き込み・実行ビットの3セットで表されます:

-rwxr-xr--  1 alice devs  4096 Apr 8 10:00 script.sh

パーミッション文字列の読み方:-rwxr-xr--

  • - — ファイル種別(d = ディレクトリ、l = シンボリックリンク)
  • rwx — オーナー:読み取り、書き込み、実行
  • r-x — グループ:読み取り、実行(書き込みなし)
  • r-- — その他:読み取りのみ

chmod — パーミッションの変更

# シンボリック表記
chmod u+x script.sh      # オーナーに実行権限を追加
chmod g-w file.txt       # グループから書き込み権限を削除
chmod o=r file.txt       # その他のユーザーを読み取り専用に設定
chmod a+r file.txt       # 全員に読み取り権限を追加(a = all)

# 数値(8進数)表記
chmod 755 script.sh      # rwxr-xr-x(実行ファイルによく使われる)
chmod 644 file.txt       # rw-r--r--(一般ファイルによく使われる)
chmod 600 ~/.ssh/id_rsa  # rw-------(SSHキーに必要)
chmod 700 ~/.ssh/        # rwx------(.sshディレクトリに必要)

Chmod Calculatorを使えば、パーミッション文字列をビジュアルで作成し、各8進数値の意味を理解できます。

検索とテキスト処理

# ファイルの検索
find /var/log -name "*.log"               # ファイル名で検索
find . -name "*.ts" -newer package.json   # package.jsonより新しいファイル
find . -type f -size +10M                 # 10MBを超えるファイル
find . -name "node_modules" -prune        # ディレクトリを除外

# ファイル内容の検索
grep "error" app.log                      # ファイル内を検索
grep -r "TODO" ./src                      # 再帰的に検索
grep -i "error" app.log                   # 大文字・小文字を区別しない
grep -n "error" app.log                   # 行番号を表示
grep -v "DEBUG" app.log                   # マッチしない行を表示
grep -E "error|warning" app.log           # 正規表現:errorまたはwarning

# ストリームのテキスト処理
cat access.log | grep "404" | wc -l       # 404エラーの件数をカウント
cat data.csv | cut -d',' -f1,3            # 1列目と3列目を抽出
cat file.txt | sort | uniq                # ソートして重複を削除
cat file.txt | sort | uniq -c | sort -rn  # 出現回数をカウントし頻度順にソート

awk — フィールドベースの処理

# 特定のフィールドを出力(デフォルトはタブ区切り)
awk '{print $1, $3}' file.txt

# CSVの処理(カンマ区切り)
awk -F',' '{print $2}' data.csv

# 列の合計を計算
awk -F',' '{sum += $3} END {print sum}' data.csv

# パターンに一致する行を出力
awk '/ERROR/ {print $0}' app.log

sed — ストリームエディター

# テキストの置換
sed 's/foo/bar/' file.txt          # 各行の最初の一致を置換
sed 's/foo/bar/g' file.txt         # すべての一致を置換(グローバル)
sed -i 's/foo/bar/g' file.txt      # インプレース編集(ファイルを直接変更)

# 行の削除
sed '/^#/d' file.txt               # コメント行を削除
sed '5,10d' file.txt               # 5〜10行目を削除

# 特定の行を出力
sed -n '10,20p' file.txt           # 10〜20行目を出力

プロセス管理

# 実行中のプロセスを確認
ps aux                             # 詳細付きで全プロセスを表示
ps aux | grep nginx                # nginxのプロセスを検索
top                                # インタラクティブなプロセスビューアー
htop                               # より優れたインタラクティブビューアー(インストールが必要)

# プロセスの制御
kill PID                           # SIGTERMを送信(正常終了)
kill -9 PID                        # SIGKILLを送信(強制終了)
pkill nginx                        # プロセス名で終了
killall node                       # 一致するすべてのプロセスを終了

# バックグラウンドジョブ
command &                          # バックグラウンドで実行
jobs                               # バックグラウンドジョブの一覧表示
fg %1                              # ジョブ1をフォアグラウンドに移動
nohup command &                    # ハングアップに対して耐性を持たせて実行(ログアウト後も継続)

# システムリソース
free -h                            # メモリ使用量
df -h                              # ディスクの使用量
du -sh /var/log/                   # ディレクトリのサイズ
lsof -i :3000                      # ポート3000を使用しているプロセス

ネットワーキングコマンド

# 接続確認
ping google.com                    # 接続をテスト
curl -I https://example.com        # HTTPヘッダーのみ取得
curl -o file.zip https://example.com/file.zip  # ファイルをダウンロード
wget https://example.com/file.zip  # 代替ダウンローダー

# 接続の確認
ss -tulpn                          # リスニングポートとプロセスを表示
netstat -tulpn                     # 代替コマンド(古いシステム向け)
lsof -i :80                        # ポート80を使用しているプロセス

# DNS
dig example.com                    # DNSルックアップ
dig example.com MX                 # MXレコードを取得
host example.com                   # シンプルなDNSルックアップ
nslookup example.com               # インタラクティブなDNSクエリ

SSHとリモートアクセス

# サーバーへの接続
ssh user@server.com
ssh -p 2222 user@server.com        # 非標準ポートを使用
ssh -i ~/.ssh/id_rsa user@server.com  # 特定の鍵を指定

# ファイルのコピー
scp file.txt user@server.com:~/    # リモートのホームディレクトリにコピー
scp user@server.com:~/file.txt .   # リモートからコピー
scp -r ./dist user@server.com:~/app/  # 再帰的にコピー

# SSHトンネリング(ポートフォワーディング)
ssh -L 5432:localhost:5432 user@server.com  # リモートDBをローカルポートにトンネル

SSH Key Generatorを使って、安全な認証用のSSHキーペアを生成できます。

環境変数とシェル

# 環境変数
export API_KEY=abc123              # 現在のセッションと子プロセスに設定
echo $API_KEY                      # 変数を出力
env                                # すべての環境変数を一覧表示
printenv PATH                      # 特定の変数を出力
unset API_KEY                      # 変数を削除

# シェルの履歴
history                            # 過去のコマンドを一覧表示
!!                                 # 直前のコマンドを再実行
!grep                              # 最後に実行したgrepコマンドを再実行
Ctrl+R                             # 履歴の逆方向検索(入力して検索)

# 便利なショートカット
Ctrl+C                             # 現在のプロセスを中断
Ctrl+Z                             # バックグラウンドに一時停止
Ctrl+L                             # 画面をクリア(clearと同じ)
Ctrl+A                             # 行の先頭にジャンプ
Ctrl+E                             # 行の末尾にジャンプ
Ctrl+U                             # カーソル前の行をクリア

パイプとリダイレクト

# パイプ — コマンドを連結
ls -la | grep ".log" | wc -l

# 出力のリダイレクト
command > file.txt                 # 標準出力でファイルを上書き
command >> file.txt                # 標準出力をファイルに追記
command 2> errors.txt              # 標準エラーをリダイレクト
command > all.txt 2>&1             # 標準出力と標準エラーを同じファイルにリダイレクト
command &> all.txt                 # 上記の省略形

# /dev/null — 出力を破棄
command > /dev/null 2>&1           # すべての出力を破棄(サイレント実行)

開発者向けの便利なワンライナー

# ディレクトリ内のすべてのファイルで検索・置換
find . -name "*.tsx" | xargs sed -i 's/OldComponent/NewComponent/g'

# パブリックIPを取得
curl -s ifconfig.me

# ファイルの変更を監視
watch -n 2 "ls -la uploads/"

# ディレクトリを圧縮
tar -czf archive.tar.gz ./directory/

# tar.gzを展開
tar -xzf archive.tar.gz

# カレントディレクトリで容量の大きいファイルトップ10を表示
du -sh * | sort -rh | head -10

# ファイル種別ごとのコード行数をカウント
find . -name "*.ts" | xargs wc -l | sort -rn | head -20

コマンドラインは学べば学ぶほど力になります。習得したコマンドは、より強力な組み合わせを生み出すための積み木になります。まずはナビゲーションとgrepから始め、パイプを覚え、そしてawkへと進んでいけば、どんなテキスト処理の課題にも対応できるようになるでしょう。