私の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の動作ですか?
これはUnixの標準的な動作です。
パスの先頭にある/
は、ディスクのルート(またはファイルシステムツリーの開始/最上位レベル)を表します。 Documents
はルートから外れていないため、/Documents
が見つかりません。
/Users
はルートディレクトリ外にあるため、この問題は発生しません。
cd /Users/lukas/Documents
を使用して、そのパスに変更できます。
または、相対アドレス指定を使用できます。 Unixベースのファイルシステムには、2つの特別なディレクトリがあります。
.
は「このディレクトリ」を意味し、..
は親ディレクトリを意味します。/Users/lukas
にいる場合、cd ./Documents
は正しい場所に連れて行ってくれます。
あなたが/Users/Lukas/Documents
にいて、/Users/Janes/Documents
に行きたいと仮定した場合、コマンドcd ../../Janes/Documents
を発行できます-..
を使用するとレベルが戻ります。新しい相対パスに入る前に2回。
/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
に渡す引数はこのアルゴリズムを通ります。変更したディレクトリは、アルゴリズムが返すパスです。
参考文献: