16 полезных примеров команд cp для начинающих Linux

16 полезных примеров команд cp для начинающих Linux

 

Для пользователей Linux копирование файлов и каталогов — одна из наиболее распространенных повседневных операций. Команда task.cp используется для копирования файлов и каталогов из одного локального места в другое с помощью командной строки. Команда cp доступна почти во всех Unix и Linux подобных операционных системах

В этой статье мы продемонстрируем 16 полезных примеров команд cp специально для новичков в Linux. Ниже приведен основной синтаксис команды cp.

Скопируйте файл в другой файл

# cp {options} source_file target_file

Скопируйте файл (ы) в другой каталог или папку

# cp {options} source_file target_directory

Скопировать каталог в каталог

# cp {options} source_directory target_directory

Давайте перейдем к практическим примерам команды cp,

Пример: 1) Скопируйте файл в целевой каталог

Предположим, мы хотим скопировать файл /etc/passwd в каталог /mnt/backup для некоторой цели резервного копирования, поэтому выполните команду ниже cp,

:~# cp /etc/passwd /mnt/backup/
:~#

Используйте команду ниже, чтобы проверить, был ли он скопирован или нет.

:~# ls -l /mnt/backup/
total 4
-rw-r--r-- 1 root root 2410 Feb  3 17:10 passwd
:~#

Пример: 2 Одновременное копирование нескольких файлов

Предположим, мы хотим скопировать несколько файлов (/etc/passwd, /etc/group и /etc/shadow) одновременно в целевой каталог (/mnt/backup).

:~# cp /etc/passwd /etc/group /etc/shadow /mnt/backup/
:~#

Пример: 3) Интерактивное копирование файлов (-i)

Если вы хотите скопировать файлы из одного места в другое в интерактивном режиме, используйте опцию «-i» в команде cp, интерактивная опция работает только в том случае, если в целевом каталоге уже есть такой же файл, пример показан ниже,

~# cp -i /etc/passwd /mnt/backup/
cp: overwrite '/mnt/backup/passwd'? y
:~#

В приведенной выше команде нужно вручную ввести ‘y’, чтобы разрешить операцию копирования.

Пример: 4) Подробный вывод во время команды копирования (-v)

Если вам нужен подробный вывод команды cp, используйте параметр «-v», пример показан ниже.

:~# cp -v /etc/fstab  /mnt/backup/
'/etc/fstab' -> '/mnt/backup/fstab'
:~#

Если вы хотите использовать как интерактивный, так и подробный режим, используйте параметры «-iv».

:~# cp -iv /etc/fstab  /mnt/backup/
cp: overwrite '/mnt/backup/fstab'? y
'/etc/fstab' -> '/mnt/backup/fstab'
:~#

Пример: 5) Копирование каталога или папки (-r или -R)

Чтобы скопировать каталог из одного места в другое, используйте параметр -r или -R в команде cp. Предположим, мы хотим скопировать домашний каталог пользователя infoit в «/mn/backup»,

:~# cp -r /home/infoit /mnt/backup/
:~#

В приведенной выше команде параметр -r рекурсивно копирует файлы и каталог.

Теперь проверьте содержимое каталога infoit в целевом месте,

:~# ls -l /mnt/backup/infoit/
total 24
drwxr-xr-x 2 root root 4096 Feb  3 17:41 data
-rw-r--r-- 1 root root    7 Feb  3 17:41 file_1.txt
-rw-r--r-- 1 root root    7 Feb  3 17:41 file_2.txt
-rw-r--r-- 1 root root    7 Feb  3 17:41 file_3.txt
-rw-r--r-- 1 root root    7 Feb  3 17:41 file_4.txt
-rw-r--r-- 1 root root    7 Feb  3 17:41 file_5txt
-rw-r--r-- 1 root root    0 Feb  3 17:41 file_5.txt
:~#

Пример: 6) Архивировать файлы и каталог во время копирования (-a)

При копировании каталога с помощью команды cp мы обычно используем параметр -r или -R, но вместо параметра -r мы можем использовать ‘-a’, который будет архивировать файлы и каталог во время копирования, пример показан ниже,

