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

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

В этом практическом занятии (LabEx) вы научитесь использовать команду cp для копирования отдельных файлов и нескольких файлов сразу. Эта фундаментальная навык является важной для резервного копирования данных, организации файловой системы и эффективного управления средой Linux.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/cp("File Copying") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") subgraph Lab Skills linux/echo -.-> lab-271253{{"Копирование файлов в Linux"}} linux/ls -.-> lab-271253{{"Копирование файлов в Linux"}} linux/touch -.-> lab-271253{{"Копирование файлов в Linux"}} linux/cp -.-> lab-271253{{"Копирование файлов в Linux"}} linux/cat -.-> lab-271253{{"Копирование файлов в Linux"}} linux/cd -.-> lab-271253{{"Копирование файлов в Linux"}} linux/mkdir -.-> lab-271253{{"Копирование файлов в Linux"}} end

Создание каталогов и файлов

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

Сначала перейдите в проектный каталог, где вы будете работать:

cd ~/project

Теперь создадим каталог с именем data-files, который будет содержать наши примеры файлов:

mkdir data-files

После выполнения этой команды вы не должны увидеть никакого вывода, что является нормальным для многих команд Linux при успешном выполнении.

Далее перейдем в этот новый каталог:

cd data-files

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

touch apple.txt orange.txt grape.txt

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

Проверим, были ли наши файлы успешно созданы, выведя содержимое текущего каталога:

ls -l

Вы должны увидеть вывод, похожий на следующий:

total 0
-rw-r--r-- 1 labex labex 0 [date] apple.txt
-rw-r--r-- 1 labex labex 0 [date] grape.txt
-rw-r--r-- 1 labex labex 0 [date] orange.txt

Вывод показывает, что мы успешно создали три пустых файла (размер файлов равен 0 байт).

Копирование одного файла

На этом этапе вы научитесь копировать один файл из одного места в другое с использованием команды cp.

Базовый синтаксис команды cp выглядит следующим образом:

cp [параметры] исходный_файл назначение

Где:

  • исходный_файл - это файл, который вы хотите скопировать
  • назначение - это место, куда вы хотите скопировать файл (может быть каталогом или новым именем файла)

Начнем с того, чтобы убедиться, что мы находимся в каталоге data-files:

cd ~/project/data-files

Теперь добавим некоторое содержимое в наш файл apple.txt, чтобы мы могли проверить, что содержимое скопируется правильно:

echo "This is sample content for the apple file." > apple.txt

Символ > перенаправляет вывод команды echo в файл, перезаписывая любое существующее содержимое.

Теперь скопируем файл apple.txt в родительский каталог с новым именем:

cp apple.txt ../apple_copy.txt

Разберем эту команду:

  • cp - это команда копирования
  • apple.txt - это исходный файл, который мы хотим скопировать
  • ../apple_copy.txt указывает, что мы хотим скопировать в родительский каталог (..) с новым именем файла apple_copy.txt

Проверим, был ли файл скопирован правильно, проверив его содержимое:

cat ../apple_copy.txt

Вы должны увидеть следующий вывод:

This is sample content for the apple file.

Это подтверждает, что наш файл был успешно скопирован с сохранением его содержимого.

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

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

Сначала вернемся в проектный каталог:

cd ~/project

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

mkdir backup

Перед копированием файлов добавим некоторое содержимое в оставшиеся текстовые файлы, чтобы лучше проверить процесс копирования:

echo "This is sample content for the orange file." > data-files/orange.txt
echo "This is sample content for the grape file." > data-files/grape.txt

Теперь скопируем все текстовые файлы из каталога data-files в каталог backup с использованием шаблона с подстановочным символом:

cp data-files/*.txt backup/

В этой команде:

  • cp - это команда копирования
  • data-files/*.txt использует подстановочный символ * для сопоставления всех файлов с расширением .txt в каталоге data-files
  • backup/ - это целевой каталог, куда мы хотим скопировать файлы

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

ls -l backup/

Вы должны увидеть вывод, похожий на следующий:

total 12
-rw-r--r-- 1 labex labex 41 [date] apple.txt
-rw-r--r-- 1 labex labex 41 [date] grape.txt
-rw-r--r-- 1 labex labex 42 [date] orange.txt

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

cat backup/orange.txt

Вы должны увидеть:

This is sample content for the orange file.

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

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

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

Начнем с того, что вернемся в проектный каталог:

cd ~/project

Сохранение атрибутов файла с помощью параметра -p

При копировании файлов вы, возможно, захотите сохранить исходные атрибуты файла, такие как временные метки, владелец и права доступа. Параметр -p позволяет сделать это:

cp -p data-files/apple.txt backup/apple_preserved.txt

Сравним исходный файл и сохраненную копию:

ls -l data-files/apple.txt backup/apple.txt backup/apple_preserved.txt

Вы заметите, что backup/apple_preserved.txt имеет ту же временную метку, что и исходный файл, в то время как backup/apple.txt (который мы скопировали ранее без параметра -p) имеет более новую временную метку.

Создание рекурсивных копий с помощью параметра -r

Для копирования каталогов вместе с их содержимым необходимо использовать параметр -r (рекурсивный). Создадим вложенную структуру каталогов, чтобы продемонстрировать это:

mkdir -p data-files/nested/deep
echo "This is a nested file." > data-files/nested/nested_file.txt
echo "This is a deep nested file." > data-files/nested/deep/deep_file.txt

Теперь скопируем весь каталог data-files и его содержимое в новое место:

cp -r data-files data-files-backup

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

find data-files-backup -type f | sort

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

data-files-backup/apple.txt
data-files-backup/grape.txt
data-files-backup/nested/deep/deep_file.txt
data-files-backup/nested/nested_file.txt
data-files-backup/orange.txt

Интерактивный режим с помощью параметра -i

При копировании файлов вы можете случайно перезаписать существующие файлы. Параметр -i (интерактивный) запрашивает подтверждение перед перезаписью любого файла:

cp -i data-files/apple.txt backup/apple.txt

Поскольку backup/apple.txt уже существует, вы увидите запрос, спрашивающий, хотите ли вы его перезаписать:

cp: overwrite 'backup/apple.txt'?

Вы можете ответить y для перезаписи или n для отмены.

Эти продвинутые параметры делают команду cp еще более мощной и гибкой для ваших потребностей в управлении файлами.

Резюме

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

Покрытые ключевые концепции:

  1. Базовое копирование файлов: Использование команды cp для копирования одного файла из одного места в другое.

    cp source_file destination
  2. Копирование нескольких файлов: Использование подстановочных символов для копирования нескольких файлов одной командой.

    cp source_directory/*.txt destination_directory/
  3. Продвинутые параметры:

    • -p: Сохранение атрибутов файла (временные метки, права доступа и т. д.)
    • -r: Рекурсивное копирование каталогов и их содержимого
    • -i: Интерактивный режим для предотвращения случайной перезаписи

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

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