概要
cd(change directory)は、現在作業している場所(カレントディレクトリ)を変更するためのシェル組み込みコマンドです。
Linuxのファイルシステムはツリー構造になっており、ファイル操作やコマンド実行を行うには、適切なディレクトリへの移動が不可欠です。本記事では、基本的な移動方法に加え、シンボリックリンクを扱う際の物理パス・論理パスの違いや、作業効率を上げる直前ディレクトリへの移動テクニックについて解説します。
仕様(引数・オプション)
構文
cd [オプション] [ディレクトリ名]
主なオプション
通常はオプションなしで使用しますが、リンク先の扱いを制御する際に以下のオプションを使用します。
| オプション | 説明 |
| -L | シンボリックリンクを追跡し、論理的なパスとして移動します(デフォルト)。 |
| -P | シンボリックリンクを解決し、物理的な実体パスへ移動します(Physical)。 |
| – | 一つ前にいたディレクトリ(直前の作業場所)へ移動します。 |
基本の使い方
特定のディレクトリへの移動とホームへの帰還
引数にパスを指定して移動します。引数なしで実行すると、ログインユーザーのホームディレクトリに戻ります。
# 絶対パスで移動
cd /usr/share/doc
# 現在地を確認
pwd
# 引数なしでホームディレクトリへ戻る
cd
# 現在地を確認
pwd
実行結果イメージ:
/usr/share/doc
/home/user
実践コマンド
1. シンボリックリンクの実体ディレクトリへ移動する (-P)
通常、シンボリックリンクのディレクトリに移動すると、パス表示はリンク名のまま(論理パス)になります。-Pオプションを使うと、リンク先の実体のパス(物理パス)へ移動します。
以下は、current_project というリンクが /opt/project_v2 を指している想定の例です。
# リンクの状態を確認
ls -l current_project
# 物理パス(-P)として移動
cd -P current_project
# カレントディレクトリを表示(実体パスが表示される)
pwd
実行結果イメージ:
lrwxrwxrwx 1 user group 16 Jan 15 10:00 current_project -> /opt/project_v2
/opt/project_v2
2. 直前のディレクトリに戻る (-)
2つのディレクトリを行き来して作業する場合、パスを毎回入力するのは非効率です。cd - を使うと、前回いたディレクトリへ瞬時に戻れます。
# 1. 一時ディレクトリへ移動
cd /var/tmp
echo "現在の場所: $(pwd)"
# 2. 直前のディレクトリへ戻る
cd -
実行結果イメージ:
現在の場所: /var/tmp
/home/user
※ cd - を実行すると、移動先のパスが標準出力に表示されます。
3. OLDPWD環境変数の挙動を確認する
cd - が機能するのは、シェルが環境変数 OLDPWD に前回のパスを保存しているためです。この変数を削除すると、戻れなくなることを確認します。
# 現在のOLDPWDを確認
echo $OLDPWD
# 変数を削除
unset OLDPWD
# 戻ろうとするとエラーになる
cd -
実行結果イメージ:
/var/tmp
bash: cd: OLDPWD not set
カスタムポイント
- 入力補完の活用:
- ディレクトリ名はすべて手入力せず、Tabキーによる補完機能を積極的に利用してください。タイプミスを防げます。
- ホームディレクトリの表現:
cd単体以外に、チルダ~を使ってcd ~/Documentsのようにホーム以下のパスを指定できます。
- 親ディレクトリへの移動:
cd ..で一つ上の階層へ移動します。cd ../..で二つ上へ移動可能です。
注意点
- 権限エラー (Permission denied):
- 移動先のディレクトリに対して実行権限(x)がない場合、移動できません。
- 移動の失敗とスクリプト:
- シェルスクリプト内で
cdを使う場合、移動に失敗しても後続のコマンドが実行されると危険です(意図しない場所でrmなどが走る恐れ)。 - 必ず
cd /target/dir && commandのように論理積(&&)を使うか、エラー処理を入れてください。
- シェルスクリプト内で
- スペースを含むディレクトリ名:
Program Filesのようにスペースを含む場合は、cd "Program Files"のようにクォートで囲むか、cd Program\ Filesとエスケープする必要があります。
応用
ディレクトリスタックを利用する (pushd / popd)
cd - は「直前」の1つしか記憶しませんが、pushd と popd を使うと、複数のディレクトリ移動履歴を記憶(スタック)し、順番に戻ることができます。
# 移動履歴を記憶しながら移動
pushd /var/log
pushd /etc/nginx
# 記憶した順番に元の場所へ戻る
popd
popd
まとめ
cdコマンドはLinux操作の起点となるコマンドです。
- 向く場面: ほぼすべてのCLI作業。
- 変更ポイント: リンク先の実体に行きたい場合は
-Pを使う。 - 注意点: スクリプト内での移動失敗に注意する。
特に cd - は、ログディレクトリと設定ファイルディレクトリを頻繁に行き来する際などに、作業速度を大きく向上させるテクニックです。
