Кратко: в этом простом руководстве мы обсудим несколько практических примеров использования команды cp. Следуя этому руководству, пользователи смогут легко копировать файлы и каталоги в Linux с помощью интерфейса командной строки.
Как пользователи Linux, мы взаимодействуем с файлы и каталоги время от времени. Одна из распространенных операций, которую выполняют пользователи, это копирование файлов и каталогов. Конечно, мы можем использовать графический файловый менеджер для выполнения операции копирования. Однако большинство пользователей Linux предпочитают использовать ср команда благодаря своей простоте и богатой функциональности.
В этом руководстве для начинающих мы узнаем о ср команда. Как следует из названия, ср команда используется для копирования файлов и каталогов по заданному пути.
В этом руководстве мы поймем, как использовать ср команда используя практические примеры, которые можно использовать изо дня в день.
Итак, приступим.
Синтаксис команды Cp
$ cp [OPTIONS] <SOURCE> <DEST> $ cp [OPTIONS] <SOURCE-1> <SOURCE-2> ... <DIRECTORY>
В приведенном выше синтаксисе квадратные скобки ([])
представляют необязательные аргументы, тогда как угловые скобки (<>)
представляют обязательные аргументы.
1. Как скопировать файл в Linux
Одно из основных применений ср команда копирует файл в текущий каталог. В большинстве случаев пользователи выполняют эту операцию, чтобы сделать резервную копию важной конфигурации.
Например, мы часто создаем резервную копию /etc/ssh/sshd_config файл перед обновлением конфигурации SSH.
Чтобы понять использование, давайте создадим простой файл:
$ touch file-1.txt
Затем создайте копию файла с помощью следующей команды:
$ cp file-1.txt file-2.txt

2. Показать ход выполнения команды копирования
В предыдущем примере мы использовали лс команда чтобы проверить, успешно ли выполнена операция копирования файла. Однако нет смысла использовать еще одну команду только для проверки результата предыдущих команд.
В таких случаях мы можем включить подробный режим с помощью -v
опция, которая обеспечивает диагностику для каждого обрабатываемого файла.
Сделаем копию файл-1.txt файл с помощью следующей команды:
$ cp -v file-1.txt file-3.txt

В приведенном выше выводе стрелка представляет копируемый файл. Аргумент левой стороны — это исходный файл, а аргумент правой стороны — файл назначения.
3. Как скопировать несколько файлов в каталог
До сих пор мы работали только с одним файлом и текущим рабочим каталогом. Однако в реальной производственной среде нам приходится работать с большое количество файлов. Одним из распространенных вариантов использования в таких средах является копирование нескольких файлов в один каталог.
Очевидно, что мы можем выполнить команду cp несколько раз, чтобы добиться этого, но это будет не самый эффективный способ. Для эффективного выполнения такой операции мы можем использовать альтернативный синтаксис команды cp.
Итак, во-первых, создать новый каталог с именем дир-1:
$ mkdir dir-1
Теперь давайте скопируем все три файла в дир-1 каталог с помощью одной команды:
$ cp -v file-1.txt file-2.txt file-3.txt dir-1

