Làm thế nào để bạn sử dụng các liên kết tượng trưng?

Tôi sẽ trả lời câu hỏi này từ góc độ của một người dùng *nix [cụ thể là Linux]. Nếu bạn quan tâm đến cách điều này liên quan đến Windows, tôi khuyên bạn nên tìm các hướng dẫn như hướng dẫn này. Đây sẽ là một chút vòng vo, nhưng tôi thấy rằng các liên kết tượng trưng hoặc liên kết tượng trưng được giải thích tốt nhất cùng với các liên kết cứng và thuộc tính chung của một hệ thống tệp trên Linux

Theo nguyên tắc thông thường, trong Linux, mọi thứ được coi là một tệp. Thư mục là các tệp chứa ánh xạ từ tên [đường dẫn] đến inode, đây chỉ là số nhận dạng duy nhất của các đối tượng khác nhau nằm trên hệ thống của bạn. Về cơ bản, nếu tôi đặt cho bạn một cái tên như /home/gst/mydog.png, quy trình truy cập trước tiên sẽ xem xét thư mục / [thư mục gốc], nơi nó sẽ tìm thấy thông tin về nơi tìm thấy home, sau đó mở tệp đó, nó sẽ xem xét nó để xem gst ở đâu . Quay trở lại các tệp thư mục, ánh xạ mà chúng chứa được gọi là links. Điều này đưa chúng ta đến các liên kết cứng và mang tính biểu tượng

Một liên kết cứng chỉ là một ánh xạ giống như cái mà chúng ta đã thảo luận trước đây. Nó trỏ trực tiếp đến một đối tượng nhất định. Mặt khác, một liên kết tượng trưng không trỏ trực tiếp đến một đối tượng. Thay vào đó, nó chỉ lưu một đường dẫn đến một đối tượng. Ví dụ: giả sử rằng tôi đã tạo một liên kết tượng trưng tới /home/gst/mydog.png tại /home/gst/Desktop/mycat.png với os.symlink["/home/gst/mydog.png", "/home/gst/Desktop/mycat.png"]. Khi tôi cố mở nó, tên /home/gst/Desktop/mycat.png thường được giải thành /home/gst/mydog.png. Bằng cách đi theo liên kết tượng trưng tại /home/gst/Desktop/mycat.png, tôi thực sự [cố gắng] truy cập một đối tượng được chỉ ra bởi /home/gst/mydog.png

Nếu tôi tạo một liên kết cứng [ví dụ bằng cách gọi /3], tôi chỉ cần thêm các mục nhập vào các tệp thư mục có liên quan, sao cho tên cụ thể có thể được theo sau đối tượng được liên kết. Khi tôi tạo một liên kết tượng trưng, ​​tôi tạo một tệp chứa đường dẫn đến một tệp khác [có thể là một liên kết tượng trưng khác]

