104.6 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
104 Thiết bị, Hệ thống tệp Linux, Tiêu chuẩn phân cấp hệ thống Tệp |
Mục tiêu: |
104.6 Tạo và Thay đổi các Liên kết Cứng và Tượng trưng |
Bài: |
1 trên 1 |
Giới thiệu
Trong Linux, một số tệp sẽ được xử lý đặc biệt do vị trí lưu trữ của chúng (chẳng hạn như các tệp tạm thời) hoặc cách chúng tương tác với hệ thống tệp (như các liên kết). Trong bài học này, chúng ta sẽ tìm hiểu liên kết là gì và cách quản lý chúng.
Hiểu về Liên kết
Như đã nói, trên Linux, mọi thứ đều được coi là một tệp. Nhưng có một loại tệp đặc biệt được gọi là liên kết và có hai loại liên kết trên hệ thống Linux:
- Liên kết tượng trưng
-
Còn được gọi là liên kết mềm. Chúng trỏ đến đường dẫn của tệp khác. Nếu ta xóa tệp mà liên kết trỏ đến (được gọi là đích), liên kết vẫn tồn tại nhưng sẽ "ngừng hoạt động" vì nó đang không trỏ đến "bất cứ thứ gì".
- Liên kết cứng
-
Hãy coi liên kết cứng là cái tên thứ hai của tệp gốc. Chúng không trùng lặp mà thay vào đó là một mục bổ sung trong hệ thống tệp trỏ đến cùng một vị trí (nút định danh) trên đĩa.
Tip
|
nút định danh (inode) là một cấu trúc dữ liệu lưu trữ các thuộc tính cho một đối tượng (như tệp hoặc thư mục) trên hệ thống tệp. Trong số các thuộc tính đó có quyền, quyền sở hữu và dữ liệu của đối tượng được lưu trữ trên khối đĩa nào. Hãy coi nó như một mục nhập trên một chỉ mục, từ đó mà nó có tên như vậy (bắt nguồn từ "index node"). |
Làm việc với các Liên kết Cứng
Tạo Liên kết Cứng
Lệnh tạo liên kết cứng trên Linux là ln
. Cú pháp cơ bản là:
$ ln TARGET LINK_NAME
TARGET
phải tồn tại sẵn (đây là tệp mà liên kết sẽ trỏ tới) và nếu mục tiêu không có trong thư mục hiện tại hoặc nếu muốn tạo liên kết ở nơi khác, ta sẽ phải chỉ định đường dẫn đầy đủ đến nó. Ví dụ: lệnh
$ ln target.txt /home/carol/Documents/hardlink
sẽ tạo một tệp có tên là hardlink
trong thư mục /home/carol/Documents/
được liên kết với tệp target.txt
trong thư mục hiện tại.
Nếu bỏ qua tham số cuối cùng (LINK_NAME
), một liên kết có cùng tên với mục tiêu sẽ được tạo trong thư mục hiện tại.
Quản lý Liên kết Cứng
Liên kết cứng là các mục trong hệ thống tệp có tên khác nhau nhưng trỏ đến cùng một dữ liệu trên đĩa. Tất cả các tên như vậy đều ngang nhau và có thể được sử dụng để chỉ một tệp. Nếu ta thay đổi nội dung của một trong các tên, nội dung của tất cả các tên khác trỏ đến tệp đó cũng sẽ thay đổi vì tất cả các tên này đều trỏ đến cùng một dữ liệu. Nếu ta xóa một tên thì các tên khác vẫn sẽ hoạt động.
Điều này xảy ra là do khi ta "xóa" một tệp, dữ liệu không thực sự bị xóa khỏi đĩa. Hệ thống sẽ chỉ xóa mục nhập trên bảng hệ thống tệp trỏ đến nút định danh tương ứng với dữ liệu trên đĩa. Nhưng nếu có một mục nhập thứ hai trỏ đến cùng một nút định danh, chúng ta vẫn có thể truy cập được dữ liệu. Hãy coi nó như hai con đường hội tụ tại một điểm. Ngay cả khi ta chặn hoặc chuyển hướng một trong hai con đường thì vẫn có thể đến đích bằng con đường còn lại.
Chúng ta có thể kiểm tra điều này bằng cách sử dụng tham số -i
của ls
. Hãy xem xét các nội dung sau đây của một thư mục:
$ ls -li total 224 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 hardlink 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 target.txt
Số đứng trước quyền chính là số nút định danh. Ta có thể thấy rằng cả tệp hardlink
và tệp target.txt
đều có cùng số định danh (3806696
). Điều này là do tệp này chính là liên kết cứng của tệp kia.
Nhưng cái nào là tệp gốc và cái nào là liên kết? Chúng ta sẽ không thể biết được vì chúng luôn tương đương nhau trong tất cả các mục đích thực tế.
Hãy lưu ý rằng mọi liên kết cứng trỏ đến một tệp sẽ tăng số lượng liên kết của tệp. Đây là con số đứng ngay sau các quyền trong đầu ra của ls -l
. Theo mặc định, mọi tệp đều có số lượng liên kết là 1
(các thư mục có số lượng là 2
) và mọi liên kết cứng trỏ tới nó sẽ tăng số lượng lên một. Đó là lý do số lượng liên kết là 2
trên các tệp trong danh sách ở trên.
Ngược lại với các liên kết tượng trưng, chúng ta chỉ có thể tạo các liên kết cứng tới các tệp, và cả liên kết và đích đều phải nằm trong cùng một hệ thống tệp.
Di chuyển và loại bỏ các Liên kết Cứng
Vì các liên kết cứng cũng được coi là các tệp thông thường nên chúng có thể bị xóa bằng rm
và có thể bị đổi tên hoặc di chuyển trên khắp hệ thống tệp bằng mv
. Và vì một liên kết cứng sẽ trỏ đến cùng một nút định danh với đích nên nó có thể được di chuyển tự do mà không sợ liên kết bị “phá vỡ”.
Liên kết Tượng trưng
Tạo Liên kết Tượng trưng
Lệnh được sử dụng để tạo một liên kết tượng trưng cũng là ln
nhưng sẽ có thêm tham số -s
như sau:
$ ln -s target.txt /home/carol/Documents/softlink
Thao tác này sẽ tạo một tệp có tên là softlink
trong thư mục /home/carol/Documents/
trỏ tới tệp target.txt
trong thư mục hiện tại.
Cũng giống như liên kết cứng, chúng ta có thể bỏ qua tên liên kết để tạo liên kết có cùng tên với đích trong thư mục hiện tại.
Quản lý Liên kết Tượng trưng
Các liên kết tượng trưng sẽ trỏ đến một đường dẫn khác trong hệ thống tệp. Chúng ta có thể tạo các liên kết mềm đến các tệp và thư mục ngay cả trên các phân vùng khác nhau. Khá dễ dàng để có thể phát hiện một liên kết tượng trưng trong đầu ra của ls
:
$ ls -lh total 112K -rw-r--r-- 1 carol carol 110K Jun 7 10:13 target.txt lrwxrwxrwx 1 carol carol 12 Jun 7 10:14 softlink -> target.txt
Trong ví dụ trên, ký tự đầu tiên trên các quyền đối với tệp softlink
là l
biểu thị một liên kết tượng trưng. Hơn nữa, ngay sau tên tệp chúng ta có thể thấy tên của đích mà liên kết trỏ tới, tức tệp target.txt
.
Hãy lưu ý rằng trên danh sách tệp và thư mục, bản thân các liên kết mềm luôn hiển thị các quyền rwx
cho người dùng, nhóm và những người khác. Nhưng trên thực tế, quyền truy cập đối với chúng cũng sẽ giống như quyền đối với đích.
Di chuyển và xóa các Liên kết Tượng trưng
Giống như các liên kết cứng, các liên kết tượng trưng có thể được gỡ bỏ bằng cách sử dụng rm
và được di chuyển xung quanh hoặc đổi tên bằng cách sử dụng mv
. Tuy nhiên, ta cần phải đặc biệt cẩn thận khi tạo chúng để tránh “phá vỡ” liên kết nếu nó bị di chuyển khỏi vị trí ban đầu.
Khi tạo các liên kết tượng trưng, chúng ta cần lưu ý rằng trừ khi một đường dẫn được chỉ định đầy đủ, vị trí của đích sẽ được hiểu tương quan với vị trí của liên kết. Điều này có thể tạo ra sự cố nếu liên kết hoặc tệp mà nó trỏ tới bị di chuyển.
Ta có thể hiểu điều này một cách dễ dàng hơn với một ví dụ. Giả sử rằng chúng ta có một tệp có tên là original.txt
trong thư mục hiện tại và chúng ta muốn tạo một liên kết tượng trưng tới tệp đó có tên là softlink
. Ta có thể sử dụng:
$ ln -s original.txt softlink
Và có vẻ như tất cả đều ổn thoả. Hãy kiểm tra với ls
:
$ ls -lh total 112K -r--r--r-- 1 carol carol 110K Jun 7 10:13 original.txt lrwxrwxrwx 1 carol carol 12 Jun 7 19:23 softlink -> original.txt
Hãy xem cách liên kết được tạo: softlink
trỏ tới (→
) original.txt
. Tuy nhiên, hãy xem điều gì sẽ xảy ra nếu chúng ta di chuyển liên kết đến thư mục mẹ và cố gắng hiển thị nội dung của nó bằng lệnh less
:
$ mv softlink ../ $ less ../softlink ../softlink: No such file or directory
Vì đường dẫn đến original.txt
không được chỉ định nên hệ thống đã giả định rằng nó nằm trong cùng thư mục với liên kết. Khi điều này không còn đúng nữa, liên kết sẽ ngừng hoạt động.
Cách để ngăn chặn điều này xảy ra là luôn chỉ định đường dẫn đầy đủ đến đích khi tạo liên kết
$ ln -s /home/carol/Documents/original.txt softlink
Bằng cách này, bất kể ta di chuyển liên kết đến đâu thì nó cũngvẫn sẽ hoạt động vì nó trỏ đến vị trí tuyệt đối của đích. Hãy cùng kiểm tra với ls
:
$ ls -lh total 112K lrwxrwxrwx 1 carol carol 40 Jun 7 19:34 softlink -> /home/carol/Documents/original.txt
Bài tập Hướng dẫn
-
Tham số cho
chmod
ở chế độ tượng trưng để gắn bit dính trên một thư mục là gì? -
Hãy tưởng tượng có một tệp có tên
document.txt
trong thư mục/home/carol/Documents
. Lệnh để tạo một liên kết tượng trưng đến nó có têntext.txt
trong thư mục hiện tại là gì? -
Hãy giải thích sự khác biệt giữa liên kết cứng tới một tệp và bản sao của tệp này.
Bài tập Mở rộng
-
Hãy tưởng tượng rằng bên trong một thư mục, bạn tạo một tệp có tên là
recipes.txt
. Bên trong thư mục này, bạn cũng sẽ tạo một liên kết cứng tới tệp này có tên làreceitas.txt
và một liên kết tượng trưng (hoặc liên kết mềm) tới tệp có tên làrezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s recipes.txt rezepte.txt
Nội dung của thư mục sẽ xuất hiện như sau:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Hãy nhớ rằng, với vai trò là một liên kết cứng,
receitas.txt
sẽ trỏ đến cùng một nút định danh giống nhưrecipes.txt
. Điều gì sẽ xảy ra với liên kết mềmrezepte.txt
nếu như tênreceitas.txt
bị xóa? Tại sao? -
Hãy tưởng tượng bạn có một ổ đĩa flash được cắm vào hệ thống của mình và được gắn kết trên
/media/youruser/FlashA
. Bạn muốn tạo trong thư mục chính của mình một liên kết có tên làschematics.pdf
và trỏ tới tệpesquema.pdf
trong thư mục gốc của ổ đĩa flash. Vì vậy, bạn đã gõ lệnh:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Chuyện gì sẽ xảy ra? Tại sao?
-
Hãy xem đầu ra sau của
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Có bao nhiêu liên kết trỏ đến tệp
document.txt
? -
Chúng là liên kết mềm hay cứng?
-
Bạn nên truyền tham số nào cho
ls
để xem mỗi tệp ở trong nút định danh nào?
-
-
Hãy tưởng tượng trong thư mục
~/Documents
của bạn có một tệp tên làclients.txt
có chứa tên của các khách hàng và một thư mục khác có tên làsomedir
. Bên trong đó có một tệp khác cũng có tên làclients.txt
với những cái tên khác. Để sao chép cấu trúc này, hãy sử dụng các lệnh sau.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Sau đó, bạn tạo một liên kết bên trong
somedir
có tênpartners.txt
trỏ đến tệp này bằng các lệnh:$ cd somedir/ $ ln -s clients.txt partners.txt
Vì vậy, cấu trúc thư mục sẽ là:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Bây giờ, bạn di chuyển
partners.txt
từsomedir
sang~/Documents
và liệt kê nội dung của nó.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Liệu liên kết có còn hoạt động hay không? Nếu có, tệp nào sẽ có nội dung được liệt kê? Tại sao?
-
Hãy xem các tệp sau:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Quyền truy cập đối với
partners.txt
là gì? Tại sao?
Tóm tắt
Trong bài học này, chúng ta đã học về:
-
Liên kết là gì.
-
Sự khác biệt giữa liên kết tượng trưng và liên kết cứng.
-
Cách tạo liên kết.
-
Cách di chuyển, đổi tên hoặc loại bỏ các liên kết này.
Các lệnh sau đã được thảo luận trong bài học này:
-
ln
: Lệnh “link”. Bản thân lệnh này sẽ tạo ra một liên kết cứng. Với khóa chuyển-s
, một liên kết tượng trưng hoặc mềm có thể được tạo. Hãy nhớ rằng các liên kết cứng chỉ có thể nằm trên cùng một phân vùng và hệ thống tệp, còn các liên kết tượng trưng có thể đi qua các phân vùng và hệ thống tệp (thậm chí cả bộ lưu trữ nối với mạng). -
Tham số
-i
củals
cho phép người dùng xem số nút định danh của một tệp.
Đáp án Bài tập Hướng dẫn
-
Tham số cho
chmod
ở chế độ tượng trưng để gắn bit dính trên một thư mục là gì?Ký hiệu cho bit dính ở chế độ tượng trưng là
t
. Vì chúng ta muốn kích hoạt (thêm) quyền này vào thư mục nên tham số phải là+t
. -
Hãy tưởng tượng có một tệp có tên
document.txt
trong thư mục/home/carol/Documents
. Lệnh đển tạo một liên kết tượng trưng đến nó có têntext.txt
trong thư mục hiện tại là gì?ln -s
là lệnh tạo liên kết tượng trưng. Vì chúng ta phải chỉ định đường dẫn đầy đủ đến tệp đang liên kết tới nên lệnh sẽ là:$ ln -s /home/carol/Documents/document.txt text.txt
-
Hãy giải thích sự khác biệt giữa liên kết cứng tới một tệp và bản sao của tệp này.
Liên kết cứng chỉ là tên gọi khác của một tệp. Mặc dù nó trông giống như một bản sao của tệp gốc nhưng xét trên mọi mục đích thì cả liên kết và tệp gốc đều giống nhau vì chúng trỏ đến cùng một dữ liệu trên đĩa. Những thay đổi được thực hiện trên nội dung của liên kết sẽ được phản ánh trên tệp gốc và ngược lại. Bản sao là một thực thể hoàn toàn độc lập, chiếm một vị trí khác ở trên đĩa. Những thay đổi trên bản sao sẽ không được phản ánh trên tệp gốc và ngược lại.
Đáp án Bài tập Mở rộng
-
Hãy tưởng tượng rằng bên trong một thư mục, bạn tạo một tệp có tên là
recipes.txt
. Bên trong thư mục này, bạn cũng sẽ tạo một liên kết cứng tới tệp này có tên làreceitas.txt
và một liên kết tượng trưng (hoặc liên kết mềm) tới tệp có tên làrezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s receitas.txt rezepte.txt
Nội dung của thư mục sẽ xuất hiện như sau:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 24 10:12 rezepte.txt -> receitas.txt
Hãy nhớ rằng, với vai trò là một liên kết cứng,
receitas.txt
sẽ trỏ đến cùng một nút định danh giống nhưrecipes.txt
. Điều gì sẽ xảy ra với liên kết mềmrezepte.txt
nếu như tênreceitas.txt
bị xóa? Tại sao?Liên kết mềm
rezepte.txt
sẽ ngừng hoạt động. Điều này là do các liên kết mềm trỏ đến tên chứ không phải nút định danh, và tênreceitas.txt
không còn tồn tại ngay cả khi dữ liệu vẫn còn trên đĩa dưới tênrecipes.txt
. -
Hãy tưởng tượng bạn có một ổ đĩa flash được cắm vào hệ thống của mình và được gắn kết trên
/media/youruser/FlashA
. Bạn muốn tạo trong thư mục chính của mình một liên kết có tên làschematics.pdf
và trỏ tới tệpesquema.pdf
trong thư mục gốc của ổ đĩa flash. Vì vậy, bạn đã gõ lệnh:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Chuyện gì sẽ xảy ra? Tại sao?
Lệnh sẽ thất bại. Thông báo lỗi sẽ là
Invalid cross-device link
(Liên kết liên thiết bị không hợp lệ) và nó đã làm rõ lý do: các liên kết cứng không thể trỏ đến mục tiêu trong một phân vùng hoặc thiết bị khác. Cách duy nhất để tạo liên kết như thế này là sử dụng liên kết tượng trưng hoặc liên kết mềm với tham số-s
vàoln
. -
Hãy xem đầu ra sau của
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Có bao nhiêu liên kết trỏ đến tệp
document.txt
?Mỗi tệp đều bắt đầu với số lượng liên kết là
1
. Vì số liên kết cho tệp là4
nên ở đây sẽ có ba liên kết trỏ đến tệp đó. -
Chúng là liên kết mềm hay cứng?
Chúng là các liên kết cứng vì các liên kết mềm không làm tăng số lượng liên kết của tệp.
-
Bạn nên truyền tham số nào cho
ls
để xem mỗi tệp ở trong nút định danh nào?Tham số là
-i
. Nút định danh sẽ được hiển thị dưới dạng cột đầu tiên trong đầu ra củals
như bên dưới đây:$ ls -lahi total 3,1M 5388773 drwxr-xr-x 2 rigues rigues 4,0K jun 17 17:27 . 5245554 drwxr-xr-x 5 rigues rigues 4,0K jun 17 17:29 .. 5388840 -rw-rw-r-- 1 rigues rigues 2,8M jun 17 15:45 compressed.zip 5388833 -rw-r--r-- 4 rigues rigues 77K jun 17 17:25 document.txt 5388837 -rw-rw-r-- 1 rigues rigues 216K jun 17 17:25 image.png 5388833 -rw-r--r-- 4 rigues rigues 77K jun 17 17:25 text.txt
-
-
Hãy tưởng tượng trong thư mục
~/Documents
của bạn có một tệp tên làclients.txt
nhưng có chứa các tên khách hàng khác và một thư mục có tên làsomedir
. Bên trong đó có một tệp khác cũng có tên làclients.txt
với những cái tên khác. Để sao chép cấu trúc này, hãy sử dụng các lệnh sau.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Sau đó, bạn tạo một liên kết bên trong
somedir
có tênpartners.txt
trỏ đến tệp này bằng các lệnh:$ cd somedir/ $ ln -s clients.txt partners.txt
Vì vậy, cấu trúc thư mục sẽ là:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Bây giờ, bạn di chuyển
partners.txt
từsomedir
sang~/Documents
và liệt kê nội dung của nó.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Liệu liên kết có còn hoạt động hay không? Nếu có, tệp nào sẽ có nội dung được liệt kê? Tại sao?
Đây là một câu hỏi “bẫy”; nhưng liên kết vẫn sẽ hoạt động và tệp được liệt kê sẽ là tệp trong
~/Documents
có chứa các tênJohn
,Michael
,Bob
.Hãy nhớ rằng vì bạn không chỉ định đường dẫn đầy đủ đến đích
clients.txt
khi tạo liên kết mềmpartners.txt
nên vị trí đích sẽ được hiểu là tương quan với vị trí của liên kết, trong trường hợp này là thư mục hiện tại.Khi liên kết được di chuyển từ
~/Documents/somedir
sang~/Documents
, liên kết sẽ ngừng hoạt động vì đích không còn nằm trong cùng thư mục với liên kết. Tuy nhiên, tình cờ là có một tệp có tênclients.txt
trên~/Documents
; vì vậy, liên kết sẽ trỏ đến tệp này thay vì đích ban đầu bên trong~/somedir
.Để tránh điều này, hãy luôn chỉ định đường dẫn đầy đủ đến đích khi tạo liên kết tượng trưng.
-
Hãy xem các tệp sau:
-rw-r--r-- 1 rigues rigues 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 rigues rigues 11 Jun 24 11:13 partners.txt -> clients.txt
Quyền truy cập đối với
partners.txt
là gì? Tại sao?Quyền truy cập cho
partners.txt
làrw-r—r--
vì các liên kết luôn kế thừa các quyền truy cập giống như đích.