cd は、作業ディレクトリ(カレントディレクトリ)を変更するシェル組み込みコマンドです。cd 単体でホームへ移動したり、cd - で直前のディレクトリに戻るなど、日常的に使います。
実務ではスクリプト内で処理対象ディレクトリへ移動してからコマンド群を実行する場面で使われます。
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"
関連コマンド
pwd: 現在のディレクトリ(絶対パス)を表示する。ls: ディレクトリ内容を一覧表示する。pushd/popd/dirs: ディレクトリスタックで移動を管理する(bash/zsh)。readlink/realpath: シンボリックリンクを解決し、物理パスを得る。test -d/[ -d DIR ]: パスがディレクトリかを判定する(スクリプト前提条件チェックに有用)。
備考
- シェル組み込み:
cdは親シェルの状態(現在位置)を変えるため、サブシェルでのcdは親に影響しません。例:sh -c 'cd /; pwd'は外側に影響しない。 sudo cdは不可:sudoは外部コマンドで新しいプロセスを起動するため、親シェルのカレントディレクトリは変わりません。必要に応じてsudo -sや root シェルで作業します。CDPATH: 設定すると相対パス指定時の探索パスが増えます(例:export CDPATH=.:~/src)。便利ですが、意図しない場所へ移動する混乱の原因にもなるため、チーム/スクリプトでは未設定を推奨。- 環境変数:
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と関連オプション)

コメント