今回はLinuxの基本コマンドであるpwdコマンドについて解説します。
Linuxを使用するうえでとても大切なコマンドなので必ず覚えるようにしましょう!!
※注 本文の△は半角スペースに置き換えてください。わかりやすくするために△で記述してます
pwdコマンドとは??
【pwd】コマンドは、カレントディレクトリを表示するコマンドです
「Print Working Directory」の略で、現在作業しているディレクトリの絶対パスを表示します
ファイル操作やディレクトリ移動時に現在位置を確認するために頻繁に使用される基本コマンドです
pwdコマンドの主なオプション
【pwd】コマンドには実用的なオプションがあります
-L (–logical)
論理パスを表示するオプション(デフォルト)
シンボリックリンクがある場合、リンクを辿った論理的なパスを表示します
pwd△-L
-P (–physical)
物理パスを表示するオプション
シンボリックリンクを解決して、実際の物理的なパスを表示します
pwd△-P
現在のディレクトリのみを表示する
【pwd】コマンドでは、カレントディレクトリのフルパスを表示させるのですが、カレントディレクトリのディレクトリ名だけを取得したいときもあるかと思います。
そのような場合は、【pwd】コマンドと【basename】コマンドを組み合わせることでカレントディレクトリのディレクトリ名だけ取得することが出来ます。
【basename】コマンドは最後の「/」後の部分を抽出するコマンドです。
①pwd
カレントディレクトリを表示するコマンド
②basename△`pwd`
カレントディレクトリの最後のディレクトリ名を取得
③basename△$(pwd)
カレントディレクトリの最後のディレクトリ名を取得(`pwd`と同義)
実際のコマンド実行結果が以下です
pwdコマンドの実用的な活用例
実際の現場でよく使われるpwdコマンドの活用例をご紹介します
シェルスクリプトでの活用
スクリプト内で現在のディレクトリを保存し、処理後に元の場所に戻る場合によく使用されます
#!/bin/bash
# 現在のディレクトリを保存
ORIGINAL_DIR=$(pwd)
# 別のディレクトリで作業
cd△/var/log
echo△”現在の場所:△$(pwd)”
# ログファイルの処理等
# 元のディレクトリに戻る
cd△”$ORIGINAL_DIR”
echo△”元の場所に戻りました:△$(pwd)”
バックアップ作成での活用
現在のディレクトリ名を使ってバックアップファイルを作成する場合に便利です
# 現在のディレクトリ名を取得
current_dir=$(basename△$(pwd))
timestamp=$(date△+%Y%m%d_%H%M%S)
# ディレクトリ全体をバックアップ
cd△..
tar△-czf△”${current_dir}*backup*${timestamp}.tar.gz”△”$current_dir”
echo△”バックアップ完了:△${current_dir}*backup*${timestamp}.tar.gz”
パス検証での活用
特定のディレクトリ内での作業を保証したい場合に使用します
#!/bin/bash
REQUIRED_PATH=”/home/user/projects”
CURRENT_PATH=$(pwd)
if△[△”$CURRENT_PATH”△!=△”$REQUIRED_PATH”△];△then
△△echo△”エラー:△このスクリプトは△$REQUIRED_PATH△で実行してください”
△△echo△”現在の場所:△$CURRENT_PATH”
△△exit△1
fi
echo△”正しいディレクトリで実行中:△$(pwd)”
ログ管理での活用
ログファイルに現在のディレクトリ情報を記録する場合に使用します
#!/bin/bash
LOGFILE=”/var/log/deployment.log”
TIMESTAMP=$(date△+”%Y-%m-%d△%H:%M:%S”)
CURRENT_DIR=$(pwd)
PROJECT_NAME=$(basename△”$CURRENT_DIR”)
echo△”[$TIMESTAMP]△Deployment△started△for△$PROJECT_NAME△in△$CURRENT_DIR”△>>△”$LOGFILE”
# デプロイメント処理
./deploy.sh
echo△”[$TIMESTAMP]△Deployment△completed△for△$PROJECT_NAME”△>>△”$LOGFILE”
シンボリックリンクでの動作
シンボリックリンクがある環境でのpwdコマンドの動作を理解しておきましょう
# シンボリックリンクを作成
ln△-s△/home/user/projects/webapp△/var/www/myapp
# シンボリックリンクのディレクトリに移動
cd△/var/www/myapp
# 論理パスを表示(デフォルト)
pwd△-L
# 結果:△/var/www/myapp
# 物理パスを表示
pwd△-P
# 結果:△/home/user/projects/webapp
環境変数PWDとの関係
pwdコマンドと環境変数PWDの違いを理解しておきましょう
# 環境変数PWDの値を表示
echo△$PWD
# pwdコマンドの結果を表示
pwd
# 通常は同じ結果だが、PWDが手動で変更された場合は異なる可能性
export△PWD=”/fake/path”
echo△$PWD△△△△△△△△△△△△#△/fake/path
pwd△△△△△△△△△△△△△△△△△△#△実際のカレントディレクトリ
高度な使用例
より複雑な処理でのpwdコマンドの活用例です
複数プロジェクト管理
#!/bin/bash
PROJECT_ROOT=”/home/user/projects”
CURRENT_DIR=$(pwd)
# プロジェクトルート配下にいるかチェック
if△[[ “$CURRENT_DIR”△==△”$PROJECT_ROOT”* ]];△then
△△# プロジェクト名を抽出
△△PROJECT_PATH=${CURRENT_DIR#$PROJECT_ROOT/}
△△PROJECT_NAME=${PROJECT_PATH%%/*}
△△echo△”プロジェクト:△$PROJECT_NAME”
△△echo△”サブディレクトリ:△${PROJECT_PATH#$PROJECT_NAME/}”
else
△△echo△”プロジェクトディレクトリ外です”
fi
ディレクトリスタック管理
#!/bin/bash
# ディレクトリ履歴を保存するファイル
HISTORY_FILE=”$HOME/.dir_history”
# 現在のディレクトリを履歴に追加
save_current_dir()△{
△△echo△”$(pwd)“△>>△”$HISTORY_FILE”
△△echo△”ディレクトリを保存しました:△$(pwd)”
}
# 履歴を表示
show_history()△{
△△echo△”=== ディレクトリ履歴 ===”
△△cat△-n△”$HISTORY_FILE”△2>/dev/null△||△echo△”履歴がありません”
}
# 最後のディレクトリに戻る
goto_last()△{
△△if△[△-f△”$HISTORY_FILE”△];△then
△△△△last_dir=$(tail△-n△1△”$HISTORY_FILE”)
△△△△cd△”$last_dir”
△△△△echo△”移動しました:△$(pwd)”
△△fi
}
pwdコマンドの効率的な使い方
パフォーマンスと使いやすさを向上させるコツです
# 1. 環境変数PWDを活用(高速)
current_dir=$PWD
# 2. シェル関数で頻用操作を簡略化
here()△{△echo△”現在の場所:△$(pwd)”;△}
whereami()△{△basename△$(pwd);△}
# 3. エイリアスで短縮
alias△p=‘pwd’
alias△here=‘echo△”$(pwd)”’
# 4. プロンプトに組み込む
PS1=’\u@\h:\w$△’
# \wがカレントディレクトリを表示
よく使われるパターン集
実際の作業でよく遭遇するパターンをまとめました
# 1. 現在のディレクトリを変数に保存
current=$(pwd)
# 2. ディレクトリ名のみを取得
dirname=$(basename△$(pwd))
# 3. 親ディレクトリのパスを取得
parent=$(dirname△$(pwd))
# 4. ホームディレクトリからの相対パス
relative_path=${PWD#$HOME/}
# 5. プロジェクトルートを見つける
find_project_root()△{
△△local△dir=$(pwd)
△△while△[△”$dir”△!=△”/“△];△do
△△△△if△[△-f△”$dir/.git/config”△]△||△[△-f△”$dir/package.json”△];△then
△△△△△△echo△”$dir”
△△△△△△return△0
△△△△fi
△△△△dir=$(dirname△”$dir”)
△△done
△△return△1
}
トラブルシューティング
pwdコマンド使用時によくある問題と解決法です
権限問題の対処
# ディレクトリが削除された場合
if△!△pwd△>/dev/null△2>&1;△then
△△echo△”警告:△現在のディレクトリにアクセスできません”
△△cd△”$HOME”
△△echo△”ホームディレクトリに移動しました:△$(pwd)”
fi
# セーフモードでの確認
safe_pwd()△{
△△pwd△2>/dev/null△||△echo△”unknown”
}
文字エンコーディング問題
# 日本語ディレクトリ名の処理
current_dir_utf8=$(pwd△|△iconv△-f△UTF-8△-t△UTF-8)
# ロケール設定の確認
echo△”現在のロケール:△$LANG”
echo△”現在のディレクトリ:△$(pwd)”
# ASCIIのみのパス確認
if△pwd△|△grep△-q△’[^[:ascii:]]’;△then
△△echo△”警告:△非ASCII文字を含むパスです”
fi
他のコマンドとの連携
pwdコマンドを他のコマンドと効果的に組み合わせる方法です
# findコマンドとの組み合わせ
find△$(pwd)△-name△”*.txt”△-type△f
# lsコマンドとの組み合わせ
ls△-la△$(pwd)
# duコマンドでディスク使用量確認
du△-sh△$(pwd)
# gitコマンドとの組み合わせ
git△-C△$(pwd)△status
# rsyncでのバックアップ
rsync△-av△$(pwd)/△/backup/$(basename△$(pwd))/
まとめ
いかがでしたでしょうか
今回はpwdコマンドについてまとめてみました
pwdコマンドは現在のディレクトリを表示するLinuxの基本コマンドですが、シェルスクリプトやファイル操作において非常に重要な役割を果たします
特にディレクトリ移動の多い作業、バックアップ処理、ログ管理などで威力を発揮します
basenameやdirnameコマンドと組み合わせることで、より柔軟なパス操作が可能になります
シンボリックリンクの動作も理解して、ぜひ使いこなしてください!