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コマンドラインは、最初は取っつきにくく感じるかもしれませんが、一度慣れると開発効率が飛躍的に向上します。本ガイドで紹介したコマンドを日常的に使い、少しずつレパートリーを広げていきましょう。
学習のポイント:
- まず基本のファイル操作(ls, cd, cp, mv, rm)から覚える
- grepとパイプを使いこなすと生産性が大幅に向上する
- シェルスクリプトで繰り返し作業を自動化する
- エイリアスで頻繁に使うコマンドを短縮する
- man コマンド名でいつでもヘルプを参照できる
コマンドライン操作と合わせて、Gitコマンドチートシートもマスターすれば、開発ワークフロー全体が効率化されます。テキスト処理で正規表現が必要なときは正規表現テスターを、Base64のエンコード・デコードにはBase64エンコーダーをぜひ活用してください。