20

When trying to redirect to /dev/null and /dev/zero, the output it is discarded. It seems both /dev/null and /dev/zero accept and discard all input. So, what is the difference between /dev/null and /dev/zero?

  • 6
    rm -f /dev/zero ; echo -n 111111111111 > /dev/zero *runs away* – joeytwiddle Jan 10 '16 at 19:23
44

Yes, both accept and discard all input, but their output is not the same:

  • /dev/null produces no output.
  • /dev/zero produces a continuous stream of NULL (zero value) bytes.

You can see the difference by executing cat /dev/null and cat /dev/zero.

  • Try cat /dev/null > file and you will find an empty file.

  • Now try cat /dev/zero > file, while watching the size of the file (watch -n 1 du -h file) continuously increase. This is because reading from /dev/zero gives an endless stream of \0 (null) characters.

Use dd to visualize the difference more appropriately:

$ 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 is used to create dummy files or swap.

Also visit:

  • Also see thecodelesscode.com/case/6 – kojiro Jan 10 '16 at 16:37
  • 2
    Worth noting: mmapping /dev/zero with MAP_PRIVATE is the "portable" way to obtain an anonymous memory mapping (in the absence of extensions like MAP_ANON). – nneonneo Jan 10 '16 at 23:11
  • 4
    Perhaps not obvious to the casual reader is just how /dev/null produces no output: It signals EOF immediately. – Peter A. Schneider Jan 11 '16 at 4:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.