Перейти к содержимому

Linux как скопировать файл в другую папку

  • автор:

Как скопировать файл в Linux через терминал

При работе с Linux через терминал не редко приходится создавать копии файлов или копировать файлы из одной папки в другую. Например, это могут быть файлы конфигураций, которые используются для настройки программ, или просто документы пользователя. В данной инструкции мы расскажем, как скопировать файл в Linux через терминал и какие команды для этого потребуются. Статья будет актуальной для любого дистрибутива Linux, например, Ubuntu Linux или Debian

Команда для копирования «cp»

Для копирования файлов в Linux через терминал используется команда « cp » (от англ. «copy»). Команда « cp » представляет собой утилиту командной строки для копирования файлов и каталогов. Она поддерживает перемещение одного или нескольких файлов или папок с параметрами для создания резервных копий и сохранения атрибутов.

В общем случае, для того чтобы скопировать файл в Linux через терминал достаточно ввести команду « cp » и передать ей имя исходного и нового файла. Например, для того чтобы скопировать « file.txt » в новый « newfile.txt » нужно выполнить следующую команду:

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

копирование файла

Таким же образом выполняется копирование файла в другую папку. Вводим команду « cp », указываем путь к файлу и затем каталог, в который его нужно скопировать. Например, для того чтобы скопировать « file.txt » в каталог « folder » нужно выполнить вот такую команду:

копирование файла в папку

Естественно, если это необходимо, вы можете вводить полные пути к файлам и папкам, которые копируете командой « cp ». Например, копирование может выглядеть так:

копирование с указанием полного пути

Еще один пример копирования с указанием полного пути:

копирование с указанием полного пути

При необходимости можно скопировать сразу несколько файлов. В этом случае сначала нужно перечислить файлы, а потом указать папку, в которую их нужно скопировать. Например, для того чтобы скопировать « file.txt » и « newfile.txt » в каталог « folder » нужно выполнить следующее:

копирование нескольких файлов в папку

Аналогичное действие можно выполнить и с помощью маски. Например, для того чтобы скопировать все txt -документы в определенную директорию можно выполнить вот такую команду:

копирование файлов по маске

При копировании каталогов нужно добавлять параметр « -R », так как без этого « cp » будет выдавать ошибку. Поэтому, для копирования каталогов нужно ввести команду « cp -R » и указать исходный и новый каталог. Например, для того чтобы скопировать каталог « folder » в « newfolder » вам нужно выполнить вот такую команду:

копирование папок

Как и в случае с файлами, папки можно копировать сразу по несколько штук. Для этого нужно ввести «cp», перечислить копируемые папки и указать каталог назначения. Например, для того чтобы скопировать папки « folder » и « folder2 » в « newbigfolder » нужно выполнить следующее:

копирование нескольких папок

Синтаксис и опции команды «cp»

Команда « cp » имеет множество опций, с помощью которых можно контролировать буквально все аспекты копирования файлов. Синтаксис команды выглядит следующим образом:

Самых опций у команды « cp » очень много, поэтому мы рассмотрим только самые простые и часто используемые. С остальными опциями вы сможете ознакомиться отдельно, выполнив в терминале Linux команду « man cp ».

Как уже было сказано, для выполнения команды копирования в терминале Linux сначала нужно ввести « cp », потом используемые опции, потом источник, и в конце место назначения. При этом опции из одной буквы можно соединять, например, вместо « -r -v » можно написать просто « -rv ».

рекурсивное копирование с выводом информации

Ниже мы рассмотрим несколько примеров копирования с опциями.

  • cp -r folder/ newfolder/
    Рекурсивное копирование каталогов.
  • cp -rv folder/ newfolder/
    Рекурсивное копирование с выводом подробной информации.
  • cp -ri folder/ newfolder/
    Рекурсивное копирование в интерактивном режиме с запросом на перезапись.
  • cp -rn folder/ newfolder/
    Рекурсивное копирование без перезаписи.
  • cp -ru folder/ newfolder/
    Рекурсивное копирование только новых файлов.
  • Как удалить папку в Linux через терминал (консоль)
  • Как открыть файл в терминале Linux
  • Как создать файл в Linux через терминал
  • Как удалить файл в Linux через терминал
  • Как подключиться по SSH из Windows 10

