ความหมายของ 'ln -sf' ใน Linux คืออะไร


21

ฉันมี 2 คำถาม ตัวแรกคือ-sfตัวเลือกและตัวที่สองสำหรับการใช้งาน-fตัวเลือกที่เฉพาะเจาะจงมากขึ้น

โดย googling ฉันคิดออกคำอธิบายของคำสั่งlnตัวเลือกและ-s-f

(คัดลอกจาก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

ฉันเข้าใจตัวเลือกเหล่านี้เป็นรายบุคคล แต่วิธีที่สามารถใช้นี้-sและ-fตัวเลือกพร้อมกัน? -sใช้สำหรับสร้างไฟล์ลิงค์และ-fใช้สำหรับลบไฟล์ลิงค์ ฉันไม่เข้าใจสถานการณ์นี้และเหตุใดจึงต้องใช้ตัวเลือกการผสานนี้

หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับlnคำสั่งฉันได้ทำตัวอย่าง

$ 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 

ทุกอย่างทำงานได้ดีก่อนคำสั่งถัดไป

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

โดยคำอธิบายของ-fตัวเลือกคำสั่งสุดท้ายนี้ไม่ควรทำงาน แต่ทำ! fooจะถูกลบออก

ทำไมสิ่งนี้จึงเกิดขึ้น


3
-fหมายถึงแรง ( --force); ไม่ใช่เพื่อลบ!
Pandya

3
เพื่อเพิ่มเหตุผลให้กับคำตอบของ terdon ... หนึ่งในการใช้งานคือเมื่อทำการอัพเดตไลบรารีด้วยตนเอง หากคุณทำสองขั้นตอน - ก่อนอื่นให้ลบลิงค์เก่าออกจากนั้นให้ ln -s สร้างใหม่ - ห้องสมุดจะไม่ทำงานระหว่างการดำเนินการ ... ซึ่งจะกลายเป็นปัญหาใหญ่หากคำสั่ง ln ต้องการห้องสมุด ไปทำงาน. ดังนั้นด้วย ln -sf ลิงก์เก่าจะถูกแทนที่ด้วยลิงก์ใหม่โดยที่ลิงก์ไม่เคยขาด
Baard Kopperud

คำตอบ:


42

man commandครั้งแรกของทั้งหมดเพื่อค้นหาสิ่งที่ตัวเลือกคำสั่งที่ไม่คุณสามารถใช้ ดังนั้นถ้าคุณวิ่งman lnคุณจะเห็น:

   -f, --force
          remove existing destination files

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

ทีนี้-sอย่างที่คุณพูดคือการทำให้ลิงก์สัญลักษณ์เป็นเรื่องยาก -fแต่ไม่ได้ที่จะเอาการเชื่อมโยง มันคือการเขียนทับไฟล์ปลายทางหากมีอยู่ เพื่อแสดง:

 $ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.