Intereting Posts
Ошибка скрипта Bash: ожидается целочисленное выражение Самонастройка Linux при начальной загрузке Запустить программу с дополнительной дополнительной группой Есть ли способ определить из bash, что не так с рыбой? Система Fedora не завершает загрузку, если дисплей не подключен – почему? Самый быстрый способ разработки несжатого размера большого файла GZIPPED Не удается заставить беспроводную связь работать tar –occurrence = опция игнорируется? Ошибка сегментации при выполнении команды в rc.local Доступное консольное решение для физической машины под управлением OpenBSD? Как дублировать поток и обрабатывать обе части потоковым способом? Извлечь строку, если оба значения столбца отображаются в одном столбце из отдельного файла Как поставить программу «да» на задний план? Как sed -e /// 'все, кроме определенного шаблона? Мой Linux-сервер каждый день забывает имя своего хоста

Что такое точка точка (..)? Почему его поведение отличается от символических ссылок?

Я пытаюсь понять природу .. (двойная точка). Кажется, он указывает на разные цели в зависимости от того, как вы к нему обращаетесь.

Пример:-

  /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

Теперь / external / middle / inner / .. приводит к / external / middle /, но если я получаю доступ к нему через символическую ссылку, / external / inner / .. приводит к / external /. Кажется, что есть два разных … здесь.

Существует одна запись inner . Если ваш текущий рабочий каталог является outer , вы должны увидеть те же результаты (список из списка middle ) от

  • ls -al inner/..
  • ls -al middle/inner/..

Единственная ситуация, в которой «доступ» к символической ссылке должна обеспечивать различное поведение, – это если вы cd к inner с помощью символической ссылки, чтобы ваш логический рабочий каталог ( pwd -L ) отличался от вашего физического рабочего каталога ( pwd -P ). В этом случае cd .. вернет вас к outer не потому, что есть другая .. запись, а потому, что ваша оболочка отслеживает ваш логический рабочий каталог и выталкивает вас на один уровень, а не ссылается на фактическую запись .. inner .

Это удобство, предоставляемое, например, bash как часть встроенной команды cd . Вы можете переопределить это, попросив его перейти на фактическую запись с помощью

 cd -P .. 

где -P инструктирует cd (как и для pwd выше) использовать физический путь.

Каталог – это список файлов. В таком списке почти всегда есть два файла:. и .. Первый – это сама директория (поэтому она содержит некоторые данные о разрешениях каталога), а вторая – родительский каталог. Это упростит возврат в ценные каталоги, без необходимости повторного сканирования списка каталогов.

Эти две записи создаются при создании каталогов вместе с именем каталога и ссылкой в ​​родительском каталоге.