Lệnh ln trong Linux

ln [tùy chọn] … [-T] đích tên_liên_kết (định dạng thứ nhất)

ln [tùy_chọn] … đích (định dạng thứ hai)

ln [tùy_chọn] … đích … thư_mục (định dạng thứ ba)

ln [tùy_chọn] … -t thư_mục đích … (định dạng thứ tư)

Trong định dạng thứ nhất, tạo liên kết có tên đã chỉ định và trỏ đến đích đã chỉ định.

Trong định dạng thứ hai, tạo liên kết cùng tên trong thư mục hiện tại trỏ đến vị trí đích.

Trong định dạng thứ ba và thứ tư, tạo liên kết cùng tên trong thư mục đã chỉ định trỏ đến đích.

Mặc định tạo liên kết cứng. Khi tạo liên kết mềm (liên kết biểu tượng), phải sử dụng tùy chọn -s hoặc --symbolic.

Lưu ý: Không thể có cùng tên tệp trong cùng một vị trí. Khi tạo liên kết, cần lưu ý đặc tính của liên kết cứng và liên kết mềm.

Phân biệt liên kết cứng và liên kết mềm: liên kết cứng và liên kết mềm

(1). Tùy chọn

--backup[=CONTROL] Tạo tệp sao lưu cho mỗi tệp đích đã tồn tại (liên kết cùng tên với tệp đích)
-b Tương tự --backup, nhưng không chấp nhận bất kỳ tham số nào
-d,-F,--directory Tạo liên kết cứng trỏ đến thư mục (chỉ dành cho超级用户)
-f,--force Xóa bất kỳ tệp đích đã tồn tại nào bằng vũ lực
-i,--interactive Yêu cầu xác nhận trước khi xóa tệp
-L,--logical Tạo liên kết cứng dưới dạng tham chiếu liên kết biểu tượng
-n,--no-dereference Nếu đích là liên kết biểu tượng trỏ đến thư mục, sẽ xử lý liên kết biểu tượng này như tệp thông thường, sao lưu hoặc xóa liên kết đã tồn tại trước
-s,--symbolic Tạo liên kết biểu tượng thay vì liên kết cứng
-S,--suffix=tiền_tố Chỉ định hậu tố cho tệp sao lưu
-t,--target-directory=thư_mục Tạo liên kết trong thư mục đã chỉ định
-T,--no-target-directory Xử lý tên liên kết như tệp thông thường
-v,--verbose Liệt kê tên của mỗi tệp trước khi tạo liên kết

(2). Ví dụ

Trước tiên, hiển thị bốn định dạng tạo liên kết để hiểu rõ sự khác biệt giữa các định dạng

[dev@linux ~]$ ls
public  template  video  images  documents  downloads  music  desktop
[dev@linux ~]$ touch data
[dev@linux ~]$ mkdir projectDir DirA DirB
//Định dạng thứ nhất, tạo liên kết đích có tên đã chỉ định
[dev@linux ~]$ ln data linkA
[dev@linux ~]$ ls -l linkA 
-rw-rw-r--. 2 dev dev 0 3月  11 10:51 linkA
//Đích và liên kết đều có thể sử dụng đường dẫn tuyệt đối hoặc tương đối
[dev@linux ~]$ ln /home/dev/data ./projectDir/linkB
[dev@linux ~]$ ls -l projectDir/linkB
-rw-rw-r--. 3 dev dev 0 3月  11 10:51 projectDir/linkB
[dev@linux ~]$ cd projectDir/
[dev@linux projectDir]$ ls -l linkB 
-rw-rw-r--. 3 dev dev 0 3月  11 10:51 linkB
//Định dạng thứ hai, tạo liên kết cùng tên trong thư mục hiện tại
[dev@linux projectDir]$ ln /home/dev/data
[dev@linux projectDir]$ ls -l
Tổng dung lượng 0
-rw-rw-r--. 4 dev dev 0 3月  11 10:51 data
-rw-rw-r--. 4 dev dev 0 3月  11 10:51 linkB
//Định dạng thứ ba và thứ tư, tạo liên kết cùng tên trong thư mục đã chỉ định
[dev@linux projectDir]$ ln ../data ../DirA/
[dev@linux projectDir]$ ln -t ../DirB/ ../data
[dev@linux projectDir]$ cd ../DirA
[dev@linux DirA]$ ls -l
Tổng dung lượng 0
-rw-rw-r--. 6 dev dev 0 3月  11 10:51 data
[dev@linux DirA]$ cd ../DirB
[dev@linux DirB]$ ls -l
Tổng dung lượng 0
-rw-rw-r--. 6 dev dev 0 3月  11 10:51 data
//Để kiểm tra xem có phải là liên kết cứng hay không, có thể xem số inode của tất cả các tệp
[dev@linux DirB]$ stat /home/dev/data | grep Inode
Thiết bị:803h/2051d	Inode:52016343    Liên kết:6
[dev@linux DirB]$ stat /home/dev/linkA |grep Inode
Thiết bị:803h/2051d	Inode:52016343    Liên kết:6
[dev@linux DirB]$ stat /home/dev/projectDir/linkB |grep Inode
Thiết bị:803h/2051d	Inode:52016343    Liên kết:6
[dev@linux DirB]$ stat /home/dev/projectDir/data |grep Inode
Thiết bị:803h/2051d	Inode:52016343    Liên kết:6
[dev@linux DirB]$ stat /home/dev/DirA/data |grep Inode
Thiết bị:803h/2051d	Inode:52016343    Liên kết:6
[dev@linux DirB]$ stat /home/dev/DirB/data |grep Inode
Thiết bị:803h/2051d	Inode:52016343    Liên kết:6

Tạo liên kết cứng và liên kết mềm cho tệp

[dev@linux ~]$ touch sample.txt  //Tạo tệp kiểm tra
[dev@linux ~]$ ln sample.txt hardLink  //Tạo liên kết cứng
[dev@linux ~]$ ln -s sample.txt softLink  //Tạo liên kết mềm
[dev@linux ~]$ ls -l link*
-rw-rw-r--. 2 dev dev 0 Mar 11 11:33 hardLink
lrwxrwxrwx. 1 dev dev 4 Mar 11 11:33 softLink -> sample.txt

So sánh sự khác biệt dựa trên đặc tính của liên kết cứng và liên kết mềm

