Linux初心者の方がターミナル操作で最初につまずきやすいのが、「いま自分がどのディレクトリにいるのか分からない」「目的のディレクトリへどうやって移動すればいいのか分からない」というナビゲーションの問題です。
本記事では、現在位置を確認する「pwd」コマンドと、ディレクトリを移動する「cd」コマンドの基本に加え、「絶対パス」「相対パス」、そして作業効率を飛躍的に高める「特殊な記号(「~」、「..」、「-」)」をマスターして効率的に操作する方法を解説します。
現在地を表示する「pwd」コマンド
「pwd」(Print Working Directory)は、現在作業しているディレクトリ(カレントディレクトリ)の絶対パスを表示するコマンドです。
$ pwd /home/tamohiko/project
作業中に「いまどこにいるんだっけ?」と迷ったら、まずは「pwd」コマンドを実行する習慣をつけましょう。
シンボリックリンクと「pwd -P」
シンボリックリンク(ショートカット)のディレクトリに移動した場合、通常の「pwd」は論理パス(リンク名を含んだ見かけ上のパス)を表示します。
リンク先の実体が存在する物理パスを確認したい場合は、「-P」オプションを付与して「pwd -P」を実行します。
「/sbin」ディレクトリを例に、実際に「pwd」と「pwd -P」による表示の違いを比べてみます。
$ ls -l /sbin lrwxrwxrwx 1 root root 8 12月 2 2019 /sbin -> usr/sbin $ cd /sbin $ pwd /sbin $ pwd -P /usr/sbin
ディレクトリ間を移動する「cd」コマンド
「cd」(Change Directory)は、作業ディレクトリを切り替えるためのシェル組み込みコマンドです。
cd 移動先ディレクトリ
移動先ディレクトリを省略して「cd」のみ実行した場合は、ユーザーのホームディレクトリ(~)へ戻ります。
よく使う移動ショートカット一覧
日常業務で多用する指定方法は以下のとおりです。
| コマンド | 移動先 |
|---|---|
| cd ~ または cd 単体 | 自分のホームディレクトリ |
| cd .. | 1つ上の階層(親ディレクトリ) |
| cd ../.. | 2つ上の階層 |
| cd . | 現在のディレクトリ(スクリプト実行時などに使用) |
| cd - | 直前にいたディレクトリへ戻る |
| cd / | ルートディレクトリ(最上位階層) |
「絶対パス」と「相対パス」の使いわけ
ディレクトリを指定する方法には「絶対パス」と「相対パス」の2通りがあります。
絶対パス(一番上からの完全な住所)
- 特徴:必ず先頭が `/`(ルートディレクトリ)から始まります。
- メリット:現在どの階層にいても、確実に目的の場所に移動できます。
- デメリット:階層が深いディレクトリを指定する場合、入力する文字数が長くなりタイポ(入力ミス)の原因になります。
$ cd /var/log/nginx
相対パス(現在地を基準にした表記)
- 特徴:先頭に「/」をつけず、現在地からの位置関係で指定します。
- メリット: 近隣のディレクトリへ移動する際、パス入力を大幅に短縮できます。
- デメリット:「自分が今どこにいるか(カレントディレクトリ)」を正確に把握していないと、誤った場所を指定してしまいます。
現在地が「/var/log」の場合に、相対パスでディレクトリを移動してみます。
# 現在地を確認 $ pwd /var/log # サブディレクトリ「nginx」へ相対パスで入る $ cd nginx $ pwd /var/log/nginx # 隣接する「mysql」ディレクトリへ移動(親階層を経由) $ cd ../mysql/ $ pwd /var/log/mysql # 1つ上の親ディレクトリ(/var/log)へ戻る $ cd .. $ pwd /var/log
ディレクトリ移動の爆速テクニック
「Tab」キーによる自動補完
ディレクトリ名やファイル名を手作業で全文字入力すると、タイポの原因になるので「Tab」キーによる補完を活用しましょう。
例えば「cd /v」まで入力して「Tab」キーを押すと「/var/」が自動補完されます。
続けて「cd /var/l」と入力して「Tab」 を押すと、「l」から始まるディレクトリが複数あるため、候補の一覧表示されます。
$ cd /var/l # Tabキーを押す lib/ local/ lock/ log/ # 補完候補が表示される
この場合は、補完先を特定できる文字(例: local/ なら loc)まで入力してから「Tab」キーを押すと補完してくれます。
空白(スペース)を含むディレクトリへの移動
ディレクトリ名にスペースが入っている場合(例: My Documents)、そのまま「cd My Documents」と打つと「My」と「Documents」に分解されて認識されてしまうため、「引数が多すぎる」というエラーになります。
$ cd My Documents bash: cd: too many arguments
※ロケールが日本語(ja_JP.UTF-8)の場合は「bash: cd: 引数が多すぎます」と表示されます。
この場合は、ダブルクォートで囲むか、バックスラッシュ(\)でスペースをエスケープすることで、ディレクトリに移動することができます。
# ダブルクォートで囲む $ cd "My Documents" # バックスラッシュでエスケープする(Tab補完を使うと自動で入ります) $ cd My\ Documents
直前の作業ディレクトリへトグル移動する「cd -」
深い階層で作業していて、一時的に別のディレクトリに移動し、また元のディレクトリに戻りたいときに「cd -」を使用すると簡単に元のディレクトリに戻ることができます。
# 設定ファイルのディレクトリへ移動 $ cd /etc/nginx/conf.d/ $ pwd /etc/nginx/conf.d # ログ確認のため一時的に別ディレクトリへ移動 $ cd /var/log/nginx $ pwd /var/log/nginx # 直前の /etc/nginx/conf.d/ へ復帰 $ cd - /etc/nginx/conf.d $ pwd /etc/nginx/conf.d
よく遭遇するエラーと解決策
cd: xxx: No such file or directory
- 原因:指定したディレクトリが存在しないか、スペルミス、または相対パス/絶対パスの指定を間違えている
- 対処法:「ls」コマンドで等で移動先のディレクトリが実在するか確認してください。手入力によるミスを防ぐために「Tab」キーによる補完機能を活用しましょう。
bash: cd: xxx: Permission denied
- 原因: 対象ディレクトリに対する実行権限(x パーミッション)が付与されていません。
- 対処法: 権限を持つユーザーへ切り替えて実行します。
$ cd /root -bash: cd: /root: Permission denied
「sudo cd」が実行できない理由
権限がないディレクトリに入ろうとして「sudo cd /root」を実行しても、以下のようなエラーになります。
$ sudo cd /root sudo: cd: command not found sudo: "cd" is a shell built-in command, it cannot be run directly. sudo: the -s option may be used to run a privileged shell. sudo: the -D option may be used to run a command in a specific directory.
「cd」は独立した実行ファイル(バイナリ)ではなく、現在操作しているシェルの組み込みコマンド(built-in) です。
一方、「sudo」は外部の実行ファイルを別プロセスとして管理者権限で起動する仕組みのため、呼び出し元シェルのカレントディレクトリを変更することができません。
アクセス権限のないディレクトリ配下で作業を行う場合は、管理者権限のシェルを起動して移動するか、「sudo ls」などのコマンドにパスを直接渡して操作します。
実行権限がないディレクトリに移動したい場合
実行権限があるユーザで作業を行うか、「su」で管理者権限をもったユーザになるか、メッセージにある「sudo -s」で管理者権限のシェルを起動して作業を行ってください。
なお、「sudo」できる権限を持っていないユーザでは、この作業を行うことはできません。
### 方法1: 管理者権限のシェルを一時起動して作業する ### $ sudo -s ## コマンド実行 # cd /root # pwd /root ## 管理者権限のシェルを終了 # exit exit $ ### 方法2: ディレクトリを移動せず直接 sudo で中身を確認する ### $ sudo ls -l /root total 8 drwx------ 5 root root 4096 May 12 2023 Maildir drwx------ 5 root root 4096 Apr 24 16:00 snap
まとめ
- 現在位置の確認は「pwd」(シンボリックリンクの実体確認は pwd -P)
- ホームディレクトリへの帰還は「cd」または「cd ~」
- 1つ上の親ディレクトリへは「cd ..」
- 直前の作業ディレクトリ場所へは「cd -」
- タイポ防止と入力効率化には Tab キー補完を徹底活用
- 空白を含むフォルダ名は「"」で囲むか「\」でエスケープする
- cd はシェル組み込みコマンドのため「sudo cd」は不可(sudo -s などを利用)

コメント