| この記事の要点 |
|
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/*
もう一つの定番が サブシェル内 cd です。(...) で囲むとその中だけ移動するので、スクリプト本体のカレントを汚しません。
# サブシェルで一時的に移動して作業
(
cd /tmp/work
tar czf archive.tgz *.log
)
# ここでは元のカレントに戻っている
Windows コマンドプロンプトとの違い
Windows の cmd.exe にも cd はありますが、Linux とは挙動が少し違います。Windows / WSL を行き来する人は混乱しがちなので押さえておきます。
| 挙動 | Linux (bash) | Windows (cmd) |
|---|---|---|
引数なし cd | ホームに戻る | 現在のディレクトリを表示 |
| ドライブを跨いだ移動 | 該当なし | cd だけでは不可。cd /d または D: など |
| パス区切り | スラッシュ / | バックスラッシュ \(スラッシュも可) |
| 環境変数 OLDPWD | あり (cd -) | なし |
PowerShell では Set-Location が正式名で、cd はそのエイリアスです。動作は bash に近く、cd - も利きます。
関連
- コマンド一覧 — 親カテゴリ
- Linux — OS トップ
- pwd — 現在のディレクトリを表示
- ls — ディレクトリ内のファイル一覧
- pushd / popd / dirs — ディレクトリスタック
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- JP1/FTS(File Transmission Server/FTP)とは|伝送カードとftstranの使い方 NEW 2026-10-02 22:03:11
- 日立 JP1 (Job Management Partner 1) 完全ガイド (AJS3 / IM / Base / PFM) 2026-10-02 22:03:11
- JP1/Baseとは|ユーザー認証・ユーザーマッピング・イベントサービスの仕組みと主要コマンド NEW 2026-10-02 22:03:10
- JP1/IM(JP1/IM2・IM3)とは|JP1イベントによる統合監視の仕組みとJP1/Baseとの関係 NEW 2026-10-02 22:03:10
- JP1/AJS3 コマンド一覧|ajsentry・ajsshow・ajsrerunなど主要コマンドの使い方とオプション NEW 2026-10-02 22:03:09
- JP1/AJS3とは?ジョブネット・スケジュール・Manager/Agent/Viewの構成を初心者向けに解説 NEW 2026-10-02 22:03:09
- クラウドネットワークの記事一覧 2026-10-02 16:08:51
- ルーティングとスイッチング完全ガイド — 静的/動的ルーティング/RIP/OSPF/BGP/VLAN/STP 2026-10-02 16:08:51
- ネットワークのアドレッシング完全ガイド — IP/MAC/ポート/サブネット/CIDR/IPv6/NAT 2026-10-02 16:08:51
- 本番環境のdll内で参照しているdllファイルの置き場所 2026-10-02 16:08:50
- 【Visual Studio】 C#のForm自動生成時に「値が有効な範囲にありません」エラー 2026-10-02 16:08:50
- 【Laravelエラー】does not comply with psr-4 autoloading standard. Skipping. 2026-10-02 16:08:50
- 【Laravelエラー】could not find driver(Windows, MySQL編) 2026-10-02 16:08:49
- The following channel memory did not pass cpu memory test. 2026-10-02 16:08:49
- 【pycharm】connecting to console が終わらない 2026-10-02 16:08:49