//Đặc tính thứ nhất, liên kết cứng và tệp nguồn có cùng số inode và data block, sửa đổi thuộc tính tệp hoặc dữ liệu tệp sẽ ảnh hưởng đến tất cả các liên kết cứng (bao gồm tệp nguồn);
//liên kết mềm tuy có riêng số inode và data block, nhưng thực chất vẫn sửa đổi tệp nguồn
[dev@linux ~]$ stat sample.txt |grep Inode  //Có thể sử dụng ls -i sample.txt để xem
Thiết bị: 803h/2051d	Inode: 52016343    Liên kết: 2
[dev@linux ~]$ stat hardLink |grep Inode
Thiết bị: 803h/2051d	Inode: 52016343    Liên kết: 2
[dev@linux ~]$ stat softLink |grep Inode
Thiết bị: 803h/2051d	Inode: 52016746    Liên kết: 1
[dev@linux ~]$ echo "test data" >> hardLink  //Sửa đổi dữ liệu tệp qua liên kết cứng
[dev@linux ~]$ cat sample.txt 
test data
[dev@linux ~]$ echo "more data" >> softLink  //Sửa đổi dữ liệu tệp qua liên kết mềm 
[dev@linux ~]$ cat sample.txt 
test data
more data
[dev@linux ~]$ ll sample.txt softLink
-rw-rw-r--. 2 dev dev 0 3月 11 14:27 sample.txt
lrwxrwxrwx. 1 dev dev 4 3月 11 14:28 softLink -> sample.txt
[dev@linux ~]$ chmod +x softLink  //Sửa đổi thuộc tính tệp qua liên kết mềm
[dev@linux ~]$ ll sample.txt softLink
-rwxrwxr-x. 2 dev dev 0 3月 11 14:27 sample.txt
lrwxrwxrwx. 1 dev dev 4 3月 11 14:28 softLink -> sample.txt
[dev@linux ~]$ stat sample.txt 
Tệp:"sample.txt"
Kích thước:0 Khối:0 IO Khối:4096 Tệp rỗng thông thường
Thiết bị:803h/2051d	Inode:52016343 Liên kết:2
Quyền:(0775/-rwxrwxr-x) Uid:( 1000/ dev) Gid:( 1000/ dev)
Môi trường:unconfined_u:object_r:user_home_t:s0
Truy cập gần nhất:2019-03-11 14:27:29.750638827 +0800
Thay đổi gần nhất:2019-03-11 14:27:29.750638827 +0800
Thay đổi gần nhất:2019-03-11 14:38:22.936661898 +0800
Thời gian tạo:-
[dev@linux ~]$ stat softLink
Tệp:"softLink" -> "sample.txt"
Kích thước:4 Khối:0 IO Khối:4096 Liên kết biểu tượng
Thiết bị:803h/2051d	Inode:52016746 Liên kết:1
Quyền:(0777/lrwxrwxrwx) Uid:( 1000/ dev) Gid:( 1000/ dev)
Môi trường:unconfined_u:object_r:user_home_t:s0
Truy cập gần nhất:2019-03-11 14:28:37.354054265 +0800
Thay đổi gần nhất:2019-03-11 14:28:37.353054303 +0800
Thay đổi gần nhất:2019-03-11 14:28:37.353054303 +0800
Thời gian tạo:-
//Đặc tính thứ hai, không thể tạo liên kết cứng cho tệp không tồn tại, nhưng liên kết mềm có thể (bao gồm tệp thư mục)
[dev@linux ~]$ ls
sample.txt  hardLink  softLink  public  template  video  images  documents  downloads  music  desktop
[dev@linux ~]$ ln missingFile linkC
ln: failed to access "missingFile": Không có tệp hoặc thư mục nào
[dev@linux ~]$ ln -s missingFile linkD
[dev@linux ~]$ ls -l linkD
lrwxrwxrwx. 1 dev dev 5 3月  11 11:50 linkD -> missingFile  //Đây là liên kết chết
//Đặc tính thứ ba, không thể tạo liên kết cứng trên nhiều hệ thống tệp khác nhau (tức là phân vùng)
[dev@linux ~]$ su -
Mật khẩu:
Lần đăng nhập cuối cùng:一 3月 11 13:16:55 CST 2019pts/0 上
[root@linux ~]# file -s /dev/sdb1  //Xem loại hệ thống tệp của phân vùng
/dev/sdb1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
[root@linux ~]# mount /dev/sdb1 /sdb1  //Gắn phân vùng
[root@linux ~]# ln /home/dev/sample.txt /sdb1/hardLinkSDB  //Không thể tạo liên kết cứng trên nhiều hệ thống tệp
ln: Không thể tạo liên kết cứng "/sdb1/hardLinkSDB" => "/home/dev/sample.txt": Kết nối thiết bị không hợp lệ
[root@linux ~]# ln -s /home/dev/sample.txt /sdb1/softLinkSDB  //Liên kết mềm có thể, nhưng đường dẫn tệp nguồn phải là đường dẫn tuyệt đối, nếu không sẽ là liên kết chết
[root@linux ~]# ls -l /sdb1/softLinkSDB 
lrwxrwxrwx. 1 root root 13 3月  11 13:19 /sdb1/softLinkSDB -> /home/dev/sample.txt
//Đặc tính thứ tư, không thể tạo liên kết cứng cho thư mục, nhưng liên kết mềm có thể
[root@linux ~]# exit
Đăng xuất
[dev@linux ~]$ ls
sample.txt  hardLink  softLink  linkD  public  template  video  images  documents  downloads  music  desktop
[dev@linux ~]$ mkdir newProject
[dev@linux ~]$ ln newProject dirLink
ln: "newProject": Không cho phép liên kết cứng trỏ đến thư mục
[dev@linux ~]$ ln -s newProject dirLinkSoft
[dev@linux ~]$ ll dirLinkSoft
lrwxrwxrwx. 1 dev dev 6 3月  11 13:26 dirLinkSoft -> newProject
[dev@linux ~]$ cd dirLinkSoft  //dirLinkSoft có thể thực hiện lệnh cd
[dev@linux dirLinkSoft]$
//Đặc tính thứ năm, xóa tệp nguồn, liên kết cứng không bị ảnh hưởng; liên kết mềm trở thành liên kết chết, nhưng tạo lại tệp cùng tên tại cùng vị trí, liên kết mềm sẽ trỏ đến tệp mới
[dev@linux dirLinkSoft]$ cd ..
[dev@linux ~]$ cat sample.txt 
test data
more data
[dev@linux ~]$ rm sample.txt  //Xóa tệp nguồn
[dev@linux ~]$ cat hardLink  //Liên kết cứng không bị ảnh hưởng
test data
more data
[dev@linux ~]$ cat softLink  //Liên kết mềm trở thành liên kết chết
cat: softLink: Không có tệp hoặc thư mục nào
[dev@linux ~]$ touch sample.txt  //Tạo lại tệp cùng tên tại cùng vị trí
[dev@linux ~]$ echo "new content" >> sample.txt
[dev@linux ~]$ cat hardLink  //Liên kết cứng không bị ảnh hưởng
test data
more data
[dev@linux ~]$ cat softLink  //Liên kết mềm trỏ đến tệp mới được tạo cùng tên
new content

