The `patch` Command in Linux: Applying Changes with Precision
The patch command in Linux is a powerful tool used to apply changes to text
files. It reads a diff (or patch) file containing a list of differences and
applies those differences to one or more original files, effectively updating
them to a new version. This utility is commonly used to apply updates or fixes
to source code files distributed over the internet.
Syntax
The basic syntax for the patch command is as follows:
patch [OPTIONS] [ORIGINALFILE [PATCHFILE]]
ORIGINALFILEis the file to be patched.PATCHFILEis the file containing the differences.
If no file is specified, patch reads from the standard input.
Options
Here is a table of some common options for the patch command:
| Option | Shorthand | Description |
|---|---|---|
--backup | -b | Make a backup before applying the patch. |
--directory | -d | Change to the specified directory before processing files. |
--ignore-whitespace | -l | Ignore whitespace changes when matching lines. |
--strip | -p | Strip the smallest prefix containing num leading slashes from file names. |
--verbose | -v | Provide verbose output. |
--reverse | -R | Apply the patch in reverse. |
--output | -o | Output to the file instead of patching in place. |
--dry-run | -C | Do not actually change any files; just print what would happen. |
--silent | -s | Work silently unless an error occurs. |
--help | Display a help message and exit. | |
--version | Display version information and exit. |
Creating Example Files and a Diff
Let's create an example file and a diff to demonstrate how patch works.
Original File: hello.c
vim hello.cPress
ito insert text, then enter:#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}Save and exit with
:wq.Modified File: hello_modified.c
vim hello_modified.cInsert the modified version of
hello.c:#include <stdio.h>
int main() {
printf("Hello, everyone!\n");
return 0;
}Save and exit with
:wq.Create a Diff File
Use the
diffcommand to create a patch file:diff -u hello.c hello_modified.c > hello.patch
Example 1: Applying a Patch
Now we can apply the patch to hello.c:
patch hello.c hello.patch
The patch command will update hello.c with the changes defined
in hello.patch.
Example 2: Applying a Patch in Reverse
If you decide to revert to the original, you can apply the patch in reverse:
patch -R hello.c hello.patch
This will undo the changes made by hello.patch.
Example 3: Dry Run
To check what changes patch would make without actually modifying any files:
patch --dry-run hello.c hello.patch
Example 4: Verbose Output
For more detailed output during the patching process:
patch --verbose hello.c hello.patch
Example 5: Backup Original Files
To make a backup of the original file before applying the patch:
patch --backup hello.c hello.patch
Combining patch with Other Commands
You can combine patch with commands like cat if your patch is compressed or
you receive it via standard input:
cat hello.patch | patch -p0
Here, -p0 means not to strip any leading directories from the file names in
the patch file.
Conclusion
The patch command is essential when dealing with modifications in text files,
especially in a development environment where changes need to be tracked and
applied systematically. By understanding the patch command and its options,
Linux users can easily manage updates to their files, ensuring a smooth workflow
when incorporating new changes or fixes.
What Can You Do Next 🙏😊
If you liked the article, consider subscribing to Cloudaffle, my YouTube Channel, where I keep posting in-depth tutorials and all edutainment stuff for software developers.