Приведенный выше вывод показывает, что все файлы были скопированы в дир-1 каталог. Кроме того, важно отметить, что для использования этого альтернативного синтаксиса каталог должен уже присутствовать и должен быть последним аргументом команды.
4. Как избежать перезаписи файла
По умолчанию ср Команда заменяет файл назначения, что означает, что он перезапишет файл, если он существует в месте назначения с тем же именем. Однако мы можем отключить это поведение по умолчанию с помощью -n
вариант.
Чтобы это понять, попробуем перезаписать существующий файл:
$ cp -n -v file-1.txt file-2.txt
В этом примере мы использовали -v
вариант, иллюстрирующий, что файл-2.txt файл не был перезаписан.
5. Как перезаписать файл с подтверждением
В предыдущем примере мы увидели, как избежать перезаписи целевого файла. Однако иногда мы хотим перезаписать место назначения файла более безопасным способом.
В таких случаях мы можем использовать -i
опция команды, чтобы сделать операцию копирования интерактивной. Этот параметр показывает предупреждающее сообщение и ждет подтверждения пользователя перед перезаписью файла.
Чтобы проиллюстрировать это, давайте попробуем перезаписать существующий файл:
$ cp -i file-1.txt file-2.txt cp: overwrite 'file-2.txt'?
Как мы видим, команда ожидает подтверждения. Как и другие команды Linux, мы можем использовать 'y'
продолжать или 'n'
чтобы прервать операцию.
Это неинтерактивное поведение по умолчанию ср команда не очень безопасна. Есть вероятность, что пользователь может по ошибке перезаписать важную конфигурацию. Следовательно, некоторые из дистрибутивов Linux по умолчанию применяют интерактивное поведение, используя псевдоним команды:
$ alias cp='cp -i'
6. Перезаписывать файл только в том случае, если исходный код новее
В предыдущем примере мы видели, как использовать интерактивный режим. Однако иногда пользователь может непреднамеренно перезаписать более новый файл.
Чтобы избежать таких подверженных ошибкам случаев, мы можем использовать -u
параметр, который пытается выполнить операцию копирования только в том случае, если источник новее, чем место назначения, или если файл отсутствует в месте назначения.
Сначала обновите метку времени исходного файла:
$ touch -t 10101010 file-1.txt $ ls -l file-1.txt
В приведенном выше примере мы использовали -t
вариант сенсорная команда установить временную метку файла на 10 октября 2010 г..
Затем давайте обновим временную метку целевого файла до текущего времени:
$ touch file-2.txt
Теперь попробуем выполнить операцию копирования с помощью -u
вариант:
$ cp -u -v file-1.txt file-2.txt
Здесь мы видим, что операция копирования не предпринималась, потому что конечный файл новее, чем исходный.
Наконец, давайте поменяем исходный и целевой аргументы местами и выполним операцию копирования:
$ cp -u -v file-2.txt file-1.txt
В приведенном выше выводе мы видим, что операция копирования прошла успешно, потому что исходный файл новее, чем целевой.

7. Как сделать резервную копию файла перед перезаписью
Мы можем поручить ср Команда для создания резервной копии целевого файла перед его перезаписью. Для этого мы можем использовать --backup
опция, которая выполняет автоматическое резервное копирование.
$ cp --backup=numbered -v file-1.txt file-2.txt
В этом примере мы использовали нумерованную политику резервного копирования. Эта политика использует возрастающие числа в именах файлов резервных копий.
Чтобы понять это, давайте выполним одну и ту же команду несколько раз и посмотрим на результат:
$ cp --backup=numbered -v file-1.txt file-2.txt $ cp --backup=numbered -v file-1.txt file-2.txt $ cp --backup=numbered -v file-1.txt file-2.txt

8. Как принудительно скопировать файл для перезаписи
В предыдущих нескольких примерах мы видели, как перезаписать файл более безопасным способом. Однако в некоторых редких случаях требуется перезаписать файл. Однако нет гарантии, что операция каждый раз будет успешной.
Например, операция копирования завершится ошибкой, если конечный файл не имеет разрешений на запись. Проиллюстрируем это примером.
Сначала измените права доступа к целевому файлу:
$ chmod 444 file-2.txt $ ls -l file-2.txt
Теперь попробуем перезаписать файл-2.txt файл:
$ cp file-1.txt file-2.txt
В приведенном выше выводе мы видим, что команда не удалась с ошибкой отказа в разрешении.
Для преодоления этого ограничения мы можем использовать -f
параметр, который удаляет целевые файлы и пытается выполнить операцию копирования, если целевой файл не может быть открыт.
Теперь воспользуемся -f
возможность принудительно перезаписать файл:
$ cp -f -v file-1.txt file-2.txt

9. Как удалить целевой файл перед копированием
В предыдущем примере мы видели, как удалить целевой файл, если при его работе возникла ошибка. Однако иногда требуется сначала удалить целевой файл, а затем выполнить операцию копирования.
Для выполнения такого требования мы можем использовать --remove-destination
вариант.
$ cp --remove-destination -v file-1.txt file-2.txt

