cp Command in Linux

Introduction

In this practical guide, you'll master the Linux cp command for efficient file and directory copying. This tutorial starts with the fundamental usage of cp, including how to copy both files and directories. We will delve into more advanced functionalities such as maintaining file attributes and timestamps. Through real-world examples, you will gain proficiency in effectively managing your files and directories utilizing the cp command within your Linux system.

This systemadmin lab is structured into three key steps to facilitate learning:

  1. Grasp the Core Principles of the cp Command
  2. Effectively Copy Files and Directories Using the cp Command
  3. Maintain File Attributes and Timestamps When Copying with the cp Command

Understand the Basics of the cp Command

This section introduces the fundamental application of the cp command within a Linux environment. The cp command is a crucial tool for systemadmin tasks, enabling you to replicate files and directories from one location to another.

First, let's create a demonstration file within the ~/project directory:

touch ~/project/sample.txt

Next, let's duplicate the sample.txt file, generating a new file named copy_of_sample.txt:

cp ~/project/sample.txt ~/project/copy_of_sample.txt

Example output:

The general structure of the cp command is as follows:

cp [options] source_file destination_file

In this syntax, source_file represents the file you intend to copy, while destination_file signifies the newly created duplicate.

You can also leverage the cp command for directory duplication. Let's establish a directory labeled dir1 and then copy it to dir2:

mkdir ~/project/dir1
cp -r ~/project/dir1 ~/project/dir2

The -r option instructs the command to copy directories recursively, ensuring that all files and subdirectories within the source directory are included in the copy.

Example output:

This constitutes the essential use of the cp command. In the upcoming steps, you will learn about more sophisticated functionalities, such as preserving file attributes and timestamps during the copy process.

Copy Files and Directories Using the cp Command

This section will guide you through copying files and directories with the cp command, with specific attention paid to copying multiple items simultaneously.

Let's start by populating the ~/project directory with several sample files and directories:

touch ~/project/file1.txt ~/project/file2.txt
mkdir ~/project/dir1 ~/project/dir2

Now, let's copy several files at once:

cp ~/project/file1.txt ~/project/file2.txt ~/project/dir1

This command will copy both file1.txt and file2.txt into the dir1 directory.

Example output:

To copy an entire directory, including all its contents, you can use the -r (recursive) option:

cp -r ~/project/dir1 ~/project/dir3

This action will result in the creation of a new directory named dir3, which will contain an exact copy of all the elements within dir1.

Example output:

If you need to copy a directory and rename it concurrently, utilize the following command syntax:

cp -r ~/project/dir1 ~/project/dir4

This command generates a new directory, dir4, populated with all the contents of dir1.

Example output:

As demonstrated, the cp command offers versatile methods for copying files and directories within Linux. The next section will cover how to preserve file attributes and timestamps when performing copy operations.

Preserve File Attributes and Timestamps with the cp Command

This section explores how to maintain the original file attributes and timestamps during file copies using the cp command.

By default, the cp command copies only the file content; it may not retain the original attributes and timestamps. To ensure these are preserved, use the -p (preserve) option.

Let's create a sample file with distinct attributes and timestamps for this exercise:

touch -a -m -t 202304010000 ~/project/sample.txt

This command creates the sample.txt file, setting both its access and modification times to April 1, 2023, at 00:00.

Now, copy the file while preserving its original attributes and timestamps:

cp -p ~/project/sample.txt ~/project/copy_of_sample.txt

Example output:

To confirm that the attributes and timestamps have been correctly preserved, use the ls -l command:

ls -l ~/project/sample.txt ~/project/copy_of_sample.txt

Example output:

-rw-r--r-- 1 labex labex 0 Apr  1 00:00 ~/project/sample.txt
-rw-r--r-- 1 labex labex 0 Apr  1 00:00 ~/project/copy_of_sample.txt

As evident, the access and modification times for the copied file match those of the original file.

The -p option preserves the following file attributes:

  • Ownership
  • Permissions
  • Timestamps (access, modification, and change)
  • SELinux security context (if present)

This option is especially useful when it's crucial to retain the original file characteristics during the copy process, such as when backing up configuration files for a systemadmin.

The following section provides a recap of the information covered regarding the cp command.

Summary

In this systemadmin lab, you gained a solid understanding of the cp command in Linux for copying files and directories. You learned to copy a sample file and create duplicates. You also explored how to copy directories, including all their contents, by using the -r option for recursive copying. This lab also demonstrated copying multiple files and directories simultaneously, which is an essential time-saving skill for any Linux systemadmin or root user. These practical examples have equipped you with a strong foundation for using the cp command effectively in your day-to-day Linux tasks.

400+ Linux Commands