NAME ln -- make a link
SYNOPSIS ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1.
If name2 is given, the link has that name;
Từ 1971 Hướng dẫn sử dụng phiên bản đầu tiên của Unix .
Có một hình thức cú pháp thứ hai , đơn giản.
chỉnh sửa: Tôi đặt FILE hoặc FILENAME thay vì MỤC TIÊU --- xem ý kiến, vv xem thêm bổ sung rất dài ở phía dưới, giải quyết các tảng băng trôi, cứng và mềm của ln
, không chỉ là đỉnh của nó.
Vì vậy, GNU ln
có điều này:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
nơi bạn không cần tên liên kết. Sau khi ln -s /usr/lib/modules
bạn nhận được một
modules -> /usr/lib/modules
có cùng tên với FILENAME ("đích" hoặc "nguồn"), ngay tại nơi bạn đang ở. Không có sự lựa chọn, không có sự nhầm lẫn.
Bây giờ nếu bạn đòi hỏi nhiều hơn và muốn liên kết được tạo dưới tên khác và / hoặc ở một nơi khác , bạn thêm mong muốn đó dưới dạng tên hoặc đường dẫn. Mục tiêu thực sự đến trước, tên liên kết mới giả tưởng thứ hai.
Hoặc bạn nói: "Tôi biết ký hiệu mũi tên này trong ls -l
các liên kết. Tôi không có mũi tên trong vỏ để hiển thị hướng liên kết của mình. Vì vậy, tôi phải xoay nó lại."
Bạn tạo nó theo một hướng, vì vậy bạn có thể sử dụng nó theo hướng khác.
(KẾT THÚC PHẦN TRẢ LỜI-CÂU HỎI)
Ở một cấp độ khác, từ "liên kết" tự nó mang một ý nghĩa kép ẩn sâu. Liên kết tượng trưng đến sau, vì vậy trong những ngày đầu, một liên kết chỉ là một liên kết. Không có mềm và cứng, không có -s
tùy chọn. Và bây giờ tôi thậm chí sử dụng biểu tượng nguồn-đích:
mv A B --- move the whole file to B (dir or new name)
cp A B --- copy whole file (mv and cp are "the same" here)
ln A B --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
Ở giai đoạn này, có các liên kết, nhưng không cứng và mềm, và ls -l
không hiển thị mũi tên, vì không có hướng trong liên kết (cứng). Một "liên kết" ở giai đoạn tiến hóa unix đó có nghĩa là tên tệp "B" (mục nhập thư mục "B") trong hệ thống tệp trỏ đến cùng một nút như tên tệp "A" đang trỏ đến.
Các tệp A và B được "liên kết" với nhau, vì chúng có chung các khối. Vì vậy, bây giờ với mỗi rm, kernel phải kiểm tra: tôi có xóa / giải phóng các khối của tệp này trên đĩa không, hoặc có tệp nào khác được liên kết với cùng một khối không? Cho rằng, một bộ đếm liên kết được sử dụng.
Giả sử bạn muốn giữ một tệp lớn trên / tmp grom bị xóa và làm ln /tmp/bigfile
. Bây giờ bạn có một bigfile lớn trong thư mục làm việc của bạn. Sau khi làm sạch / tmp và di chuyển "bản gốc", bạn vui vẻ tiếp tục sử dụng các khối dữ liệu tương tự. Bạn không nhận được một liên kết chết hoặc lơ lửng, bạn có một tập tin bình thường. Chỉ vào không có tệp mà chỉ chặn các hệ thống tệp như mọi mục nhập dir. Chỉ bây giờ "làm sạch" / tmp không hiệu quả như trước đây. Nó trông có vẻ trống rỗng, nhưng nó là, nhưng các khối trên phân vùng không được giải phóng.
Mặc dù một liên kết cứng không tốn chi phí không gian như cp, nhưng gián tiếp, nó có thể.
Thêm ln -s
vào chuỗi trên:
ln -s A B --- copy only the file's name to "B"
Bây giờ "B", liên kết mềm, chỉ có một chuỗi có tên đường dẫn. Đây là thông tin "mềm". Về mặt kỹ thuật "A" và "B" không liên quan. Nhưng B vẫn là một "liên kết" theo nghĩa mới mà bạn có thể sử dụng tên đường dẫn được lưu trữ đó làm lối tắt đến "A". Bây giờ nó là "một liên kết đến A" (dấu chấm) chứ không phải "được liên kết với tệp Aode"
Cả hai loại liên kết có thể gây nhầm lẫn không chỉ con người mà cả kernel / fs. Trang man năm 1971 ghi chú: "BUGS: các liên kết được sao lưu hai lần và được khôi phục dưới dạng các tệp riêng biệt với các nút riêng biệt."
Liên kết cứng đến thư mục (hiếm / không được phép) có thể dễ dàng dẫn đến tắc nghẽn.
Liên kết mềm đến thư mục (rất phổ biến) có thể dẫn đến các vòng lặp vĩnh cửu - phải được công nhận bởi các tiện ích / kernel.
Ví dụ thực tế trong bash
Bắt đầu với một tệp thông thường "F" ...
ln F Fhard
... Làm cho Fhard có cùng kích thước với F, nhưng bây giờ cả hai đều xuất hiện trong một màu đỏ sẫm mà KHÔNG CÓ mũi tên nào ls -l --color
. Vì stat
hiển thị "Liên kết: 2" liên quan đến "Inode: xyz". Liên kết cứng F tự biến F thành một liên kết cứng. Cả hai đều / giữ nguyên kiểu "tệp thông thường". Nhưng cả hai đều có một nút có số liên kết trên 1.
ln -s F Fsoft
... Tạo một tệp "Fsoft" nhỏ "không đều" với "liên kết tượng trưng" filetype --- thậm chí còn tiết kiệm không gian hơn so với một thư mục trống. A ls -l
cho thấy không có gì đặc biệt cho "F". Đối với Fsoft, kích thước hiển thị là 1 byte vì chuỗi là 'F' và Fsoft -> F
được hiển thị dưới dạng tên. Không cần phải tô màu một liên kết mềm để nhận ra một liên kết. Bởi vì ở dạng ngắn, ls -F
bạn nhận được một chuỗi cuộn được @
nối thêm:Fsoft@
Với ls -l
nó trông như thế này:
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root 1 Sep 16 16:31 Fsoft -> F
Fhard có kích thước và loại của F.
Fsoft có tên của F và chiều dài của tên F là kích thước và một loại tệp khác.
Ngắn gọn ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
thêm --block-size=1
không mang lại kích thước tương tự hoặc. Fsoft có kích thước "một byte, khối không". F và Fhard đi song song:
6074368 F 6074368 Fhard 0 Fsoft@
Để xem Fsoft có lơ lửng hay không, ls
cho phép bạn sử dụng màu sắc.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
và gọi nób
"