patch This command allows you to quickly and securely transfer changes from one set of files to another. Learn how to use it
patch the easy way.
The patch and diff commands
Imagine you have a text file on your computer. You will receive a modified version of this text file from someone else. How do you quickly transfer all changes from the modified file to your original file? That’s where
diff come into the game.
diff can be found in Linux and other Unix-like operating systems such as macOS.
diff Command investigated two different versions of a file and lists the differences between them. The differences can be saved in a file called a patch file.
patch Command can read a patch file and use its contents as a series of instructions. If you follow these instructions, the changes will be in the modified file reproduced in the original File.
Now imagine that this process happens to a whole directory of text files. Everything in one fell swoop. That’s the power of
Sometimes the changed files are not sent to you. You will only receive the patch file. Why send dozens of files when you can send a file or post a file for easy download?
What do you do with the patch file to actually patch your files? Aside from being almost a tongue twister, that’s a good question too. We’ll walk you through in this article.
patch The command is most commonly used by people who work with software source code files, but it works equally well with any set of text files, regardless of their purpose, source code or not.
How to compare two text files in the Linux terminal
Our example scenario
In this scenario, we are in a directory called work, which contains two other directories. One is called work and the other is called late. The working directory contains a number of source code files. The latest directory contains the latest version of these source code files, some of which have been modified.
To be on the safe side, the working directory is a copy of the current version of the text files. It’s not the only copy of them.
Find the differences between two versions of a file
diff Command finds the differences between two files. The default action is to list the changed lines in the terminal window.
A file is called
slang.c. We compare the version in the working directory with the version in the newest directory.
-u (unified) option says
diff to also list some of the unchanged lines of text before and after each of the changed sections. These lines are called context lines. You help that
patch Command pinpoints exactly where a change needs to be made in the original file.
We specify the names of the files so that
diff knows which files to compare. The original file is listed first, then the modified file. This is the order we give
diff -u working/slang.c latest/slang.c
diff generates an output list with the differences between the files. If the files were the same, no output at all would be listed. This kind of output from see
diff confirms that there are differences between the two versions of the file and that the original file needs to be patched.
Create a patch file
Use the following command to capture these differences in a patch file. It’s the same command as above, with the output of
diff redirected to a file called slang.patch.
diff -u working/slang.c latest/slang.c > slang.patch
The name of the patch file is arbitrary. You can call it what you want. It’s a good idea to give it the “.patch” extension. however, as it makes it clear what type of file it is.
patch To respond to the patch file and change the working / slang.c file, use the following command. the
-u (uniform) option leaves
patch know that the patch file contains consistent lines of context. In other words, we used the -u option with diff, so we are using that
-u Option with
patch -u working.slang.c -i slang.patch
If all goes well, there is a single line of output telling you
patch patches the file.
Make a backup copy of the original file
We can instruct
patch to back up the patched files before modifying them
-b (Backup) option. the
-i (input) option tells patch the name of the patch file to use:
patch -u -b working.slang.c -i slang.patch
The file is patched as before with no noticeable difference in output. However, if you look in the working folder, you will see that the slang.c.orig file has been created. The date and time stamps of the files show that slang.c.orig is the original file and slang.c is a new file created by. was created
Using diff with directories
We can use
diff to create a patch file that contains any differences between files in two directories. We can then use this patch file as well
patch to apply these differences to the files in the working folder with a single command.
The options we’re going to use
diff are the
-u (unified context) option we previously used the
-r to make the (recursive) option
diff look in any subdirectories and the
-N (new file) option.
-N Option says
diff how to deal with files in the newest directory that are not in the working directory. It forces
diff Include instructions in the patch file so that
patch creates files that exist in the newest directory but are missing from the working directory.
You can group the options together so that they have a single hyphen (
Note that we are only providing the directory names, not revealing them
diff to look at certain files:
diff -ruN working/ latest/ > slang.patch
slang.patch” width =”646″ height =”77″ src =”/pagespeed_static/1.JiBnMqyl6S.gif” onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);” onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”>
A look at the patch file
Let’s take a quick look at the patch file. We use
less to look at its contents.
The beginning of the file shows the differences between the two versions of slang.c.
If we scroll further down through the patch file, we see that it then describes the changes in another file called structs.h. This will check that the patch file definitely contains the differences between different versions of several files.
Look before you jump
Patching a large collection of files can be a little annoying, so we’ll be using the
--dry-run Opportunity to check that everything is okay before we take the plunge and commit to making the changes.
--dry-run Option says
patch doing anything but actually changing the files.
patch performs all pre-flight checks on files and reports them if problems arise. In any case, no files are changed.
If no problems are reported, we can retry the command without that
--dry-run Option and patch our files with confidence.
-d (Directory) Tell option
patch which directory is to be edited.
Note that we are not using this
-i (Input) option to tell a story
patch which patch file contains the instructions from
diff. Instead, we will route the patch file in
patch --dry-run -ruN -d working < slang.patch
From the entire directory,
diff found two files to patch. The change instructions for these two files have been reviewed by
patch , and no problems were reported.
Pre-flight checks are okay; we are ready to go.
Patch a directory
To really apply the patches to the files, let’s use the previous command without that
patch -ruN -d working < slang.patch
This time, not every output line begins with “Check”, but every line begins with “Patch”.
And no problems are reported. We can compile our source code and we will be on the latest version of the software.
Settle your differences
This is by far the easiest and safest way to use
patch. Copy your target files into a folder and patch that folder. Copy them back when you are satisfied that the patch completed without errors.
|Files||tar · pv · cat · tac · chmod · grep · difference · sed · With · man · pushed · popd · fsck · Test disk · seq · fd · pandoc · CD · $ PATH · awk · join · jq · wrinkles · unique · Journalctl · tail · stat · ls · fstab · echo · fewer · chgrp · chown · rev · look · Strings · Type · rename · Postal code · unzip · assemble · ummount · To install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · weather · Nano · mkdir · from · ln · Patch · Convert · rclon · Scraps · srm|
|Processes||alias · screen · above · kind · renice · progress · strace · system · tmux · chsh · story · at · Batch · for free · which · dmesg · chfn · User mod · ps · chroot · xargs · tty · pinkie finger · lsof · vmstat · Time out · Wall · Yes sir · kill · sleep · sudo · it is · Time · groupadd · User mod · groups · lshw · switch off · start anew · Stop · switch off · passwd · lscpu · crontab · date · bg · fg|
|Networking||netstat · Ring · Trace route · ip · ss · who is · fail2ban · bmon · she · finger · nmap · ftp · curl · wget · who · who am I · w · iptables · ssh-keygen · ufw|
Best Linux Laptops for Developers and Enthusiasts