:~# cp -a /home/infoit /mnt/backup/
:~# ls -l /mnt/backup/infoit/
total 24
drwxr-xr-x 2 root root 4096 Feb  3 17:41 data
-rw-r--r-- 1 root root    7 Feb  3 17:39 file_1.txt
-rw-r--r-- 1 root root    7 Feb  3 17:39 file_2.txt
-rw-r--r-- 1 root root    7 Feb  3 17:39 file_3.txt
-rw-r--r-- 1 root root    7 Feb  3 17:39 file_4.txt
-rw-r--r-- 1 root root    7 Feb  3 17:40 file_5txt
-rw-r--r-- 1 root root    0 Feb  3 17:39 file_5.txt
:~#

Пример: 7) Копировать, только если исходный файл новее, чем целевой (-u)

Могут быть некоторые сценарии, в которых вы хотите скопировать файлы только в том случае, если исходные файлы новее, чем целевые. Этого легко добиться, используя параметр « -u » в команде cp.

В примере: 6 мы скопировали домашний каталог infoit в папку / mnt / backup, в домашней папке infoit у нас есть 5 файлов txt, давайте отредактируем пару из них, а затем скопируем все файлы txt с помощью «cp -u».

:~# cd /home/infoit/
:/home/infoit# echo "LinuxRocks" >> file_1.txt
:/home/infoit# echo "LinuxRocks" >> file_4.txt
:/home/infoit# cp -v -u  file_*.txt /mnt/backup/infoit/
'file_1.txt' -> '/mnt/backup/infoit/file_1.txt'
'file_4.txt' -> '/mnt/backup/infoit/file_4.txt'
:/home/infoit#

Пример: 8) Не перезаписывать существующий файл при копировании (-n)

Есть несколько сценариев, когда вы не хотите перезаписывать существующие файлы назначения при копировании. Это можно сделать с помощью опции ‘-n’ в команде ‘cp’.

:~# cp -i /etc/passwd /mnt/backup/
cp: overwrite '/mnt/backup/passwd'?

Как вы можете видеть в приведенной выше команде, она предлагает нам перезаписать существующий файл, если вы используете -n, ​​тогда он не будет запрашивать перезапись, а также не перезапишет существующий файл.

:~# cp -n /etc/passwd /mnt/backup/
:~#

Пример: 9) Создание символических ссылок с помощью команды (-ов) cp

Предположим, мы хотим создать символическую ссылку на файл вместо копирования с помощью команды cp, для таких сценариев используйте параметр ‘-s’ в команде cp, пример показан ниже

:~# cp -s /home/infoit/file_1.txt /mnt/backup/
:~# cd /mnt/backup/
:/mnt/backup# ls -l file_1.txt
lrwxrwxrwx 1 root root 27 Feb  5 18:37 file_1.txt -> /home/infoit/file_1.txt
:/mnt/backup#

Пример: 10) Создание жесткой ссылки с помощью команды cp (-l)

Если вы хотите создать жесткую ссылку на файл вместо копирования с помощью команды cp, используйте опцию ‘-l’. пример показан ниже,

:~# cp -l /home/infoit/devops.txt /mnt/backup/
:~#

Как мы знаем из жесткой ссылки, исходный и связанный файл будут иметь одинаковые номера inode, давайте проверим это, используя следующие команды:

:~# ls -li /mnt/backup/devops.txt
918196 -rw-r--r-- 2 root root 37 Feb  5 20:02 /mnt/backup/devops.txt
:~# ls -li /home/infoit/devops.txt
918196 -rw-r--r-- 2 root root 37 Feb  5 20:02 /home/infoit/devops.txt
:

Пример: 11) Копирование атрибутов из источника в место назначения (–attributes-only)

Если вы хотите скопировать только атрибуты из источника в место назначения с помощью команды cp, используйте опцию « –attributes-only »

# cp --attributes-only /home/infoit/distributions.txt  /mnt/backup/
# ls -l /home/infoit/distributions.txt
-rw-r--r-- 1 root root 41 Feb  5 19:31 /home/infoit/distributions.txt
# ls -l /mnt/backup/distributions.txt
-rw-r--r-- 1 root root 0 Feb  5 19:34 /mnt/backup/distributions.txt
#

