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 in Linux command line.
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 paths because you'll need to use them while copying files from one place to another.
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 a 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 the 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 an 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
There is also -a
option for archive mode. It will preserve even the ACLs.
ποΈ 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.