cd ..ルートフォルダー


44

なぜcd ..、ルートフォルダで入力、警告またはエラーで失敗しないのですか?

私は期待するだろう:

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

代わりに、私はに残ってい/ます。もちろん、これは以降である..に存在するがない/、と単純に/同じように、.。なぜそうなのか不思議です。


6
無回答、しかしここでは、ドットファイル(複数可)の起源を議論G +に読み取り、ロブ・パイクの関連する良いではありません。
BSD

回答:


53

Open Groupによると(POSIX標準を担当):

各ディレクトリには、最初のディレクトリでドットドットという名前で表される1つの親ディレクトリがあります。[...] ルートディレクトリに関連するドットドットのファイル名は、実装定義です。バージョン7では、ルートディレクトリ自体を指します。これはPOSIX.1-2008で言及されている動作です。一部のネットワークシステムでは、/ .. / hostname /構造が別のホストのルートディレクトリを参照するために使用され、POSIX.1はこの動作を許可します。

(ソース)


29

/ディレクトリにも実際有効なディレクトリエントリあるため、エラーは発生しませんが、..他のディレクトリとは異なり、ディレクトリ自体を指しているため、次のように動作し.ます。

$ ls -lid / /. /..
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /.
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /..
$

最初の列として、あなたに伝え.../すべて同じiノード番号を持っているので、同じファイルシステムのエントリです。

たとえあなたのcd ..中にいて/も、そのままにいてください/


13
質問は、ディレクトリエントリが存在する理由を尋ね..ます。
ニックマッテオ14

3
私の頭に浮かぶ唯一の理由は/、の有効なエントリを含め、他のフォルダと同じように扱いたいということです..。それ以外の場合は/、システム内の他のすべてのフォルダーと比較して異なる方法で処理する必要があります。
ドンジョー14

15

これを削除するには、カーネルとCライブラリで特殊なケース処理コードを作成する必要があるためです。今は、常に「。」があると仮定できます。移動先のディレクトリにある「..」

現時点で必要な特別な場合のコードは、ファイルシステムのマウントコードのみです。ルートディレクトリは常にルートディレクトリではないため、コードはマウントポイントを含むディレクトリを指すように「..」のinode値をオーバーライドします。


結局のところ、ツリー構造の「親照会」が特別な場合の処理​​から解放されることは不可能ではありませんか?定義上、ルートは特別である必要があり、他の場所で特別なケースや混乱につながるマスクを試みます。
musiphil

@musiphil unixでは、ここでの特殊なケースはmountコマンドとそれに関連する特殊ファイルにシャッフルされます/etc/fstab
luserはドローグ

1

もう一つの方法は、何をチェックする.と、..中に/は本当にです:

$ readlink -f ..
/home

$ readlink -f /.
/

$ readlink -f /..
/

あなたが見ることができるように、...指摘されてい/ます。


1

「..」が/にある別の理由は、存在しない場合、別の特別なケースを作成することです:ルートディレクトリには、他のすべてのディレクトリよりも少ないハードリンクが1つあります(すべてのディレクトリノードにはn + 2個のリンクがあり、nは内部の直接サブディレクトリの数)。これにより、ディレクトリスキャンの最適化に依存するさまざまなプログラムが破損します。


0

それがないと../../../../、フォルダからルートに到達するためにスパムを送信することができないため、そこにあると便利です。..ルートでそれを許可しなかった場合、作業ディレクトリの下にあるフォルダの数を数えながら立ち往生します。


10
何が問題なのcd /ですか?
バッハ14

@Bach時々、キーボードマッシングはもっと楽しいです。また、多くの場合、ルートに移動しようとはしていませんが、その場合は使用する../方が適切です。また、PHPで多くのファイル操作を行っていますが/、いくつかの理由でできません。
スカイラーイットナー14

2
反対に、誤って多く../のsを入力し、意図しないファイルをエラーなしで操作(または削除)する可能性があります。
ジェームズリン14

4
../必要以上に何度も繰り返し、意図したとおりに動作することを望んでいるのは、ファイルシステムが明らかに許可していても、(休止)論理エラーのように見えます。
musiphil

@musiphilコマンド間のスペースの入力-論理エラーです(tail -f | grepの間のすべてのスペースが必須であると仮定)。ほとんどのUNIXの人はそれに苦しんでいます。「../ ..」と入力すると、Windows特有の問題のように見えます(デフォルトでは、cmdはX:\ Windowsで始まり、最初からスパムを送信する必要があります)。大きな問題があるときに小さな問題を癒す必要があるのはなぜですか?(スペース)
kagaliさん14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.