Học bằng cách đọc theo thứ tự

Liên kết tượng trưng và liên kết cứng — ln

Tạo một liên kết tượng trưng lưu đường dẫn bằng ln -s target.txt link.txt và kiểm tra dấu -> trong ls -l, rồi tạo một liên kết cứng trỏ tới cùng phần dữ liệu bằng ln base.txt hard.txt; thấy sự khác biệt qua sơ đồ và terminal trong trình duyệt.

Liên kết tượng trưng — ln -s

Một liên kết cho phép bạn truy cập cùng một tệp dưới một cái tên khác. Bạn tạo liên kết tượng trưng bằng ln -s target name, và nó là một tệp đặc biệt lưu đường dẫn (vị trí) của target. Khi bạn mở name, nó tự động đi theo đường dẫn đã lưu để tới target. Trong ls -l, dòng của liên kết cho thấy nó trỏ tới đâu, dạng name -> target.

Cú phápTác dụng
ln -s target name-s (symbolic) tạo một liên kết tượng trưng là bí danh dựa trên đường dẫn
ls -lKiểm tra nó trỏ tới đâu qua hiển thị name -> target
ln target aliasTạo một liên kết cứng trỏ tới cùng phần dữ liệu
Tượng trưng vs cứngTượng trưng = tệp đặc biệt lưu đường dẫn của target / Cứng = bí danh tới cùng phần dữ liệu
Khi target bị xóaTượng trưng = mất target và hỏng / Cứng = nội dung vẫn còn
Liên kết tượng trưng hoạt động ra sao — ln -s
target.txtnội dung: "data"link.txt (tệp đặc biệt)lưu đường dẫn "target.txt"đầu ralink.txt -> target.txtđầu ra: "data"đi theo đường dẫn tới tệp thậtln -s target.txt link.txtls -lcat link.txt
ln -s tạo ra link.txt, một tệp đặc biệt lưu đường dẫn target.txt. ls -l hiển thị nó dạng link.txt -> target.txt, và cat link.txt đi theo đường dẫn đó để đọc nội dung của tệp thật target.txt.
printf 'data\n' > target.txt   # Tạo tệp target
ln -s target.txt link.txt     # Tạo liên kết tượng trưng
ls -l                         # Kiểm tra link.txt -> target.txt
cat link.txt                  # Hiển thị nội dung của target.txt

① Tạo tệp target bằng printf 'data\n' > target.txt.

② Thêm tùy chọn khiến ln tạo một liên kết tượng trưng, rồi truyền target và tên mới theo thứ tự đó để tạo link.txt.

③ Chạy ls -l và kiểm tra rằng đích của liên kết hiện ra dạng link.txt -> target.txt. (Khi bạn chạy đúng, phần giải thích sẽ xuất hiện.)

Linux console
0 / 3 đã hoàn thành
Loading Linux Terminal...

Liên kết cứng — ln

Không có -s, ln target alias tạo một liên kết cứng. Trong khi liên kết tượng trưng là một tệp đặc biệt lưu đường dẫn tới target, liên kết cứng là một cái tên khác trỏ tới cùng phần dữ liệu. Mở tên nào cũng cho nội dung giống hệt, và trong ls -l liên kết cứng không hiện mũi tên — nó trông như một tệp thông thường. Hãy nhớ phân biệt: tượng trưng = một tệp đặc biệt lưu đường dẫn của target, cứng = một bí danh tới cùng phần dữ liệu.

Liên kết tượng trưng và liên kết cứng khác nhau ra sao
base.txtphần dữ liệu "shared"symnội dung = đường dẫn "base.txt"hardbí danh tới cùng phần dữ liệuđầu ra: "shared"đọc qua đường dẫnđầu ra: "shared"đọc trực tiếp phần dữ liệuln -s base.txt symln base.txt hardcat symcat hardcả hai đều đọc "shared"
ln -s tạo sym, lưu một đường dẫn tới tệp thật, còn ln tạo hard, một bí danh tới cùng phần dữ liệu. Cả hai đều in shared với cat, nhưng sym đọc qua đường dẫn còn hard đọc trực tiếp phần dữ liệu.
printf 'shared\n' > base.txt   # Tạo tệp target
ln base.txt hard.txt          # Tạo liên kết cứng
ls -l                         # hard.txt được liệt kê không có mũi tên
cat hard.txt                  # Hiển thị cùng nội dung như base.txt

① Tạo tệp target bằng printf 'shared\n' > base.txt.

② Dùng ln không có tùy chọn, truyền target và alias theo thứ tự đó, để tạo một liên kết cứng tên hard.txt.

③ Chạy ls -l và kiểm tra rằng hard.txt được liệt kê như một tệp thông thường, không có mũi tên (->).

Linux console
0 / 3 đã hoàn thành
Loading Linux Terminal...

Điều gì xảy ra khi bạn xóa target

Vì liên kết tượng trưng là một tệp đặc biệt lưu đường dẫn tới target, nó mất thứ nó trỏ tới một khi target không còn. Vì liên kết cứng là một cái tên khác trỏ tới cùng phần dữ liệu, nội dung vẫn còn ngay cả sau khi tên gốc không còn. Hãy xóa target và tự mình thấy sự khác biệt.

Điều gì xảy ra với mỗi liên kết khi target bị xóa
orig.txtphần dữ liệu "v"sl.txtnội dung = đường dẫn "orig.txt"hl.txtbí danh tới cùng phần dữ liệuthất bại: liên kết treoNo such filein "v"phần dữ liệu vẫn cònln -s orig.txt sl.txtln orig.txt hl.txtcat sl.txtcat hl.txtsau rm orig.txt
Sau khi rm orig.txt xóa tệp thật, sl.txt, vốn chỉ lưu một đường dẫn, trở thành liên kết treo, còn hl.txt, vốn chia sẻ phần dữ liệu, vẫn in nội dung của nó với cat.
printf 'v\n' > orig.txt       # Tạo tệp target
ln -s orig.txt sl.txt         # Liên kết tượng trưng
ln orig.txt hl.txt            # Liên kết cứng
rm orig.txt                   # Xóa target
cat sl.txt                    # Mất target và thất bại
cat hl.txt                    # Nội dung vẫn còn và hiển thị được

① Tạo target bằng printf 'v\n' > orig.txt.

② Tạo một liên kết tượng trưng bằng ln -s orig.txt sl.txt và một liên kết cứng bằng ln orig.txt hl.txt.

③ Xóa target bằng rm orig.txt.

④ Chạy cat sl.txtcat hl.txt và so sánh sự khác biệt trong kết quả.

⑤ Chạy ls -l và kiểm tra hai liên kết trông ra sao trong ls -l sau khi xóa.

Linux console
0 / 7 đã hoàn thành
Loading Linux Terminal...
QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Sau khi bạn chạy ln -s target.txt link.txt, nó hiển thị thế nào trong ls -l?

Câu 2Phát biểu nào sau đây mô tả đúng sự khác biệt giữa liên kết tượng trưng và liên kết cứng?

Câu 3Sau khi bạn xóa tệp target bằng rm, với cái nào thì cat vẫn thành công?