Co to jest katalog podwójnego ukośnika (//)?

29

cd //Zamiast tego pomyliłem się na maszynie cd /. Ku mojemu zaskoczeniu, obecny katalog pokazał się jako //.

Co to za katalog? Dlaczego to istnieje?

apple@snipped $ pwd
/home/apple
apple@snipped $ cd /
apple@snipped $ pwd
/
apple@snipped $ cd //
apple@snipped $ pwd
//
apple@snipped $ cd ///
apple@snipped $ pwd
/
Zabba
źródło

Odpowiedzi:

42

//jest zwykle taki sam jak /. ///musi być taki sam jak /.

lspokazałbym, że cd //zabrał cię do katalogu głównego, tak samo jak cd /robi.

$ cd /
$ ls
bin
boot
dev
...
$ cd //
$ ls
(same as above)

Technicznym sposobem potwierdzenia, że ​​są zdecydowanie tym samym katalogiem jest:

$ cd /
$ stat -c "%i" .
2
$ cd //
$ stat -c "%i" .
2

wydrukują ten sam numer i-węzła, co oznacza, że ​​są tym samym.

Krwawe szczegóły są udokumentowane w specyfikacji POSIX Pathname Resolution :

Ścieżka składająca się z pojedynczego ukośnika powinna zostać przeniesiona do katalogu głównego procesu. Ścieżka zerowa nie może zostać pomyślnie rozwiązana. Ścieżka rozpoczynająca się od dwóch kolejnych ukośników może być interpretowana w sposób zdefiniowany w implementacji, chociaż więcej niż dwa początkowe ukośniki należy traktować jako pojedynczy ukośnik.

Mikel
źródło