Tạo các liên kết hệ thống tập tin với ln Lệnh ln tạo ra các đối tượng trong hệ thống tập tin liên kết với các đối tượng khác nằm trên cùng hệ thống tập tin. Các liên kết có thể dẫn đến các file, thư mục, hoặc các liên kết khác. Mặc dù sử dụng không đúng cách có thể dẫn đến lổi hệ thống và gây ra sự nhầm lẫn, các liên kết rất hữu ích cho việc cung cấp quyền truy cập vào các tập tin và tổ chức hệ thống tập tin. Liên kết hệ thống tập tin Lệnh ln Hãy xem xét câu lệnh sau đây: Mã: ln -s /srv/www/example.com Điều này tạo ra một liên kết (có tên là example.com) trong thư mục hiện tại vào thư mục hoặc tập tin nằm ở /srv/www/example.com. Nếu bạn muốn chỉ định một tên khác nhau cho đối tượng liên kết, sử dụng câu lệnh như sau đây: Mã: ln -s /srv/www/example.com example Nếu bạn muốn tạo ra một liên kết symbolic trong một thư mục khác so với thư mục hiện tại của bạn, bạn có thể dùng câu lệnh như sau: Mã: ln -s /srv/www/example.com/public_html /home/username/public/example Liên kết symbolic và liên kết cứng (hard) Liên kết symbolic giống như chức năng một “pointers", nó không chứa bất kỳ thông tin nào khác hơn so với vị trí của đối tượng mục tiêu và kế thừa tất cả thuộc tính khác từ tập tin liên kết. Đây là những liên kết đơn giản nhất dễ sử dụng. Liên kết cứng cho phép hai tập tin rõ ràng, có thể có những tên gọi khác nhau, để trỏ đến cùng một dữ liệu. Ta không thể tạo ra các liên kết cứng đến các đối tượng mà chúng nằm ở các ổ đĩa hoặc các hệ thống tập tin khác nhau. Liên kết cứng không thể trỏ đến thư mục, chỉ làm việc với tập tin . Trường hợp sử dụng liên kết symbolic Liên kết hệ thống tập tin là rất thuận tiện và có thể đơn giản hóa một số vấn đề về tổ chức hệ thống tập tin. Tuy nhiên, các đối tượng liên kết có thể tạo ra sự nhầm lẫn, đặc biệt là khi các liên kết trỏ đến các liên kết khác hoặc khi các liên kết trỏ đến tập tin mà không tồn tại hoặc đã được xóa bỏ. Khi sử dụng đúng cách, các liên kết có thể là một công cụ mạnh mẽ trong bộ công cụ của một quản trị hệ thống. Nếu các tập tin public của trang web bạn đang nằm trong thư mục /srv/www/example.com/public_html/, nhưng bạn muốn có một số user có thể truy cập vào thư mục này khi đang ở các thư mục /home/ của họ, bạn có thể tạo ra nhiều liên kết symbolic trong các thư mục /home/ trỏ đến /srv/www/example.com/public_html/. Vấn đề an ninh Liên kết symbolic có thể được di chuyển, đổi tên, và loại bỏ bất cứ lúc nào. Khi liên kết được tạo ra với một đường dẫn tương đối cụ thể và liên kết sau đó được di chuyển, mục tiêu của liên kết dự kiến cũng sẽ được di chuyển. Nếu không, liên kết sẽ trỏ đến một đối tượng mà không tồn tại. Điều này có thể dẫn đến lỗ hổng bảo mật tiềm năng nếu một liên kết symbolic được sao chép hoặc chuyển sang một hệ thống khác nhau, hoặc nếu đối tượng liên kết được di chuyển và mục tiêu của liên kết được thay thế bằng tập tin nguy hiểm. Hãy cảnh giác với các vấn đề tiềm năng mà có thể xảy ra gây nguy hiểm hệ thống của bạn. Các ví dụ Tạo các liên kết symbolic với đường dẫn tương đối Hãy xem xét các kết quả đầu ra của các lệnh sau đây, được dùng để tạo ra và hiển thị một liên kết symbolic rất đơn giản: Mã: $ ls -l total 0 -rw-r--r-- 1 username username 0 Aug 27 10:35 foo $ ln -s foo bar $ ls -l total 0 lrwxrwxrwx 1 username username 3 Aug 27 10:35 bar -> foo -rw-r--r-- 1 username username 0 Aug 27 10:35 fooh Kí tự thứ nhất l trong cột đầu tiên đã chỉ ra rằng bar là một liên kết. Ngoài ra, lệnh ls in ra vị trí của liên kết symbolic. Liên kết ở trên là tương đối: bar được liên kết với đối tượng foo trong cùng một thư mục. Hãy xem xét các liên kết tương đối sau đây: Mã: $ ln -s ../example.txt $ ls -l lrwxrwxrwx 1 username username 6 Aug 27 10:54 example.txt -> ../example.txt Lệnh ln -s sẽ thành công miễn là không có tập tin example.txt tồn tại trong thư mục hiện tại. Tập tin example.txt phải tồn tại khi liên kết được tạo ra, nếu liên kết hoặc tập tin example.txt di chuyển thì sẽ dẫn đến một liên kết hỏng. Tạo một liên kết sumbolic với đường dẫn tuyệt đối Để tránh những sai xót của các liên kết symbolic trỏ tới đường dẫn tương đối, bạn có thể tạo liên kết symbolic trỏ tới đường dẫn tuyệt đối. Hãy xem xét ví dụ sau: Mã: $ ln -s /srv/www/example.com/public_html /home/username/public $ ls -l /home/username total 0 lrwxrwxrwx 1 username username 3 Aug 27 11:43 public -> /srv/www/example.com/public_html $ ls -l /home/username/public total 48K -rw-r--r-- 1 username username 355 2010-06-10 14:50 index.htm -rw-r--r-- 1 username username 38K 2010-06-10 12:37 logo.png Tạo một liên kết cứng Trong hầu hết các trường hợp, các liên kết symbolic được sử dụng nhiều hơn các liên kết cứng. Có một số tình huống đòi hỏi phải liên kết cứng. Hãy xem xét ví dụ sau: Mã: $ ls -l total 4.0K -rw-r--r-- 1 username username 3 Aug 27 12:23 foo $ ln foo bar $ ls -l total 8.0K -rw-r--r-- 2 username username 3 Aug 27 12:23 bar -rw-r--r-- 2 username username 3 Aug 27 12:23 foo $ touch foo $ ls -l total 8.0K -rw-r--r-- 2 username username 3 Aug 27 12:24 bar -rw-r--r-- 2 username username 3 Aug 27 12:24 foo