Linux コマンドライン必須ガイド

Linux コマンドライン必須ガイド

Linux/macOSターミナルの基本コマンドから応用テクニックまでの完全ガイド。

2026年3月16日7分で読了

はじめに:コマンドラインをマスターする意義

2026年の開発者にとって、コマンドラインインターフェース(CLI)の習熟は必須スキルです。GUIツールが充実した現代においても、CLIは以下の理由から不可欠です:

  • 自動化: スクリプトを書いてタスクを自動化できる
  • 効率性: 複雑な操作を一行のコマンドで実行できる
  • サーバー管理: 多くのサーバーはGUIなしのCLI環境で運用される
  • CI/CD: 継続的インテグレーション/デリバリーのパイプラインはCLIベース
  • 汎用性: Linux、macOS、WSL(Windows Subsystem for Linux)で共通のスキル

本ガイドでは、日常的に使用するLinuxコマンドを体系的に解説します。macOSのTerminalやWSLでもほぼ同じコマンドが使用可能です。

ファイルシステム操作

ディレクトリの移動と確認

# 現在のディレクトリを表示
pwd
# 出力例: /home/username/projects

# ディレクトリの移動
cd /path/to/directory    # 絶対パスで移動
cd projects              # 相対パスで移動
cd ..                    # 親ディレクトリに移動
cd ~                     # ホームディレクトリに移動
cd -                     # 直前のディレクトリに戻る

# ディレクトリの内容を表示
ls                       # 基本的な一覧表示
ls -la                   # 詳細表示(隠しファイル含む)
ls -lh                   # ファイルサイズを人間が読みやすい形式で表示
ls -lt                   # 更新日時順にソート
ls -lS                   # ファイルサイズ順にソート
ls -R                    # 再帰的に表示

# ツリー形式で表示(treeコマンド)
tree                     # 全階層を表示
tree -L 2               # 2階層まで表示
tree -I 'node_modules'  # 特定ディレクトリを除外

ファイルとディレクトリの操作

# ディレクトリの作成
mkdir new-directory           # 単一ディレクトリ作成
mkdir -p path/to/deep/dir    # 中間ディレクトリも含めて作成
mkdir -p src/{components,hooks,utils,types}  # 複数ディレクトリを一括作成

# ファイルの作成
touch file.txt               # 空ファイルの作成
touch file1.txt file2.txt    # 複数ファイルを一括作成

# ファイルのコピー
cp source.txt dest.txt       # ファイルコピー
cp -r src-dir/ dest-dir/     # ディレクトリを再帰的にコピー
cp -i source.txt dest.txt    # 上書き確認あり
cp -p source.txt dest.txt    # 属性を保持してコピー

# ファイルの移動・リネーム
mv old-name.txt new-name.txt  # リネーム
mv file.txt /path/to/dest/   # 移動
mv -i file.txt dest/         # 上書き確認あり

# ファイルの削除
rm file.txt                   # ファイル削除
rm -r directory/              # ディレクトリを再帰的に削除
rm -i file.txt                # 確認あり削除
rm -f file.txt                # 強制削除(確認なし)
# 注意: rm -rf は非常に危険なコマンドです。実行前に必ずパスを確認してください

# シンボリックリンクの作成
ln -s /path/to/target linkname

ファイルの内容表示と編集

ファイルの閲覧

# ファイル全体を表示
cat file.txt

# 行番号付きで表示
cat -n file.txt

# ページ単位で表示(スクロール可能)
less file.txt
# lessの操作: スペース=次のページ, b=前のページ, /=検索, q=終了

# ファイルの先頭を表示
head file.txt            # デフォルトで先頭10行
head -n 20 file.txt      # 先頭20行

# ファイルの末尾を表示
tail file.txt            # デフォルトで末尾10行
tail -n 20 file.txt      # 末尾20行
tail -f logfile.log      # リアルタイムで末尾を監視(ログ監視に有用)
tail -f -n 100 app.log   # 最新100行から監視開始

# ファイルの行数・単語数・バイト数を表示
wc file.txt              # 行数 単語数 バイト数
wc -l file.txt           # 行数のみ
wc -w file.txt           # 単語数のみ

テキスト処理

# grepによるパターン検索
grep "pattern" file.txt           # 基本検索
grep -r "pattern" directory/      # ディレクトリを再帰検索
grep -i "pattern" file.txt        # 大文字小文字を無視
grep -n "pattern" file.txt        # 行番号を表示
grep -c "pattern" file.txt        # マッチした行数を表示
grep -v "pattern" file.txt        # パターンに一致しない行を表示
grep -E "regex|pattern" file.txt  # 拡張正規表現を使用

# sedによるテキスト置換
sed 's/old/new/' file.txt         # 各行の最初のマッチを置換
sed 's/old/new/g' file.txt        # すべてのマッチを置換
sed -i 's/old/new/g' file.txt     # ファイルを直接編集(macOSでは -i '')
sed '5d' file.txt                 # 5行目を削除
sed '1,3d' file.txt               # 1〜3行目を削除

