Chính xác thì chấm là gì (..)? Tại sao hành vi của nó khác với symlink?


14

Tôi đang cố gắng để hiểu bản chất của ..(dấu chấm kép). Nó dường như chỉ đến các mục tiêu khác nhau tùy thuộc vào cách bạn truy cập nó.

Thí dụ:-

    /outer/
        middle/
            inner/
        inner --> ./middle/inner/

Bây giờ, /outer/middle/inner/..dẫn đến /outer/middle/, nhưng nếu tôi truy cập nó thông qua liên kết tượng trưng, /outer/inner/..dẫn đến /outer/. Dường như có hai khác nhau ..ở đây.

..Chính xác là gì? liên kết tượng trưng? liên kết cứng? Hoặc nó được tạo động tùy thuộc vào đường dẫn khi thư mục được truy cập? Hoặc có lẽ sự hiểu biết của tôi về các liên kết tượng trưng là sai.

Biên tập:

Quan sát khác có liên quan

    /outer/
        middle/
            file
            inner/
               f --> ./../file
        inner --> ./middle/inner/

Bây giờ nếu tôi cố gắng truy cập tập tin thông qua /outer/inner/fnó hoạt động. Nhưng nó không nên /outer/inner/../filechỉ vào một tập tin. các tập tin được trong /outer/middle/inner/... Điều này dường như mâu thuẫn với hành vi ở trên!?


Lưu ý rằng các liên kết tượng trưng không phải là phím tắt; chúng giống như con trỏ hơn.
wizzwizz4

Câu trả lời:


34

..là một liên kết cứng đến thư mục mẹ được tạo như một phần của mục nhập thư mục.

Nếu bạn phát hành ls -ailtrong mỗi thư mục này, bạn sẽ thấy rằng tất cả các mục sau đây đều có cùng inode(trường thứ nhất) và số liên kết cứng (trường thứ ba):

  • ..khi thực hiện ls -ailtronginner
  • .khi thực hiện ls -ailtrongmiddle
  • middlekhi thực hiện ls -ailtrongouter

Bây giờ, / bên ngoài / giữa / bên trong / .. dẫn đến / bên ngoài / giữa /, nhưng nếu tôi truy cập nó thông qua liên kết tượng trưng, ​​/ bên ngoài / bên trong / .. dẫn đến / bên ngoài /. Dường như có hai khác nhau .. ở đây.

Có một ..mục trong inner. Nếu thư mục làm việc hiện tại của bạn là outer, bạn sẽ thấy kết quả tương tự (danh sách thư mục của middle) từ

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

Tình hình duy nhất mà "tiếp cận" ..thông qua các liên kết tượng trưng nên cung cấp hành vi khác nhau là nếu bạn cdvào innerbằng cách sử dụng liên kết tượng trưng, do đó bạn logic thư mục làm việc ( pwd -L) khác với của bạn vật lý thư mục làm việc ( pwd -P). Trong trường hợp này, cd ..bạn sẽ quay trở lại outer không phải vì có một ..mục khác , mà bởi vì trình bao của bạn đang theo dõi thư mục làm việc logic của bạn và đưa bạn ra một cấp, thay vì tham chiếu ..mục thực tế inner.

Đây là một tiện ích được cung cấp bởi, ví dụ bashnhư là một phần của cdlệnh tích hợp. Bạn có thể ghi đè lên điều này bằng cách yêu cầu nó thay đổi thành ..mục thực tế với

cd -P ..

trong đó -Phướng dẫn cd(như với pwdở trên) để sử dụng đường dẫn vật lý.


Aha, sự nhầm lẫn đến từ việc sử dụng cdđể kiểm tra. Vì vậy, hãy sửa cho tôi nếu tôi sai, ..luôn luôn trỏ đến cha mẹ vật lý, Nếu một liên kết tượng trưng sử dụng ..nó sẽ được chuyển hướng đến cha mẹ thực tế (vật lý). Sự nhầm lẫn xảy ra chỉ với cding vào thư mục.
user98456

Điều này cũng giải thích hành vi giây. Cảm ơn rât nhiều.
user98456

3
@Theophrastus, ls -laicho bạn thấy đó /..là thư mục gốc, một lần nữa (aka /. hoặc /). Trừ khi hệ thống tập tin bị hỏng, không nên có trường hợp nào khác . == ..; ngay cả khi một fs được gắn ở đâu đó, nó vẫn đúng ..với cha mẹ (tạm thời) (vì vậy có một số phép thuật đang diễn ra ở đó, ..không chỉ là một mục đơn giản, tĩnh trong bảng hệ thống tệp).
AnoE
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.