เคล็ดลับในการจดจำลำดับของพารามิเตอร์สำหรับ ln


64

ฉันเคยlnเขียนลิงก์สัญลักษณ์มาหลายปีแล้ว แต่ฉันก็ยังได้คำสั่งของพารามิเตอร์ผิดไปหมด

ฉันมักจะเขียนสิ่งนี้:

ln -s a b

จากนั้นดูผลลัพธ์เพื่อเตือนตัวเอง

ฉันมักจะจินตนาการว่าจะเป็นa -> bเมื่อฉันอ่านมันเมื่อมันตรงกันข้ามจริงb -> aๆ สิ่งนี้ให้ความรู้สึกต่อต้านเคาน์เตอร์ดังนั้นฉันจึงพบว่าฉันคาดเดาตัวเองอยู่เสมอ

ใครบ้างมีเคล็ดลับที่จะช่วยให้ฉันจำลำดับที่ถูกต้อง?


11
บางครั้งก็ช่วยในการบอกว่ามัน outloud เมื่อคุณพิมพ์ใน "การเชื่อมโยงสัญลักษณ์aและเรียกมันว่าb"
jsotola

2
คุณสร้างพารามิเตอร์ตัวที่สองเหมือนกับ cp และคุณสร้างลิงค์ แต่ถ้าคุณเข้าใจผิดไม่ต้องกังวลเพราะคุณไม่สามารถเขียนทับไฟล์หรือ symlink ที่มีอยู่ด้วยลิงค์ใหม่
sudodus

1
ที่เกี่ยวข้อง: ทิศทางของ symlink
G-Man

1
คิดว่ามันเป็น "นามแฝงของคนเลว" เขาถูกเรียกโดยชื่อจริงเสมอก่อนจากนั้นจึงใช้นามแฝง ตัวอย่าง: Tony Baloney หรือที่รู้จักในนาม Oscar Meyer หรือในกรณีที่ลิงก์ของคุณ ln -sab หมายถึง "File-a หรือที่รู้จักกันในชื่อ File-b"
Scottie H

1
ln source target. เช่นเดียวกับcp source target, mv source target; ...
user207421

คำตอบ:


40

ฉันใช้สิ่งต่อไปนี้: lnมีรูปแบบหนึ่งอาร์กิวเมนต์ (รูปแบบที่ 2 ที่ระบุไว้ในmanpage ) ซึ่งจำเป็นต้องมีเป้าหมายเท่านั้น (เพราะวิธีการlnทำงานได้ทั้งหมดโดยไม่ทราบเป้าหมาย) และlnสร้างลิงค์ในไดเรกทอรีปัจจุบัน ฟอร์มสองอาร์กิวเมนต์เป็นส่วนเพิ่มเติมของฟอร์มอาร์กิวเมนต์หนึ่งดังนั้นเป้าหมายจึงเป็นอาร์กิวเมนต์แรกเสมอ


3
โปรดทราบว่าแบบฟอร์มที่มีเส้นทางปลายทาง / lnเป้าหมายไม่เป็นส่วนขยายไปตามข้อกำหนดของ
Kusalananda

1
@kusa: คุณเห็นคู่มือ 1971 ในคำตอบของฉันด้วยแบบฟอร์มการโต้แย้งหนึ่งครั้งหรือไม่ มันจะเป็นส่วนขยายของ posix ได้อย่างไรถ้ามันอยู่ในนั้นในปี 1971? --- "ถ้าให้ name2 ลิงก์จะมีชื่อนั้น"

@SP ฉันไม่แน่ใจว่าฉันเข้าใจความหมายของคุณ คุณกำลังบอกว่าการใช้งานทางประวัติศาสตร์อย่างใดอย่างหนึ่งสำคัญกว่ามาตรฐาน POSIX ปัจจุบัน?
Kusalananda

1
ฉันก็เห็นเช่นกัน อย่างน้อยชื่อต่าง ๆ กันอย่างน้อยที่สุด ฉันไม่รู้ว่า gnu เป็นคนเดียวที่มีชื่อหาเรื่องเหล่านี้

