タイトル: cd ディレクトリの移動
SEOタイトル: Linux の cd コマンド完全ガイド(絶対パス / 相対パス / cd - / cd ~ / よく使うショートカット)
| この記事の要点 |
|
cd コマンドとは
cd はシェルのカレントディレクトリ(現在の作業位置)を変更するコマンドです。change directory の略で、bash / zsh / sh いずれにも組み込みコマンドとして用意されています。外部コマンドではないため which cd しても見つかりません。
基本構文
cd [オプション] [移動先]
使い方バリエーション
| コマンド | 動作 |
|---|---|
cd /etc | 絶対パスで /etc に移動 |
cd src | カレント直下の src に移動(相対パス) |
cd .. | 親ディレクトリに移動 |
cd ../.. | 2 階層上に移動 |
cd | ホームディレクトリ ($HOME) に戻る |
cd ~ | 同上(ホーム) |
cd ~user | user のホームディレクトリに移動 |
cd - | 直前のディレクトリに戻る |
絶対パスと相対パス
移動先の指定には 2 種類あります。
| 種別 | 書き方 | 例 |
|---|---|---|
| 絶対パス | / から始まる | cd /var/log |
| 相対パス | カレントからの相対位置 | cd ../config |
# /home/user にいるとき
cd /var/log # → /var/log(絶対)
cd projects/cwiki # → /home/user/projects/cwiki(相対)
cd ../../tmp # → /tmp(相対、2階層上 + tmp)
便利な特殊記号
| 記号 | 意味 |
|---|---|
. | カレントディレクトリ |
.. | 親ディレクトリ |
~ | 自分のホームディレクトリ ($HOME) |
~user | 指定ユーザのホーム |
- | 直前にいたディレクトリ ($OLDPWD) |
cd - で前のディレクトリに戻る
cd - は直前にいたディレクトリに戻る非常に便利な機能です。深い階層と元の場所を行き来したいときに重宝します。
$ pwd
/home/user
$ cd /var/log/nginx
$ pwd
/var/log/nginx
$ cd -
/home/user
$ pwd
/home/user
シンボリックリンクの扱い(-P / -L)
シンボリックリンクを介して移動する場合、見た目のパスと実体のパスが食い違うことがあります。-L(デフォルト)はリンク先のパスをそのまま使い、-P は実体に解決します。
$ ln -s /var/log /tmp/link
$ cd /tmp/link
$ pwd # /tmp/link(見た目)
$ pwd -P # /var/log(実体)
$ cd -P /tmp/link
$ pwd # /var/log
スクリプトで安定したパスが欲しいときは cd -P を使うのが安全です。
移動できないときの代表的なエラー
| エラー | 原因 |
|---|---|
| No such file or directory | 指定したパスが存在しない(スペルミス・大文字小文字違い) |
| Not a directory | 指定先がファイルになっている |
| Permission denied | そのディレクトリへの実行(x)権限がない |
pushd / popd でスタック管理
頻繁にディレクトリを行き来する場合、pushd / popd でスタックに積みながら移動すると効率的です。
pushd /var/log # スタックに積みながら移動
pushd /etc
dirs # スタック内容を表示
popd # 直前の場所に戻る
CDPATH で「ジャンプ先」を設定する
環境変数 CDPATH に検索パスを設定しておくと、現在地に関係なく登録ディレクトリ配下にジャンプできます。PATH の cd 版と考えると分かりやすいです。
export CDPATH=".:$HOME:/var/log:/etc"
cd nginx # /var/log/nginx に飛べる(カレントになくても)
cd projects # $HOME/projects に飛べる
シェル設定ファイル (~/.bashrc / ~/.zshrc) に書いておくとログイン時から有効になります。スクリプト内では予期せぬ移動を引き起こす場合があるので対話シェルだけに絞るのが安全です。
環境変数 PWD / OLDPWD
シェルは現在のディレクトリを $PWD、直前のディレクトリを $OLDPWD として保持しています。スクリプトから現在地を取りたい時は pwd コマンドか $PWD を使います。
echo $PWD # /home/user/projects
echo $OLDPWD # 直前にいた場所
# スクリプトで「スクリプトのある場所」に移動する典型イディオム
cd "$(dirname "$0")"
スクリプト内で使う注意点
シェルスクリプトの中で cd に失敗してもそのまま処理が続いてしまうと、意図しない場所でファイル削除などの事故につながります。cd の後ろに || でエラーチェックを付けるのが定石です。
#!/bin/bash
set -e # エラーで即終了
cd /var/www/html || { echo "cd failed"; exit 1; }
rm -rf cache/*