Linux / コマンド / pwd - 現在の作業ディレクトリのパスを確認
pwdは現在の作業ディレクトリ(Current Working Directory)のパスを表示するコマンドです。ターミナルで今どのディレクトリにいるかを確認したり、シェルスクリプトで相対パスの基準位置を確認する際に使用します。
通常はオプションなしで実行すれば十分ですが、シンボリックリンクが含まれるパスでは、論理的なパスを示す-Lと実際のファイルシステムのパスを示す-Pの違いを理解しておくことが重要です。
pwdコマンドとは?
pwdはprint working directoryの略です。現在のシェルやプロセスが作業基準として使用しているディレクトリの絶対パスを表示します。
pwd
例えば現在の位置がユーザーのプロジェクトディレクトリであれば、次のように出力されることがあります。
/home/user/projects/web-app
現在の作業ディレクトリは相対パスを解釈する基準です。同じconfig/settings.iniという相対パスでも、どのディレクトリでコマンドを実行するかによって異なるファイルを指します。
基本的な文法と使い方
ディレクトリを変更する操作は cd による絶対パス・相対パスの移動で行います。pwd は現在位置の確認に使います。
pwd [オプション]
他のパスを引数として受け取るコマンドではないため、通常は次のように単独で実行します。
pwd
cd /var/log
pwd
2番目のpwdは、移動が成功した場合/var/logを出力します。cdが失敗した場合、現在の作業ディレクトリは変わりません。
-Lと-Pの違い
Bash の組み込み pwd では短い -L と -P を使います。表の長い --logical と --physical は GNU 外部コマンドのオプションです。Bash は通常は論理パスを表示しますが、physical のシェル設定でも動作が変わります。GNU 外部版は POSIXLY_CORRECT が未設定なら通常 -P が既定です。自動化では必要な形式を明示してください。GNU Bash の pwd の仕様も参照できます。
現在の位置までのパスにシンボリックリンクが含まれている場合、論理パスと物理パスが異なることがあります。
| オプション | 動作 |
|---|---|
-L, --logical |
シェルが記憶している論理パスを使用します。移動する際に使用したシンボリックリンク名がパスに残ることがあります。 |
-P, --physical |
シンボリックリンクを解釈した物理ディレクトリパスを出力します。 |
-Lで論理パスを確認する
次のように、/srv/currentが実際のリリース用ディレクトリを指すシンボリックリンクであると仮定します。
cd /srv/current
pwd -L
シェルが論理的な位置を正常に管理している場合、次のようにユーザーが入力したリンクパスが保持されることがあります。
/srv/current
-Pで実際のパスを確認する
pwd -P
/srv/currentが/srv/releases/2026-09を指している場合、物理パスは次のように出力される可能性があります。
/srv/releases/2026-09
リリース先を示すリンクが実際にどのディレクトリを指しているか確認したり、シンボリックリンク名に依存しないパスが必要な場合に、-Pは役立ちます。
シェル組み込みのpwdと外部のpwd
Bashをはじめとする複数のシェルは、pwdを組み込みコマンドとして提供しています。システムにはGNU Coreutilsの外部実行ファイルも一緒にインストールされている場合があります。
type -a pwd
command -V pwd
環境によっては、次のようにシェル組み込みコマンドと外部実行ファイルの両方が表示されることがあります。
pwd is a shell builtin
pwd is /usr/bin/pwd
シェル組み込みコマンドを使う理由
シェルはcdでディレクトリを移動する際に、自分の作業ディレクトリと論理パスを直接管理します。したがって、組み込みのpwdは別のプロセスを起動せずにその情報を出力できます。
-Lと-Pは、通常、組み込みコマンドと外部コマンドの両方で使用できますが、詳細なオプションはシェルやオペレーティングシステムによって異なる場合があります。
外部コマンドを明示的に実行する
GNU Coreutilsの実行ファイルの動作を確認するには、フルパスを指定できます。実際の場所はディストリビューションによって異なる場合があります。
/usr/bin/pwd
/usr/bin/pwd -P
移植性が必要なスクリプトでは、特定の絶対パスがすべてのシステムに存在すると仮定しない方が良いです。
PWDとOLDPWDの変数
シェルは現在の位置と前の位置を変数として管理できます。変数名は大文字なので、pwdコマンドと区別する必要があります。
| 項目 | 意味 |
|---|---|
pwd |
現在の作業ディレクトリを出力するコマンドです。 |
PWD |
シェルが記憶している現在の作業ディレクトリの論理パスです。 |
OLDPWD |
一般的に、直前にあった作業ディレクトリです。cd -で使用されます。 |
printf '%s\n' "$PWD"
printf '%s\n' "$OLDPWD"
pwd -L
pwd -P
PWDはシェル変数なので、ユーザーが任意に変更したり、異常な状態になると実際の場所と一致しない場合があります。実際のファイルシステムパスが重要な場合はpwd -Pで確認してください。
シェルスクリプトでの活用方法
実行場所の確認
スクリプトが特定のディレクトリで実行されることを前提とする場合は、作業前に場所を確認できます。
current_dir=$(pwd -P) || exit 1
printf '現在の作業ディレクトリ: %s\n' "$current_dir"
このコードを Bash スクリプトとして保存し、調べたい作業ディレクトリから実行すれば、その物理パスを表示できます。コマンド置換は末尾の改行を取り除くため、末尾に改行を含む特殊なディレクトリ名まで厳密に保持する用途には追加の工夫が必要です。コマンド置換の結果を使用する場合、パスに空白が含まれていても一つの単語として保持されるように変数をダブルクォートで囲みます。
スクリプトファイルの場所と区別する
pwdが出力するのは、スクリプトが保存されているディレクトリではなく、スクリプトを実行したプロセスの現在の作業ディレクトリです。
cd /tmp
/opt/tools/backup.sh
この場合、backup.sh 内で実行された pwd は、スクリプト内で別の場所へ移動していなければ /tmp を出力します。ここに示す /opt/tools/backup.sh は、自分で用意したスクリプトの例です。スクリプト自身の位置が必要な場合、シェルの種類、シンボリックリンクの扱い、呼び出し方法を別途考慮する必要があります。
pwd と関連するコマンドの比較
| コマンド | 用途 |
|---|---|
pwd |
現在の作業ディレクトリのパスを出力します。 |
cd |
現在のシェルの作業ディレクトリを変更します。 |
realpath |
指定したファイル名やパスを正規化し、絶対パスとして出力します。 |
dirname |
パス文字列から最後の構成要素を除いた部分を出力します。 |
readlink |
シンボリックリンクに保存された対象文字列を確認します。 |
よく発生する問題
削除されたりアクセスできない現在のディレクトリ
現在の位置または上位ディレクトリが他のプロセスによって削除されたりアクセス権が変更された場合、pwdはパスを決定できずにエラーを出すことがあります。アクセス可能な上位ディレクトリに移動してから再確認してください。
予想したパスと出力が異なります
シンボリックリンクを通じて移動した場合、pwd -Lとpwd -Pの結果が異なることがあります。どちらのパスが間違っているのではなく、論理名と物理的場所という異なる観点を示しているだけです。
スクリプト内でパスが変更されます
cron、systemd、継続的インテグレーション(CI)のジョブおよびコンテナは、対話型ターミナルとは異なる作業ディレクトリからプログラムを開始することがあります。相対パスを使用する前にpwdで実行環境を記録するか、明確な絶対パスと作業ディレクトリ設定を使用してください。
FAQ
pwdは何の略ですか?
print working directoryの略で、現在の作業ディレクトリのパスを出力します。
pwdとecho "$PWD"は同じですか?
正常なシェル状態では、似たような論理的なパスが出ることがありますが、同じ動作ではありません。 PWDはシェル変数で、pwdは現在の位置を出力するコマンドであり、pwd -Pはシンボリックリンクを解釈した物理的なパスを取得することができます。
pwd -Lとpwd -Pのどちらを使うべきですか?
ユーザーが移動したパス名を保持したい場合は-L、シンボリックリンクを解釈した実際のファイルシステムのパスが必要な場合は-Pを使用します。
pwdはスクリプトが保存されている場所を出力しますか?
いいえ。スクリプトを実行したプロセスの現在の作業ディレクトリを出力します。スクリプトファイルの場所と現在の作業ディレクトリは異なる場合があります。




