ดังนั้นใช่ตามที่ระบุไว้หลายครั้งที่อื่นชื่อไฟล์สามารถมีได้เกือบทุกตัวอักษร แต่จะต้องมีการบอกว่าชื่อไฟล์คือไม่แฟ้ม มันมีน้ำหนักบางส่วนเป็นแอตทริบิวต์ของไฟล์โดยทั่วไปคุณต้องมีชื่อไฟล์เพื่อเปิดไฟล์ แต่ชื่อไฟล์จะชี้ไปที่ไฟล์จริงเท่านั้น มันคือลิงค์ที่เก็บไว้ในไดเรกทอรีที่บันทึกไว้ข้างๆหมายเลขไอโหนดซึ่งใกล้เคียงกับไฟล์จริงมากขึ้น
ดังนั้นคุณรู้หรือไม่ว่าอะไรก็ตามที่คุณต้องการ เคอร์เนลไม่สนใจ - การอ้างอิงไฟล์ทั้งหมดที่จะจัดการจะจัดการกับหมายเลข inode จริงต่อไป ชื่อไฟล์เป็นสิ่งที่มนุษย์บริโภค - ถ้าคุณต้องการทำให้มันเป็นสิ่งที่บ้ามันเป็นระบบไฟล์ของคุณ ที่นี่ฉันจะทำสิ่งที่บ้า:
ก่อนอื่นฉันจะสร้างไฟล์ 20 ไฟล์และตั้งชื่อไฟล์โดยไม่ใช้ช่องว่างชื่อไฟล์แต่ละชื่อจะมีช่องว่างมากกว่าหนึ่งไฟล์:
until [ $((i=$i+1)) -gt 20 ]
do v=$v' ' && touch ./"$v"
done
มันตลกดีนะ ดูที่ฉันls
:
ls -d ./*
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
ตอนนี้ฉันจะสะท้อนไดเรกทอรีนี้:
set -- * ; mkdir ../mirror
ls -i1qdU -- "$@" |
sh -c 'while read inum na
do ln -T "$1" ../mirror/$inum
shift ; done' -- "$@"
ls -d ../mirror/*
นี่คือ../mirror/
เนื้อหาของ:
../mirror/423759 ../mirror/423764 ../mirror/423769 ../mirror/423774
../mirror/423760 ../mirror/423765 ../mirror/423770 ../mirror/423775
../mirror/423761 ../mirror/423766 ../mirror/423771 ../mirror/423776
../mirror/423762 ../mirror/423767 ../mirror/423772 ../mirror/423777
../mirror/423763 ../mirror/423768 ../mirror/423773 ../mirror/423778
ตกลง แต่คุณอาจถาม - แต่สิ่งที่ดีคืออะไร คุณจะบอกได้อย่างไรว่าอันไหน คุณจะแน่ใจได้อย่างไรว่าคุณเชื่อมโยงหมายเลข inode ที่ถูกต้องกับชื่อไฟล์ที่ถูกต้อง
ดี...
echo "heyhey" >>./' '
tgt=$(ls -id ./' ')
cat ../mirror/${tgt%% .*} \
$(ls -1td ../mirror/* | head -n1)
เอาท์พุท
heyhey
heyhey
ดูทั้งหมายเลขไอโหนดที่มีอยู่ใน../mirror/"${tgt%% .*}"
และที่อ้างอิงโดย./' '
อ้างอิงถึงไฟล์เดียวกัน พวกเขาอธิบายไฟล์เดียวกัน พวกเขาตั้งชื่อมัน แต่ไม่มีอะไรเพิ่มเติม มีความลึกลับไม่จริงเพียงไม่สะดวกบางอย่างที่คุณอาจทำเพื่อตัวเอง แต่ในที่สุดจะมีผลต่อการดำเนินการของระบบไฟล์ยูนิกซ์ของคุณในที่สุด