ในระบบ Unix-style โครงสร้างข้อมูลที่แสดงถึงวัตถุระบบไฟล์ (ในคำอื่น ๆ ข้อมูลเกี่ยวกับไฟล์) จะถูกเก็บไว้ในสิ่งที่เรียกว่า "inode"
ชื่อไฟล์เป็นเพียงลิงค์ไปยัง inode นี้และเรียกว่า "ฮาร์ดลิงก์" ไม่มีความแตกต่างระหว่างชื่อไฟล์และลิงก์ที่ตามมา ดังนั้นคำตอบคือ "ใช่": ฮาร์ดลิงก์เป็นไฟล์ปกติและแน่นอนไฟล์ปกติคือฮาร์ดลิงก์
ls
คำสั่งจะแสดงวิธีการเชื่อมโยงหลายยากที่มีไปยังแฟ้ม
ตัวอย่างเช่น:
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
/tmp/hello.txt
ที่นี่เราได้สร้างไฟล์ที่เรียกว่า 1
ในการส่งออกจากls -l
แสดงว่ามี 1 ลิงค์ยากที่จะไฟล์นี้ /tmp/hello.txt
นี้การเชื่อมโยงที่ยากคือชื่อไฟล์ของตัวเอง
หากตอนนี้เราสร้างฮาร์ดลิงก์ไปยังไฟล์นี้:
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
ตอนนี้คุณจะเห็นว่าชื่อไฟล์ทั้งสองระบุว่ามี 2 ฮาร์ดลิงก์ไปยังไฟล์ ทั้งสองอย่างนี้เป็นชื่อไฟล์ "ที่เหมาะสม" พวกมันทั้งคู่ใช้ได้อย่างเท่าเทียมกัน เราจะเห็นว่าพวกเขาทั้งสองชี้ไปที่ไอโหนดเดียวกัน (ในกรณีนี้คือ 5374043):
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
มีความเข้าใจผิดทั่วไปว่าสิ่งนี้แตกต่างกันสำหรับไดเรกทอรี ผมเคยได้ยินคนบอกว่าจำนวนของการเชื่อมโยงกลับโดยls
ไดเรกทอรีคือจำนวนของไดเรกทอรีย่อยรวมทั้ง.
และ..
ซึ่งเป็นที่ไม่ถูกต้อง หรืออย่างน้อยก็ในขณะที่มันจะทำให้คุณมีจำนวนที่ถูกต้องมันเป็นเหตุผลที่ผิด!
หากเราสร้างไดเรกทอรีและทำสิ่งที่ls -ld
เราได้รับ:
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
แสดงให้เห็นว่ามี 2 ฮาร์ดลิงก์ไปยังไดเรกทอรีนี้ เหล่านี้คือ:
/tmp/testdir
/tmp/testdir/.
ทราบว่า/tmp/testdir/..
เป็นไม่ได้/tmp
เชื่อมโยงไปยังไดเรกทอรีนี้ก็เชื่อมโยงไปยัง และสิ่งนี้บอกคุณว่าทำไม "จำนวนไดเรกทอรีย่อย" จึงใช้งานได้ เมื่อเราสร้างไดเรกทอรีย่อยใหม่:
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
ตอนนี้คุณจะเห็นว่ามี 3 ฮาร์ดลิงก์ไปยัง/tmp/testdir
ไดเรกทอรี เหล่านี้คือ:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
ดังนั้นทุกไดเรกทอรีย่อยใหม่จะเพิ่มจำนวนการเชื่อมโยงโดยหนึ่งเพราะ..
รายการที่มี