cd .. в корневой папке

Почему cd .. , набрал в корневой папке, не предупреждает или не с ошибкой?

Я бы ожидал:

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

Вместо этого меня оставили / . Конечно, это так .. существует в / , и просто / , точно так же . , Мне просто интересно, почему это так.

Согласно открытой группе (отвечающей за стандарт POSIX):

Каждая директория имеет ровно один родительский каталог, который представлен в виде точки dot-dot в первом каталоге. […] То, что точка-точка имени файла относится к корневому каталогу, определяется реализацией. В версии 7 это относится к самому корневому каталогу; это поведение, упомянутое в POSIX.1-2008. В некоторых сетевых системах конструкция /../hostname/ используется для обращения к корневому каталогу другого хоста, и POSIX.1 разрешает это поведение.

(Источник)

Вы не получите ошибку, потому что даже каталог / действительно имеет действительную запись в каталоге для .. , но в отличие от других каталогов она указывает на саму директорию и, следовательно, ведет себя одинаково . :

 $ 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 /.. $ 

Как говорит вам первая колонка . , .. , и / все имеют одинаковое число inode и, таким образом, являются одинаковыми элементами файловой системы.

Так что даже если вы cd .. внутри / вы просто остаетесь в / .

Это потому, что для его удаления потребуется создать код обработки особых случаев в ядре и библиотеках C. Прямо сейчас вы можете предположить, что всегда будет «.». и «..» в любом каталоге, к которому вы направляетесь.

Единственный специальный код, который требуется прямо сейчас, – это код установки файловой системы, где код переопределяет значение inode «..», чтобы указать на каталог, содержащий точку монтирования, поскольку корневые каталоги не всегда являются корневыми каталогами.

Еще один способ проверить, что . и .. в / действительно есть:

 $ readlink -f .. /home $ readlink -f /. / $ readlink -f /.. / 

Как видите,. и .. указывается на / .

Другая причина «..» в / заключается в том, что если бы она не была там, она создавала бы другой особый случай: корневой каталог имел бы одну жесткую ссылку меньше, чем все остальные каталоги (все узлы каталогов имеют n + 2 ссылки, где n количество прямых подкаталогов внутри). Это приведет к разрыву различных программ, которые будут использоваться для оптимизации сканирования каталогов.

Приятно, что он там, потому что иначе я не смог бы спамить ../../../../ чтобы добраться до корня из папки. Если бы он не позволял .. в корне, тогда я бы застрял, подсчитывая количество папок в рабочем каталоге.

Я слышал, что / был особым случаем (без точки). Я подозреваю, что просмотр системного вызова, chroot и команды команды может дать некоторое представление.