Що саме є точковою точкою (..)? Чому його поведінка відрізняється від символьних посилань?


15

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

Приклад: -

    /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/... Це, здається, суперечить поведінці вище !?


Зауважте, що символьні посилання - це не ярлики; вони більше схожі на покажчики.
— wizzwizz4

Відповіді:


35

..- жорстке посилання на батьківський каталог, який створюється як частина запису каталогу.

Якщо ви видаєте 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команди. Ви можете змінити це, запропонувавши йому змінити фактичний ..запис на

cd -P ..

де -Pдоручає cd(як і pwdвище) використовувати фізичний шлях.


Ага, плутанина походить від використання cdдля перевірки. Отже, виправте мене, якщо я помиляюся, ..завжди вказує на фізичного батька. Якщо символьне посилання використовує, ..воно буде спрямоване на фактичного (фізичного) батька. Плутанина трапляється лише при cdпереході до каталогів.
— user98456

Це також пояснює поведінку секунд. Велике спасибі.
— user98456

3
@Theophrastus, знову ls -laiпоказує, що /..це сам кореневий каталог (ака /. чи /). Якщо файлова система не порушена, не повинно бути жодного іншого випадку . == ..; навіть коли FS встановлений десь, він отримує правильність ..(тимчасового) батька (тому там відбувається якась магія, ..це не просто простий, статичний запис у таблиці файлової системи).
— AnoE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.