Я пытаюсь понять природу ..
(двойная точка). Кажется, он указывает на разные цели в зависимости от того, как вы к нему обращаетесь.
Пример:-
/outer/
middle/
inner/
inner --> ./middle/inner/
Теперь /outer/middle/inner/..
ведет к /outer/middle/
, но если я получаю к нему доступ через символическую ссылку, /outer/inner/..
приводит к /outer/
. Кажется, здесь есть два разных ..
.
Что ..
именно? символическая ссылка? жесткая ссылка? Или он генерируется динамически в зависимости от пути доступа к каталогу? Или, возможно, мое понимание символических ссылок неверно.
Редактировать:
Другие связанные наблюдения
/outer/
middle/
file
inner/
f --> ./../file
inner --> ./middle/inner/
Теперь, если я пытаюсь получить доступ к файлу через /outer/inner/f
это работает. Но это не должно, так /outer/inner/../file
как не указывает на файл. файл находится в /outer/middle/inner/..
. Кажется, это противоречит описанному выше поведению !?
источник
Ответы:
..
это жесткая ссылка на родительский каталог, который создается как часть записи каталога.Если вы выполните
ls -ail
команду в каждом из этих каталогов, вы должны увидеть, что все следующие записи имеют одинаковоеinode
(первое поле) и количество жестких ссылок (третье поле):..
при выполненииls -ail
вinner
.
при выполненииls -ail
вmiddle
middle
при выполненииls -ail
вouter
Есть одна
..
запись вinner
. Если ваш текущий рабочий каталогouter
, вы должны увидеть те же результаты (список каталоговmiddle
) изls -al inner/..
ls -al middle/inner/..
Единственная ситуация , в которой «доступ»
..
через символическую ссылку необходимо обеспечить различное поведение, если вамcd
вinner
использовании символической ссылки, чтобы ваш логический рабочий каталог (pwd -L
) отличается от вашего физического рабочего каталога (pwd -P
). В этом случаеcd ..
вы вернетесьouter
не к тому, потому что есть другая..
запись, а к тому, что ваша оболочка отслеживает ваш логический рабочий каталог и выводит вас на один уровень, а не ссылается на фактическую..
запись вinner
.Это удобство, предоставляемое, например,
bash
как часть встроеннойcd
команды. Вы можете изменить это, попросив изменить фактическую..
запись с помощьюгде
-P
инструктируетcd
(как иpwd
выше) использовать физический путь.источник
cd
для проверки. Итак, поправьте меня, если я ошибаюсь,..
всегда указывает на физического родителя, если символическая ссылка использует..
его, будет направлена на фактического (физического) родителя. Путаница происходит только с входомcd
в каталоги.ls -lai
показывает вам, что/..
это сам корневой каталог,/.
или ( или/
). Если файловая система не сломана, не должно быть другого случая, когда. == ..
; даже когда fs где-то монтируется, он получает правильный..
(временный) родительский..
элемент (так что там происходит какое-то волшебство, а не просто статическая запись в таблице файловой системы).