cdの使い方

cdコマンド

PCにUbuntuをインストール後、aptパッケージやsnapパッケージにないプログラム(ソフト)をインストールするときに、カレントディレクトリを変更してインストールを実行することがあります。そのときに使うcdコマンドについて、bashマニュアルman bash内のcdコマンドと、ヘルプcd --helpを調べ、実例を追加するなどしてまとめてみました。

cdコマンドは、man cdで調べることができないため(『cd というマニュアルはありません』とメッセージが表示され、終了してしまいます)、bashマニュアル内のcdコマンドで調べています。ヘルプcd --helpは表示されます)

書式は、マニュアルページの表記に準ずるように記載しています。

目次

cdの書式

cdは、「シェルの作業ディレクトリを変更する」コマンドです。

cdを実行すると、

  • カレントディレクトリを変更します。

マニュアルを確認すると、以下のように書式が記載されています。

cd  [-L|[-P  [-e]]  [-@]]  [dir]

※bashマニュアルページ内のcdコマンドに書かれている書式(マニュアルルールに則り、太字などの文字体裁を補正して表示しました)

cdの書式はあまり複雑ではありませんが、マニュアルのルールを確認にするには【マニュアル表記の統一ルール】をご確認ください。

上の書式の[dir]や[各オプション名]をクリックすると、各項目の説明欄に移動するようにリンクを設けています。使い方や実行例などは各項目の説明欄でご確認ください。

補足の書式

cdマニュアルの書式には記載されていませんが、dirを指定するときに使うことができる記号等を記載しました。クリックすると説明項目へ移動します。

cd    [   dir省略 |       ~       |       .       |       ..       |  絶対パス |       -       ]

dirの指定で使用できる記号などを反映させた書式です。

端末(ターミナル)の見方

cdコマンドを使うには、ディレクトリが「今」「どこに」いるか(カレントディレクトリ)の概念を知ることが大切です。

そこで、まずはじめに端末(「端末」アプリアイコン)を起動したときの、カレントディレクトリ確認方法を記録しておきます。端末アプリを起動すると以下のような表示が確認できますが、表示内容の中の「青色の文字」の部分がカレントディレクトリを表している部分です。

端末を起動したときの見え方:

上の例では、カレントディレクトリは「~」(ホームディレクトリ)で、パスは/home/ユーザーネームとなります。

  • 色の「文字・記号」の部分が今いる場所で、「カレントディレクトリ」を表します
  • 端末を起動してすぐの表示では、「~」が「カレントディレクトリ」になっています。(デフォルト値)
  • デフォルト値の「~」は、ホームディレクトリです。
  • ホームディレクトリ「~」のパスは、/home/ユーザーネームです。(現在のパスはpwdコマンドで調べることができます)
  • cdコマンドを使ってディレクトリを変更すると、「カレントディレクトリ」には「絶対パス名」が表示されます。

dir(ディレクトリ)

書式dirは、「移動先のディレクトリ」のことです。

dir指定してcdコマンドを実行すると、現在のディレクトリ(カレントディレクトリ)をdirに変更(移動)します。カレントディレクトリが変更されると、端末のカレントディレクトリ(青字の部分)の表示が変わります。

メモ:

  • dirを複数指定することはできません。
  • デフォルトのカレントディレクトリはホームディレクトリ「~」です。【端末の見方を確認
  • dirは省略することも可能です【dirを指定しない
  • ホームディレクトリに移動するには ~ 実行例
  • カレントディレクトリを確認するには . 実行例
  • ひとつ上の階層のディレクトリに移動するには .. 実行例
  • 絶対パスで指定するには / 絶対パス実行例
  • カレントディレクトリ直下のディレクトリに移動する場合、「/」は省略可能です。【実行例
  • 相対パスで指定するコツ【相対パス
  • 一つ前のカレントディレクトリに戻るには - 実行例

dirを指定しない

