cd – ディレクトリを移動する

移動・コピー

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
-(特殊引数)直前のディレクトリへ移動($OLDPWDcd -
--以降をオプションと解釈しない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 zshbuiltinscd と関連オプション)
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント