2016-09-27 8 views
2

私はディレクトリ~/wwwにおり、~/.bashrcを編集しようとしています。Linuxの2つの外見上等価なパスは、どちらも動作しません。

私はvi ../.bashrcでした.Vimは新しい空のファイルを作成します。

私はcd ..vi .bashrcを実行し、正しいファイルを開きます。

これはLinuxで起こるはずですか?

編集: touch ../.bashrcをに入れてみましたが、作成しておくべきファイルが見つかりません。

+1

'vi。/ bashrc'は' .bashrc'ではなく 'bashrc'を編集します。 on * nixで始まるファイルは隠されており、 'ls -a'や' ls -la'を使って表示します。 – mata

+0

Typoは、 'vi .bashrc'である必要があります。 –

答えて

4

これは、現在のディレクトリがシンボリックリンクである場合に発生します。

あなたシンボリックリンクにcdは、..は、シンボリックリンクのターゲットの親を参照します:

$ ln -s /tmp mylink 
$ cd mylink 
$ pwd 
/home/me/mylink 
$ realpath . 
/tmp 
$ realpath .. 
/

しかし、bashは巧妙であることによって、あなたを混乱させ、異なったcd ..振る舞いを持つことになります。 「.. `

バックスラッシュまたはDIRの始まりの直前のパス名の構成要素 を除去することで処理されます。ここでhelp cdです。

これはあなたcd ..、bashは魔法/home/me/mylinkから/home/meに行くことができますときことを意味します。この違いは非常に混乱しますが、非常に便利です。

cd -P ..を使用すると、他のすべてのツールと同様に、この魔法は呼び出されず、/home/me/mylinkから/になります。


あなたは..は「親ディレクトリ」を意味特別な構文どのような方法ではないことを実感とき、これは簡単です。すべてのディレクトリは、実際に古いUnixシステム..

という名前の正直ツーライナスのエントリを持っている、これは単なる便利な大会だった、とあなたが望んでいたようmkdir /foo/barも自動的にln /foo /foo/bar/..あなたは、削除または再リンク可能性があろう。今日では、ファイルシステムによって厳密に強制されています。

明らかに、/tmp/../にリンクしています。これは、シンボリックリンクをたどって/tmpになったため変わっていません。

関連する問題