The command diff from the package diffutils compares files line by line. It comes in very handy when you would like to check if there were recent changes to a file since the last backup and what they are. An exit status of 0 means no differences were found, 1 means some differences were found, and 2 means trouble. And of course, if there are changes, diff will show them to you. But let’s take a look at some examples.

Example 1: Both files have the same content

Alice and Bob are each having a barbecue and have published their menus. To decide which menu I would enjoy most, I could compare the menus as follows:

$ diff menu1 menu2
$ echo $?
0
$ cat menu{1,2}
# The menu
* Spare Ribs
* Brisket
* Pulled Pork
# The menu
* Spare Ribs
* Brisket
* Pulled Pork

You see, both are serving spare ribs, brisket, and pulled pork. There is no difference between both files. Maybe Alice and Bob should join forces to host a really huge barbecue.

When Eve heard that Alice and Bob were throwing parties, she got jealous and decided to host a barbecue as well. Her menu comes with the file menu3. Well, let’s see what the differences in her menu are compared to Alice's and Bob's.

Example 2: Now there are drinks involved

$ diff menu1 menu3
4a5,8
> 
> # Drinks
> * Soda
> * Beer
$ echo $?
1
$

There are differences now. And, with the output in the first line, diff tells us what has to be added (a) to menu1 so that it has the same content as menu3. So, 4a5,8 means that you have to add some lines after line 4 in menu1 so that it looks like lines 5-8 in menu3.

When switching the position of the files, the output looks different:

$ diff menu3 menu1
5,8d4
< 
< # Drinks
< * Soda
< * Beer

Now, diff is telling us that the lines 5-8 in menu3 have to be deleted (d) to make the file identical with menu1.

Example 3: When there is something to change

I’ve edited menu1 and menu2 again to look like this:

# The menu
* Spare Ribs
* Brisket
* Pulled Pork

# The menu
* Spare Ribs
* Pulled Pork
* Pulled Pork

This time, diff is going to show us which line has to be changed (c) to make both files look the same:

$ diff menu1 menu2
3c3
< * Brisket
---
> * Pulled Pork

Wrapping it up

The diff command is an easy and flexible to use tool to compare files line by line. Take a look at diff(1) to figure out what else can be done with diff.

[ Want to test your sysadmin skills? Take a skills assessment today. ]


Über den Autor

Jörg has been a Sysadmin for over ten years now. His fields of operation include Virtualization (VMware), Linux System Administration and Automation (RHEL), Firewalling (Forcepoint), and Loadbalancing (F5). He is a member of the Red Hat Accelerators Community and author of his personal blog at https://www.my-it-brain.de.

UI_Icon-Red_Hat-Close-A-Black-RGB

Nach Thema durchsuchen

automation icon

Automatisierung

Das Neueste zum Thema IT-Automatisierung für Technologien, Teams und Umgebungen

AI icon

Künstliche Intelligenz

Erfahren Sie das Neueste von den Plattformen, die es Kunden ermöglichen, KI-Workloads beliebig auszuführen

open hybrid cloud icon

Open Hybrid Cloud

Erfahren Sie, wie wir eine flexiblere Zukunft mit Hybrid Clouds schaffen.

security icon

Sicherheit

Erfahren Sie, wie wir Risiken in verschiedenen Umgebungen und Technologien reduzieren

edge icon

Edge Computing

Erfahren Sie das Neueste von den Plattformen, die die Operations am Edge vereinfachen

Infrastructure icon

Infrastruktur

Erfahren Sie das Neueste von der weltweit führenden Linux-Plattform für Unternehmen

application development icon

Anwendungen

Entdecken Sie unsere Lösungen für komplexe Herausforderungen bei Anwendungen

Virtualization icon

Virtualisierung

Erfahren Sie das Neueste über die Virtualisierung von Workloads in Cloud- oder On-Premise-Umgebungen