Tại sao tạo một liên kết như thế này: ln -nsf?


34

Cái này làm gì

ln -nsf

tôi biết ln -s tạo ra một liên kết tượng trưng, ​​không phải là một liên kết cứng có nghĩa là bạn có thể xóa nó và nó sẽ không xóa suy nghĩ rằng nó liên kết đến. Nhưng những thứ khác có nghĩa là gì? (-f)

Cập nhật: được rồi ... vì vậy tôi nhớ bạn có thể tìm thấy thứ này từ dòng lệnh. Đây là những gì tôi phát hiện ra từ việc gõ ln --help:

-f, --force                 remove existing destination files
-n, --no-dereference        treat destination that is a symlink to a
                            directory as if it were a normal file

Nhưng điều này vẫn chưa rõ ràng đối với tôi ý nghĩa của việc này là gì. Tại sao tôi muốn tạo một liên kết mềm / sym như thế này?


1
Ngay cả khi bạn không sử dụng -s bạn có thể xóa liên kết mà không xóa tập tin gốc. Liên kết cứng làm tăng số lượng liên kết của tệp để nó sẽ không bị xóa khi bạn chỉ xóa một trong các liên kết đến nó.
Amok

Đó không hoàn toàn là sự khác biệt giữa liên kết cứng và liên kết tượng trưng. Một liên kết cứng trỏ đến cùng byte (inode) trên đĩa. Một liên kết mềm trỏ đến một tập tin khác theo tên tệp .
Greg Hewgill

Ngoài ra còn có trang người đàn ông. tức là chạy người đàn ông. Hoặc người đàn ông, để tìm hiểu về hệ thống trợ giúp đó. Bạn cũng có thể lấy các trang trực tuyến ...
Peter Cordes

Câu trả lời:


40

Từ trang người đàn ông BSD:

 -f    If the target file already exists, then unlink it so that the link
           may occur.  (The -f option overrides any previous -i options.)

 -n    If the target_file or target_dir is a symbolic link, do not follow
           it.  This is most useful with the -f option, to replace a symlink
           which may point to a directory.

21

các -n tùy chọn (cùng với -f ) lực lượng ln để cập nhật một liên kết tượng trưng đến một thư mục. điều đó nghĩa là gì?

giả sử bạn có 2 thư mục

  • foo
  • quán ba

và một liên kết tượng trưng hiện có

  • baz - & gt; quán ba

bây giờ bạn muốn cập nhật baz để trỏ đến foo thay thế. nếu bạn chỉ làm

ln -sf foo baz

bạn sẽ nhận được

  • baz / foo - & gt; foo
  • baz - & gt; thanh (không thay đổi), và do đó
  • thanh / foo - & gt; foo

Nếu bạn thêm -n

ln -sfn foo baz

bạn nhận được những gì bạn muốn.

  • baz - & gt; foo

đó là điều 'không có ý định' có nghĩa là: không giải quyết một liên kết hiện có và đặt liên kết mới bên trong thư mục đó, mà chỉ cập nhật nó.


Câu trả lời hữu ích nhất cho đến nay.
kobejohn

2

Dưới đây là tất cả các tùy chọn để ln. Bạn sẽ tìm thấy -n và -f ở đây.

 -F    If the target file already exists and is a directory, then remove
       it so that the link may occur.
       The -F option should be used with either -f or -i options.  If
       none is specified, -f is implied.
       The -F option is a no-op unless -s option is specified.

 -h    If the target_file or target_dir is a symbolic link, do not
       follow it.  This is most useful with the -f option, to replace 
       a symlink which may point to a directory.

 -f    If the target file already exists, then unlink it so that the
       link may occur.  (The -f option overrides any previous -i options.)

 -i    Cause ln to write a prompt to standard error if the target file
       exists.  If the response from the standard input begins with the
       character `y' or `Y', then unlink the target file so that the link
       may occur.  Otherwise, do not attempt the link.  (The -i option
       overrides any previous -f options.)

 -n    Same as -h, for compatibility with other ln implementations.

 -s    Create a symbolic link.

 -v    Cause ln to be verbose, showing files as they are processed.

0

Bạn có thể gõ "man ln" để tìm những thứ như vậy:

   -f, --force
          remove existing destination files

   -n, --no-dereference
          treat destination that is a symlink to a directory as if it were
          a normal file

17
tôi vẫn không hiểu chính xác điều đó có nghĩa là gì
Andrew

0

-f, - lực lượng               xóa các tệp đích hiện có

-n, --no-dereference               coi đích là một liên kết tượng trưng đến một thư mục như thể đó là một tệp bình thường


-5

-f nói rằng nếu mục tiêu của lệnh của bạn là một tệp hiện có, thì nó sẽ bị xóa và được thay thế bởi liên kết mới. (Lưu ý rằng trong các hệ thống chịu ảnh hưởng của Unix, "tệp" có thể bao gồm các thư mục, liên kết, đường ống, v.v.)

-n sửa đổi -f, nói rằng nếu mục tiêu bạn chỉ định là một liên kết tượng trưng hiện có, thì nó nên không phải được gỡ bỏ.


3
Mô tả của bạn về -n là sai. -f bởi chính nó sẽ không thay thế một liên kết tượng trưng đến một thư mục. Khi thay thế một liên kết tượng trưng đến một thư mục, -n là cần thiết để xử lý symlink hiện có như một tập tin bình thường thay vì một thư mục.
Brian
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.