2
มีคำตอบที่ดีมากมายที่นี่ (โดยเฉพาะสัมผัสโดย @loa_in_) แต่ฉันจะไปกับคนนี้ การระบุว่าลำดับของพารามิเตอร์นั้นสอดคล้องกัน (ไม่สนใจ-t) จากนั้นก็ให้ความรู้สึกเหมือนเป็นข้อพิสูจน์ " lnสร้างลิงค์ในไดเรกทอรีปัจจุบันรูปแบบสองอาร์กิวเมนต์เป็นส่วนเพิ่มเติมของรูปแบบหนึ่งอาร์กิวเมนต์และดังนั้นเป้าหมายจึงเป็นอาร์กิวเมนต์แรกเสมอ" เนื่องจากมันสมเหตุสมผลที่จะเป็นกรณีนี้เมื่อพิจารณารูปแบบที่สองฉันคิดว่าสิ่งนี้จะช่วยให้ฉันจำได้
Zhro

85

ฉันไปโดย " lnเป็นเหมือนcp'แหล่งที่มา' ต้องมาก่อน"


20
... mvและชอบ mv, cpและlnทุกคนจะไฟล์ที่มีอยู่เป็นอาร์กิวเมนต์แรกและแฟ้มปลายทางหรือชื่อไดเรกทอรีตั้งใจจะให้เป็นอาร์กิวเมนต์ที่สอง
Hans-Martin Mosner

7
มันเป็นความอัปยศที่memcpy, strcpyฯลฯ ทำงานวิธีอื่น ๆ
Arkadiusz Drabczyk

6
@ Hans-MartinMosner ยกเว้นว่าเมื่อคุณสร้างลิงก์สัญลักษณ์มันไม่จำเป็นต้องเป็นไฟล์ที่มีอยู่ ...
ilkkachu

1
@ilkkachu คุณพูดถูก ไม่มีกฎโดยไม่มีข้อยกเว้น :-)
Hans-Martin Mosner

1
@ArkadiuszDrabczyk บนมืออื่น ๆ บางอย่างเช่นแผนที่อย่างดีเพื่อmemcpy(dest,src,n); dest = src;กล่าวอีกนัยหนึ่งชุด ( nไบต์แรกของ) dest เท่ากับ ( nไบต์แรกของ) src
CVN

10

Unices ส่วนใหญ่จัดทำเอกสารlnคำสั่งดังนี้

ln source target

(ฉันไม่เห็นตัวเลือกอื่น ๆ ที่นี่)

ตัวอย่าง:

  • มาตรฐาน POSIX

    ln [-fs] [-L|-P] source_file target_file
    
  • OpenBSD :

    ln [-fhLnPs] source [target]
    
  • NetBSDและFreeBSD

    ln [-L | -P | -s [-F]] [-f | -iw] [-hnv] source_file [target_file]
    
  • MacOS

    ln [-Ffhinsv] source_file [target_file]
    
  • Solaris

    /usr/bin/ln [-fns] source_file [target]
    
  • AIX

    ln [ -f | -n ] [ -s ] SourceFile [ TargetFile ]
    

ลิขสิทธิ์ GNU lnคู่มือการเรียกsource เป้าหมายและlinknametarget

ละเว้นทางเลือกที่ GNU ของคำที่lnยูทิลิตี้ดังต่อไปนี้ประเภทเดียวกันของความหมายเป็นเช่นmvและcpในการที่เป้าหมายคือสิ่งที่สร้างขึ้นจากแหล่งที่มา

ดังนั้น,

ln -s a b

จะสร้างการเชื่อมโยงสัญลักษณ์ที่ชี้ไปยังba

โปรดทราบว่าเมื่อสร้างลิงก์สัญลักษณ์แหล่งที่มาเป็นเพียงสตริงที่แสดงถึงสิ่งที่ลิงก์สัญลักษณ์ควรชี้ไปที่ มักจะไม่มีการตรวจสอบเพื่อตรวจสอบว่ามันชี้ไปที่สิ่งที่มีประโยชน์:

