Поиск по сайту:

Как эффективно использовать команду cp в Linux [14 примеров]


Кратко. В этом простом для понимания руководстве мы обсудим некоторые практические примеры команды cp. Следуя этому руководству, пользователи смогут легко копировать файлы и каталоги в Linux с помощью интерфейса командной строки.

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

В этом руководстве для начинающих мы узнаем о команде cp. Как следует из названия, команда cp используется для копирования файлов и каталогов по заданному пути.

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

Итак, начнем.

Синтаксис команды Cp

Синтаксис команды cp идентичен синтаксису других команд Linux. На высоком уровне он разделен на две части — параметры и аргументы:

cp [OPTIONS] <SOURCE> <DEST>
cp [OPTIONS] <SOURCE-1> <SOURCE-2> ... <DIRECTORY>

В приведенном выше синтаксисе квадратные скобки ([]) представляют необязательные аргументы, тогда как угловые скобки (<>) представляют обязательные аргументы.

1. Как скопировать файл в Linux

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

Например, мы часто создаем резервную копию файла /etc/ssh/sshd_config перед обновлением конфигурации SSH.

Чтобы понять использование, давайте создадим простой файл:

touch file-1.txt

Затем создайте копию файла с помощью следующей команды:

cp file-1.txt file-2.txt

2. Показать ход выполнения команды копирования

В предыдущем примере мы использовали команду ls, чтобы проверить, успешна ли операция копирования файла. Однако нет смысла использовать еще одну команду только для проверки результата предыдущих команд.

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

Давайте скопируем файл file-1.txt с помощью следующей команды:

cp -v file-1.txt file-3.txt

В приведенном выше выводе стрелка представляет копируемый файл. Левый аргумент — это исходный файл, тогда как правый аргумент — это файл назначения.

3. Как скопировать несколько файлов в каталог

До сих пор мы работали только с одним файлом и текущим рабочим каталогом. Однако в реальной производственной среде нам приходится работать с большим количеством файлов. Одним из распространенных случаев использования в таких средах является копирование нескольких файлов в один каталог.

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

Итак, сначала создайте новый каталог с именем dir-1:

mkdir dir-1

Теперь давайте скопируем все три файла в каталог dir-1 с помощью одной команды:

cp -v file-1.txt file-2.txt file-3.txt dir-1

Приведенный выше вывод показывает, что все файлы были скопированы в каталог dir-1. Также важно отметить, что для использования этого альтернативного синтаксиса каталог должен уже присутствовать и быть последним аргументом команды.

4. Как избежать перезаписи файла

По умолчанию команда cp заменяет файл назначения, что означает, что она перезапишет файл, если он существует в месте назначения с тем же именем. Однако мы можем отключить это поведение по умолчанию, используя опцию -n.

Чтобы это понять, попробуем перезаписать существующий файл:

cp -n -v file-1.txt file-2.txt

В этом примере мы использовали параметр -v, чтобы проиллюстрировать, что файл file-2.txt не был перезаписан.

5. Как перезаписать файл с подтверждением

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

В таких случаях мы можем использовать опцию -i команды, чтобы сделать операцию копирования интерактивной. Эта опция отображает предупреждающее сообщение и ожидает подтверждения пользователя перед перезаписью файла.

Чтобы проиллюстрировать это, давайте попробуем перезаписать существующий файл:

cp -i file-1.txt file-2.txt

cp: overwrite 'file-2.txt'?

Как мы видим, команда ожидает подтверждения. Как и другие команды Linux, мы можем использовать 'y' для продолжения или 'n' для прерывания операции.

Такое неинтерактивное поведение команды cp по умолчанию не очень безопасно. Существует вероятность того, что пользователь может по ошибке перезаписать важную конфигурацию. Следовательно, некоторые дистрибутивы Linux по умолчанию обеспечивают интерактивное поведение с помощью команды alias:

alias cp='cp -i'

6. Перезаписать файл только в том случае, если источник новее.

В предыдущем примере мы увидели, как использовать интерактивный режим. Однако иногда пользователь может случайно перезаписать новый файл.

Чтобы избежать таких случаев, подверженных ошибкам, мы можем использовать опцию -u, которая пытается выполнить операцию копирования, только если источник новее, чем место назначения, или если файл отсутствует в месте назначения.

Сначала обновите временную метку исходного файла:

touch -t 10101010 file-1.txt
ls -l file-1.txt

В приведенном выше примере мы использовали параметр -t команды touch, чтобы установить временную метку файла 10-Oct-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. Как сделать резервную копию файла перед перезаписью

Мы можем указать команде cp создать резервную копию файла назначения перед его перезаписью. Для этого мы можем использовать опцию --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

Теперь попробуем перезаписать файл file-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.

Чтобы понять это, сначала обновите временную метку file-1.txt:

touch -t 10101010 file-1.txt

Теперь давайте создадим копию этого файла, сохранив все его атрибуты:

cp -p -v file-1.txt file-6.txt

Наконец, проверьте временную метку файла file-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

Теперь давайте скопируем каталоги dir-1 и dir-3 в каталог dir-4, используя следующую команду:

cp -r -v dir-1 dir-3 dir-4

Аналогичным образом мы можем использовать опцию -t команды для достижения того же результата. Эта опция позволяет нам указать каталог назначения. Поэтому мы можем использовать его и в качестве первого аргумента:

cp -t dir-4 -r -v dir-1 dir-3

В этой статье мы обсудили, как копировать файлы и каталоги с помощью команды cp. Новички могут использовать эти примеры в повседневной жизни при работе с системами Linux.

Знаете ли вы какой-нибудь другой лучший пример команды cp в Linux? Поделитесь с нами своим мнением в комментариях ниже.