Cụ thể hơn cho câu hỏi của bạn, nếu tôi vượt qua /home/gst/Desktop/mycat.png đến /5, nó sẽ trả về /home/gst/mydog.png. Việc phân giải tên này cũng xảy ra khi gọi các hàm trong /7 với tham số [tùy chọn] /8 được đặt thành /9, tuy nhiên, nếu nó được đặt thành home0 thì tên đó sẽ không được giải quyết [ví dụ: bạn sẽ đặt thành false khi bạn muốn thao tác . Từ tài liệu mô-đun

không theo liên kết tượng trưng. Nếu follow_symlinks là home0 và phần tử cuối cùng của đường dẫn hoạt động trên đó là một liên kết tượng trưng, ​​thì hàm sẽ hoạt động trên chính liên kết tượng trưng thay vì tệp mà liên kết trỏ tới. [Đối với các hệ thống POSIX, Python sẽ gọi phiên bản home2 của hàm. ]

Bạn có thể kiểm tra xem nền tảng của mình có hỗ trợ follow_symlinks hay không bằng cách sử dụng. Nếu nó không có sẵn, sử dụng nó sẽ tăng

Câu hỏi này đã được trả lời, trích dẫn từ câu trả lời được chấp nhận

Ưu điểm chính của liên kết cứng là không bị phạt về kích thước hoặc tốc độ so với liên kết mềm. Liên kết mềm là một lớp định hướng bổ sung bên trên quyền truy cập tệp thông thường; . Liên kết cũng chiếm một lượng nhỏ dung lượng trên đĩa để chứa văn bản của liên kết. Những hình phạt này không tồn tại với các liên kết cứng vì chúng được tích hợp vào chính cấu trúc của hệ thống tệp

Tôi muốn thêm rằng các liên kết cứng cho phép một phương pháp sao lưu tệp dễ dàng. Đối với mỗi tệp, hệ thống giữ số lượng liên kết cứng của nó. Khi số lượng này đạt đến 0, phân đoạn bộ nhớ chứa tệp được đánh dấu là miễn phí, nghĩa là hệ thống cuối cùng sẽ ghi đè lên tệp đó bằng dữ liệu khác [xóa tệp trước đó một cách hiệu quả - điều này không xảy ra ít nhất trong khoảng thời gian chạy . Tại sao điều đó lại quan trọng?

Giả sử bạn có một thư mục lớn chứa đầy các tệp mà bạn muốn thao tác bằng cách nào đó [đổi tên một số, xóa các tệp khác, v.v. ] và bạn viết một kịch bản để làm điều này cho bạn. Tuy nhiên, bạn không hoàn toàn chắc chắn rằng tập lệnh sẽ hoạt động như dự định và bạn lo sợ rằng tập lệnh có thể xóa nhầm một số tệp. Bạn cũng không muốn sao chép tất cả các tệp vì điều này sẽ chiếm quá nhiều dung lượng và thời gian. Một giải pháp là chỉ tạo một liên kết cứng cho mỗi tệp tại một số điểm khác trong hệ thống tệp. Nếu bạn xóa một tệp trong thư mục đích, đối tượng được liên kết vẫn khả dụng vì có một liên kết cứng khác được liên kết với nó. Tạo nhiều liên kết cứng như vậy sẽ tiêu tốn ít thời gian và dung lượng hơn nhiều so với sao chép tất cả tệp, nhưng nó sẽ cung cấp cho bạn một chiến lược sao lưu hợp lý

Đây không phải là trường hợp với các liên kết tượng trưng. Hãy nhớ rằng, các liên kết tượng trưng trỏ đến các liên kết khác [cũng có thể là một liên kết tượng trưng khác] chứ không phải các tệp thực tế. Do đó, tôi có thể tạo một liên kết tượng trưng tới một tệp, nhưng nó sẽ chỉ lưu liên kết. Nếu liên kết cứng [cuối cùng] mà liên kết tượng trưng trỏ đến bị xóa khỏi hệ thống, việc cố gắng giải quyết liên kết tượng trưng sẽ không dẫn bạn đến một tệp. Các liên kết tượng trưng như vậy được cho là "bị hỏng" hoặc "treo". Do đó, bạn không thể dựa vào các liên kết tượng trưng để duy trì quyền truy cập vào một tệp nhất định. [Ngược lại, việc xóa một liên kết tượng trưng không ảnh hưởng đến số lượng liên kết được liên kết với tệp đích. ] Vậy công dụng của chúng là gì?

Bạn có thể thao tác trên các liên kết tượng trưng như thể chúng là các tệp thực tế mà chúng trỏ tới đâu đó trên dòng [ngoại trừ việc xóa chúng]. Điều này cho phép bạn có nhiều "điểm truy cập" vào một tệp mà không có các bản sao dư thừa [vẫn được cập nhật vì chúng luôn truy cập cùng một tệp]. Nếu bạn muốn thay thế tệp đang được truy cập, bạn chỉ cần thay đổi tệp đó một lần và tất cả các liên kết tượng trưng sẽ trỏ đến tệp đó [miễn là đường dẫn được lưu bởi chúng không bị thay đổi]. Tuy nhiên, nếu bạn có liên kết cứng đến một tệp nhất định và sau đó bạn thay thế tệp đó bằng một tệp khác, bạn cũng cần thay thế các liên kết cứng vì nếu không chúng sẽ vẫn trỏ đến tệp cũ

Cuối cùng, không có gì lạ khi có các hệ thống tệp khác nhau được gắn trên cùng một máy Linux. Điều đó có nghĩa là, cách dữ liệu được tổ chức và diễn giải tại một số điểm trong hệ thống phân cấp tệp [giả sử home3] có thể khác với cách dữ liệu được tổ chức và diễn giải tại một điểm khác [giả sử home4]. Một liên kết cứng chỉ có thể nằm trên cùng một hệ thống tệp với tệp mà nó trỏ tới. Trong khi đó, một liên kết tượng trưng có thể được tạo trên một hệ thống tệp nhưng trỏ hiệu quả đến một tệp trên hệ thống tệp khác [xem câu trả lời cho câu hỏi này]

Chủ Đề