Nếu tên tệp đã tồn tại, có thể sử dụng tùy chọn -f để xóa tệp đã tồn tại bằng vũ lực

[dev@linux ~]$ touch sample.txt existingLink
[dev@linux ~]$ ln sample.txt existingLink
ln: Không thể tạo liên kết cứng "existingLink": Tệp đã tồn tại
[dev@linux ~]$ ln -f sample.txt existingLink 

Nếu không biết tệp có còn cần thiết hay không, có thể sử dụng tùy chọn -b hoặc --backup để sao lưu tệp đã tồn tại. Cũng có thể sử dụng tùy chọn -S để chỉ định hậu tố.

[dev@linux ~]$ touch sample.txt existingLink
[dev@linux ~]$ echo "important data" >> existingLink
[dev@linux ~]$ ln -bf sample.txt existingLink  //Sao lưu tệp cùng tên đã tồn tại
[dev@linux ~]$ ls  //Tệp sao lưu mặc định có hậu tố ~
sample.txt  existingLink  existingLink~  public  template  video  images  documents  downloads  music  desktop
[dev@linux ~]$ cat existingLink~
important data
[dev@linux ~]$ touch backupTest
[dev@linux ~]$ echo "backup content" >> backupTest
[dev@linux ~]$ ln -bf -S .bak sample.txt backupTest  //Chỉ định hậu tố cho tệp sao lưu
[dev@linux ~]$ ls
sample.txt existingLink~ backupTest.bak template images downloads desktop
existingLink backupTest public video documents music
[dev@linux ~]$ cat backupTest.bak
backup content

Ngoài ra, giải thích các giá trị hiệu quả của backup: none và off không sao lưu; numbered và t thêm số vào tệp sao lưu, ví dụ tệp link3, sau khi sao lưu là link3.1; existing và nil sử dụng số nếu có tệp sao lưu số, nếu không sử dụng phương thức thông thường, ví dụ sử dụng giá trị hiệu quả t đã sao lưu một lần link3, lúc này tồn tại liên kết cứng link3 và tệp sao lưu link3.1, khi sử dụng giá trị nil sẽ tạo tệp link3 mới, liên kết cứng link3 cũ được sao lưu thành link3.2; simple và never luôn sử dụng phương thức sao lưu thông thường (hậu tố ~).

Thẻ: linux ln liên_kết_cứng liên_kết_mềm hệ_thống_tệp

Đăng vào ngày 26 tháng 5 lúc 11:10