Ý nghĩa của 'ln -sf' trong Linux là gì?


21

Tôi có 2 câu hỏi. Đầu tiên là cho các -sftùy chọn và thứ hai là cho việc sử dụng các -ftùy chọn cụ thể hơn .

Bằng cách googling, tôi đã tìm ra mô tả của lệnh ln, tùy chọn -s-f.

(sao chép từ http://linux.about.com/od/commands/l/blcmdl1_ln.htm )

-s, --symbolic : make symbolic links instead of hard links
-f, --force : remove existing destination files

Tôi hiểu các tùy chọn cá nhân. Nhưng, làm thế nào có thể sử dụng điều này -s-fcác tùy chọn đồng thời? -sđược sử dụng để tạo tệp liên kết và -fđược sử dụng để xóa tệp liên kết. Tôi không thể hiểu tình huống này và tại sao sử dụng tùy chọn hợp nhất này.

Để biết thêm về lnlệnh, tôi đã thực hiện một số ví dụ.

$ touch foo     # create sample file
$ ln -s foo bar # make link to file
$ vim bar       # check how link file works: foo file opened
$ ln -f bar     # remove link file 

Mọi thứ hoạt động tốt trước lệnh tiếp theo

$ ln -s foo foobar
$ ln -f foo     # remove original file

Theo mô tả của -ftùy chọn, lệnh cuối cùng này sẽ không hoạt động, nhưng nó có! foobị xóa.

Tại sao chuyện này đang xảy ra?


3
-flà viết tắt của lực ( --force); không phải để loại bỏ!
Pandya

3
Để thêm một lý do cho câu trả lời của terdon ... Một trong những cách sử dụng là khi cập nhật thủ công các thư viện. Nếu bạn thực hiện theo hai bước - đầu tiên rm để xóa liên kết cũ, sau đó ln -s để tạo một liên kết mới - thư viện sẽ không hoạt động giữa các hoạt động ... sẽ trở thành một vấn đề lớn nếu lệnh ln cần thư viện làm việc. Vì vậy, với ln -sf, liên kết cũ được thay thế bằng liên kết mới, không có liên kết nào bị phá vỡ.
Baard Kopperud

Câu trả lời:


42

Trước hết, để tìm những gì các tùy chọn của lệnh làm, bạn có thể sử dụng man command. Vì vậy, nếu bạn chạy man ln, bạn sẽ thấy:

   -f, --force
          remove existing destination files

   -s, --symbolic
          make symbolic links instead of hard links

Bây giờ, -snhư bạn đã nói, là làm cho liên kết mang tính biểu tượng trái ngược với khó khăn. Các -fTuy nhiên, không phải là để loại bỏ các liên kết. Đó là ghi đè lên tệp đích nếu có. Để minh họa:

 $ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 bar
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo

$ ln -s foo bar  ## fails because the target exists
ln: failed to create symbolic link bar’: File exists

$ ln -sf foo bar   ## Works because bar is removed and replaced with the link
$ ls -l
total 0
lrwxrwxrwx 1 terdon terdon 3 Mar 26 13:19 bar -> foo
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.