dirの指定を省略してcdコマンドだけ実行すると、カレントディレクトリがどこにいたとしても、ホームディレクトリ「~」に戻ります。【実行例

実行例:ディレクトリを指定しない例

cd

ディレクトリを指定せずにcdコマンドを実行すると、「ホーム」ディレクトリに戻ります。

カレントディレクトリに示されている「~」はホームディレクトリという意味です。ホームディレクトリに戻る記述は他にもcd ~cd /home/ユーザーネームなどがあります。

~(チルダ)

~は、「ホームディレクトリ」を表します。

メモ:

  • ~はデフォルトのカレントディレクトリで、パスは/home/ユーザーネームです。【端末の見方を確認
  • ~をつけてcdを実行すると、ホームディレクトリに戻ります。【実行例
  • ~の後に空白を設けず/ディレクトリ名をつけてcdを実行すると、ホームディレクトリ下にあるディレクトリに移動します。【実行例
  • /をつけ忘れると移動できません。【失敗例

実行例:ホームディレクトリに移動する例(どこからでもホームディレクトリに移動します)

cd  ~

ホームディレクトリ「~」(/home/ユーザーネーム)から実行した場合は、どこにも移動しません。

応用:ホームディレクトリに移動する(戻る)書き方はいくつかあります。cdcd /home/ユーザーネームでも同じくホームディレクトリに移動します。

実行例:ダウンロードディレクトリに移動する例(どこからでもダウンロードディレクトリに移動します)

cd  ~/ダウンロード

ホームディレクトリ「~」(/home/ユーザーネーム)の中のダウンロードディレクトリに移動するという指定方法です。/」を忘れるとエラーが出ます失敗例

応用:その他の書き方はcd /home/ユーザーネーム/ダウンロード絶対パスでの移動、「.(ドット)」を使った相対パスでの移動もできます。

失敗例:ダウンロードディレクトリに移動する際に「/(スラッシュ)」を忘れた例

cd  ~ダウンロード

~/ダウンロードと指定すべきところを~ダウンロードと、「/」を忘れてしまうとエラーが出て移動できません。

失敗例の記述方法では、~ダウンロードと言う名前のディレクトリを探します。「/」を忘れたため、ホームディレクトリ「~」(/home/ユーザーネーム)の中のダウンロードと受け取ってもらえません。

.(ドット)

.は、「カレントディレクトリ」を表します。(カレントディレクトリは「今いる場所」のことです)

メモ:

  • [相対パス]で指定するときに便利に使用することができます。【実行例
  • .だけをつけてcdを実行しても、どこにも移動しません。【実行例
  • .をつけ忘れた場合、[絶対パス]とみなされるため思うように移動できません。【失敗例
  • /をつけ忘れた場合、[ディレクトリ名]とみなされるため思うように移動できません。【失敗例
  • 2つ下の階層に移動したい場合は、.に続けてパスを記述します。【実行例

実行例:ホームディレクトリで「.ドット」を指定する例(現在いる場所から今いる場所に移動するという意味なのでどこにも移動しません)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  .

「カレントディレクトリからカレントディレクトリに移動する」という意味なので、実行してもホームディレクトリ/home/ユーザーネームのままどこにも移動しません。