# awkによるテキスト処理
awk '{print $1}' file.txt         # 各行の第1フィールドを表示
awk -F',' '{print $2}' data.csv   # CSVの第2カラムを表示
awk 'NR==5' file.txt              # 5行目のみ表示
awk '{sum += $1} END {print sum}' numbers.txt  # 合計計算

# sortとuniq
sort file.txt                     # アルファベット順ソート
sort -n file.txt                  # 数値順ソート
sort -r file.txt                  # 逆順ソート
sort -u file.txt                  # 重複を除いてソート
sort file.txt | uniq -c           # 重複行のカウント

# cutによるカラム抽出
cut -d',' -f1,3 data.csv         # CSVの1列目と3列目を抽出
cut -c1-10 file.txt              # 各行の1〜10文字目を抽出

正規表現のパターンをテストする場合は、正規表現テスターを使うとブラウザ上で即座に検証できます。

パイプとリダイレクト

パイプ(|)

パイプは、あるコマンドの出力を次のコマンドの入力として渡します。Linux/Unixの最も強力な概念の一つです。

# アクセスログからIPアドレスを抽出し、出現回数順にソート
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

# プロセス一覧からNode.jsプロセスを検索
ps aux | grep node

# ファイル内の特定パターンの行数をカウント
cat app.log | grep "ERROR" | wc -l

# JSONデータの整形(jqを使用)
curl -s https://api.example.com/data | jq '.'

# ディスク使用量の大きいディレクトリを表示
du -sh */ | sort -rh | head -10

リダイレクト

# 標準出力をファイルに書き込み(上書き)
echo "Hello" > output.txt

# 標準出力をファイルに追記
echo "World" >> output.txt

# 標準エラー出力をファイルにリダイレクト
command 2> error.log

# 標準出力と標準エラー出力を同じファイルに
command > output.log 2>&1

# /dev/nullに捨てる(出力を無視)
command > /dev/null 2>&1

# ヒアドキュメント
cat << 'EOF' > config.txt
database_host=localhost
database_port=5432
database_name=myapp
EOF

プロセス管理

# 実行中のプロセスを表示
ps aux                    # すべてのプロセスを表示
ps aux | grep node        # 特定のプロセスを検索

# リアルタイムでプロセスを監視
top                       # 基本的なプロセスモニター
htop                      # 改良版プロセスモニター(要インストール)

# プロセスの終了
kill PID                  # シグナル15(SIGTERM)を送信
kill -9 PID               # 強制終了(SIGKILL)
killall node              # 名前でプロセスを終了

# バックグラウンド実行
command &                 # バックグラウンドで実行
nohup command &           # ログアウト後も実行を継続

# ジョブ管理
jobs                      # ジョブ一覧を表示
fg %1                     # ジョブ1をフォアグラウンドに
bg %1                     # ジョブ1をバックグラウンドに
Ctrl+Z                    # 実行中のプロセスを一時停止

ファイルの権限(パーミッション)

パーミッションの理解

# パーミッションの表示
ls -la
# 出力例: -rwxr-xr-- 1 user group 1234 Mar 16 10:00 script.sh
# 解読: rw-  (所有者:読み書き), r-x (グループ:読み実行), r-- (その他:読みのみ)

# 数値表記
# r=4, w=2, x=1
# 755 = rwxr-xr-x (所有者:全権限, グループ:読み実行, その他:読み実行)
# 644 = rw-r--r-- (所有者:読み書き, グループ:読み, その他:読み)

パーミッションの変更

# 数値指定で変更
chmod 755 script.sh       # rwxr-xr-x
chmod 644 config.txt      # rw-r--r--
chmod 600 secret.key      # rw------- (所有者のみ読み書き)

# 記号指定で変更
chmod +x script.sh        # 実行権限を追加
chmod u+w file.txt        # 所有者に書き込み権限を追加
chmod g-w file.txt        # グループから書き込み権限を除去
chmod o-r file.txt        # その他から読み取り権限を除去

# 再帰的に変更
chmod -R 755 directory/

# 所有者の変更
chown user:group file.txt
chown -R user:group directory/

ネットワーク操作

# ネットワーク接続の確認
ping google.com           # 接続性テスト
ping -c 5 google.com      # 5回だけping

# DNSの確認
nslookup example.com
dig example.com

# HTTPリクエスト
curl https://api.example.com/data        # GETリクエスト
curl -X POST -H "Content-Type: application/json" \
  -d '{"name":"太郎"}' https://api.example.com/users  # POSTリクエスト
curl -I https://example.com              # ヘッダーのみ取得
curl -o output.html https://example.com  # ファイルとして保存
curl -s https://api.example.com | jq '.' # サイレントモード + JSON整形

# ポートの確認
netstat -tlnp             # リッスン中のTCPポート
ss -tlnp                  # netstatの代替(より高速)
lsof -i :3000             # 特定ポートを使用しているプロセス

# ファイルのダウンロード
wget https://example.com/file.zip
wget -O custom-name.zip https://example.com/file.zip

APIのレスポンスを確認する際、JSONデータの整形にはJSONフォーマッターが便利です。URLのエンコード・デコードにはURLエンコーダーをご活用ください。

