タイトル: cd ディレクトリの移動
SEOタイトル: Linux cd コマンド完全ガイド(~ / - / .. / pushd / Windows との違い)
| この記事の要点 |
|
基本: cd の使い方
# 引数なし = ホームディレクトリへ
cd
# ホームディレクトリ
cd ~
cd $HOME
# 絶対パス
cd /var/log
cd /etc/nginx
# 相対パス
cd subdir
cd ./subdir # 同じ
cd ../parent # 1 つ上
cd ../../foo # 2 つ上の foo
# ルートディレクトリ
cd /
# 前回いたディレクトリへ戻る (トグル動作)
cd -
# 現在地確認
pwd
# /home/user/project
特殊なパスのまとめ
| 記号 | 意味 |
|---|---|
~ | 自分のホーム(/home/user) |
~user | 指定ユーザのホーム(/home/user) |
~+ | 現在のディレクトリ(PWD) |
~- | 前回のディレクトリ(OLDPWD) |
. | 現在のディレクトリ |
.. | 親ディレクトリ |
/ | ルート |
- | 前回いたディレクトリ(OLDPWD) |
cd - でトグル移動
cd /var/log
# /var/log
cd /etc/nginx
# /etc/nginx
cd -
# /var/log ← 直前のディレクトリへ戻る
cd -
# /etc/nginx ← また切り替わる
2 つのディレクトリを行き来する作業で重宝します。
絶対パス vs 相対パス
| 種別 | 例 | 説明 |
|---|---|---|
| 絶対パス | /var/log/nginx | ルート (/) から始まる、現在地に依存しない |
| 相対パス | ../foo | 現在地からの相対位置 |
| ホーム相対 | ~/work/foo | ホームディレクトリ起点 |
# 現在地: /home/user/project
cd src # → /home/user/project/src (相対)
cd /etc # → /etc (絶対)
cd ~/docs # → /home/user/docs
cd ../../var # → /home/user/project/src/../../var = /home/user/var
Tab 補完(必須テクニック)
パスの一部を入力して Tab キーを押すと、bash / zsh が自動補完します:
cd /var/lo<Tab>
# → cd /var/log
cd /usr/loc<Tab>
# → cd /usr/local
cd ~/Doc<Tab>
# → cd ~/Documents
# 候補が複数あれば 2 回押すと一覧表示
cd /us<Tab><Tab>
# users usr
pushd / popd でディレクトリスタック
頻繁に行き来する場所をスタックとして記憶できます:
# 現在地: /home/user
pushd /var/log
# スタック: /var/log /home/user
# pwd: /var/log
pushd /etc/nginx
# スタック: /etc/nginx /var/log /home/user
# pwd: /etc/nginx
dirs -v
# 0 /etc/nginx
# 1 /var/log
# 2 /home/user
popd
# pwd: /var/log
popd
# pwd: /home/user
# 番号指定で飛ぶ
pushd +1 # スタックの 1 番目へ
履歴で素早く戻る
# 環境変数で前回のディレクトリを保持
echo $OLDPWD
echo $PWD
# 履歴を活用
cd $(history -p \!cd) # 直前の cd 引数を再利用
# z / autojump / zoxide で頻度ベースジャンプ
# (要インストール)
z log # 過去によく行った "log" を含むパスへ
z proj # 過去によく行った "proj" を含むパスへ
# fzf で対話的選択
cd $(find . -type d | fzf)
シンボリックリンクの扱い
# /var/www は /home/user/sites へのシンボリックリンクとする
ls -la /var/www
# lrwxrwxrwx 1 root root 17 ... /var/www -> /home/user/sites
cd /var/www
pwd
# /var/www ← 論理パス (シンボリックリンク先を見せない)
cd -P /var/www # 物理パスで cd (シンボリックを解決)
pwd
# /home/user/sites
# pwd の挙動を制御
pwd -L # 論理 (既定)
pwd -P # 物理
CDPATH(コマンド検索パスのような cd 用)
# どこからでも特定のディレクトリ名でジャンプできる
export CDPATH=~/projects:~/src:/etc
# どこにいても
cd myapp # ~/projects/myapp または ~/src/myapp が見つかれば移動
cd nginx # /etc/nginx へ
Windows との違い
| 操作 | Linux/Mac | Windows (cmd) | PowerShell |
|---|---|---|---|
| 移動 | cd 場所 | cd 場所 | cd or Set-Location |
| ドライブまたぎ | 不要(単一ツリー) | cd /d D:\foo | cd D:\foo でOK |
| ホーム | cd ~ | cd %USERPROFILE% | cd ~ |
| 前回へ | cd - | 履歴/F7 等 | cd - |
| 区切り | / | \ | \ or / |
cd が遅い / 効かないとき
- ネットワークマウントが切れている →
df -hで確認、再マウント - パーミッション不足 →
ls -la 親ディレクトリで実行権限 (x) を確認 - 存在しないパス → 補完 (Tab) で確認
- シェル関数で上書き →
type cdで確認、command cdで組込版を呼ぶ
スクリプトで cd するときの注意
# ❌ 失敗してもスクリプトが続行 → 意図しない場所で削除等のリスク
cd /nonexistent
rm -rf * # 危険! 現在地のファイルを消す
# ✅ エラーで停止
cd /nonexistent || exit 1
rm -rf *
# ✅ set -e と組み合わせ
set -euo pipefail
cd /target
rm -rf *
# ✅ サブシェルで影響を限定
(
cd /tmp/work || exit 1
# ここでの cd は外に影響しない
do_something
)
# 親シェルは元のディレクトリのまま
FAQ
Q: cd だけ打つとどこへ行く?
A: ホームディレクトリ ($HOME)。一度迷ったら cd 単独でホームへ戻れます。
Q: 移動と同時にディレクトリの中身を見たい
A: 関数化が王道: cdl() { cd "$1" && ls; } を ~/.bashrc に登録。
Q: cd した瞬間に Git のブランチ名を出したい
A: PROMPT_COMMAND や PS1 に Git 情報を追加するのが定番。oh-my-bash / oh-my-zsh のテーマで簡単に。