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. Пожалуйста, поделитесь своими отзывами и комментариями