comparing /proc/12345/cmdline on Linux — “diff –text” vs “diff –brief –text” vs “cmp –silent”

A cmdline “file” contains NUL characters, so “diff” needs to be used with “--text” otherwise it will fail anyway.

I chose process ID 12345 deliberately, it is just a placeholder.

$ cp /proc/12345/cmdline $HOME/cmdline

$ ll /proc/12345/cmdline ~/cmdline
-r--r--r-- 1 root root   0 2018-06-12 09:22:50 /proc/12345/cmdline
-r--r--r-- 1 user users 45 2018-06-12 09:48:19 /homes/user/cmdline
# /proc/12345/cmdline is a file in the proc filesystem.
# is the displayed size a bug or a feature?
$ wc --bytes /proc/12345/cmdline ~/cmdline
45 /proc/12345/cmdline
45 /homes/user/cmdline
90 total

$ diff --text /proc/12345/cmdline ~/cmdline; echo $?
0
# as we expect

$ diff --brief /proc/12345/cmdline ~/cmdline; echo $?
Files /proc/12345/cmdline and /homes/user/cmdline differ
1
# why are they now different?

$ cmp --silent /proc/12345/cmdline ~/cmdline; echo $?
1
# why are they now different?

diff --brief --text” and “cmp --silent” presumably take the file size into account.

On Cygwin “diff --brief --text” behaves like “diff --text“.

I was quite surprised to experience these differences. It took me quite a while to realise, where my surprising processing results came from.


Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.