この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: cd ディレクトリの移動
SEOタイトル: Linux cd コマンド完全ガイド(~ / - / .. / pushd / Windows との違い)

この記事の要点
  • 基本: cd ディレクトリ で移動、pwd で現在地確認
  • 特殊な行き先: cd ~ (ホーム) / cd - (前回) / cd .. (親) / cd / (ルート)
  • 絶対パス (/var/log) と 相対パス (../foo) を使い分け
  • pushd / popd でディレクトリスタックを操作 → よく行き来する場所を覚えさせる
  • Windows の cdドライブをまたぐ移動に /d オプションが必要(Linux は不要)

基本: 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
# → cd /var/log

cd /usr/loc
# → cd /usr/local

cd ~/Doc
# → cd ~/Documents

# 候補が複数あれば 2 回押すと一覧表示
cd /us
# 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/MacWindows (cmd)PowerShell
移動cd 場所cd 場所cd or Set-Location
ドライブまたぎ不要(単一ツリー)cd /d D:\foocd 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_COMMANDPS1 に Git 情報を追加するのが定番。oh-my-bash / oh-my-zsh のテーマで簡単に。