Có rất nhiều câu trả lời khá chính xác ở đây, nhưng tôi không nghĩ có ai thực sự giải quyết được sự hiểu lầm ban đầu. Câu hỏi ban đầu về cơ bản là "khi tôi tạo một liên kết tượng trưng, thật dễ dàng để xác định nó sau đó. Nhưng tôi không thể tìm ra cách xác định một liên kết cứng." Và vâng, các câu trả lời về cơ bản sôi nổi thành "bạn không thể", và ít nhiều giải thích lý do tại sao, nhưng dường như không ai thừa nhận rằng, thực sự, nó khó hiểu và kỳ lạ.
Nếu bạn đang đọc tất cả những điều này và bạn đã tìm ra điều gì đang xảy ra, thì bạn tốt; bạn không cần phải đọc một chút của tôi. Nếu bạn vẫn còn bối rối, thì hãy tiếp tục.
Câu trả lời thực sự rất ngắn là một liên kết cứng hoàn toàn không phải là một liên kết, không phải theo cách liên kết tượng trưng. Đây là một mục mới trong cấu trúc thư mục trỏ đến cùng một byte mà mục nhập thư mục gốc đã làm, và một khi bạn đã tạo nó, nó giống như 'thực' và hợp pháp như cái đầu tiên. Mỗi tệp 'bình thường' trên ổ đĩa của bạn có ít nhất một liên kết cứng; không có điều đó, bạn sẽ không thấy nó trong bất kỳthư mục, và sẽ không thể đề cập đến nó hoặc sử dụng nó. Vì vậy, nếu bạn có tệp Fred.txt và bạn liên kết cứng Wilma.txt và Barney.txt với nó, cả ba tên (và mục nhập thư mục) đều tham chiếu đến cùng một tệp và chúng đều có giá trị như nhau. HĐH không có cách nào để nói rằng một trong những mục được tạo khi bạn nhấn "lưu" trong trình soạn thảo văn bản của mình và các mục khác được tạo bằng lệnh "ln".
Các hệ điều hành không phải theo dõi có bao nhiêu mục khác nhau được trỏ đến cùng một tập tin, mặc dù. Nếu bạn xóa Wilma.txt, không có gì ngạc nhiên khi bạn không giải phóng bất kỳ dung lượng nào trên ổ đĩa của mình. Nhưng nếu bạn xóa Fred.txt (tệp 'gốc'), bạn vẫn sẽ không giải phóng bất kỳ dung lượng nào trên ổ đĩa của mình, vì dữ liệu trên ổ đĩa được gọi là Fred.txt vẫn là Barney.txt. Chỉ khi bạn xóa tất cả các mục trong thư mục, HĐH mới phân bổ lại không gian mà dữ liệu đang chiếm giữ.
Nếu Barney.txt là một liên kết tượng trưng, thì việc xóa Fred.txt sẽ được phân bổ lại không gian và Barney.txt bây giờ sẽ là một liên kết bị hỏng. Ngoài ra, nếu bạn di chuyển hoặc đổi tên một tệp có liên kết tượng trưng chỉ vào nó, bạn sẽ phá vỡ liên kết. Nhưng bạn có thể di chuyển hoặc đổi tên một tệp được liên kết cứng tất cả những gì bạn muốn mà không phá vỡ các mục nhập thư mục khác trỏ đến tệp / dữ liệu đó, bởi vì tất cả chúng đều là các mục nhập thư mục tham chiếu đến cùng một khối dữ liệu trên ổ đĩa (bằng cách sử dụng inode # của dữ liệu đó).
[Đó là hai năm sau, và điều đó cuối cùng làm tôi bối rối trong một phút, vì vậy tôi nghĩ tôi sẽ làm rõ. Nếu bạn nhập "mv ./Wilma.txt ../elsewhere/Betty.txt" thì có vẻ như bạn đang di chuyển tệp, nhưng thực tế, bạn không làm vậy. Những gì bạn thực sự đang làm là xóa một mục hàng khỏi danh sách thư mục của thư mục hiện tại của bạn, mục có tên "Wilma.txt" được liên kết với dữ liệu có thể được tìm thấy bằng cách sử dụng inode ####### #, "và thêm một mục hàng mới vào danh sách thư mục của thư mục ../elsewhere có tên" tên 'Betty.txt' được liên kết với dữ liệu có thể được tìm thấy qua inode ####### ". Đây là lý do tại sao bạn có thể 'di chuyển' tệp 2 gigabyte nhanh như tệp 2 kilobyte, miễn là bạn đang di chuyển chúng đến một vị trí khác trên cùng một ổ đĩa.]
Vì HĐH phải theo dõi xem có bao nhiêu mục nhập thư mục khác nhau đang trỏ đến cùng một khối dữ liệu, bạn có thể biết liệu một tệp cụ thể có được liên kết cứng hay không, mặc dù bạn không thể biết chắc chắn liệu mục nhập thư mục đó có phải là bạn không "Đang xem có phải là" bản gốc "hay không. Một cách là lệnh "ls", cụ thể là "ls -l" (đó là chữ L viết thường sau dấu gạch ngang)
Để mượn một ví dụ trước đó ....
-rw-r--r-- 3 stephane stephane 0 Nov 12 19:55 f1
Chữ cái đầu tiên là một dấu gạch ngang, vì vậy nó không phải là một thư mục hoặc một cái gì đó kỳ lạ, đó là một tệp thông thường 'thông thường'. Nhưng nếu nó thực sự bình thường, con số đó sau phần rwx-ish sẽ là "1", như trong "có một mục nhập thư mục trỏ đến khối dữ liệu này." Nhưng đó là một phần của một cuộc biểu tình của các liên kết cứng, vì vậy thay vào đó nó nói "3".
Lưu ý rằng điều này có thể có thể dẫn đến hành vi kỳ lạ và bí ẩn (nếu bạn không quấn đầu quanh các liên kết cứng, đó là). Nếu bạn mở Fred.txt trong trình soạn thảo văn bản của mình và thực hiện một số thay đổi, bạn sẽ thấy những thay đổi tương tự trong Wilma.txt và Barney.txt? Có lẽ. Có lẽ. Nếu trình soạn thảo văn bản của bạn lưu các thay đổi bằng cách mở tệp gốc và viết các thay đổi cho nó, thì có, cả ba tên sẽ vẫn được trỏ vào cùng một văn bản (mới được thay đổi). Nhưng nếu trình soạn thảo văn bản của bạn tạo một tệp mới (Fred-new-temp.txt), hãy viết phiên bản đã thay đổi của bạn thành đó, sau đó xóa Fred.txt, sau đó đổi tên Fred-new-temp.txt thành Fred.txt, Wilma và Barney sẽ vẫn được trỏ đến phiên bản gốc, không phải phiên bản mới thay đổi. Nếu bạn không hiểu các liên kết cứng, điều này có thể khiến bạn hơi phát điên. :) [Được rồi, tôi thực sự không biết cá nhântrình soạn thảo văn bản sẽ thực hiện điều mới / đổi tên, nhưng tôi biết rất nhiều chương trình khác thực hiện chính xác điều đó, vì vậy hãy cảnh giác.]
Lưu ý cuối cùng: một trong những điều mà 'fsck' (kiểm tra hệ thống tệp) kiểm tra là nếu có khối dữ liệu trên ổ đĩa của bạn mà bằng cách nào đó không còn được tham chiếu bởi bất kỳ mục nhập thư mục nào. Đôi khi có lỗi xảy ra và mục nhập thư mục duy nhất trỏ đến một nút bị xóa nhưng không gian ổ đĩa không được đánh dấu là "có sẵn". Vì vậy, một trong những công việc của fsck là khớp tất cả không gian được phân bổ với tất cả các mục trong thư mục để đảm bảo rằng không có bất kỳ tệp nào không được ước tính. Nếu nó tìm thấy một số, nó tạo ra các mục thư mục mới và đặt chúng vào "mất + tìm thấy".