Введение
Файловая система Linux предоставляет мощные инструменты для управления вашими файлами и каталогами. Одной из самых важных команд, которую вы будете регулярно использовать, является команда cp, которая позволяет копировать файлы и каталоги из одного места в другое.
В этой лабораторной работе вы научитесь использовать команду cp для копирования отдельных файлов и нескольких файлов одновременно. Этот фундаментальный навык имеет решающее значение для резервного копирования данных, организации вашей файловой системы и эффективного управления вашей средой Linux.
К концу этой лабораторной работы вы сможете уверенно использовать команду cp с различными опциями для удовлетворения ваших потребностей в копировании файлов.
Создание каталогов и файлов
Прежде чем мы сможем попрактиковаться в копировании файлов, нам нужно создать несколько каталогов и файлов для работы. На этом шаге вы создадите структуру каталогов и несколько примеров файлов.
Сначала перейдите в каталог проекта, в котором вы будете работать:
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 байт).
На данный момент ваша структура каталогов выглядит так:
~/project/
└── data-files/
├── apple.txt
├── orange.txt
└── grape.txt
Мы будем работать с этими файлами на следующих шагах, и вы узнаете, как копировать их в разные места.
Копирование одного файла
На этом шаге вы научитесь копировать один файл из одного места в другое с помощью команды cp.
Основной синтаксис команды cp выглядит следующим образом:
cp [options] source_file destination
Где:
source_file- это файл, который вы хотите скопироватьdestination- это место, куда вы хотите скопировать файл (может быть каталогом или новым именем файла)
В данный момент мы находимся в каталоге data-files. Давайте добавим немного содержимого в наш файл apple.txt, чтобы мы могли убедиться, что содержимое скопировано правильно:
echo "This is sample content for the apple file." > apple.txt
Символ > перенаправляет вывод команды echo в файл, перезаписывая любое существующее содержимое.
Теперь давайте скопируем файл apple.txt в родительский каталог (который является ~/project) с новым именем:
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.
Это подтверждает, что наш файл был успешно скопирован с сохранением его содержимого.
После этой операции ваша структура каталогов теперь выглядит так:
~/project/
├── data-files/
│ ├── apple.txt
│ ├── orange.txt
│ └── grape.txt
└── apple_copy.txt
Копирование нескольких файлов одновременно
На этом шаге вы научитесь копировать несколько файлов одновременно в новый каталог. Это особенно полезно, когда вам нужно создать резервную копию или организовать несколько файлов одновременно.
Сначала давайте вернемся в каталог проекта (так как в данный момент мы находимся в каталоге data-files):
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, используя подстановочный знак (wildcard):
cp data-files/*.txt backup/
В этой команде:
cp- это команда копированияdata-files/*.txtиспользует подстановочный знак*для сопоставления всех файлов с расширением.txtв каталогеdata-filesbackup/- это целевой каталог, куда мы хотим скопировать файлы
Давайте убедимся, что все файлы были скопированы правильно, перечислив содержимое каталога 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.
Это подтверждает, что все наши файлы были успешно скопированы в каталог backup с сохранением их содержимого.
После этой операции ваша структура каталогов теперь выглядит так:
~/project/
├── data-files/
│ ├── apple.txt
│ ├── orange.txt
│ └── grape.txt
├── backup/
│ ├── apple.txt
│ ├── orange.txt
│ └── grape.txt
└── apple_copy.txt
Расширенные параметры копирования файлов
На этом шаге вы узнаете о некоторых полезных параметрах команды cp, которые могут сделать ваши задачи по копированию файлов более эффективными.
Начнем с возврата в каталог проекта:
cd ~/project
Сохранение атрибутов файла с помощью -p
При копировании файлов может потребоваться сохранить исходные атрибуты файла, такие как временные метки (timestamps), права собственности (ownership) и разрешения (permissions). Опция -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 (yes), чтобы перезаписать, или n (no), чтобы отменить.
Эти расширенные параметры делают команду cp еще более мощной и гибкой для ваших нужд управления файлами.
Резюме
В этой лабораторной работе вы научились эффективно использовать команду cp в Linux для копирования файлов и каталогов. Вы начали с основ создания каталогов и файлов, а затем перешли к копированию отдельных файлов и нескольких файлов одновременно.
Основные рассмотренные концепции:
Базовое копирование файлов: Использование команды
cpдля копирования одного файла из одного места в другое.cp source_file destinationКопирование нескольких файлов: Использование подстановочных знаков (wildcards) для копирования нескольких файлов одной командой.
cp source_directory/*.txt destination_directory/Расширенные параметры (Advanced Options):
-p: Сохранение атрибутов файла (временных меток, разрешений и т. д.)-r: Рекурсивное копирование каталогов и их содержимого-i: Интерактивный режим для предотвращения случайных перезаписей
Эти навыки копирования файлов являются основополагающими для эффективного управления файлами в Linux. Независимо от того, создаете ли вы резервные копии важных файлов, организуете свои каталоги или развертываете приложения, команда cp станет важным инструментом в вашем наборе инструментов Linux.
Помните, что командная строка Linux предлагает множество мощных инструментов для манипулирования файлами, и команда cp - лишь один из них. Продолжая свое путешествие в Linux, вы обнаружите, как эти инструменты можно комбинировать для эффективного выполнения сложных файловых операций.



