ทำไมต้องสร้างลิงค์เช่นนี้: ln -nsf


41

สิ่งนี้ทำอะไร

ln -nsf

ฉันรู้ว่าln -sสร้างลิงก์สัญลักษณ์ไม่ใช่ลิงก์ที่ยากซึ่งหมายความว่าคุณสามารถลบได้และจะไม่ลบความคิดที่ลิงก์ไป แต่สิ่งอื่น ๆ หมายถึงอะไร (-nf)

อัปเดต:โอเค ... ดังนั้นฉันจำได้ว่าคุณสามารถค้นหาสิ่งนี้ได้จากบรรทัดคำสั่ง นี่คือสิ่งที่ฉันค้นพบจากการพิมพ์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

แต่นี่ยังไม่ชัดเจนสำหรับฉันว่าความหมายของสิ่งนี้คืออะไร ทำไมฉันต้องการสร้างลิงค์นุ่ม / sym เช่นนี้?


1
แม้ว่าคุณจะไม่ได้ใช้-sคุณสามารถลบลิงค์ได้โดยไม่ต้องลบไฟล์ต้นฉบับ ฮาร์ดลิงก์จะเพิ่มจำนวนลิงก์ของไฟล์ดังนั้นมันจะไม่ถูกลบเมื่อคุณลบลิงค์ใดลิงค์หนึ่งเท่านั้น
Amok

นั่นไม่ใช่ความแตกต่างระหว่างฮาร์ดลิงก์และลิงก์สัญลักษณ์ ฮาร์ดลิงก์ชี้ไปที่ไบต์เดียวกัน (inode) บนดิสก์ การเชื่อมโยงนุ่มชี้ไปยังไฟล์อื่นโดยชื่อ
เกร็ก Hewgill

นอกจากนี้ยังมีหน้าคน ie run man ln หรือชายคนหนึ่งเพื่อเรียนรู้เกี่ยวกับระบบช่วยเหลือ คุณจะได้รับหน้าคนออนไลน์เกินไป ...
ปีเตอร์ Cordes

คำตอบ:


43

จากหน้าคน 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.

31

-nตัวเลือก (ร่วมกับ-f) กองกำลังlnในการปรับปรุงการเชื่อมโยงสัญลักษณ์ไปยังไดเรกทอรี นั่นหมายความว่าอย่างไร?

สมมติว่าคุณมี 2 ไดเรกทอรี

  • foo
  • บาร์

และลิงก์สัญลักษณ์ที่มีอยู่

  • baz -> แถบ

ตอนนี้คุณต้องการอัพเดทbazให้ชี้ไปที่fooแทน ถ้าคุณทำ

ln -sf foo baz

คุณจะได้รับ

  • baz / foo -> foo
  • baz -> bar (ไม่เปลี่ยนแปลง) และเช่นนั้น
  • bar / foo -> foo

ถ้าคุณเพิ่ม -n

ln -sfn foo baz

คุณจะได้รับสิ่งที่คุณต้องการ.

  • baz -> foo

นั่นคือความหมายของ 'การไม่ต้องลงทะเบียน': อย่าแก้ไขลิงก์ที่มีอยู่และวางลิงก์ใหม่ในไดเรกทอรีนั้น แต่เพียงแค่อัปเดต


2
คำตอบที่เป็นประโยชน์มากที่สุดโดยไกล
kobejohn

1

นี่คือตัวเลือกทั้งหมดที่จะ ln คุณจะพบ -n และ -f ที่นี่

 -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.

-1

คุณสามารถพิมพ์ "man ln" เพื่อค้นหาสิ่งต่าง ๆ :

   -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

20
ฉันยังไม่เข้าใจความหมายที่แท้จริง
Andrew

-1

-f, - บังคับลบไฟล์ปลายทางที่มีอยู่

-n, - ไม่มีการอ้างถึงปลายทางที่เป็น symlink ไปยังไดเรกทอรีราวกับว่ามันเป็นไฟล์ปกติ


-5

-fบอกว่าหากเป้าหมายของคำสั่งของคุณเป็นไฟล์ที่มีอยู่ก็ควรจะลบออกและแทนที่ด้วยลิงค์ใหม่ (โปรดทราบว่าในระบบที่ได้รับผลกระทบ Unix "ไฟล์" อาจรวมถึงไดเรกทอรีลิงก์ท่อ ฯลฯ )

-nแก้ไข -f โดยบอกว่าหากเป้าหมายที่คุณระบุเป็นลิงก์สัญลักษณ์ที่มีอยู่ก็ไม่ควรลบออก


3
คำอธิบายของคุณ-nผิด -fด้วยตัวเองจะไม่แทนที่ symlink ไปยังไดเรกทอรี เมื่อแทนที่ symlink เป็นไดเรกทอรี-nจำเป็นต้องใช้ symlink ที่มีอยู่เช่นไฟล์ปกติแทนที่จะเป็นไดเรกทอรี
Brian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.