เมื่อพยายามเปลี่ยนเส้นทางไปที่/dev/null
และ/dev/zero
ผลลัพธ์จะถูกยกเลิก ดูเหมือนว่าทั้งสอง/dev/null
และ/dev/zero
ยอมรับและทิ้งอินพุตทั้งหมด ดังนั้นอะไรคือความแตกต่างระหว่าง/dev/null
และ/dev/zero
?
เมื่อพยายามเปลี่ยนเส้นทางไปที่/dev/null
และ/dev/zero
ผลลัพธ์จะถูกยกเลิก ดูเหมือนว่าทั้งสอง/dev/null
และ/dev/zero
ยอมรับและทิ้งอินพุตทั้งหมด ดังนั้นอะไรคือความแตกต่างระหว่าง/dev/null
และ/dev/zero
?
คำตอบ:
ใช่ทั้งยอมรับและทิ้งอินพุตทั้งหมด แต่เอาต์พุตไม่เหมือนกัน:
/dev/null
ผลิตส่งออกไม่มี/dev/zero
ผลิตกระแสอย่างต่อเนื่องของโมฆะ (ศูนย์บาท) ไบต์คุณสามารถเห็นความแตกต่างโดยการดำเนินการและcat /dev/null
cat /dev/zero
ลองและคุณจะพบที่ว่างเปล่าcat /dev/null > file
file
ลองตอนนี้cat /dev/zero > file
ในขณะที่ดูขนาดของไฟล์ ( watch -n 1 du -h file
) เพิ่มขึ้นอย่างต่อเนื่อง นี่เป็นเพราะการอ่านจาก/dev/zero
ให้จำนวน\0
อักขระ (null) ไม่สิ้นสุด
ใช้dd
เพื่อให้เห็นภาพความแตกต่างที่เหมาะสมยิ่งขึ้น:
$ dd if=/dev/null of=file count=10
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000276193 s, 0.0 kB/s
$ dd if=/dev/zero of=file count=10
10+0 records in
10+0 records out
5120 bytes (5.1 kB) copied, 0.00090775 s, 5.6 MB/s
/dev/zero
ใช้สำหรับสร้างไฟล์จำลองหรือแลกเปลี่ยน
เยี่ยมชม:
mmap
ping /dev/zero
with MAP_PRIVATE
เป็นวิธี "พกพา" เพื่อขอรับการแมปหน่วยความจำแบบไม่ระบุชื่อ (ในกรณีที่ไม่มีนามสกุลเหมือนMAP_ANON
)
/dev/null
มันไม่สร้างผลลัพธ์: มันส่งสัญญาณ EOF ทันที
rm -f /dev/zero ; echo -n 111111111111 > /dev/zero
* วิ่งหนี *