応用:同じようにルートディレクトリ(ユーザーネーム@PCネーム : /$/cd .を実行しても、ルールディレクトリのまま移動しません。

実行例:ホームディレクトリからダウンロードディレクトリに移動する例(相対パスでの移動)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  ./ダウンロード

カレントディレクトリ「.」(この例ではホームディレクトリ/home/ユーザーネーム)の中にある/ダウンロードディレクトリに移動するという指定方法です。「.」や「/」の記述を忘れるとエラーが出て移動できません【失敗例(.)】【失敗例(/)

応用:その他の書き方はcd /home/ユーザーネーム/ダウンロードcd ~/ダウンロードなどがあります。

失敗例:ホームディレクトリからダウンロードディレクトリに移動する失敗例(「ドット」忘れの例)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  /ダウンロード

カレントディレクトリ「.」を記述していません。1階層下のダウンロードディレクトリの指定でも、この記述では絶対パスとしてみなされ、/ルートディレクトリの中のダウンロードディレクトリに移動という意味になります。なので実行すると・・・

ルートディレクトリ「/」直下に「ダウンロード」というディレクトリがありません、というエラーが表示されます。正しい指定方法は./ダウンロードです。応用:その他の指定方法としては、絶対パス/home/ユーザーネーム/ダウンロードや、~/ダウンロード、ホームディレクトリからなら(1階層下への移動なので)「/」を省略してダウンロードでも移動可能です。【階層のメモ参照】

失敗例:ホームディレクトリからダウンロードディレクトリに移動する失敗例(スラッシュ忘れの例)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  .ダウンロード

カレントディレクトリ「.」に続けてダウンロードと記述し、「/」が抜けています。このような場合は「.ダウンロード」というディレクトリ名として検索されます。

「.ダウンロード」というディレクトリはないため、上記のようなエラーメッセージが表示されます。正しい指定方法は./ダウンロードです。応用:その他の指定方法としては、絶対パス/home/ユーザーネーム/ダウンロードや、~/ダウンロード、ホームディレクトリからなら(1階層下への移動なので)「/」を省略してダウンロードでも移動可能です。【階層のメモ参照】

実行例:/homeディレクトリから2階層下のダウンロードディレクトリに移動する例(相対パスでの移動)

ユーザーネーム@PCネーム : /home$ で以下を実行)

cd  ./ユーザーネーム/ダウンロード

カレントディレクトリからのパスを記述します。2階層下なのでそこまでのパスを「カレントディレクトリ(.)(/home)」から「ホームディレクトリ(ユーザーネーム)」、そして「ダウンロード」と、しっかりと正確に記述します。

相対パスを使うときは、カレントディレクトリを意識して指定することが大切です。【相対パス

..(ドットドット)

..は、「(カレントディレクトリからみて)ひとつ上の階層」を表します。

メモ:

  • ..をつけてcdを実行すると、カレントディレクトリのひとつ上の階層に移動します。【実行例
  • [相対パス]で指定するときに便利に使用することができます。【実行例
  • カレントディレクトリを意識せず..を指定すると失敗する可能性が高くなります【失敗例
  • ..をつけ忘れた場合、[絶対パス]とみなされるため思うように移動できません。【失敗例
  • 「/(スラッシュ)」を使うと複数の階層を登ることができます../..実行例

実行例:ホームディレクトリからひとつ上の階層のディレクトリに移動する例(相対パスでの移動)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  ..

ホームディレクトリ/home/ユーザーネームにいる場合、ひとつ上の階層は/homeです。下のように表示されます。

/homeディレクトリはホームディレクトリとは異なります。(ホームディレクトリは/home/ユーザーネームです)【相対パス参照

実行例:ダウンロードディレクトリからミュージックディレクトリに移動する例(相対パスでの移動)

ユーザーネーム@PCネーム : ~/ダウンロード$ で以下を実行)

cd  ../ミュージック

ダウンロードディレクトリ/home/ユーザーネーム/ダウンロードから、ひとつ上の階層/home/ユーザーネームにいき、そこからミュージックディレクトリ/home/ユーザーネーム/ミュージックに移動する、という書き方です。

相対パスなので、他の場所から実行するとうまく移動できません。【失敗例

失敗例:ホームディレクトリからミュージックディレクトリに移動する失敗例(カレントディレクトリとの位置関係を間違えた例)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  ../ミュージック

上の実行例と同じ記述ですが、カレントディレクトリが異なり「ホームディレクトリ」から実行しています。この場合、ホームディレクトリ/home/ユーザーネームから、ひとつ上の階層/homeにいき、そこからミュージックディレクトリを「/home/ミュージック」で探しますが、パスが間違っているため見つかりません。(ミュージックの正確なパスは/home/ユーザーネーム/ミュージックだからです)

