---
title: "cp command"
description: "In this tutorial: Command structure Examples At first, the cp command seems like a very straightforward command. While it is certainly a simple concept to copy a file or directory from one location..."
url: https://www.inmotionhosting.com/support/server/linux/cp-command/
date: 2014-10-21
modified: 2022-03-31
author: "Scott Mitchell"
categories: ["Linux"]
type: post
lang: en
---

# cp command

## In this tutorial:

[Command structure](#structure) [Examples](#examples)

At first, the *cp* command seems like a very straightforward command. While it is certainly a simple concept to copy a file or directory from one location to another, it has many different options involved to tailor the process. The *cp* command is also one of the most used [Linux commands](https://www.inmotionhosting.com/support/server/ssh/command-list/). Below we go over the options you can use with the command followed by some of the more commonly used option combinations.

## Command Structure

**Command: **cp
**Synopsis: **cd ... SOURCE... DIRECTORY

**List of Options: **

**NOTE:** Some options have only a short name, some only a long name, and some both. If an option has both, then you may use either format.

| Short Name | Long name | Description |
| --- | --- | --- |
| -a | --archive | This is the same as using the option cobination: -dR --preserve=all |
| | --backup[=CONTROL] | Make a backup of each existing destination file. |
| -b | | Like --backup, but does not use an argument |
| | --copy-contents | Copy contents of special files when recursive. |
| -d | | Same as the --no-deference -- preserve=links combination |
| -f | --force | If an existing destination file cannot be opened, remove it and then try again. |
| -i | --interactive | Prompt before an overwrite occurs |
| -H | | Follow command-line symbolic links in the source. |
| -l | --link | Link files instead of copying them |
| -n | --no-cobbler | Don't overwrite an existing file. |
| -P | --no-deference | Never follow symbolic links in the source |
| -p | | This is the same as using --preserve=mode,ownership,timestamps |
| | --preserve[=ATTR_LIST] | This option preserves the specified attributes. 'mode','ownership','timestamps' are the default attributes preserved. Additional attributes are 'context',links','xattr','all' |
| -c | | This is the same as --preserve=context |
| | --no-preserve[=ATTR_LIST] | When using this command, list the attributes you do not want to preserve (same available attributes as --preserve). |
| | --parents | Uses the full source file name under the DIRECTORY |
| -R, -r | --recursive | Copy the directories recursively. |
| | --remove-destination | Removes the existing destination file before opening it. This option is the opposite of --force. |
| | --strip-trailing-slashes | Removes any trailing slashes form he source parameter. |
| -s | --symbolic-link | This option will override the normal backup suffix with the entered parameter. |
| -t | --target-directory=DIRECTORY | Copies all documents from the source into the specified DIRECTORY |
| -u | --update | This copies source files only when they are newer than the destination files or if the destination file is missing. |
| -v | --verbose | This explains what is being done by displaying it on the console. |
| -x | --one-file-system | Make a backup of each existing destination file. |
| -z | --context=TEXT | This option sets the security context of the copied file to CONTEXT |

## Examples

Using the options above, you can create many different combinations to tailor the copy to your own needs. Below are a few examples of the more common uses of the *cp* command.

### Make a backup of a file

This basic format allows you to create a backup copy of a specific file. This is highly recommended before making any changes to a file.

# cp test.txt test.txt.bak # ls test.txt test.txt.bak

### Copy a file from one directory to another

In this example you can see we are copying the *test.txt* file from the current directory to the sub directory named *files*. This performs very similarly to the [mv command](https://www.inmotionhosting.com/support/server/linux/mv-command/), except this one leaves a copy in the current location in addition to creating the copy in the *files* folder.

# cp test.txt files/test.txt

### Copy a file and preserve attribute information

When copying a file, by default it will not copy attributes such as the owner or timestamp. Using the *--preserve* option you can force it to also copy those attributes. First we list the files in the directory to show you the owners and timestamps.

# ls -l drwxr-xr-x 2 userna5 userna5 4096 Oct 21 14:42 ./ drwxr-x--- 31 userna5 nobody 4096 Oct 21 09:53 ../ -rw-r--r-- 1 userna5 userna5 896 Sep 29 15:04 test.txt -rw-r--r-- 1 userna5 userna5 1212 Sep 29 15:04 index.php

Next, we run the command to copy the test.txt file to test.txt.bak, using the --preserve command. By default, this retains the timestamp, mode (permissions), and ownership.

# cp --preserve test.txt test2.txt

Now you can see below that the new file retained the permissions, user, and timestamp.

# ls -l drwxr-xr-x 2 userna5 userna5 4096 Oct 21 14:42 ./ drwxr-x--- 31 userna5 nobody 4096 Oct 21 09:53 ../ -rw-r--r-- 1 userna5 userna5 896 Sep 29 15:04 test.txt -rw-r--r-- 1 userna5 userna5 896 Sep 29 15:04 test2.txt -rw-r--r-- 1 userna5 userna5 1212 Sep 29 15:04 index.php

### Copy a directory

Here we show you how to copy a directory and its contents to another directory. This moves the entire folder as well, so if we copy the *test* folder into the *files* folder, then there will be a *test* folder inside the *files* folder and a copy of all the contents of the *test* folder will be inside the *files/test* folder. Note that we use the *-r* option when performing this. The *-r* option stands for *recursive* which means that it copies all of the files inside the source folder.

# cp -r files test