В приведенном выше выводе мы видим, что команда cp сначала удаляет целевой файл, а затем выполняет операцию копирования.
10. Как создать файл жесткой ссылки вместо копирования
Мы можем создать жесткую ссылку вместо создания новой копии исходного файла. Этот параметр играет важную роль при нехватке места на диске.
Итак, воспользуемся -l
возможность создать жесткую ссылку:
$ cp -l -v file-1.txt file-4.txt
Теперь давайте проверим номера инодов обоих файлов, чтобы проверить жесткие ссылки:
$ ls -i1 file-1.txt file-4.txt

В приведенном выше выводе числа в первом столбце представляют номера инодов.
11. Как создать файл программной ссылки вместо копирования
Аналогичным образом мы можем создать программную ссылку вместо создания новой копии с помощью -s
вариант, как показано ниже:
$ cp -s -v file-1.txt file-5.txt
Теперь давайте проверим, что символическая ссылка была создана правильно:
$ ls -l file-5.txt

В приведенном выше выводе последние столбцы представляют отношение символической ссылки.
12. Как сохранить атрибуты файла при копировании
С файлом связаны различные атрибуты, такие как время доступа, время модификации, разрешения и т. д. По умолчанию эти атрибуты не сохраняются при копировании файла. Чтобы переопределить это поведение по умолчанию, мы можем использовать -p
вариант.
Чтобы понять это, сначала обновите временную метку файл-1.txt:
$ touch -t 10101010 file-1.txt
Теперь давайте создадим копию этого файла, сохранив все его атрибуты:
$ cp -p -v file-1.txt file-6.txt
Наконец, проверьте временную метку файл-6.txt файл:
$ ls -l file-6.txt

13. Как выполнить операцию копирования рекурсивно
До сих пор мы видели, как скопировать один файл. Однако часто нам приходится копировать все файлы и подкаталоги определенного каталога.
В таких случаях мы можем использовать рекурсивный режим либо с помощью -r
или же -R
вариант.
Итак, давайте создадим каталог и добавим в него несколько файлов и подкаталогов:
$ mkdir -p dir-1/dir-2 $ touch dir-1/file-1.txt dir-1/dir-2/file-2.txt
Затем убедитесь, что структура каталогов создана правильно:
$ tree dir-1
Теперь давайте рекурсивно скопируем каталог dir-1, используя следующую команду:
$ cp -r -v dir-1 dir-3
Наконец, убедитесь, что все файлы и подкаталоги были успешно скопированы:
$ tree dir-3

14. Как скопировать несколько каталогов
Подобно файлам, мы можем рекурсивно копировать несколько каталогов с помощью одной команды. Однако для этого целевой каталог должен уже присутствовать и должен быть последним аргументом в команде. Давайте разберемся с этим на примере.
Сначала создайте каталог новый каталог:
$ mkdir dir-4
Теперь давайте скопируем дир-1 и дир-3 каталоги в дир-4 каталог с помощью следующей команды:
$ cp -r -v dir-1 dir-3 dir-4
Аналогичным образом мы можем использовать -t
вариант команды для достижения того же результата. Эта опция позволяет нам указать каталог назначения. Таким образом, мы можем использовать его и в качестве первого аргумента:
$ cp -t dir-4 -r -v dir-1 dir-3

В этой статье мы обсудили, как копировать файлы и каталоги с помощью ср команда. Новички могут обращаться к этим примерам в повседневной жизни при работе с системами Linux.
Вам также может понравиться:
- Прогресс — Показать процент скопированных данных для команд (cp, mv, dd, tar)
- Мониторинг хода выполнения (копирования/резервного копирования/сжатия) данных с помощью команды «pv»
- Расширенная команда копирования — показывает индикатор выполнения при копировании больших файлов/папок в Linux
Знаете ли вы какой-либо другой лучший пример использования команды cp в Linux? Сообщите нам свое мнение в комментариях ниже.