$ ln -s "hello world" README.txt
$ ls -l
total 0
lrwxr-xr-x  1 kk  wheel  11 Sep 15 11:39 README.txt -> hello world

5
ฉันตำหนิเอกสาร GNU อย่างเต็มที่เนื่องจากผู้ใช้เข้าใจผิด ถ้อยคำของพวกเขาเข้าใจได้ง่ายในการเข้าใจถึงปัญหาหลังเหตุการณ์ แต่เกิดความสับสนอย่างเป็นกลาง
Konrad Rudolph

6
@ KonradRudolph ตรงกันข้ามถ้อยคำ GNU นั้นดูเหมือนกับฉัน ยูทิลิตี้สร้างลิงก์ที่มีชื่อชี้ไปที่อื่น "ชื่อเชื่อมโยง" เป็นที่ชัดเจนครับและ "เป้าหมาย" เป็นคำอธิบายที่ดีเลิศสำหรับสิ่งที่จะชี้ไป ในฐานะที่เป็นเรื่องเล็ก ๆ น้อย ๆ ฉันยังคงต้องคิดว่าวิธีการใดที่ใช้ln -s a bงานได้และนั่นไม่เกี่ยวข้องกับถ้อยคำของ GNU เนื่องจากฉันไม่คิดว่าฉันเคยดูคำพูดในหน้าคน : D (ง่ายกว่าที่จะเรียกใช้ln -si a bเมื่อไม่แน่ใจมันจะบ่นหากbมีอยู่แล้ว)
ilkkachu

1
@ KonradRudolph แต่ในทางเทคนิคแล้วการเรียกมันว่า "เป้าหมาย" ในกรณีของฮาร์ดลิงก์นั้นผิดเนื่องจากไม่ใช่ชื่อที่มีอยู่ แต่ inode นั้นเป็นเป้าหมายที่แท้จริง ฉันสงสัยว่าคนใน GNU คิดว่าผู้ใช้ทั่วไปไม่ควรคิดในรายละเอียดมากขนาดนั้น
ilkkachu

มันน่าสนใจที่จะชี้ให้เห็นดังที่ได้กล่าวไว้ในความคิดเห็นของคำตอบของ @ gary ว่าเป้าหมายนั้นไม่ได้เป็นตัวเลือกในมาตรฐาน POSIX
Zhro

@kusa: ด้วย "ln -s AB --- คัดลอกเฉพาะชื่อไฟล์ไปยัง B" ฉันยอมรับการตีความของคุณในบริบทที่เปลี่ยนแปลงเล็กน้อย ฉันสามารถเห็นด้วยตัวอย่าง "สวัสดีโลก" ที่รุนแรงของคุณ "เฉพาะชื่อไฟล์ 'IS a string เพียงต้องการส่งสัญญาณถึงคุณว่าฉันได้แก้ไขและเพิ่มจำนวนมาก

7

ในกรณีนี้จะช่วยให้ทุกคน: ฉันเคยคิดว่ามันเป็น "ln อะไร ที่ " ซึ่งช่วยให้ฉันจำได้ว่าอาร์กิวเมนต์แรก ("อะไร") เป็นไฟล์ที่มีอยู่ที่สอง ("ที่ไหน") เป็นสถานที่ ที่จะนำ (ลิงค์ไป) มัน ตรงข้ามกับเหตุผลส่วนใหญ่ของคำตอบอื่น ๆ นี่คือไม่มีอะไรมากกว่าวลีที่แหลมคมที่ฉันสามารถท่องใจตัวเองในขณะที่ฉันพิมพ์คำสั่งซึ่งทำหน้าที่เป็นเครื่องช่วยหน่วยความจำ นี่อาจจะไม่เป็นประโยชน์กับทุกคน แต่ฉันสงสัยว่ามันจะช่วยให้บางคน

มันจะช่วยให้ที่อื่น ๆ คำสั่งจัดการไฟล์มาตรฐานใช้การประชุมเดียวกันดังนั้นฉันสามารถทำเช่นเดียวกันสำหรับและcpmv