Создатель сайта comp-security.net, автор более 2000 статей о ремонте компьютеров, работе с программами, настройке операционных систем.

Задайте вопрос в комментариях под статьей или на странице «Задать вопрос» и вы обязательно получите ответ.

Команда cp

Команда cp в Linux

что_копируем — файл, несколько файлов, директория или несколько директорий, которые необходимо скопировать.

куда_копируем — название файла, в который выполняется копирование другого файла, или директория, в которую копируются исходные файлы или директории.

Опции

МЕТОД определяет, каким образом формируется имя резервной копии. МЕТОД может принимать значения:

  • none или off — не делать резервных копий, даже если включена опция —backup
  • numbered или t — имя резервной копии получит числовой индекс (пример: myfile.txt

Например, при использовании команды cp —parents a/b/myfile dstdir , файл myfile будет скопирован в директорию dstdir/a/b . То есть будут созданы промежуточные директории.

КОГДА может принимать значения:
always — всегда создавать «легкую» копию файла. Создается ссылка на исходные данные. Фактического копирования данных не происходит. Блоки данных копируются только тогда, когда они изменяются.
auto — создается обычная полная копия.

КОГДА может принимать значения:
auto — (поведение по умолчанию) копировать разреженные файлы в разреженные файлы.
always — результирующий файл всегда разреженный, если в исходном есть достаточное количество нулевых последовательностей.
never — не делать результирующие файлы разреженными.

Примеры использования команды cp

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

Скопируем файл myfile.txt в директорию mydir :

Скопируем файл myfile1.txt в новый файл myfile2.txt

Скопировать несколько файлов

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

Скопировать файл с подтверждением

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

Показать информацию о копируемых файлах

При использовании опции -v выводится информация о том, какие файлы и куда копируются.

Скопировать директорию

Чтобы скопировать директорию и все ее содержимое нужно использовать опцию -r

Скопировать только если файлы новее

Скопируем файлы вида myfile*.txt (например, это могут быть файлы myfile1.txt myfile10.txt myfile2.txt ) в директорию mydir , но если результирующий файл существует, то копирование выполняется только в том случае, если исходный файл новее.

Не перезаписывать существующие файлы

Чтобы существующие файлы не перезаписывались, используется опция -n

Скопировать только атрибуты

Скопируем только атрибуты файла. Содержимое файла не копируется.

Создать резервную копию для результирующих файлов, если они существуют

Скопируем файл myfile1.txt в файл myfile2.txt . Если файл myfile2.txt существует, то будет создана его резервная копия.

Команда cp backup

Принудительно перезаписывать существующие файлы назначения

Если файл назначения существует и не может быть открыт и удален, то можно использовать опцию -f , чтобы принудительно перезаписать такой файл:

Основные операции с файлами и папками в Linux

В данной статье мы рассмотрим такие вопросы как, копирование, перенос и удаление файлов. Копирование нескольких файлов и папок в том числе рекурсивно. Удаление файлов и папок в том числе рекурсивно. Использование групповых символов. Отбор файлов по типу, размеру, дате и.т.д. Утилиты tar , cpio и dd .

Исходя из обозначенных выше вопросов будем разбираться со следующим списком команд: cp , find , mkdir , mv , ls , rm , rmdir , touch , tar , cpio , dd , file , gzip , gunzip , bzip2 , xz , file globbing .

А также захватим основные виды архиваторов и посмотрим, как с ними работать.

Команда touch

man touch

Данная команда меняет отметки времени файла. При помощи этой команды мы можем создавать новые файлы и менять время доступа к файлу.

Например, мы можем посмотреть, что в текущей директории нет текстовых фалов. Убедится мы можем командой ls , а посмотреть в какой директории pwd. Соответственно вводим touch 123.txt и файл появляется.

touch 123.txt

Есть так же другая команда для создания директорий mkdir . Описание можно по ней посмотреть, через ввод команды man mkdir . Данная команда создает директорию, например, mkdir folder1 создаст нам директорию folder1. Для просмотра используем команду ls . По данной команде мы тоже можем посмотреть мануал man ls . В описании написано, что показывает содержимое папки. Мы так же ее можем использовать с ключем –l , листинг, т.е в виде списка.

mkdir folder1

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

Создадим еще один файл 456.txt и файл 1.txt в папке folder1

и групповое создание файлов touch folder1/<2,3>.txt , а так же мы можем посмотреть, что у нас получилось в папке folder1.

ls folder1

Команда cp

man cp

Команда предназначена для копирования файлов и директорий.

Самый простой пример сделать копию: cp 123.txt copy123.txt . Можно скопировать директорию cp folder1 folder2 . И команда откажется выполнятся, потому, что по умолчанию рекурсивно не работает. В папке folder1 находятся файлы. И если мы хотим это осуществить то используем ключ –r или –R .

cp folder1 folder2

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

Команда mv

man mv

Данная команда позволяет перенести файлы или папки, или переименовать (перенести данные из одного имени в другое). Для примера, скажем файл 456.txt перенести в файл something.txt , т.е mv 456.txt something.txt . Как мы видим файл 456 исчез, а появился something.txt

-ls

Данная команда можем переносить так же в другую папку, например, глубже

Вот так будет выглядеть команда. А также можно вернуть его обратно, командой:

В конце знак точки выполняет функцию обозначения текущей папки. Аналогичные действия мы можем производить с папками. С помощью команд mv и cp .

Команда rm

man rm

Данная команда предназначена для удаления папок и файлов.

  • rm 123.txt — удаление файла
  • rm folder1 – удаление каталога, но команда выдает ошибку. Это происходит потому, что в папке находится файл. Если мы хотим удалить рекурсивно, то необходимо добавить ключ –r , а если без предупреждений и принудительно , то еще ключик –f . Итоговая команда будет выглядеть следующим образом.

Есть еще одна команда которая удаляет непосредственно папки, называется она rmdir . Мануал посмотреть вы можете по ней командой man rmdir . Данная команда удаляет непосредственно пустые директории. Работает достаточно близко по функционалу к rm .

Команда file

man file

Команда определяет тип файла. Перейдем в папку Folder.

Попробуем определить тип файла file yandex.url , как мы можем убедится команда выдает, что данный файл является текстовым.

file yandex.url

Если мы наберем, например, File * , то команда применится ко всем файлам в текущей директории и определит все типы файлов.

Важной частью работы с файлами и папками являются Групповые Символы.

  • * — все что угодно (заменяет любое количество символов)
  • ? – любой символ (одиночный символ, ?? – два символа)
  • ! – не (отрицание)
  • [ac] – a или с
  • [a-c] – a,b,c

Создал несколько новых файлов:

ls * — дает занимательную картинку, где видны файлы и папки.

ls

Команда ls *.* нам покажет только те файлы которые имеют расширения. Первая звездочка, означает любое имя, вторая звездочка указывает на любое расширение. Мы можем указать на конкретное количество символов обозначив их знаками “?” . Например, ls *. – это означает, что подходят любые файлы, у которых расширение из 3-х любых символов. Знаки вопросов и звездочек, можно использовать с сочетаниями букв и других символов. Можно сказать, покажи нам все файлы, которые начинаются с букв a или b, команда ls [ab]* .

Также можно использовать конструкцию ls [a-m]* . Следовательно, работают все конструкции с групповыми символами.

Команда find

man find

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

Попробуем найти в директории все файлы:

find

Получим вот такой ответ на данную команду. У данной команды очень много ключей. Можем для примера взять такую конструкцию find . –name “In*” . Данная конструкция обозначает поиск в текущей папке, по имени, которое начинается с In и имеет в имени любое количество символов. Данную команду можно использовать для поиска файлов например по размеру: find . –size +5M . Следовательно, данным запросом мы ищем все файлы в текущем каталоге с размером более 5 MB.

Команда cpio

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

man cpio

Данная команда позволяет копировать файлы в архивы и из архивов. Данная команда позволяет работать с архивами, грубо говоря это двоичный архиватор. Смотрим, что есть в директории ls .

ls

Далее даем вот такую команду: ls | cpio –o > ../test.cpio

В результате получили файл

test.cpio

Пояснения, что мы сделали. Мы взяли вывод команды ls по конвейеру передали на вход команды cpio с ключем –o , который создает архив и то, что должно получится мы указали папку .. т.е родительская директория и файл test.cpio . Команда выполнилась и вывела число блоков, сколько обработалось. И переместившись на уровень выше, в родительскую директорию мы можем увидеть, что файл появился.

А можем сделать следующую вещь: find . –name ”*.txt” | cpio –o > test2.cpio . Т.е мы можем выполнит поиск всех текстовых файлов в текущей директории и заархивировать, причем положить в текущую директорию.

Создадим папку mkdir extract . И перейдем в нее cd /root/extract . Теперь мы попробуем разархивировать cpio –id

Как мы видим все текстовые файлы появились. По сути, что мы сделали. Мы сказали команде cpio подняться на уровень выше взять test2.cpio и разархивировать в текущий каталог. Как видите там же попался каталог folder2, а попался т.к в нем тоже есть текстовые файлы. Напоминаю, что команда find работает так же со вложенными файлами, поэтому данный каталог и попал в архив.

Команда dd

Еще немного про архивы.

man dd

Конвертирует и копирует файлы. Данная команда умеет копировать, не части файловой системы, как файлы или папки, а умеет копировать блочные устройства или его части, например, диск. Для того, чтобы показать, как это работает я примонтировал еще один раздел на 5 ГБ.

df -h

Далее пишем следующее, находясь в директории cd /root/extract .

  • dd — сама команда
  • if (Input файл) — диск
  • of (Output файл) — путь куда положить.

Мы видим, что команда столько-то получила, столько-то отправила данных в файл.

drive.img

Как можно увидеть, команда отработала. Следовательно, команда dd может сделать целиком резервную копию блочного устройства.

Команда gzip

Переходим непосредственно к архиваторам.

man gzip

Утилита, которая позволяет разжимать и упаковывать файлы.

gzip drive.img

Получаем в итоге, что вместо drive.img гигантского, получился более компактный drive.img.gz т.е команда gzip не просто создает архив , но и убивает оригинальный файл. Соответственно если мы хотим его отзиповать, то используем команду gunzip drive.img.gz

Все архиваторы различаются по типу сжатия.

Команда bzip2

man bzip2

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

Команда tar

Теперь посмотрим легендарный архиватор tar

man tar

Наиболее часто использующийся архиватор. С множеством функций и ключей. Пример использования.

Команда cp в Linux

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

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

Синтаксис и опции cp в Linux

Утилита имеет два возможных варианта синтаксиса для копирования файлов: копирование файла в другой файл с указанным именем:

$ cp опции /путь/к/файлу/источнику /путь/к/файлу/назначения

И копирование файла с сохранением его имени в указанную папку:

$ cp опции /путь/к/файлу/источнику /путь/к/директории/назначения

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

Утилита имеет несколько интересных опций, которые могут сильно помочь при нестандартных задачах копирования, поэтому давайте их рассмотрим:

  • —attributes-only — не копировать содержимое файла, а только флаги доступа и владельца;
  • -b, —backup — создать резервную копию файла назначения если он существует;
  • —copy-contents — копировать содержимое для специальных файлов (сокеты, файлы устройств);
  • -f, —force — удалить файл назначения перед попыткой записи в него если он существует;
  • -i, —interactive — спрашивать, нужно ли перезаписывать существующие файлы;
  • -n, —no-clobber — не перезаписывать существующие файлы;
  • -P, —no-dereference — копировать сами символические ссылки, а не то на что они указывают;
  • -L, —dereference — копировать не символические ссылки, а то, на что они указывают;
  • -l, —link — создавать жесткие ссылки вместо копирования;
  • —preserve — переносить указанные атрибуты с файла источника в файл назначения, возможные значения: mode, ownership, time‐stamps, context, links, xattr, all;
  • —no-preserve — не переносить указанные атрибуты;
  • —parents — сохранять путь, указанный в файле источнике, в папке назначения;
  • -r, —recursive — копировать папку Linux рекурсивно;
  • —reflink — использовать Copy on Write если это поддерживается файловой системой;
  • -s, —symbolic-link — не выполнять копирование файлов в Linux, а создавать символические ссылки;
  • -S, —suffix — указать суффикс для резервных копий файлов;
  • —sparse — настройка работы с разреженными файлами;
  • -t, —target-directory — считать файл-назначения директорией и копировать файл-источник или директорию-источник в эту директорию с оригинальным именем;
  • -T, —no-target-directory — считать директорию назначения файлом или директорией для записи данных. Если в качестве источника выбран файл, то он будет скопирован с новым именем. Если директория, то её содержимое будет скопировано в директорию назначения;
  • -u, —upgrade — скопировать файл, только если он был изменён;
  • -x, —one-file-system — рекурсивное копирование не должно выходить за пределы этой файловой системы;
  • -v, —verbose — максимально подробный вывод.

Кроме перечисленных выше опций, существуют опции, которые объединяют в себе несколько других с определёнными значениями. Во основные из них:

  • -p — сохранять владельца, временные метки и флаги доступа при копировании, аналогично —preserve=mode,ownership,timestamps;
  • -d — копировать символические и жесткие ссылки именно как ссылки, аналогично —no-dereference —preserve=links;
  • -a — режим резервного копирования, при котором сохраняются все атрибуты, ссылки, а также выполняется резервное копирование папок, аналогично —recursive —preserve=all, —no-dereference;

Теперь, когда вы знаете основные опции, можно перейти к практике. Давайте рассмотрим основные примеры использования утилиты cp.

Примеры использования cp

Для примеров из этой статьи я создам несколько файлов file1, file2, file3, одну символическую ссылку link1 на файл file1 и жесткую ссылку на файл file3. Затем папку source и в ней file4, file5, file6 и папку destination. Вот так можно создать ссылки:

ln -s $(realpath file1) link1 ln file3 hlink1

В результате получится такая структура:

1. Копирование файла в файл

Самый простой пример копирования файлов когда один файл копируется в другое место с заданным именем. Для этого надо указать имя файла в папке назначения. Например, для того чтобы скопировать файл file1 в папку destination с именем file10 нужно выполнить такую команду:

cp file1 destination/file10

Таким же способом можно создать копию файла в той же папке.

2. Копирования файла в папку

Если вам не нужно менять имя файла или надо скопировать несколько файлов, то можно просто указать папку, куда их копировать не указывая имя файла. Например, для того чтобы скопировать файл file1 в папку destination с тем же именем выполните:

cp file1 destination/

Причём в конце команды слеш ставить не обязательно. Утилита и так поймет что это папка.

3. Копирование папки в папку

Для копирования папок нужно использовать опцию -r (—recursive). Скопировать одну папку в другую довольно просто, если папка назначения существует. Для того чтобы скопировать папку source в папку destination выполните команду:

cp -r source destination

Или можно явно указать, что нужно именно скопировать source в destination с помощью опции -t:

cp -t file1 destination

Тогда, если папка destination не существует вы получите ошибку, вместо не очевидного поведения.

4. Копирование содержимого папки в папку

Для копирования содержимого одной директории в другую можно воспользоваться первым вариантом синтаксиса. Команда выглядит аналогичной предыдущему примеру, но она будет работать только если папки назначения не существует. Например, для того чтобы скопировать содержимое папки source в папку destination1 нужно использовать такую команду:

cp -r source destination1/

Если папка назначения существует, то в ней будет создана папка source. Для того чтобы избежать такого поведения можно использовать опцию -T:

cp -rT source destination/

Или же можно явно указать, что вас интересует именно копирование содержимого папки с помощью символа *. Например:

cp source/* destination

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

5. Обработка существующих файлов

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

cp -i file1 destination

С помощью опции -n можно никогда не перезаписывать существующие файлы:

cp -n file1 destination

Кроме того, для существующих файлов можно делать резервную копию с помощью опции -b или —backup. Например, если использовать опцию -b, то в конце названия файла резервной копии будет добавлен символ тильды

cp -b file1 destination

При использовании опции —backup можно настроить имя резервной копии, Вот доступные варианты:

  • none — резервная копия не делается;
  • numbered — к имени файла будет добавляться номер;
  • simple — в конец файла будет добавлен знак

Например, для того чтобы использовать номер в имени резервной копии используйте такую команду:

cp —backup=numbered file1 destination

Ещё один вариант обработки существующих файлов, который может быть полезен для больших файлов — заменять только если файл источник новее или файл в папке назначения не существует. Для этого нужно использовать опцию -u или —upgrade:

cp -u source/* destination

6. Копирование ссылок

В файловых системах Linux существует такое понятие как символические и жесткие ссылки. Команда cp может копировать их по разному. По умолчанию, как для жестких так и для символических ссылок создается копия файла, уже не связанная с оригиналом. Если вы хотите чтобы символические ссылки копировались именно как ссылки, то нужно использовать опцию -P:

cp -P link1 destination

Для жестких ссылок существует другой подход. Если вы хотите чтобы жесткая ссылка осталась ссылкой после копирования, нужно использовать опцию —preserve со значением links:

cp —preserve=links hlink1 destination

7. Сохранение атрибутов при копировании

По умолчанию cp обновляет временные метки и атрибуты прав доступа файлов при копировании. Но иногда может возникнуть необходимость сохранить оригинальные значения атрибутов. Для этого можно использовать опцию —preserve. Вот её возможные параметры:

  • mode — права доступа, сюда входит чтение, запись, выполнение и дополнительные флаги;
  • ownership — владелец и группа;
  • time‐stamps — временные метки, такие как дата обновления, дата создания и дата последнего доcтупа;
  • context — контекст SELinux;
  • links — сохранение жестких ссылок;
  • xattr — дополнительные атрибуты, которые настраиваются с помощью команды chattr;
  • all — всё выше перечисленное.

Если вы хотите оставить оригинального владельца и права доступа используйте опцию —preserve со значением mode,ownership или же опцию -p:

cp -p source/* destination

Если надо сохранить всю структуру файловой системы, в том числе символические и жесткие ссылки и временные метки, то можно использовать опцию -a:

cp -a source/* destination

8. Копирование и Copy-on-Write

Некоторые новые файловые системы, такие как Btrfs и ZFS поддерживают технологию Copy-on-Write. При её использовании, фактическое копирование данных из файла будет происходить только при его изменении. Эта функция работает в рамках одной файловой системы и сильно ускоряет копирование файлов. Но зато, их изменение может быть немного замедлено. По умолчанию cp использует Copy-on-Write только начиная с версии CoreUtils 9.0. но вы можете включить или отключить её вручную с помощью опции —reflink. Вот доступные значения:

  • always — всегда использовать, если не поддерживается будет выведена ошибка;
  • auto — использовать только если поддерживается;
  • never — никогда не использовать.

Например, для того чтобы включить обязательное использование CoW добавьте —reflink=always в команду копирования:

cp -reflink=always file3 destination

9. Обработка разреженных файлов

Разреженные файлы, это файлы которые содержат последовательности нулевых байт и в них эти последовательности заменены на их описание. Это актуально для образов дисков Qemu или VirtualBox, которые могут содержать много пустого места, которое не обязательно записывать на диск. По умолчанию, cp создает разреженные файлы только если файл источник разрежен. Однако можно настроить его таким образом, чтобы все файлы содержащие последовательности нулей делались разреженными. Настроить это поведение можно с помощью опции —sparse. Вот возможные значения:

  • auto — используется по умолчанию;
  • never — делать разреженные файлы не разрежеными;
  • always — делать файлы разреженными если они содержат достаточное количество нулевых байт.

В качестве примера можно создать образ на основе /dev/zero размером 20 мегабайт:

dd if=/dev/zero of=image1 count=20 bs=1M

Если скопировать этот файл с опцией —sparse=always, то он станет разреженным и будет занимать значительно меньше места на диске:

cp —sparse=always ./image1 /destination

Выводы

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *