pwdコマンドの使い方:現在のディレクトリ位置を確認する基本と実務での活用法

概要

pwd(Print Working Directory)コマンドは、現在作業中のディレクトリの絶対パスを表示するコマンドです。

現場での重要性: 複数のディレクトリを移動しながら作業していると、「今自分がどこにいるか」を見失うことがあります。相対パスでファイル操作やスクリプト実行をする際、現在地を誤認していると、予期しない場所にファイルを作成したり、誤って重要なファイルを削除したりするリスクがあります。pwdで現在地を確認する習慣をつけることで、こうした事故を未然に防げます。


基本コマンド・構文

最も基本的な使い方

pwd

実行例:

$ pwd
/home/user/projects/myapp

現在いるディレクトリの絶対パスが表示されます。

シェル起動時の初期位置確認

$ pwd
/home/user

シェルを起動した直後は、通常ユーザーのホームディレクトリにいます。


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

1. pwd -L:シンボリックリンクを維持したパスを表示(デフォルト)

pwd -L

実行例:

$ cd /var/www/current
$ pwd -L
/var/www/current

実務での活用理由: デプロイツールでシンボリックリンクを使ったディレクトリ管理をしている場合、論理パス(シンボリックリンクのパス)を表示することで、実際にアクセスしているリンク名を確認できます。デフォルトの挙動なので、通常は明示的に-Lを指定する必要はありません。

2. pwd -P:シンボリックリンクを解決した物理パスを表示

pwd -P

実行例:

$ cd /var/www/current
$ pwd -L
/var/www/current

$ pwd -P
/var/www/releases/20260130-093000

実務での活用理由: デプロイ時にcurrentというシンボリックリンクが最新リリースディレクトリを指している場合、実際の物理パスを確認することで、どのバージョンがデプロイされているかを特定できます。トラブルシューティング時に「実際のファイルがどこにあるか」を知る必要がある場合に有効です。

3. シェル変数 $PWD の活用

echo $PWD

実行例:

$ cd /home/user/scripts
$ echo $PWD
/home/user/scripts

実務での活用理由: シェルスクリプト内で現在のディレクトリパスを変数として利用する際、pwdコマンドではなく環境変数$PWDを使うことで、サブシェルを起動せずに高速に取得できます。

#!/bin/bash
CURRENT_DIR=$PWD
echo "現在のディレクトリ: $CURRENT_DIR"

4. cd との組み合わせで移動前の位置を確認

pwd && cd /path/to/directory

実行例:

$ pwd && cd /var/log
/home/user
$ pwd
/var/log

実務での活用理由: 移動前に現在地を確認し、ログに記録することで、作業の追跡可能性が向上します。特にスクリプト内で複数のディレクトリを移動する場合、デバッグ時に有効です。


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

ケース1:スクリプト内で現在のディレクトリを保存・復帰

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

#!/bin/bash

ORIGINAL_DIR=$(pwd)
echo "元のディレクトリ: $ORIGINAL_DIR"

cd /tmp
# 何らかの処理

cd "$ORIGINAL_DIR"
echo "元のディレクトリに復帰しました"

実行例:

$ ./script.sh
元のディレクトリ: /home/user/projects
元のディレクトリに復帰しました

ケース2:ログファイルに現在地を記録

運用スクリプトで作業ディレクトリをログに記録:

echo "$(date): 作業開始 - $(pwd)" >> /var/log/deploy.log

実行例:

$ echo "$(date): 作業開始 - $(pwd)" >> /var/log/deploy.log
$ tail -n 1 /var/log/deploy.log
Fri Jan 30 10:30:00 JST 2026: 作業開始 - /home/user/projects/myapp

ケース3:相対パスから絶対パスを生成

相対パスで指定されたファイルの絶対パスを取得:

FILE="config.ini"
ABSOLUTE_PATH="$(pwd)/$FILE"
echo "絶対パス: $ABSOLUTE_PATH"

実行例:

$ cd /etc/myapp
$ FILE="config.ini"
$ ABSOLUTE_PATH="$(pwd)/$FILE"
$ echo "絶対パス: $ABSOLUTE_PATH"
絶対パス: /etc/myapp/config.ini

ケース4:シンボリックリンクの実体を確認

デプロイされているバージョンを特定:

cd /var/www/current
pwd -P

実行例:

$ cd /var/www/current
$ pwd -P
/var/www/releases/20260130-093000

このコマンドで、currentリンクが指している実際のリリースディレクトリを確認できます。

ケース5:複数のディレクトリを移動するスクリプトでのデバッグ

各ディレクトリ移動時に現在地を表示:

#!/bin/bash
set -x  # デバッグモード有効化

cd /var/log
pwd

cd /etc/nginx
pwd

cd /home/user
pwd

実行例:

$ ./debug_script.sh
+ cd /var/log
+ pwd
/var/log
+ cd /etc/nginx
+ pwd
/etc/nginx
+ cd /home/user
+ pwd
/home/user

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

1. スクリプト内では $(pwd) よりも $PWD を優先

pwdコマンドは外部コマンドなので、サブシェルを起動するコストがかかります。環境変数$PWDを使う方が高速です。

# 遅い
CURRENT_DIR=$(pwd)

# 速い
CURRENT_DIR=$PWD

ただし、cd -Pでシンボリックリンクを解決した後は、$PWDが更新されないため、pwd -Pを使う必要があります。

2. pwdcd - の組み合わせで効率的な移動

直前のディレクトリと現在のディレクトリを行き来する際、pwdで現在地を確認してからcd -で戻ると安心です。

$ pwd
/home/user/projects

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

$ cd -
/home/user/projects

3. シンボリックリンク環境での注意点

デプロイツール(Capistrano、Ansibleなど)でシンボリックリンクを使っている場合、pwdpwd -Pの結果が異なることを理解してください。

$ cd /var/www/current
$ pwd
/var/www/current  # シンボリックリンクのパス

$ pwd -P
/var/www/releases/20260130-093000  # 実際の物理パス

スクリプト内でファイル操作をする際、どちらのパスを使うかを意識しないと、意図しないディレクトリで処理が実行される可能性があります。

4. $OLDPWD 環境変数の活用

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

echo "直前のディレクトリ: $OLDPWD"
cd "$OLDPWD"

5. プロンプトに現在のディレクトリを表示

pwdを毎回実行するのが面倒な場合、シェルのプロンプトに現在のディレクトリを表示する設定が有効です。

# .bashrc または .zshrc に追記
PS1='\u@\h:\w\$ '

これにより、プロンプトにuser@hostname:/current/directory$のように表示されます。

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

対話的な操作では相対パスが便利ですが、スクリプト内では絶対パスを使う方が安全です。pwdを使って現在地を確認し、絶対パスを生成してください。

# 相対パスでの操作(対話的な場合)
cd ../logs

# スクリプト内では絶対パスを使用
cd /var/log/myapp

7. pwd の出力を変数に格納する際のクォート

スペースを含むディレクトリ名を扱う場合、変数をダブルクォートで囲んでください。

CURRENT_DIR=$(pwd)
cd "$CURRENT_DIR"  # クォート必須