4
ฉันอยากรู้ว่าทำไมมันถึงถูกลดระดับลงบ้าง ที่นี่มีไม่มากที่อาจผิด - ฉันรวมคำสั่งซื้อหรืออะไรบางอย่าง?
David Z

โดยส่วนตัวฉันคิดว่า "ln อะไรที่" ยังไม่โปร่งใสโดยไม่มีคำอธิบาย: สิ่งที่อาจเป็น "สิ่งที่เป็นลิงค์ชี้เชื่อมโยงที่? (ถูกต้อง) หรือ "สิ่งที่เชื่อมโยงกับบางสิ่ง" (ไม่ถูกต้อง). เช่นเดียวกับที่: "ลิงก์จะชี้ไปที่ใด" (ไม่ถูกต้อง) หรือ "ตำแหน่งที่จะสร้างลิงก์" (ถูกต้อง) ดังนั้นสิ่งนี้ไม่ได้ช่วยอะไรมากนักหากคุณคาดเดาตัวเองเป็นครั้งที่สอง การจดจำ cp และ mv น่าจะช่วยได้
125_m_125

เราทุกคนคาดหวังว่าคำสั่ง UNIX จะรวมอาร์กิวเมนต์ไฟล์ไว้หลังจากอาร์กิวเมนต์ชนิดอื่น (เช่น grep ทำเพื่อ exmaple) ln สร้างไฟล์บางประเภทที่มีเนื้อหาที่กำหนด ระบบไฟล์ทำอะไรที่พิเศษและเรามักจะใส่พา ธ ไปยังไฟล์ต้นฉบับบางไฟล์โดยบังเอิญไปที่ ln สำหรับ exmaple ฉันสามารถเขียนเท็กซ์เอดิเตอร์ซึ่งเก็บเนื้อหาของบรรทัดแรกใน symlink ที่เรียกว่า 1 เป็นต้นซึ่งมันจะบ้าคลั่ง แต่มันเน้นว่า ln สร้างไฟล์บางชนิดที่มีเนื้อหาข้อความบางอย่างไม่มากหรือน้อยและ ทำให้ลำดับอาร์กิวเมนต์ดูเหมือนเป็นตรรกะ
Dannie

@ 125_m_125 การตีความทางเลือกที่คุณนำเสนอไม่สมเหตุสมผลกับฉันมากนัก แต่ก็ไม่เป็นไร เครื่องมือช่วยความจำนี้ไม่เหมาะสำหรับทุกคน
David Z

6

ฉันเพิ่งได้ยินวิธีที่ดีในการจดจำสิ่งนี้: สัมผัส

สิ่งเก่าสิ่งใหม่

สิ่งที่ยืมมา, บางสิ่งบางอย่างสีฟ้า,

และเพนนีในรองเท้าของเธอ

ข้อแรกคือข้อโต้แย้งของ ln คือ: สิ่งเก่าตามด้วยชื่อของรายการไดเรกทอรีใหม่


3
NAME    ln -- make a link
SYNOPSIS    ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1. 
            If name2 is given, the link has that name; 

1971 จากยูนิกซ์คู่มือฉบับพิมพ์ครั้งแรก

มีรูปแบบที่สองง่ายไวยากรณ์


แก้ไข:ฉันใส่ไฟล์หรือ FILENAME แทนเป้าหมาย --- เห็นความคิดเห็น ฯลฯ นอกจากนี้ยังเห็นนานมากที่ด้านล่างที่อยู่ ภูเขาน้ำแข็งแข็งและอ่อนของlnไม่เพียงปลายของมัน


ดังนั้น GNU จึงlnมีสิ่งนี้:

ln [opt] FILENAME

In the 2nd form, create a link to FILENAME in the current directory.

คุณไม่ต้องการชื่อลิงก์ หลังจากที่ln -s /usr/lib/modulesคุณได้รับ

modules -> /usr/lib/modules

ด้วยชื่อเดียวกันกับ FILENAME ("เป้าหมาย" หรือ "แหล่งที่มา") ตรงที่คุณอยู่ ไม่มีทางเลือกไม่มีความสับสน

ตอนนี้ถ้าคุณต้องการมากขึ้นและต้องการลิงค์ที่สร้างขึ้นภายใต้ชื่ออื่นและ / หรือที่อื่นคุณต้องเพิ่มความปรารถนานั้นเป็นชื่อหรือพา ธ เป้าหมายที่แท้จริงมาก่อนชื่อลิงค์พิเศษแนวใหม่ที่สอง


หรือคุณพูดว่า: "ฉันรู้เครื่องหมายลูกศรนี้ls -lสำหรับลิงก์ฉันไม่มีลูกศรในเปลือกเพื่อแสดงทิศทางของลิงก์ของฉันดังนั้นฉันต้องหมุนไปรอบ ๆ "

คุณสร้างมันในทิศทางเดียวดังนั้นคุณสามารถใช้มันในทิศทางอื่น

(สิ้นสุดส่วนคำตอบ - คำถาม)


ในอีกระดับหนึ่งคำว่า "ลิงก์" นั้นมีความหมายที่ซ่อนอยู่ลึกคู่ ลิงก์สัญลักษณ์มาภายหลังดังนั้นในวันแรก ๆ ลิงก์ก็เป็นเพียงลิงก์ ไม่มีอ่อนและแข็งไม่มี-sตัวเลือก และตอนนี้ฉันยังใช้สัญลักษณ์แหล่งที่มาเป้าหมาย:

mv    A B   --- move the whole file to B (dir or new name)
cp    A B   --- copy whole file (mv and cp are "the same" here)    
ln    A B   --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping

ในขั้นตอนนี้มีการเชื่อมโยง แต่ไม่มีการแข็งและอ่อนนุ่มและls -lไม่แสดงลูกศรเนื่องจากไม่มีทิศทางในการเชื่อมโยง (ฮาร์ด) ลิงก์ "" ในขั้นตอนของวิวัฒนาการยูนิกซ์นั่นหมายความว่าชื่อไฟล์ "B" (รายการไดเรกทอรี "B") ในระบบไฟล์จะชี้ไปที่ไอโหนดเดียวกันกับชื่อไฟล์ "A"

ไฟล์ A และ B นั้น "เชื่อมโยง" เข้าด้วยกันเพราะพวกมันแบ่งปันบล็อกเดียวกัน ตอนนี้ทุก ๆ rm เคอร์เนลต้องตรวจสอบ: ฉันจะลบ / ปล่อยบล็อกของไฟล์นี้บนดิสก์หรือไม่หรือมีไฟล์อื่นเชื่อมโยงกับบล็อกเดียวกันหรือไม่ เพื่อที่จะใช้ลิงค์เคาน์เตอร์

สมมติว่าคุณต้องการที่จะเก็บไฟล์ขนาดใหญ่ใน tmp / Grom ln /tmp/bigfileถูกลบและทำ ตอนนี้คุณมีไฟล์ขนาดใหญ่ในไฟล์ dir ที่คุณใช้งานอยู่ หลังจากทำความสะอาด / tmp และ rmoving "ต้นฉบับ" คุณมีความสุขที่ใช้บล็อกข้อมูลเดียวกัน คุณไม่ได้รับลิงก์ที่ไม่ทำงานหรือห้อยต่องแต่งคุณมีไฟล์ปกติ ชี้ไปที่ไม่มีไฟล์ แต่บล็อกระบบไฟล์เท่านั้นเช่นเดียวกับทุกรายการ dir เฉพาะตอนนี้ "การทำความสะอาด" / tmp ไม่ได้เป็นประสิทธิภาพเหมือนเดิม มันดูว่างเปล่าและมันเป็น แต่บล็อกบนพาร์ติชันไม่ได้รับการปลดปล่อย

แม้ว่าฮาร์ดลิงก์จะไม่เสียค่าใช้จ่ายของพื้นที่ แต่อย่างใด cp ก็สามารถทำได้โดยอ้อม

การเพิ่มln -sไปยังลำดับข้างต้น:

ln -s A B   --- copy only the file's name to "B"   

ตอนนี้ "B" ซอฟต์ลิงค์มีเพียงสตริงที่มีชื่อพา ธ นี่คือข้อมูล "อ่อน" ในทางเทคนิค "A" และ "B" นั้นไม่เกี่ยวข้องกัน แต่ยังคง B คือ "ลิงค์" ในแง่ใหม่ที่คุณสามารถใช้ชื่อพา ธ ที่เก็บไว้เป็นทางลัดไปที่ "A" ตอนนี้มันเป็น"ลิงก์ไปยัง A" (จุด) และไม่"เชื่อมโยงกับ inode ของไฟล์ A"

ลิงก์ทั้งสองประเภทนั้นอาจสร้างความสับสนให้กับมนุษย์ไม่เพียง แต่กับเคอร์เนล / fs บันทึกหน้า man 1971: "BUGS: links ได้รับการแบ็คอัพสองครั้งและเรียกคืนเป็นไฟล์แยกต่างหากพร้อม inodes แยกต่างหาก"

ลิงก์ถาวรไปยังไดเรกทอรี (หายาก / ไม่อนุญาต) สามารถนำไปสู่การอุดตันได้ง่าย

ซอฟต์ลิงค์ไปยังไดเรคทอรี (พบบ่อยมาก) สามารถนำไปสู่ลูปนิรันดร์ - จะต้องรู้จักยูทิลิตี้ / เคอร์เนล

ตัวอย่างการปฏิบัติในทุบตี

เริ่มต้นด้วยไฟล์ "F" ปกติ ...

ln F Fhard

... ทำให้ Fhard ขนาดเท่า F แต่ตอนนี้ทั้งคู่ปรากฏเป็นสีแดงเข้มโดยไม่มีลูกธนูเข้าls -l --colorมา เนื่องจากการstatแสดง "ลิงค์: 2" ในการเชื่อมต่อกับ "Inode: xyz" การเชื่อมโยงอย่างหนัก F เปลี่ยน F ให้เป็นการเชื่อมโยงที่ยาก ทั้งคู่เป็น / stay filetype "ไฟล์ปกติ" แต่ทั้งคู่มีไอโหนดที่มีจำนวนลิงก์ด้านบน 1

   ln -s F Fsoft

... ทำให้ไฟล์ "ไม่สม่ำเสมอ" เล็ก ๆ "Fsoft" พร้อม filetype "symbolic link" --- ยิ่งประหยัดพื้นที่มากกว่าไดร์เปล่า ls -lแสดงให้เห็นว่าไม่มีอะไรพิเศษสำหรับ "F" สำหรับ Fsoft ขนาดที่แสดงคือ 1 ไบต์เนื่องจากสตริงคือ 'F' และFsoft -> Fแสดงเป็นชื่อ ไม่จำเป็นต้อง colorize ลิงค์อ่อนเพื่อรับรู้ เพราะในรูปแบบสั้น ๆls -Fคุณจะได้ห่วงโซ่ม้วน@ ต่อท้าย:Fsoft@

ด้วยls -lลักษณะเช่นนี้:

-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root       1 Sep 16 16:31 Fsoft -> F

Fhard มีขนาดและประเภทของ F

Fsoft มีชื่อของ F และความยาวของชื่อ F เป็นขนาดและประเภทไฟล์อื่น

สั้นls -sF:

5932 F    5932 Fhard     0 Fsoft@

การเพิ่ม--block-size=1ไม่ได้ทำให้มีขนาดเท่ากัน Fsoft มีขนาด "หนึ่งไบต์บล็อกเป็นศูนย์" F และ Fhard เบี่ยงเบนแบบขนาน:

6074368 F  6074368 Fhard    0 Fsoft@

เพื่อดูว่า Fsoft ห้อยอยู่หรือไม่lsให้คุณใช้สี

ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file

2

เป็นประโยชน์อย่างยิ่งที่ต้องจำว่าชื่อลิงก์นั้นเป็นตัวเลือก หากไม่ได้กำหนดไว้ชื่อฐานของเป้าหมายลิงก์จะถูกใช้

ln -s /path/to/file1 file1

เหมือนกับการวางชื่อลิงก์อย่างสมบูรณ์:

ln -s /path/to/file1

สิ่งนี้จะไม่สมเหตุสมผลหากมีการพูดถึงเป้าหมายลิงก์


1

แค่คิดว่ายูนิกซ์ -> AT&T -> ปลายทางทางด้านขวา:

mov %eax, %ebx  ;; AT&T style assembler syntax: %ebx register gets value of %ecx

mv foo bar    ;; foo renamed to bar

cp foo bar    ;; contents of foo go to bar

foo | bar     ;; data moves left to right in pipeline

ln abc def    ;; link to abc installed as def

"cp foo bar" หมายถึง "to bar" "ln abc def" หมายถึง "to abc" หากคุณเก็บสัญลักษณ์ไว้: "to foo" นั่นคือสิ่งที่เป็นปัญหา.

@ user370539 นั่นคือ ismply ไม่เป็นความจริง; หลังln abc def, abcและdefเป็นวัตถุเดียวกัน; พวกเขาแยกไม่ออก นอกจากนี้การดำเนินการไม่มีผลต่อabcนอกจากการเพิ่มจำนวนลิงค์ defปลายทางคือ ตัวชี้ไปยังวัตถุถูกติดตั้งใหม่ในdefตำแหน่ง
Kaz

@ user370539 หากลิงก์เป็นสัญลักษณ์แล้วln -s abc defหมายความว่าเนื้อหาที่ถูกเขียนไปยังสถานที่ตั้ง abc ไม่ต้องแก้ไขอะไร มันอาจเป็นลิงค์ห้อยต่องแต่ง defabc
Kaz

ความคิดเห็นของคุณเป็นสิ่งที่ผิด ... ควรเป็นวิธีอื่น ๆ
rexkogitans

@rexkogitans ประเด็นของฉันคือมันสอดคล้องกัน หากสั่งซื้อที่มี "ผิด" และควรจะกลับแล้วมันควรจะเป็นสำหรับคำสั่งเหล่านั้นทั้งหมด: mv dest src, ln [ -s ] dest src, cp dest src...
Kaz

0

โดยส่วนตัวแล้วฉันชอบที่จะหลีกเลี่ยงการจดจำ X เพื่อให้รู้ว่าจะหา X ได้ที่ไหนเมื่อฉันต้องการ ฉันยังเป็นแฟนของทัศนคติที่ "ปลอดภัยกว่าเสียใจ" ดังนั้นฉันมักจะตรวจสอบอย่างรอบคอบในสิ่งที่ฉันเขียนโดยเฉพาะอย่างยิ่งในฐานะที่เป็นราก

ในกรณีนี้คำตอบนั้นอยู่ในบรรทัดแรกของ manpage:

   ln [OPTION]... [-T] TARGET LINK_NAME
   (...)
   In the 1st form, create a link to TARGET with the name LINK_NAME.

ฉันจะไม่แนะนำถ้ามันจำเป็นต้องเจาะ manpage แต่เนื่องจากมันถูกที่จุดเริ่มต้น IMHO มันคุ้มค่า 3 วินาทีที่ใช้ในการพิมพ์man lnและออกจาก


-1

คล้ายกับ cp ที่ฉันอ่านว่า "คัดลอกสิ่งนี้ไปยังที่ทางจิตใจ" ฉันอ่านคำสั่ง ln ว่า "เชื่อมโยงสิ่งนี้กับสิ่งนั้น"


2
นี่คล้ายกับคำตอบที่ได้รับความนิยมสูงสุด
ไมเคิล

ดังนั้น "ลิงก์ ln -s AB 'A ถึง B ตอนนี้ A -> B หรือ B -> A หรือไม่ฉันคิดว่าส่วนใหญ่ยังไม่ได้ผ่านขั้นตอนแรกของความสับสนพวกเขาบอกว่ามันง่าย แต่ก็ผิด

-2

นี่คือวิธีที่ฉันจำได้: ลืมเป้าหมาย กล่าวอีกนัยหนึ่งถ้าฉันอยู่ใน dir1 และต้องการสร้าง symlink ที่นี่เพื่อ file1 ที่มีอยู่ใน / some / other / dir / ฉันจะทำ:

ln -s /some/other/dir/file1

คุณจะได้รับ symlink ชื่อ file1 ใน dir1 ซึ่งชี้ไปที่ / some / other / dir / file1 จาก man page สำหรับ ln:

ln [ตัวเลือก] ... เป้าหมาย (แบบฟอร์มที่ 2) ... ในแบบฟอร์มที่ 2 ให้สร้างลิงก์ไปยังเป้าหมายในไดเรกทอรีปัจจุบัน

โปรดจำไว้ว่าการทำงานนี้ก็ต่อเมื่อคุณต้องการให้ symlink มีชื่อเดียวกับเป้าหมาย (ซึ่งเป็นไปได้มากที่สุด)


มีใครช่วยอธิบายหน่อยได้ไหมว่าทำไมเรื่องนี้ถึงถูกลงคะแนน? ฉันเพิ่งคัดลอกวางจากหน้าคน (และประกอบตาม) มันจะช่วยให้ผู้อื่นเข้าใจวิธีการโพสต์ใน SE ขอบคุณ
Hopping Bunny

ฉันสามารถอธิบายได้: มันเป็นความขัดแย้งทางวัฒนธรรม ไม่ต้องกังวล ตรวจสอบคำตอบอื่น ๆ ความคิดเห็น ...

-3

ฉันต้องการขยายคำตอบของ @ gary

นอกเหนือจาก anwer ของเขา: lnคำสั่งสามารถยอมรับจำนวนอาร์กิวเมนต์โดยพลการเพื่อให้คุณสามารถสร้าง symlink ได้หลายรายการในการเรียกใช้ครั้งเดียว (ซึ่งมีประโยชน์เมื่อคุณต้องการ)

  1. ด้วยความรู้นั้นเมื่อคุณพบln -s foo bar bazคำอธิบายเชิงตรรกะที่ขัดแย้งกันที่สุดคืออะไร
  2. ด้วยคำตอบที่ # 1 เมื่อคุณพบln -s foo barคำอธิบายเชิงตรรกะที่มีเหตุผลที่สุดคืออะไร

1
หากคุณมีคำตอบเพิ่มเติมจาก gary โปรดแนะนำว่าเป็นการแก้ไข ตามที่เป็นอยู่คำถามสองข้อ (สมมุติฐาน) ของคุณทำให้ "คำตอบ" นี้ดูคล้ายกับคำถามที่สอง
Jeff Schaller

-3

ลองนึกภาพเวอร์ชันlnที่อนุญาตให้คุณสร้างลิงก์ (สัญลักษณ์) หลายรายการในคำสั่งเดียว

Synopsis: ln -s TARGET NEW_LINK...
Example: ln -s target_file  new_link_1  new_link_2  new_link_3

มันจะไม่ทำการใด ๆ ที่จะย้อนกลับเนื่องจาก symlink สามารถชี้ไปทีTARGETละครั้งเท่านั้นและการประชุมบรรทัดคำสั่งปกติคือการวางส่วนที่ทำซ้ำในตอนท้ายของบรรทัดคำสั่งเช่นgrep PAT [FILE]...


-6

" lsแสดงให้เห็นว่าa -> bเพื่อให้ln a b"

เพียงจำไว้ว่านี่เป็นสิ่งที่ผิด


6
ฉันจำได้เสมอว่า "มีบางสิ่งผิดปกติ" แต่ทางไหนผิด? นั่นแหละปัญหา. ปัญหาก็จะกลายเป็นการคาดเดาตัวเองเป็นครั้งที่สองแม้เมื่อฉันพูดถูก เพราะฉันไม่สามารถจำลำดับที่ถูกต้องได้จริง!
Zhro

ฉันคิดว่าฉันเข้าใจสิ่งที่คุณหมายถึง: ผลลัพธ์ของls -l: link -> targetสามารถสับสนความคิดของคุณเกี่ยวกับวิธีการตั้งค่าlnบรรทัดคำสั่ง แต่ฉันกลัวว่ามันจะไม่ช่วยอะไรมาก
sudodus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.