相対パスなので、カレントディレクトリを意識しないと失敗します。カレントディレクトリが「ダウンロード」や「ドキュメント」など同じ階層から同じ階層への移動なら、「../」の記述で実行します。【成功例

失敗例:ダウンロードディレクトリからミュージックディレクトリに移動する失敗例(「..」忘れの例)

ユーザーネーム@PCネーム : ~/ダウンロード$ で以下を実行)

cd  /ミュージック

ひとつ上の階層への指定「..」が記述されていません。「..」がないと絶対パスの指定としてみなされ、/ディレクトリの中の/ミュージックディレクトリに移動という意味になります。なので、実行してみると・・・

ルートディレクトリ「/」の直下には「ミュージック」というディレクトリがないため、絶対パスとみなされてエラーが出ます。カレントディレクトリを意識して、上の階層のホームディレクトリに移動../ミュージックすれば、相対パスとしてみなされ、「ミュージック」ディレクトリを見つけることができるようになります。

実行例:ホームディレクトリからふたつ上の階層のディレクトリに移動する例(相対パスでの移動)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  ../..

ホームディレクトリ/home/ユーザーネームにいる場合、ふたつ上の階層は/です。下のように表示されます。

カレントディレクトリがさらに深い階層の場合は、3つ4つと階層をのぼることも可能です。(ホームディレクトリから実行する場合は、2つ上のルートディレクトリより上の階層はありません。ルートディレクトリが最上階です)

絶対パス

dirは、「/」から始まる絶対パスで指定することもできます。

メモ:

  • 絶対パスは、「/(ルートディレクトリ)から始まるすべてのパス」のことをいいます。【実行例
  • ホームディレクトリの絶対パスは/home/ユーザーネームです。【実行例
  • ダウンロードディレクトリやミュージックディレクトリの絶対パスはそれぞれ/home/ユーザーネーム/ダウンロード/home/ユーザーネーム/ミュージックです。(ユーザーネームはそれぞれの環境で異なります)実行例
  • カレントディレクトリ直下のディレクトリに移動する場合は、「/」を省略して指定できます。【実行例(厳密に言うと絶対パスではないかもしれませんが分類上ここに記載しました)
  • 直下のディレクトリにないディレクトリへの移動は、「/」を省略できません。【失敗例

実行例:ホームディレクトリからルートディレクトリに移動する例(絶対パスでの移動)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  /

ホームディレクトリ「~」から実行した例ですが、カレントディレクトリが別の場所でも絶対パスなのでルートディレクトリ/に移動します。

応用:ルートディレクトリに移動するその他の記述方法は、ホームディレクトリからの相対パスで../..などです。

実行例:ホームディレクトリから/homeディレクトリに移動する例(絶対パスでの移動)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  /home

カレントディレクトリがどこでも、/homeディレクトリに移動します。

/homeディレクトリはホームディレクトリとは異なります。(ホームディレクトリは/home/ユーザーネームです)

実行例:ルートディレクトリからホームディレクトリに移動する例(絶対パスでの移動)

ユーザーネーム@PCネーム : /$ で以下を実行)

cd  /home/ユーザーネーム

カレントディレクトリがどこでも、どこにいてもホームディレクトリ/home/ユーザーネームに移動します。ユーザーネームはそれぞれ書き換えてください。

~」はホームディレクトリという意味です。応用:ホームディレクトリに移動する方法は他にもいくつかあり、cdcd ~などでも、ホームディレクトリに移動できます。

実行例:ミュージックディレクトリからダウンロードディレクトリに移動する例(絶対パスでの移動)

ユーザーネーム@PCネーム : ~/ミュージック$ で以下を実行)

cd  /home/ユーザーネーム/ダウンロード

ミュージックディレクトリから移動する例を挙げていますが、実際は、カレントディレクトリがどこでも、どこにいてもダウンロードディレクトリ/home/ユーザーネーム/ミュージックに絶対パスを使って移動します。ユーザーネームはそれぞれ書き換えてください。

