cpio

2024-03-04

Understanding cpio’s Core Functionality

cpio operates by reading a list of files and directories (typically provided via find) and either creating an archive file (using the -o option for output) or extracting an archive file (using the -i option for input). Its strength lies in its flexibility; you can specify precisely which files and directories to include, the archive format, and the destination.

Creating an Archive with cpio

Let’s start with creating a backup archive of important files in the /etc directory. The following command uses the -o option (for output) with the -c (create) and -v (verbose) options to create a POSIX-compliant archive named etc_backup.cpio:

find /etc -print0 | cpio -ovc > etc_backup.cpio

This command uses find to locate all files and directories within /etc, separating the filenames with a null character (-print0), a critical step to handle filenames containing spaces or special characters. cpio then processes this list, creating the archive in the current directory. The -v option provides a detailed output of files being added.

For a more advanced example, let’s create a backup of specific directories, excluding some files:

find /etc/ -type f \( -name "*.conf" -o -name "*.txt" \) -print0 | cpio -ovc > config_backup.cpio

This command backs up only the .conf and .txt files within /etc.

You can also specify the archive format:

find /var/log -print0 | cpio -ovB > log_backup.cpio  # Creates a binary archive

The -B option creates a binary archive, often resulting in smaller file sizes compared to the default ASCII format.

Extracting an Archive with cpio

To extract the archive, use the -i option (for input):

cpio -ivc < etc_backup.cpio

This command extracts the contents of etc_backup.cpio into the current directory. The -v option (verbose) shows the files being extracted. You can specify a target directory using -d:

cpio -ivcd /tmp/restored < etc_backup.cpio

This command extracts the archive to /tmp/restored. The -d option creates missing directories automatically during extraction.

Handling Specific Files and Directories

cpio offers powerful filtering options using patterns. To extract only specific files:

cpio -ivc --pattern "*.conf" < config_backup.cpio

This will only extract files ending in .conf.

Combining with other commands for efficient backups

cpio works seamlessly with other Linux commands. For instance, you can compress the created archive using gzip:

find /etc -print0 | cpio -ovc | gzip > etc_backup.cpio.gz

And decompress and extract using:

gzip -dc etc_backup.cpio.gz | cpio -ivc

This showcases how cpio can be incorporated into a backup and recovery strategy, providing flexibility and control over the process. Remember to always test your backup and recovery procedures in a non-production environment before implementing them in a critical system.