Đối với một cái không hoạt động, nếu chúng ta nhìn vào ls -l
kết quả, chúng ta sẽ nhận được những điều sau đây:
[sparticvs@sparta test]$ ls -l build/
total 0
lrwxrwxrwx. 1 sparticvs sparticvs 6 Dec 17 16:08 client -> client
Bây giờ để hiểu những gì đang xảy ra ở đây. Hãy nhìn vào lệnh bạn đã gọi:
ln -s client build/client
Theo Man Page, có hai kết quả phù hợp với định dạng này
SYNOPSIS
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
Nó sẽ phù hợp trên mẫu đầu tiên (kể từ lần đầu tiên). Bây giờ, "tên đích" hoặc client
trong trường hợp của bạn, có thể là (theo ln
hướng dẫn hoàn chỉnh ) các chuỗi tùy ý. Họ không phải giải quyết bất cứ điều gì ngay bây giờ, nhưng có thể giải quyết vấn đề nào đó trong tương lai. Những gì bạn đang tạo với lời mời của bạn là một "liên kết tượng trưng" và hệ thống không ngăn bạn tạo ra những thứ này.
Bây giờ lời mời thứ hai của bạn ln -s ../client build/client
là cái được gọi là "liên kết tương đối" (như bạn đã lưu ý trong bài đăng của riêng bạn). Có một loại thứ hai và đó là một "liên kết tượng trưng tuyệt đối" sẽ được gọi bằng cách thực hiện ln -s /home/user/client build/client
.
Đây không phải là một lỗi. Theo hướng dẫn, nó nêu:
Khi tạo một liên kết tượng trưng tương đối ở một vị trí khác với thư mục hiện tại, độ phân giải của liên kết tượng trưng sẽ khác với độ phân giải của cùng một chuỗi từ thư mục hiện tại. Do đó, nhiều người dùng trước tiên muốn thay đổi thư mục thành vị trí nơi tạo liên kết tương đối, do đó, việc hoàn thành tab hoặc độ phân giải tệp khác sẽ tìm thấy cùng một mục tiêu như những gì sẽ được đặt trong liên kết tượng trưng.
-- từ info coreutils 'ln invocation'
Điều đó nói rằng, bạn PHẢI sử dụng đường dẫn tương đối hoặc tuyệt đối đến mục tiêu.