The cp (copy) command is one of the most basic tools in any Unix-based operating system, such as Ubuntu, Mint, and Debian. It is used to copy files and directories from one location to another. This tutorial aims to provide a comprehensive guide for the effective use of the cp command in the context of Linux-based operating systems. We will cover basic syntax, options, and common use cases, including backup scenarios.

Basic cp Syntax

The basic syntax of the cp command is as follows:

cp [options] [source] [destination]
  • options: Modifiers that change the behavior of the command.
  • source: The file or directory you want to copy.
  • destination: The location where you want the copy to be stored.

cp Example for Copying Files

To copy a file named file.txt from the current directory to a directory called backup, you would do the following:

cp file.txt backup/

Common cp Command Options

-r or --recursive

Used to copy entire directories, including their contents and subdirectories.

cp -r source/ destination/

In this example, we use cp to copy an entire directory, called source, to a directory called destination.

-a or --archive

This option is commonly used for backups. It preserves symbolic links, file attributes, and permissions.

cp -a source/ destination/

-u or --update

Copy only when the source file is newer than the destination file or when the destination file is missing.

cp -u source destination

cp Command Behavior When Copying Directories

When using the cp command to copy an entire directory on Linux-based systems like Ubuntu, Mint, or Debian, it’s important to understand what happens when the destination directory already contains files, especially if some of those files have the same name as those in the source.

File Overwriting

By default, if you copy a directory using the cp command and the destination directory already contains a file with the same name as a file in the source, the following will occur:

  1. The existing file in the destination directory will be replaced by the file from the source directory.
  2. The previous content of the file in the destination directory will be lost.

For example, if we have the file text.txt in both the source and destination directories, and we execute:

cp -r source/ destination/

The file text.txt in the destination/ directory will be replaced by the text.txt from the source/ directory.

Preventing Automatic Overwriting with -i

If you want to prevent accidental file overwriting, you can use the interactive -i option, like this:

cp -ri source/ destination/

In this case, the system will ask if you really want to replace each file that already exists in the destination directory.

Selectively Updating Files with -u

The -u option can be used to replace files only when the source file is newer than the destination file:

cp -ru source/ destination/

Keeping Attributes with -a

Using the -a option, all metadata and permissions will be preserved when copying. This is often used in backup operations:

cp -ra source/ destination/

In addition to the cp command, you can explore other commands like rsync, which offer even more control and options for more complex copying tasks.

Final Thoughts

The cp command is a versatile and effective tool for managing files and directories on systems like Ubuntu, Mint, and Debian. It is widely used both for everyday tasks and for more complex backup procedures.

Other Linux commands for file manipulation you should know are:

  • mv: To move files and directories.
  • rsync: To synchronize files and directories, often used for backups.
  • scp: To copy files between machines on a network - read the tutorial.
  • dd: Used for low-level copying and backup.