参考:ダウンロードディレクトリからミュージックディレクトリへ相対パスで指定するには「..」を使います【実行例

実行例:ホームディレクトリからダウンロードディレクトリに移動する例(/を省略する例)

ユーザーネーム@PCネーム : ~$ で以下を実行)

cd  ダウンロード

カレントディレクトリがホームディレクトリ「~」なので、ホームディレクトリ直下の「ダウンロードディレクトリ」に移動することができます。直下にないディレクトリ経は移動できません。【失敗例

参考:ダウンロードディレクトリからミュージックディレクトリへ相対パスで指定するには「..」を使います【実行例

失敗例:ミュージックディレクトリからダウンロードディレクトリに移動する例(/を省略する失敗例)

ユーザーネーム@PCネーム : ~/ミュージック$ で以下を実行)

cd  ダウンロード

カレントディレクトリがミュージックディレクトリ「/home/ユーザーネーム/ミュージック」なので、その直下に「ダウンロードディレクトリ」は存在せず、移動できずに以下のエラーが表示されます。

別の階層への移動は、絶対パスで指定【実行例】したり、「..」を使った相対パスで指定【実行例】するなどします。

相対パス(階層のメモ)

「.」や「..」などの相対パスで指定するときに必要な、カレントディレクトリや階層の概念や考え方について、[ホームディレクトリ]から見た階層と、[/homeディレクトリ]から見た階層をそれぞれメモしておきます。

※「ホームディレクトリ」と「/homeディレクトリ」は異なる別のディレクトリです。([/ルートディレクトリ]の中に[/homeディレクトリ]があり、[/homeディレクトリ]の中に[ホームディレクトリ]があり、[ホームディレクトリ]の中に[ダウンロードディレクトリ]などのディレクトリがあります)

階層はtreeコマンドを使って調べました。(treeコマンドを階層を表示するコマンドです)

ホームディレクトリからみた階層

ホームディレクトリから見た階層は、以下のようになっています。

ホームディレクトリ(ユーザーネーム@PCネーム : ~$ )から見える階層

主なディレクトリだけ抽出して表示しています。

  • カレントディレクトリ「.」はホームディレクトリ「~」です。
  • 絶対パスは/home/ユーザーネームです(/homeディレクトリの中の/ユーザーネームディレクトリ)。
  • ひとつ下の階層には、[snap]から[公開]まで9つのディレクトリがあることがわかります。
  • ひとつ上の階層は/homeディレクトリです。
  • 2つ上の階層は/(ルートディレクトリ)です。
  • 同じ階層内のディレクトリに相対パスで移動する場合、「一度、ひとつ上の階層に上がってから指定」しなければなりません。【..(ドットドット)
  • [snap]や[ダウンロード]ディレクトリの中のファイルやディレクトリに移動する場合は、「一つ下の階層」になるため、【.(ドット)】で現在地を指定して「/スラッシュ」でパスを指定すると移動できます。

/homeディレクトリから見た階層

次は/homeディレクトリから見た階層です。/homeディレクトリは以下のようになっています。

/homeディレクトリ(ユーザーネーム@PCネーム : /home$ )から見える階層

主なディレクトリだけ抽出して表示しています。

  • カレントディレクトリ「.」は「/homeディレクトリ」です。
  • 絶対パスは/homeです。(/ルートディレクトリ)の中のhomeディレクトリ)
  • 1つ下の階層は、[ユーザーネーム]ディレクトリです。(ホームディレクトリと呼ばれます)
  • 2つ下の階層には、[snap]から[公開]まで9つのディレクトリがあることがわかります。
  • ひとつ上の階層は「/(ルートディレクトリ)」です。
  • /homeディレクトリから「.」で移動できるのは1階層下の[ユーザーネーム](ホームディレクトリ)までです。【.(ドット)
  • /homeから2つ下の階層に相対パスで移動するにはカレントディレクトリ「.」からのパスをすべて指定します。【実行例