В приведенной выше команде мы скопировали файл distribution.txt из домашнего каталога infoit в папку / mnt / backup, если вы заметили, копируются только атрибуты, а содержимое пропускается. Размер distribution.txt в папке / mn / backup равен нулю байт.

Пример: 12) Создание резервной копии существующего целевого файла при копировании (–backup)

По умолчанию команда cp перезаписывает файл в месте назначения, если такой же файл существует. Если вы хотите сделать резервную копию существующего файла назначения во время операции копирования, используйте опцию « –backup », пример показан ниже,

:~# cp --backup=simple -v /home/infoit/distributions.txt /mnt/backup/distributions.txt
'/home/infoit/distributions.txt' -> '/mnt/backup/distributions.txt' (backup: '/mnt/backup/distributions.txt~')
:~#

Если вы заметили, резервная копия была создана, и в конце файла добавлен символ тильды. опция резервного копирования принимает следующие параметры

  • none, off – никогда не делать резервные копии
  • numbered, t – делать нумерованные резервные копии
  • existing, nil – нумеруются, если существуют пронумерованные резервные копии, в противном случае просто
  • simple, never – всегда делайте простые резервные копии

Пример: 13) Сохранить режим, право собственности и временные метки при копировании (-p)

Если вы хотите сохранить атрибуты файла, такие как режим, владение и временные метки при копировании, используйте параметр -p в команде cp, пример показан ниже,

 

:~# cd /home/infoit/
:/home/infoit# cp -p devops.txt /mnt/backup/
:/home/infoit# ls -l devops.txt
-rw-r--r-- 1 root root 37 Feb  5 20:02 devops.txt
:/home/infoit# ls -l /mnt/backup/devops.txt
-rw-r--r-- 1 root root 37 Feb  5 20:02 /mnt/backup/devops.txt
:/home/infoit#

Пример: 14) Не переходите по символическим ссылкам в исходном коде при копировании (-P)

Если вы не хотите следовать символическим ссылкам источника во время копирования, используйте параметр -P в команде cp, пример показан ниже

:~# cd /home/infoit/
:/home/infoit# ls -l /opt/nix-release.txt
lrwxrwxrwx 1 root root 14 Feb  9 12:28 /opt/nix-release.txt -> os-release.txt
:/home/infoit#
:/home/infoit# cp -P os-release.txt /mnt/backup/
:/home/infoit# ls -l /mnt/backup/os-release.txt
-rw-r--r-- 1 root root 35 Feb  9 12:29 /mnt/backup/os-release.txt
:/home/infoit#

Примечание. По умолчанию команда cp следит за символическими ссылками в исходном коде при копировании.

Пример: 15) Скопируйте файлы и каталог принудительно, используя параметр -f

Могут быть некоторые сценарии, в которых существующий целевой файл не может быть открыт и удален. И если у вас есть здоровый файл, который можно скопировать вместо существующего файла назначения, используйте команду cp вместе с параметром -f

:/home/infoit# cp -f distributions.txt  /mnt/backup/
:/home/infoit#

Пример: 16) Скопируйте разреженные файлы, используя параметр sparse в команде cp

Sparse — это обычный файл, содержащий длинную последовательность нулевых байтов, не занимающую ни одного блока физического диска. Одним из преимуществ разреженного файла является то, что он не занимает много места на диске, и операция чтения этого файла будет довольно быстрой.

Предположим, у нас есть образ разреженного облака с именем «ubuntu-cloud.img».

:/home/infoit# du -sh ubuntu-cloud.img
12M     ubuntu-cloud.img
:/home/infoit# cp --sparse=always ubuntu-cloud.img /mnt/backup/
:/home/infoit# du -sh /mnt/backup/ubuntu-cloud.img
0       /mnt/backup/ubuntu-cloud.img
:/home/infoit#

При использовании параметра sparse в команде cp можно использовать разные параметры,

  • sparse=auto
  • sparse-always
  • sparse=never

Это все из этой статьи, я надеюсь, что она поможет вам более эффективно понять команду cp. Пожалуйста, поделитесь своими отзывами и комментариями