cdコマンドの使い方:ディレクトリ移動の基本と実務での活用法

概要

cd(Change Directory)コマンドは、Linuxのディレクトリ間を移動するための基本コマンドです。

現場での重要性: 作業ディレクトリを適切に移動できないと、ファイル操作やスクリプト実行で相対パスの解決に失敗し、予期しないエラーや誤操作につながります。逆に、cdの応用テクニックを習得することで、ターミナル操作の効率が飛躍的に向上します。


基本コマンド・構文

最も基本的な使い方

cd /path/to/directory

実行例:

$ pwd
/home/user

$ cd /var/log
$ pwd
/var/log

pwd(Print Working Directory)と組み合わせることで、現在のディレクトリ位置を確認できます。

ホームディレクトリへの移動

cd
# または
cd ~

実行例:

$ pwd
/var/log

$ cd
$ pwd
/home/user

引数なしで実行すると、ユーザーのホームディレクトリに戻ります。


現場で必須のオプション・設定

1. cd -:直前のディレクトリに戻る

cd -

実務での活用理由: ログ調査中に別のディレクトリで作業し、再度元の場所に戻る際に絶対パスを打ち直す手間が省けます。2つのディレクトリを行き来する作業で特に有効です。

実行例:

$ pwd
/var/log

$ cd /etc/nginx
$ pwd
/etc/nginx

$ cd -
/var/log
$ pwd
/var/log

2. cd ..:親ディレクトリへの移動

cd ..

実務での活用理由: 深い階層のディレクトリ構造を遡る際、絶対パスを指定するよりも直感的で素早く操作できます。

実行例:

$ pwd
/var/log/nginx

$ cd ..
$ pwd
/var/log

$ cd ../..
$ pwd
/var

../..のように複数階層を一度に遡ることも可能です。

3. 相対パスと絶対パスの使い分け

絶対パス:

cd /usr/local/bin

相対パス:

cd ../share

実務での活用理由: スクリプト内では絶対パスを使うことで、実行場所に依存しない堅牢な処理が実現できます。一方、対話的な操作では相対パスの方が入力量が少なく効率的です。

4. 環境変数 CDPATH の活用

export CDPATH=.:~:/var/log:/etc

実務での活用理由: 頻繁にアクセスするディレクトリをCDPATHに登録しておくと、どこからでもディレクトリ名だけで移動できます。

実行例:

$ export CDPATH=.:~:/var/log
$ cd nginx
# /var/log/nginxに移動(現在位置に関わらず)

実践的なユースケース(逆引きレシピ)

ケース1:複数階層を一気に移動する

深い階層のディレクトリに素早く到達したい場合:

cd /var/www/html/app/storage/logs

Tab補完を活用することで、入力ミスを防ぎながら効率的に移動できます。

ケース2:スクリプト内でのディレクトリ移動と復帰

スクリプト内で一時的に別ディレクトリで作業し、元の場所に戻る場合:

#!/bin/bash

ORIGINAL_DIR=$(pwd)

cd /tmp
# 何らかの処理

cd "$ORIGINAL_DIR"

または、サブシェルを使って自動的に復帰させる方法:

(cd /tmp && ls -la)
# サブシェル終了後、元のディレクトリに自動復帰

ケース3:シンボリックリンクの実体へ移動

シンボリックリンクを解決して実体のディレクトリに移動:

cd -P /var/log/app

-Pオプションを使うと、シンボリックリンクを辿らず物理的なパスに移動します。

ケース4:長いパスを変数に格納して再利用

頻繁にアクセスするパスを変数化:

LOG_DIR=/var/log/application/production
cd $LOG_DIR
# 作業後
cd -
# 再度アクセス
cd $LOG_DIR

シニアエンジニアの知恵(Expert Advice)

1. cd失敗時のエラーハンドリング

スクリプト内でcdが失敗した場合、後続の処理が予期しないディレクトリで実行されるリスクがあります。必ず失敗時の対応を組み込んでください。

cd /path/to/directory || { echo "ディレクトリ移動に失敗しました"; exit 1; }

または、set -eでスクリプト全体をエラー時に停止させる設定を推奨します。

2. パスにスペースが含まれる場合の対処

ディレクトリ名にスペースが含まれる場合、必ずダブルクォートで囲んでください。

cd "My Documents"
# または
cd My\ Documents

クォートなしで実行すると、意図しない動作やエラーの原因になります。

3. pushd / popd を使ったディレクトリスタック管理

複数のディレクトリを行き来する作業では、pushdpopdを活用すると効率的です。

$ pushd /var/log
$ pushd /etc/nginx
$ popd  # /var/logに戻る
$ popd  # 元の場所に戻る

ディレクトリ履歴をスタックとして管理でき、cd -よりも柔軟な移動が可能です。

4. ホームディレクトリへの即座の復帰

作業中にどこにいても、cdだけで即座にホームディレクトリに戻れることを覚えておいてください。パニック時のリセットポイントとして有効です。

cd

5. OLDPWD 環境変数の活用

cd -は内部的にOLDPWD環境変数を参照しています。スクリプト内で直前のディレクトリパスを取得したい場合:

echo $OLDPWD
cd "$OLDPWD"