5.4 Bài 1
Chứng chỉ: |
Linux Essentials |
---|---|
Phiên bản: |
1.6 |
Chủ đề: |
5 Bảo mật và Quyền trong Tệp |
Mục tiêu: |
5.4 Thư mục và Tệp đặc biệt |
Bài: |
1 trên 1 |
Giới thiệu
Trong Linux, mọi thứ đều được coi là một tệp. Tuy nhiên, 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ư tệp tạm thời) hoặc cách chúng tương tác với hệ thống tệp (chẳng hạn như các liên kết). Trong bài học này, chúng ta sẽ tìm hiểu về vị trí của các tệp như vậy, cách chúng hoạt động và cách ta quản lý chúng.
Tệp Tạm thời
Các tệp tạm thời là các tệp được các chương trình sử dụng để lưu trữ dữ liệu chỉ cần thiết trong một khoảng thời gian ngắn. Đây có thể là dữ liệu của các quy trình đang chạy, nhật ký sự cố, tệp scratch lưu tự động, tệp trung gian được sử dụng trong quá trình chuyển đổi tệp, tệp bộ đệm, v.v.
Vị trí của các Tệp tạm thời
Phiên bản 3.0 của Tiêu chuẩn Phân cấp Hệ thống Tệp (FHS) xác định các vị trí tiêu chuẩn cho các tệp tạm thời trong hệ thống Linux. Mỗi vị trí có một mục đích và hành vi khác nhau và các nhà phát triển nên tuân theo các quy ước do FHS đặt ra khi ghi dữ liệu tạm thời vào đĩa.
/tmp
-
Theo FHS, các chương trình không nên cho rằng các tệp được ghi ở đây sẽ được giữ nguyên giữa các lần gọi chương trình. Khuyến nghị ở đây là thư mục này nên được xóa (xóa tất cả các tệp) trong khi khởi động hệ thống (điều này là không bắt buộc).
/var/tmp
-
Một vị trí khác dành cho các tệp tạm thời nhưng nó sẽ không bị xóa trong quá trình khởi động hệ thống - tức là các tệp được lưu trữ ở đây thường sẽ tồn tại giữa các lần khởi động lại.
/run
-
Thư mục này chứa dữ liệu của biến thời gian chạy được sử dụng bởi các quy trình đang chạy, chẳng hạn như các tệp định danh quy trình (
.pid
). Các chương trình cần nhiều hơn một tệp thời gian chạy có thể sẽ tạo các thư mục con tại đây. Vị trí này phải được xóa sạch trong khi khởi động hệ thống. Mục đích của thư mục này đã từng được thực hiện bởi/var/run
và trên một số hệ thống/var/run
có thể là một liên kết tượng trưng tới/run
.
Hãy lưu ý rằng không có gì ngăn cản một chương trình tạo các tệp tạm thời ở những nơi khác trên hệ thống, nhưng chúng ta vẫn nên tuân thủ các quy ước do FHS đặt ra.
Quyền đối với các Tệp tạm thời
Việc có các thư mục tạm thời toàn hệ thống trên một hệ thống đa người dùng gây ra một số thách thức liên quan đến quyền truy cập. Lúc đầu, người ta có thể nghĩ rằng những thư mục như vậy sẽ “luôn có thể ghi được” - tức là bất kỳ người dùng nào cũng có thể ghi hoặc xóa dữ liệu trong đó. Nhưng nếu điều này là đúng, làm cách nào để chúng ta có thể ngăn người dùng xóa hoặc sửa đổi tệp do người khác tạo ra?
Giải pháp ở đây là một quyền đặc biệt được gọi là bit dính áp dụng cho cả thư mục và tệp. Tuy nhiên, vì lý do bảo mật, nhân Linux sẽ bỏ qua bit dính khi nó được áp dụng cho các tệp. Khi bit đặc biệt này được đặt cho một thư mục, nó sẽ ngăn người dùng xóa hoặc đổi tên tệp trong thư mục đó trừ khi họ sở hữu tệp đó.
Các thư mục có bit dính sẽ hiển thị t
thay thế x
trên quyền đối với những người khác trong đầu ra của ls -l
. Ví dụ: hãy kiểm tra quyền đối với thư mục /tmp
và /var/tmp
:
$ ls -ldh /tmp/ /var/tmp/ drwxrwxrwt 25 root root 4,0K Jun 7 18:52 /tmp/ drwxrwxrwt 16 root root 4,0K Jun 7 09:15 /var/tmp/
Như có thể thấy, bằng cách thay thế t
bằng x
trên quyền đối với những người khác, cả hai thư mục đều đã có bit dính.
Để đặt bit dính trên một thư mục bằng cách sử dụng chmod
ở chế độ số, hãy sử dụng ký hiệu bốn chữ số và lấy 1
làm chữ số đầu tiên. Ví dụ:
$ chmod 1755 temp
sẽ đặt bit dính cho thư mục có tên temp
và các quyền là rwxr-xr-t
.
Khi sử dụng chế độ ký hiệu, hãy sử dụng tham số t
. Vậy nên +t
là để đặt bit dính và -t
sẽ huỷ thiết lập của nó. Vì thế nên ta có:
$ chmod +t temp
Hiểu về Liên kết
Chúng ta đã nói qua rằng trong 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 (link), và trên hệ thống Linux ta có hai loại liên kết:
- Liên kết tượng trưng
-
Hay còn được gọi là liên kết mềm (soft link) trỏ đến đường dẫn của một tệp khác. Nếu bạn xóa tệp mà liên kết trỏ tới (hay còn được gọi là đích) thì liên kết sẽ vẫn tồn tại nhưng nó sẽ “ngừng hoạt động” vì nó hiện đang không trỏ tới bất cứ thứ gì.
- Liên kết cứng
-
Hãy coi liên kết cứng (hard link) là tên thứ hai cho tệp gốc. Chúng không phải là các bản sao mà thay vào đó là một mục nhập bổ sung trong hệ thống tệp trỏ đến cùng một vị trí (inode) trên đĩa.
Tip
|
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 (ví dụ như tệp hoặc thư mục) trên một hệ thống tệp. Trong số các thuộc tính đó sẽ có tên tệp, quyền, quyền sở hữu và khối đĩa mà dữ liệu về đối tượng được lưu trữ. Hãy coi nó như một mục nhập trong một chỉ mục (index) - cũng chính vì thế mà nó được gọi là “nút chỉ mục” (index node). |
Làm việc với 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 của nó là:
$ ln TARGET LINK_NAME
TARGET
(ĐÍCH) phải tồn tại (đây là tệp mà liên kết sẽ trỏ đến) và nếu đích không có trong thư mục hiện tại hoặc nếu bạn muốn tạo liên kết ở nơi khác, bạn 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
tron thư mục /home/carol/Documents/
được liên kết với tệp target.txt
tron thư mục hiện tại.
Nếu bạn bỏ qua tham số cuối cùng (LINK_NAME
), một liên kết có cùng tên với đích 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ả những cái tên này đều ngang hàng với nhau và có thể được sử dụng để chỉ một tệp. Nếu bạn thay đổi nội dung của một trong những cái tên này, nội dung của tất cả các tên khác trỏ đến tệp đó 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 bạn xóa một trong số chúng, các tên khác sẽ vẫn hoạt động.
Điều này xảy ra là bởi khi bạn “xóa” một tệp, dữ liệu sẽ không thực sự bị xóa khỏi đĩa. Hệ thống chỉ cần xóa mục trên bảng hệ thống tệp trỏ đến inode tương ứng với dữ liệu trên đĩa. Nhưng nếu bạn có một mục thứ hai trỏ đến cùng một inode, bạn vẫn có thể truy cập dữ liệu đó. Hãy coi nó như hai con đường hội tụ về một điểm. Ngay cả khi bạn chặn hoặc chuyển hướng một trong hai con đường, bạn vẫn có thể đến đích bằng con đường còn lại.
Bạn 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 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 là số inode. Bạn có thấy rằng cả tệp hardlink
và tệp target.txt
đều có cùng một số (3806696
) không? Điều này xảy ra do tệp này là liên kết cứng của tệp kia.
Nhưng tệp nào là bản gốc và tệp nào là liên kết? Thực sự thì chúng ta không thể biết được bởi dù với bất kỳ một mục đích thực tế nào thì cả hai tệp cũng đều có chức năng giống nhau.
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 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, bạn 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 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 xung quanh hệ thống tệp bằng mv
. Và vì một liên kết cứng trỏ đến cùng một inode của đí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, bạn 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. Bạn 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, bạn nê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 theo 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. 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 cùng 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ể bạn di chuyển liên kết đến đâu thì nó vẫ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
-
Hãy tưởng tượng một chương trình cần tạo một tệp tạm thời để sử dụng một lần và sẽ không bao giờ cần tới nó nữa sau khi đóng chương trình. Thư mục chính xác để tạo tệp này là thư mục nào?
-
Thư mục tạm thời phải bị xóa trong quá trình khởi động là thư mục nào?
-
Tham số nào của
chmod
trong chế độ tượng trưng có thể kích hoạt bit dính trên một thư mục? -
Hãy tưởng tượng có một tệp có tên là
document.txt
trong thư mục/home/carol/Documents
. Lệnh dùng để tạo liên kết tượng trưng đến nó và có tên làtext.txt
trogn thư mục hiện tại là gì? -
Hãy giải thích sự khác biệt giữa một liên kết cứng tới một tệp và một bản sao của tệp đó.
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 inode 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 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 chuyển tham số nào cho
ls
để xem mỗi tệp ở trong inode 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
chứa một số tên khách hàng 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?
-
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, bạn đã học về:
-
Nơi lưu trữ các tệp tạm thời.
-
Quyền đặc biệt áp dụng cho chúng.
-
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 xóa chúng.
Các lệnh sau đã được thảo luận trong bài học này:
-
ln
-
Tham số
-i
thànhls
Đáp án Bài tập Hướng dẫn
-
Hãy tưởng tượng một chương trình cần tạo một tệp tạm thời để sử dụng một lần và sẽ không bao giờ cần tới nó nữa sau khi đóng chương trình. Thư mục chính xác để tạo tệp này là thư mục nào?
Vì chúng ta không quan tâm đến tệp sau khi chương trình chạy xong nên thư mục chính xác sẽ là
/tmp
. -
Thư mục tạm thời phải bị xóa trong quá trình khởi động là thư mục nào?
Thư mục là
/run
hoặc trên một số hệ thống là/var/run
. -
Tham số nào của
chmod
trong chế độ tượng trưng có thể kích hoạt bit dính trên một thư mục?Biểu tượng cho bit dính trong 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 là
document.txt
trong thư mục/home/carol/Documents
. Lệnh dùng để tạo liên kết tượng trưng đến nó và có tên làtext.txt
trogn 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ì bạn phải chỉ định đường dẫn đầy đủ đến tệp mà bạn đ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 một liên kết cứng tới một tệp và một bản sao của tệp đó.
Liên kết cứng chỉ là một tên gọi khác cho tệp. Mặc dù nó trông giống như một bản sao của tệp gốc nhưng đối với mọi mục đích, 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 đối với nội dung của liên kết sẽ được phản ánh trên bản 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. Các thay đổi đối với bản sao sẽ không được phản ánh trên bản 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 inode 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 inode, 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 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 thiết bị chéo 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 chuyển tham số nào cho
ls
để xem mỗi tệp ở trong inode nào?Tham số là
-i
. Inode 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
chứa một số tên khách hàng 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 “khó”; 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à có liên quan đến 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.