ディスクとシステム情報

# ディスク使用量
df -h                     # マウントされたファイルシステムの使用状況
du -sh *                  # カレントディレクトリの各項目のサイズ
du -sh directory/          # 特定ディレクトリの合計サイズ
du -h --max-depth=1       # 1階層分のサイズ表示

# システム情報
uname -a                  # カーネル情報
cat /etc/os-release       # OS情報(Linux)
sw_vers                   # macOS バージョン
hostname                  # ホスト名

# メモリ情報
free -h                   # メモリ使用量(Linux)
vm_stat                   # メモリ統計(macOS)

# CPU情報
nproc                     # CPUコア数
lscpu                     # CPU詳細情報(Linux)
sysctl -n hw.ncpu         # CPUコア数(macOS)

圧縮と展開

# tar.gz の作成と展開
tar czf archive.tar.gz directory/    # 圧縮
tar xzf archive.tar.gz              # 展開
tar xzf archive.tar.gz -C /dest/    # 指定ディレクトリに展開
tar tzf archive.tar.gz              # 内容を確認(展開せず)

# zip の操作
zip -r archive.zip directory/        # ZIP圧縮
unzip archive.zip                    # ZIP展開
unzip -l archive.zip                 # 内容を確認

# gzip
gzip file.txt                        # 圧縮(元ファイルは削除される)
gunzip file.txt.gz                   # 展開
gzip -k file.txt                     # 元ファイルを保持して圧縮

シェルスクリプトの基本

基本構造

#!/bin/bash
# スクリプトの説明コメント

set -euo pipefail  # エラー時に停止、未定義変数をエラー、パイプのエラーを検出

# 変数
NAME="太郎"
echo "こんにちは、${NAME}さん"

# 条件分岐
if [ -f "config.txt" ]; then
    echo "設定ファイルが存在します"
elif [ -d "config/" ]; then
    echo "設定ディレクトリが存在します"
else
    echo "設定が見つかりません"
fi

# ループ
for file in *.txt; do
    echo "処理中: ${file}"
done

# 関数
backup_files() {
    local src_dir="$1"
    local dest_dir="$2"
    local timestamp=$(date +%Y%m%d_%H%M%S)

    mkdir -p "${dest_dir}"
    tar czf "${dest_dir}/backup_${timestamp}.tar.gz" "${src_dir}"
    echo "バックアップ完了: ${dest_dir}/backup_${timestamp}.tar.gz"
}

backup_files "./data" "./backups"

実践的なスクリプト例

#!/bin/bash
# プロジェクトのセットアップスクリプト

set -euo pipefail

PROJECT_NAME="${1:?プロジェクト名を指定してください}"

echo "プロジェクト '${PROJECT_NAME}' をセットアップします..."

# ディレクトリ構造の作成
mkdir -p "${PROJECT_NAME}"/{src/{components,hooks,utils,types},public,tests}

# package.json の作成
cat << EOF > "${PROJECT_NAME}/package.json"
{
  "name": "${PROJECT_NAME}",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "eslint . --fix"
  }
}
EOF

# .gitignore の作成
cat << 'EOF' > "${PROJECT_NAME}/.gitignore"
node_modules/
.next/
.env.local
*.log
EOF

# Git 初期化
cd "${PROJECT_NAME}"
git init
git add -A
git commit -m "chore: initial project setup"

echo "セットアップ完了!"
echo "cd ${PROJECT_NAME} && npm install で開始できます"

便利なエイリアスとカスタマイズ

~/.bashrcまたは~/.zshrcに以下を追加すると便利です:

# よく使うエイリアス
alias ll='ls -lah'
alias la='ls -la'
alias ..='cd ..'
alias ...='cd ../..'
alias grep='grep --color=auto'
alias ports='lsof -i -P -n | grep LISTEN'
alias myip='curl -s ifconfig.me'
alias cls='clear'

# 開発用エイリアス
alias dc='docker compose'
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias nr='npm run'
alias nrd='npm run dev'
alias nrb='npm run build'
alias nrt='npm run test'

# Git エイリアス(コマンドライン版)
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --graph'
alias gd='git diff'

# 安全策
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

まとめ

Linuxコマンドラインは、最初は取っつきにくく感じるかもしれませんが、一度慣れると開発効率が飛躍的に向上します。本ガイドで紹介したコマンドを日常的に使い、少しずつレパートリーを広げていきましょう。

学習のポイント:

  1. まず基本のファイル操作(ls, cd, cp, mv, rm)から覚える
  2. grepとパイプを使いこなすと生産性が大幅に向上する
  3. シェルスクリプトで繰り返し作業を自動化する
  4. エイリアスで頻繁に使うコマンドを短縮する
  5. man コマンド名でいつでもヘルプを参照できる

コマンドライン操作と合わせて、Gitコマンドチートシートもマスターすれば、開発ワークフロー全体が効率化されます。テキスト処理で正規表現が必要なときは正規表現テスターを、Base64のエンコード・デコードにはBase64エンコーダーをぜひ活用してください。

関連記事