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へと進んでいけば、どんなテキスト処理の課題にも対応できるようになるでしょう。