-(ハイフン)

-は、「ひとつ前のディレクトリ」に戻ります。

メモ:

  • dir が「ハイフン」の場合、環境変数「$OLDPWD」 に変換されます。
  • ディレクトリの変更を試みる前に $OLDPWD に変換され、端末にパスが表示され、カレントディレクトリが変更されます。【実行例
  • $OLDPWDは、1つ前のディレクトリのみが格納されるため、複数の移動を遡ることはできません(多分)。【実行例
  • 起動直後やカレントディレクトリを一度も変更していない場合は、エラーが出ます。【失敗例

実行例:ホームディレクトリからダウンロードディレクトリ、その後/homeディレクトリに移動後、1つ前のダウンロードディレクトリに戻る例

ユーザーネーム@PCネーム : /home$ で以下を実行)

cd  -

「ホーム」→「ダウンロード」→「/home」の1つ前は、「ダウンロード」です。ダウンロードディレクトリの絶対パスを表示後、カレントディレクトリが移動します。

再びcd -を指定しても2つ前の「ホーム」ディレクトリには戻りません。直近の「/home」ディレクトリに戻ります。

cd  -

「ホーム」→「ダウンロード」→「/home」の1つ前の「ダウンロード」に戻った後にcd -を実行すると、「/home」に戻ります。「ホーム」には戻りません

常に1つ前のパスに移動し、複数の履歴は格納されません。

失敗例:端末を起動後、ディレクトリの変更をしていないときにcd -を使う例

cd  -

環境変数「OLDPWD」には何も格納されていないときに実行した例です。

データがないため、どこにも移動することができず、表示する値もありません。

OPTIONS(オプション)

bashマニュアル(man bash)のcdコマンドやヘルプ(cd --help)に記載されているオプションは、あまり使う機会はないようですが、cdコマンドをさらに理解するために省略せずにまとめてみました。

オプションへのリンク・・・-L -P -e -@

-Lオプション

-Lは、「シンボリックリンクを強制的にたどる」オプションです。

-Lオプションを付与すると、

  • ..のインスタンスを処理した後、dir 内のシンボリックリンクを解決します。
  • シンボリックリンクは強制的にたどられます。

メモ:

  • 使いどころや便利な使い方がわからないため、実行例は省略します。

-Pオプション

-Pは、「シンボリックリンクをたどらずに物理ディレクトリ構造を使用する」オプションです。

-Pオプションを付与すると、

  • ..のインスタンスを処理する前に、dir 内のシンボリックリンクを解決します。
  • シンボリックリンクを解決することで、物理的なディレクトリ構造を使用するようになります。

メモ:

  • 使いどころや便利な使い方がわからないため、実行例は省略します。

-eオプション

-eは、「-Pオプションが指定されている場合、現在の作業ディレクトリを正常に特定できない場合は、ゼロ以外のステータスで終了させる」オプションです。

-Pオプションと同時に-eオプションを付与すると、

  • ディレクトリ変更の成功後、カレントディレクトリを正常に特定できない場合、cdコマンドは失敗ステータスを返します。
  • サポートするシステムとして、-@ を同時に指定すると、ファイルに関連付けられた拡張属性をディレクトリとして表示します。

メモ:

  • 使いどころや便利な使い方がわからないため、実行例は省略します。

-@オプション

-@は、「(サポートするシステムでは)拡張属性を持つファイルをファイル属性を含むディレクトリとして提示する」オプションです。

メモ:

  • 使いどころや便利な使い方がわからないため、実行例は省略します。

まとめ・参考資料

以上で、cdコマンドの使用方法の説明を終わります。更に詳しい内容を知りたい場合は、以下のコマンドを実行してみてください。

cdマニュアル:man bash内のcdコマンドの項目
cdヘルプ:cd --help

よかったらシェアしてね!
目次