今回はLinuxの基本コマンドである【cd】コマンドについて解説します。
Linuxを使用するうえでとても大切なコマンドなので必ず覚えるようにしましょう!!
※注 本文の△は半角スペースに置き換えてください。わかりやすくするために△で記述してます
cdコマンドとは??
【cd】コマンドは、カレントディレクトリの位置を移動するコマンドです。
「Change Directory」の略で、linuxのディレクトリ構造は枝分かれになっているので、そのディレクトリを移動するコマンドになります。
ファイル操作やシステム管理において最も頻繁に使用される基本コマンドの一つです。
cdコマンドの主なオプション
【cd】コマンドには便利なオプションがあります
オプション | 意味 |
---|---|
-e | -Pオプション使用時、カレントディレクトリの変更に成功した後で物理的な名前を判定できない場合、0以外のステータスを返す |
-P | シンボリックリンクを指定した場合、リンクがさす「物理的な」ディレクトリ名を使用する |
-L | 論理的なディレクトリ名を使用する(デフォルト) |
-L (–logical)
論理パスを使用してディレクトリを移動するオプション(デフォルト)
シンボリックリンクを辿って移動します
cd△-L△/path/to/symlink
-P (–physical)
物理パスを使用してディレクトリを移動するオプション
シンボリックリンクを解決して実際のディレクトリに移動します
cd△-P△/path/to/symlink
カレントディレクトリを移動する
「cd△ディレクトリ」で指定したディレクトリがカレントディレクトリ(現在位置)になります。ディレクトリを何も指定しないで「cd」のみで実行すると、ホームディレクトリがカレントディレクトリになります。「cd△-」では、変更前のカレントディレクトリに戻ります。
また、現在のカレントディレクトリを知りたい場合はpwdコマンドを使用します。
cd△ディレクトリ
ディレクトリをカレントディレクトリに変更する
cd△/home/tmp
/home/tmpをカレントディレクトリに変更する
cd
ホームディレクトリをカレントディレクトリに変更する
cd△-
カレントディレクトリを直前のディレクトリに変更する
実際のコマンド実行結果が以下です
特殊なディレクトリ指定
cdコマンドには便利な特殊記号が使用できます
ホームディレクトリへの移動
cd
# 引数なしでホームディレクトリに移動
cd△~
# チルダを使ってホームディレクトリに移動
cd△$HOME
# 環境変数を使ってホームディレクトリに移動
相対パスでの移動
cd△.
# 現在のディレクトリ(移動しない)
cd△..
# 一つ上の親ディレクトリに移動
cd△../..
# 二つ上の親ディレクトリに移動
cd△../sibling
# 親ディレクトリの兄弟ディレクトリに移動
前のディレクトリへの移動
cd△-
# 直前にいたディレクトリに戻る
echo△$OLDPWD
# 前のディレクトリのパスを確認
cd△”$OLDPWD”
# 環境変数を使って前のディレクトリに移動
cdコマンドの実用的な活用例
実際の現場でよく使われるcdコマンドの活用例をご紹介します
シェルスクリプトでの活用
スクリプト内でディレクトリを移動して作業し、最後に元の場所に戻るパターンです
#!/bin/bash
# 現在のディレクトリを保存
ORIGINAL_DIR=$(pwd)
# 作業ディレクトリに移動
cd△/var/log△||△{△echo△”移動失敗”;△exit△1;△}
# ログファイルの処理
for△logfile△in△*.log;△do
△△echo△”Processing△$logfile”
△△gzip△”$logfile”
done
# 元のディレクトリに戻る
cd△”$ORIGINAL_DIR”
echo△”作業完了、元の場所に戻りました”
プロジェクト間の移動
複数のプロジェクトを効率的に行き来する方法です
# プロジェクトディレクトリのベースを設定
PROJECT_BASE=”$HOME/projects”
# プロジェクトに移動する関数
goto_project()△{
△△local△project_name=”$1”
△△if△[△-d△”$PROJECT_BASE/$project_name”△];△then
△△△△cd△”$PROJECT_BASE/$project_name”
△△△△echo△”移動完了:△$(pwd)”
△△else
△△△△echo△”プロジェクト△’$project_name’△が見つかりません”
△△fi
}
# 使用例
goto_project△webapp
goto_project△api-server
バッチ操作での活用
複数のディレクトリで同じ操作を実行する場合の活用例です
#!/bin/bash
# 複数のプロジェクトでgit pullを実行
PROJECTS=(“webapp” “api” “mobile” “admin”)
BASE_DIR=”$HOME/projects”
for△project△in△”${PROJECTS[@]}”;△do
△△echo△”=== Processing△$project ===”
△△if△cd△”$BASE_DIR/$project”△2>/dev/null;△then
△△△△if△[△-d△”.git”△];△then
△△△△△△git△pull△origin△main
△△△△else
△△△△△△echo△”Gitリポジトリではありません”
△△△△fi
△△else
△△△△echo△”ディレクトリ△’$project’△に移動できません”
△△fi
done
# 元のディレクトリに戻る
cd△”$HOME”
ディレクトリスタック(pushd/popd)
cdコマンドに加えて、ディレクトリスタックを使った高度な移動方法もあります
# 現在のディレクトリをスタックにプッシュしてから移動
pushd△/var/log
# スタックの内容を確認
dirs
# 別の場所に移動
pushd△/etc
# スタックから前のディレクトリをポップして戻る
popd
# さらに前のディレクトリに戻る
popd
# スタック内の特定の位置に移動
pushd△+1 # スタックの1番目に移動
高度なテクニック
より効率的にディレクトリ移動を行うための高度なテクニックです
ディレクトリブックマーク機能
#!/bin/bash
# ブックマークファイル
BOOKMARK_FILE=”$HOME/.dir_bookmarks”
# ディレクトリをブックマークする
bookmark()△{
△△local△name=”$1”
△△local△path=$(pwd)
△△echo△”$name:$path”△>>△”$BOOKMARK_FILE”
△△echo△”ブックマーク追加:△$name△->△$path”
}
# ブックマークに移動する
goto()△{
△△local△name=”$1”
△△local△path=$(grep△”^$name:“△”$BOOKMARK_FILE”△|△cut△-d:△-f2)
△△if△[△-n△”$path”△]△&&△[△-d△”$path”△];△then
△△△△cd△”$path”
△△△△echo△”移動完了:△$(pwd)”
△△else
△△△△echo△”ブックマーク△’$name’△が見つかりません”
△△fi
}
# ブックマーク一覧表示
list_bookmarks()△{
△△cat△”$BOOKMARK_FILE”△2>/dev/null△||△echo△”ブックマークがありません”
}
ファジー検索での移動
# findとfzfを組み合わせた高速移動
fcd()△{
△△local△dir
△△dir=$(find△”${1:-.}”△-type△d△2>/dev/null△|△fzf△+m)△&&△cd△”$dir”
}
# 最近訪問したディレクトリから選択
recent_dirs()△{
△△history△|△grep△-o△’cd△[^;]*‘△|△awk△’{print△$2}’△|△sort△|△uniq△-c△|△sort△-nr△|△head△-20
}
# プロジェクトディレクトリからファジー検索
cdp()△{
△△local△project_dir
△△project_dir=$(find△”$HOME/projects”△-maxdepth△2△-type△d△|△fzf)
△△[△-n△”$project_dir”△]△&&△cd△”$project_dir”
}
エラーハンドリング
cdコマンド使用時のエラー対処法です
# エラーハンドリング付きcd関数
safe_cd()△{
△△local△target_dir=”$1″
△△
△△# 引数チェック
△△if△[△$#△-eq△0△];△then
△△△△target_dir=”$HOME”
△△fi
△△# ディレクトリ存在チェック
△△if△[△!△-d△”$target_dir”△];△then
△△△△echo△”エラー:△ディレクトリ△’$target_dir’△が存在しません”△>&2
△△△△return△1
△△fi
△△# 権限チェック
△△if△[△!△-x△”$target_dir”△];△then
△△△△echo△”エラー:△ディレクトリ△’$target_dir’△に実行権限がありません”△>&2
△△△△return△1
△△fi
△△# 移動実行
△△if△cd△”$target_dir”;△then
△△△△echo△”移動完了:△$(pwd)”
△△else
△△△△echo△”エラー:△移動に失敗しました”△>&2
△△△△return△1
△△fi
}
cdコマンドの効率的な使い方
より効率的にディレクトリ移動を行うためのコツです
# 1. エイリアスで頻用ディレクトリを短縮
alias△home=’cd△~’
alias△logs=’cd△/var/log’
alias△www=’cd△/var/www’
alias△proj=’cd△~/projects’
# 2. CDPATH環境変数を設定
export△CDPATH=”.:$HOME:$HOME/projects:/usr/local”
# これで△’cd△webapp’△だけで△~/projects/webappに移動可能
# 3. タブ補完を活用
cd△/var/lo[TAB] # /var/log/に補完
cd△~/proj[TAB] # ~/projects/に補完
# 4. globパターンを使用
cd△/home/*/documents # ワイルドカードで移動
shopt△-s△globstar # **を有効化
cd△**/target # 再帰検索で移動
よく使われるパターン集
実際の作業でよく遭遇するパターンをまとめました
# 1. 安全な一時的移動
(cd△/some/directory△&&△do_something)
# サブシェルで実行するため元の場所に自動で戻る
# 2. 条件付き移動
[△-d△”$target”△]△&&△cd△”$target”
# 3. 移動失敗時の処理
cd△”$target”△||△{△echo△”移動失敗”;△exit△1;△}
# 4. 複数階層の親ディレクトリに移動
up()△{△cd△$(printf△”%*s”△$1△|△tr△’△’△’../’);△}
# up△3 で cd△../../../ と同じ
# 5. Gitリポジトリのルートに移動
cdroot()△{
△△local△root
△△root=$(git△rev-parse△–show-toplevel△2>/dev/null)
△△[△-n△”$root”△]△&&△cd△”$root”
}
トラブルシューティング
cdコマンド使用時によくある問題と解決法です
権限拒否エラー
# 権限を確認
ls△-ld△/target/directory
# 実行権限を追加
chmod△+x△/target/directory
# sudoで移動(注意して使用)
sudo△-u△user△bash△-c△’cd△/target/directory△&&△pwd’
シンボリックリンクの問題
# リンクの詳細を確認
ls△-la△/path/to/link
# 物理パスで移動
cd△-P△/path/to/link
# リンクが壊れていないか確認
test△-L△/path/to/link△&&△test△-e△/path/to/link
まとめ
いかがでしたでしょうか
今回はcdコマンドについてまとめてみました
cdコマンドはディレクトリを移動するLinuxの最も基本的なコマンドですが、様々なオプションやテクニックを活用することで、非常に効率的なファイル操作が可能になります
シェルスクリプト、システム管理、開発作業のいずれにおいても欠かせないコマンドです
ディレクトリスタックやブックマーク機能などの高度なテクニックも組み合わせて、ぜひ快適なLinux環境を構築してください!