Using cp Command in Linux

The cp command is one of the essential Linux commands you probably will be using on a regular basis.

As the name indicates, cp stands for copy and it is used for copying files and directories.

It’s one of the simpler commands with only a few options but that doesn’t mean you cannot know more about it.

Before you see some practical examples of the cp command, I advise getting familiar with the concept of absolute and relative path because you’ll need to use them while copying files from one place to another.

Absolute vs Relative Path in Linux: What’s the Difference?In this essential Linux learning chapter, know about the relative and absolute paths in Linux. What’s the difference between them and which one should you use.

Copy a file

The simplest and most common use of the cp command is for copying files. For that, you just have to specify the source file and the destination where you want to ‘paste’ the file.

cp source_file destination_directory

Rename the file while copying it

You can also rename the file while copying it to another location. This is like those ‘save as’ options you see in text editors.

For this, you must mention the new file name along with the path.

cp source_file destination_directory/new_filename

Copy multiple files

You can also copy multiple files to another location.

cp file1 file2 file3 destination_directory

You cannot rename files in this case.

Of course, you can use wildcard expansion and copy files of certain type to another location:

cp *.txt destination_directory

Avoid overwriting while copying files

If you are copying file1.txt to a directory where there already exists a file named file1.txt, it will be overwritten with the file you are copying.

You may not always want that. This is why the cp command provides several options to deal with overwriting.

The firstmost is the interactive mode with option -i. In the interactive mode, it will ask you to confirm or deny the overwriting of the destination file.

cp -i source_file destination_directory
cp: overwrite 'destination_directory/source_file'?

Press Y to overwrite and N to skip copying the file.

The option -n negates overwriting completely. Destination files won’t be overwritten with this option.

cp -n source_file destination_directory

There is also option -b for automatically creating a backup if the destination file is going to be overwritten. B stands for backup, I presume.

cp -b source_file destination_directory

And lastly, there is the ‘update’ option -u which will overwrite the destination file if it is older than the source file or if it destination file does not exist.

cp -u source_file destination_directory

Copy directories (folders)

The cp command is also used for copy directories in the Linux command line.

You need to use the recursive option -r for copying directories.

cp -r source_dir destination_dir

You can also copy multiple directories to another location:

cp -r dir1 dir2 dir3 target_directory

Preserve attributes while copying

When you copy a file to another location, its timestamp, file permission and even ownership gets changed.

That’s the normal behavior. But in some cases, you may want to preserve the original attribute even when you are copying the file.

To preserve the attributes, use the option -p:

cp -p source_file destination_directory

🏋️ Exercise time

Want to practice the cp command a little? Here are some simple exercises for you.

  • Open a terminal and create a directory named practice_cp
  • Now, copy the /etc/services file in this newly created directory.
  • Make some minor changes to the copied services file in practice directory.
  • Now, copy /etc/services file again but in update mode. Does it change anything? Observe.
  • Look into /var/log directory and copy the log files that start with mail into your practice directory
  • Now, go back to your home directory and create a new directory named new_dir (well, I couldn’t think of any better)
  • Copy the practice_cp directory to new_dir

That should be good enough exercise for you. Enjoy learning Linux commands with It’s FOSS.

Similar Posts