web-dev-qa-db-ja.com

cdを使うときの/の使い方

私のMacのホームディレクトリにいます。

$ pwd
/Users/lukas

cdを回っても、/でパスを開始しません(そしてできません)。

$ cd Documents/
/Users/lukas/Documents

$ cd /Documents
-bash: cd: /Documents: No such file or directory

私が/にいるとき以外は:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

/から/に移動するときにパスの前に/Usersを使用できますが、それ以降のどのレベルでも使用できないのはなぜですか。これはmacOS特有のものですか、それともこれは標準的なUnixの動作ですか?

12
LukasKawerau

これはUnixの標準的な動作です。

パスの先頭にある/は、ディスクのルート(またはファイルシステムツリーの開始/最上位レベル)を表します。 Documentsはルートから外れていないため、/Documentsが見つかりません。

/Usersはルートディレクトリ外にあるため、この問題は発生しません。

cd /Users/lukas/Documentsを使用して、そのパスに変更できます。

または、相対アドレス指定を使用できます。 Unixベースのファイルシステムには、2つの特別なディレクトリがあります。

  • .は「このディレクトリ」を意味し、
  • ..は親ディレクトリを意味します。

/Users/lukasにいる場合、cd ./Documentsは正しい場所に連れて行ってくれます。

あなたが/Users/Lukas/Documentsにいて、/Users/Janes/Documentsに行きたいと仮定した場合、コマンドcd ../../Janes/Documentsを発行できます-..を使用するとレベルが戻ります。新しい相対パスに入る前に2回。

45
davidgo

/Users/lukasは「絶対」パスです。先頭の/は、ファイルシステムのルートディレクトリを表します。

lukasは「相対」パスです。ルートに固定されていないため、「現在のディレクトリでこれを探す」という意味です。現在のディレクトリが/Users(またはその中にlukasを含む他のディレクトリ)でない限り、これは失敗します。

それで、あなたが/Users/lukasにいると仮定して、あなたの例を調べましょう:

$ cd Documents/
/Users/lukas/Documents

相対パス指定=> /Users/lukas内のディレクトリ "Documents"に変更します。

$ cd /Documents
-bash: cd: /Documents: No such file or directory

絶対パス指定=>ディレクトリ/Documentsに変更します。

$ pwd
/

これは、作業ディレクトリをルートディレクトリ/に変更したことを示しています(ただし、これを行うcdコマンドは表示されていません)。

$ cd Users
/Users

指定した相対パス=> /内にあるディレクトリ "Users"に変更します。

$ cd /Users
/Users

絶対パス指定=>ディレクトリ/Usersに変更します。

毎回重要なのは、その先頭の/です。それで、道は絶対です。それがなければ、パスは相対的です。すべての絶対パスは/で始まるため(ルートディレクトリは常に/と呼ばれるため)、この規則は明確です。

そのアルゴリズムを大まかに説明した疑似コードがあります。

MakePathAbsolute(path):
   if <path> starts with '/'
      return <path>
   else
      return <current directory>/<path>

cdに渡す引数はこのアルゴリズムを通ります。変更したディレクトリは、アルゴリズムが返すパスです。


参考文献: