63

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?

1
  • 10
    rm -f /dev/zero ; echo -n 111111111111 > /dev/zero *runs away* Commented Jan 10, 2016 at 19:23

1 Answer 1

94

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:

5
  • Also see thecodelesscode.com/case/6
    – kojiro
    Commented Jan 10, 2016 at 16:37
  • 3
    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
    Commented Jan 10, 2016 at 23:11
  • 13
    Perhaps not obvious to the casual reader is just how /dev/null produces no output: It signals EOF immediately. Commented Jan 11, 2016 at 4:30
  • 2
    Is there a device that gives all ones? Commented Sep 28, 2019 at 2:07
  • 5
    hi @AaronFranke, Oh sure! :-) Consider output of /dev/zero as a stream of potential all-ones bytes: we just need to replace each all-zeros byte with an all-ones byte. An all-ones byte is 377 in octal (as printf '%o\n' $((2#11111111)) tells us); tr '\000' '\377' </dev/zero >/tmp/all-ones.dat will swiftly generate a huge pile of all-ones bytes. Commented Jan 12, 2021 at 6:03

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .