ไฟล์ / dev / null มีขนาดคงที่จริงหรือไม่?


23

ฉันเพิ่งค้นพบว่า/dev/nullเป็นไฟล์และไม่ใช่ไดเรกทอรี

ฉันแค่สงสัยว่ามันมีขนาดไฟล์จริง

คำตอบ:


35

/dev/nullไม่ใช่ไฟล์จริงๆ มันเป็นอุปกรณ์ตัวละคร !

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Apr 10 09:53 /dev/null

ตัวอักษรตัวแรกcของสตริงการอนุญาต ( crw-rw-rw-) ระบุสิ่งนี้ สำหรับไฟล์ปกติมันจะเป็น-แทน

ดังนั้นในคำง่าย: /dev/nullไม่ใช่ไฟล์ แต่อุปกรณ์เสมือนที่แมปไปยังเส้นทางนี้ในระบบไฟล์ซึ่งมีวัตถุประสงค์เพียงอย่างเดียวที่จะกลืนและหายไปข้อมูล - เหมือนหลุมดำ
นอกจากนี้ยังสามารถใช้เป็นอินพุตได้จากนั้นจะทำหน้าที่เหมือนไฟล์เปล่า (ขนาด 0) และส่งคืน EOF (สิ้นสุดไฟล์) ทันที

ดังนั้นคุณไม่สามารถพูดได้เลยว่า/dev/nullมีขนาดไฟล์เฉพาะเนื่องจากไม่ใช่ไฟล์ปกติในสื่อจัดเก็บข้อมูลใด ๆ


การป้อนข้อมูล? มันให้รายชื่อตัวละคร NUL ไม่รู้จบ?
Jonathon

@ JonathonWisnoski ฉันไม่รู้เหมือนกันและฉันไม่เคยใช้มันแบบนี้ดังนั้นฉันสามารถให้ลิงค์นี้แก่คุณในคำถามเกี่ยวกับ StackOverflowที่มีการอธิบายได้
ผู้บัญชาการ Byte

7
@JonathonWisnoski ไม่ - มันทำงานเหมือนไฟล์ขนาดศูนย์ในอินพุตดังนั้นการอ่านครั้งแรกจากไฟล์จะรายงานว่าไฟล์อยู่ที่ EOF
godlygeek

ใช่แล้วถูกต้อง
godlygeek

3
@ JonathonWisnoski ดูที่ / dev / zero สำหรับสิ่งนั้น
Paŭlo Ebermann

16

/dev/nullเป็นไฟล์ชนิดพิเศษที่เรียกว่า " ไฟล์อุปกรณ์ "

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

ไฟล์อุปกรณ์อื่น ๆ เช่น/dev/sda(โดยทั่วไปคือ HDD หรือ SSD), /dev/zero(ไฟล์ที่สร้างศูนย์เมื่ออ่าน) หรือ/dev/random(ไฟล์ที่สร้างข้อมูลแบบสุ่มเมื่ออ่าน) ที่จริงแล้วเกี่ยวกับไฟล์ทั้งหมดใน/dev/นั้นคือไฟล์อุปกรณ์หรือลิงก์ที่ชี้ไปยังไฟล์อุปกรณ์


ในขณะที่ฉันพบว่าคำตอบส่วนใหญ่ถูกต้อง (+1) ฉันคิดว่ามันเป็นความเข้าใจผิดเล็กน้อยที่จะบอกว่าพวกเขาใช้ขนาดของรายการ inode พวกเขาอาจไม่ใช้พื้นที่ใด ๆ หากอ้างถึงพื้นที่ดิสก์หรือใช้เวลามากขึ้นหากอ้างถึงการใช้งานทั้งหมดของพวกเขาเป็นอุปกรณ์ตัวอักษร
kos

2
เช่นเดียวกับไฟล์อื่น ๆ ที่ไฟล์อุปกรณ์ต้องการไอโหนดที่เก็บเจ้าของสิทธิ์หมายเลขหลัก / รองและข้อมูลเมตาอื่น ๆ ขึ้นอยู่กับระบบไฟล์ว่าเก็บ inodes นี้ไว้ที่ไหนและอย่างไร (คุณสามารถใช้mknodเพื่อสร้างไฟล์อุปกรณ์ได้ทุกที่ที่คุณต้องการ) สำหรับระบบไฟล์เสมือนเช่น/dev/inode ไม่ได้ใช้พื้นที่ดิสก์ แต่มีหน่วยความจำบางส่วน
Florian Diesch

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

มันถูกต้องจริงหรือไม่ที่จะบอกว่าไฟล์ใช้พื้นที่ที่ครอบครองโดยรายการตาราง inode? ฉันไม่คิดว่าสิ่งนี้จะรวมอยู่ในสิ่งที่ผู้คน - และคนเขียนซอฟต์แวร์ - หมายถึงเมื่อพวกเขาพูดคุยเกี่ยวกับขนาดไฟล์ โดยเฉพาะอย่างยิ่งการถามlsและduจะรายงานขนาดของอุปกรณ์อักขระพิเศษเช่น/dev/nullหรือ/dev/randomอัตราผลตอบแทน 0
Eliah Kagan

ขออภัย แต่ฉัน downvote คำตอบนี้เพราะถ้ามีคนพิสูจน์ฉันผิดในสิ่งที่ฉันพูด (ซึ่งฉันอาจจะ) ฉันยังคงคิดว่ามันไม่ถูกต้องที่จะระบุว่าอุปกรณ์ตัวอักษรครอบครองพื้นที่ของรายการ inode
kos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.