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


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.