cd コマンドとは
cd(Change Directory)は、作業ディレクトリ(カレントディレクトリ)を変更するシェル組み込みコマンドです。cd 単体でホームディレクトリへ移動したり、cd - で直前のディレクトリに戻るなど、ターミナル操作の中でもっとも使用頻度の高いコマンドの一つです。
実務ではシェルスクリプト内で処理対象ディレクトリへ移動してからコマンド群を実行する場面でも使われます。
- 別のディレクトリに移動して作業したい
- 1つ前にいたディレクトリへすぐ戻りたい
- スクリプト内で対象ディレクトリに移動してから処理を実行したい
- シンボリックリンクを実体パスに解決して移動したい
bashについて、基本的な考え方や使い方については bash から参照ください。
構文(Syntax)
# POSIX 準拠(sh, bash, dash, ash など)
cd [-L|-P] [DIR]
# 代表的な使い方
cd # $HOME へ
cd DIR # DIR へ(相対・絶対どちらも可)
cd - # 直前のディレクトリへ($OLDPWD)
cd ~USER # USER のホームへ
cd .. # 1つ上へ
cd -- - # 名前が「-」のディレクトリへ(-- でオプション終端)
-Lは論理パス(シンボリックリンクを解決しない)、-Pは物理パス(リンク解決)を選びます。cdはシェル組み込みです(/bin/cdのような外部コマンドではありません)。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-L | 論理パスで移動。リンクをそのまま扱う(多くのシェルで既定) | cd -L project/linkdir |
-P | 物理パスで移動。リンクを実体へ解決して移動 | cd -P project/linkdir |
-(特殊引数) | 直前のディレクトリへ移動($OLDPWD) | cd - |
-- | 以降をオプションと解釈しない | cd -- - |
備考:
cdのオプションはシェル実装により差異があります(例: zsh に追加フラグあり)。POSIX の基本は-L/-Pです。
実行例
ホームへ移動する(引数なし)
説明: 引数なしの cd は環境変数 $HOME へ移動します。
コマンド:
cd
pwd
出力例:
/home/USER
絶対パス・相対パスでの移動
説明: 絶対パス・相対パスのどちらでも移動できます。
コマンド:
cd /etc
pwd
cd ..
pwd
出力例:
/etc
/
直前のディレクトリへ戻る(トグル)
説明: cd - で直前のディレクトリに戻れます(以後トグル動作)。
コマンド:
cd /var/log
cd -
pwd
cd -
pwd
出力例(例):
/home/USER
/var/log
論理/物理の違い(シンボリックリンク)
説明: -L はリンク名のまま、-P は実体へ。
コマンド:
mkdir -p /tmp/cd-demo/real
ln -s /tmp/cd-demo/real /tmp/cd-demo/link
cd -L /tmp/cd-demo/link && pwd
cd -P /tmp/cd-demo/link && pwd
出力例:
/tmp/cd-demo/link
/tmp/cd-demo/real
エラー例: 存在しない/権限がないディレクトリ
説明: ないパスや実行権(x)がないディレクトリには移動できません。
コマンド:
cd /no/such/dir
# -> bash: cd: /no/such/dir: No such file or directory
d=$(mktemp -d); chmod 000 "$d"; cd "$d"
# -> bash: cd: /tmp/tmp.XXXXXX: Permission denied
chmod 700 "$d"; rmdir "$d"
よくある質問(FAQ)
cd だけを実行するとどうなりますか?
引数なしの cd は環境変数 $HOME が指すホームディレクトリへ移動します。cd ~ と同じ動作です。
cd – は何をするコマンドですか?
直前にいたディレクトリ(環境変数 $OLDPWD)へ移動します。もう一度 cd - を実行すると元の場所に戻るため、2つのディレクトリをトグルのように往復できます。
cd .. と cd ../.. の違いは?
cd .. は1つ上の親ディレクトリへ、cd ../.. は2つ上の階層へ移動します。.. を / で連結すればさらに上へ遡れます。
sudo cd はできますか?
できません。sudo は外部コマンドを新しいプロセスとして起動する仕組みのため、そのプロセスがディレクトリを移動しても親シェル(今使っているターミナル)のカレントディレクトリには影響しません。root 権限でディレクトリ操作をしたい場合は sudo -s でrootシェルに入るか、sudo bash -c 'cd /path && コマンド' のように1行で実行します。
CDPATH とは何ですか?
CDPATH は、相対パスで cd したときに探索する追加のディレクトリを指定する環境変数です(例: export CDPATH=.:~/src)。設定すると cd したいディレクトリ名だけで深い階層へ移動できて便利ですが、想定外の場所に移動してしまう混乱の原因にもなるため、共有スクリプトでは未設定のままにするのが安全です。
関連コマンド
pwd: 現在のディレクトリ(絶対パス)を表示する。ls: ディレクトリ内容を一覧表示する。mkdir: 新しいディレクトリを作成する。rmdir: 空のディレクトリを削除する。cp: ファイル・ディレクトリをコピーする。readlink/realpath: シンボリックリンクを解決し、物理パスを得る。test -d/[ -d DIR ]: パスがディレクトリかを判定する(スクリプト前提条件チェックに有用)。- Linuxコマンド一覧 : 用途別のコマンド一覧から他のコマンドも探す。
備考
- シェル組み込み:
cdは親シェルの状態(現在位置)を変えるため、サブシェルでのcdは親に影響しません。例:sh -c 'cd /; pwd'は外側に影響しない。 - 環境変数:
PWD(論理パス)、OLDPWD(直前のパス)、HOME(ホーム)。cd -はOLDPWDを参照します。 - リンク解決: bash の既定は論理(
-L)です。実体パスが必要なら-Pを明示してください。 - スクリプトの安全策: 失敗時に即終了したい場合は
cd /target || exit 1のように書きます。set -eでもよいですが、逐一明示が安全です。 - 名前が「-」のディレクトリ:
cd -- -のように--を使って「引数の-をオプションではなく名前として扱う」ことができます。
参考
- ローカルのヘルプ:
help cd(bash内蔵ヘルプ)、man bashの「シェル組み込み」節 - GNU Bash Reference Manual(Bourne Shell Builtins /
cd) - POSIX
cd仕様: The Open Group Base Specifications(Utilities — cd) - zsh 参考:
man zshbuiltins(cdと関連オプション)

コメント