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]]
ORIGINALFILE
is the file to be patched.PATCHFILE
is 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.c
Press
i
to 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.c
Insert 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
diff
command 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.