open atlas
↑ К треку
Командная строка CLI · 02 · 02

Создание, копирование, перемещение и удаление

mkdir создаёт каталоги, cp копирует файлы (-r для деревьев), mv перемещает или переименовывает, rm удаляет навсегда — корзины нет. rm -rf — самая опасная команда новичка: необратимо уничтожает целые деревья каталогов.

CLI Основы ◷ 22 min
Уровень
ОсновыJuniorMiddleSenior

Навигация по файловой системе — это только половина дела. Настоящая работа означает создание каталогов проекта, копирование конфигурационных файлов, переименование результатов и очистку временных файлов. Четыре команды охватывают всё это: mkdir, cp, mv и rm. Одна из них — rm с двумя флагами — самая разрушительная команда, с которой сталкивается новичок. Тебе нужны все четыре, и нужно знать, какая из них не имеет отмены.

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

Цель

После этого урока ты сможешь использовать mkdir-p для вложенных каталогов), cp-r для каталогов), mv (как для перемещения, так и для переименования) и rm-r и -f с чётким пониманием риска). Ты сможешь предсказать результат каждой команды до её запуска.

1

mkdir создаёт каталог. Передай одно или несколько имён — и она создаст их в текущем каталоге (или по указанному пути):

mkdir projects
mkdir /tmp/sandbox

Флаг -p (parents) создаёт все промежуточные каталоги сразу и не выдаёт ошибку, если они уже существуют. Без -p создание a/b/c при отсутствии a/b завершится ошибкой:

# завершается ошибкой, если projects/ ещё не существует
mkdir projects/backend/src

# успешно: создаёт projects/, projects/backend/, projects/backend/src/
mkdir -p projects/backend/src

-p — это флаг, который ты будешь использовать почти каждый раз при создании вложенных путей в скриптах.

2

cp копирует файлы. Синтаксис: cp ИСТОЧНИК НАЗНАЧЕНИЕ:

cp notes.txt notes-backup.txt        # копировать в том же каталоге
cp notes.txt /tmp/notes.txt          # копировать в другой каталог
cp /etc/hosts ~/hosts-backup         # скопировать системный файл домой

Если НАЗНАЧЕНИЕ — существующий каталог, а не путь к файлу, cp помещает копию внутрь этого каталога, сохраняя исходное имя файла:

cp notes.txt backups/    # создаёт backups/notes.txt

Чтобы скопировать каталог и всё его содержимое, добавь -r (recursive — рекурсивно):

cp -r projects/ projects-backup/

Без -r попытка скопировать каталог вызывает ошибку: cp: omitting directory 'projects/'.

3

mv перемещает или переименовывает. Синтаксис: mv ИСТОЧНИК НАЗНАЧЕНИЕ. Когда НАЗНАЧЕНИЕ находится в том же каталоге — это переименование. Когда НАЗНАЧЕНИЕ — другой каталог — это перемещение. Когда НАЗНАЧЕНИЕ — другой каталог и другое имя — это и то, и другое:

mv draft.txt final.txt               # переименовать на месте
mv final.txt ~/documents/            # переместить в documents/
mv draft.txt ~/documents/final.txt   # переместить и переименовать

В отличие от cp, mv не оставляет оригинал. На одной файловой системе mv мгновенна — она просто обновляет запись в каталоге (данные не копируются). Между файловыми системами mv копирует, а затем удаляет.

4

rm удаляет файлы навсегда — корзины нет. В отличие от графического файлового менеджера, rm не отправляет файлы в восстанавливаемое место. Как только они удалены, они исчезают навсегда (если только нет резервной копии или инструментов для форензики):

rm old-log.txt
rm /tmp/scratch.txt

Чтобы удалить каталог и всё его содержимое, добавь -r (рекурсивно). Добавь -f (force — принудительно), чтобы подавить запросы подтверждения и игнорировать отсутствующие файлы:

rm -r old-project/
rm -rf temp/

Комбинация -rf мощна и необратима. Смотри Inset ниже.

Разбор примера

Создание структуры проекта с нуля.

# 1. Создать дерево каталогов одной командой
mkdir -p myapp/src myapp/tests myapp/docs
# 2. Проверить
ls myapp/
docs  src  tests
# 3. Скопировать шаблонный файл конфигурации в проект
cp /etc/hostname myapp/docs/hostname-reference.txt
# 4. Переименовать конфиг во что-то понятное
mv myapp/docs/hostname-reference.txt myapp/docs/server-info.txt
# 5. Очистить устаревший временный файл
rm myapp/docs/server-info.txt

Каждый шаг детерминирован: mkdir -p никогда не выдаёт ошибку, если дерево уже существует; cp всегда оставляет источник нетронутым; mv удаляет источник; rm удаляет цель навсегда.

Частая ошибка

rm -rf необратима и игнорирует все защитные механизмы.

-r означает «рекурсивно спуститься в каждый подкаталог». -f означает «принудительно: подавить все запросы и игнорировать отсутствующие файлы». Вместе они бесшумно удалят целое дерево каталогов — включая символические ссылки, указывающие за пределы дерева, и всё, на что у текущего пользователя есть права на запись.

Классическая катастрофа:

# Намерение: удалить каталог сборки 'dist'
rm -rf dist/

# Опечатка с пробелом: удаляет 'dist' И всё остальное в /
rm -rf dist /
#            ^ пробел перед /  →  два аргумента: "dist" и "/"

Пробел между dist и / превращает один аргумент в два. Оболочка видит rm -rf dist / — удалить dist, затем удалить / (корень файловой системы). На системе без защиты это уничтожает ОС.

Правила, которые нужно усвоить:

  1. Всегда делай echo пути перед rm -rf, если не уверен: echo rm -rf "$DIR".
  2. Определяй DIR в переменной и проверяй, что она не пустая, перед использованием.
  3. Используй rm -ri (интерактивно) при обучении — он спрашивает перед каждым удалением.
  4. Никогда не запускай rm -rf от root, пока не проверил каждый аргумент.
Почему это работает

На macOS cp и mv работают идентично. rm также не имеет корзины — тот же риск применим. Одно отличие: на macOS cp не поддерживает -r для рекурсивного копирования точно так же, как GNU cp; используй -R (заглавная R) на macOS, когда -r неоднозначен. В скриптах, нацеленных на обе системы, -R — безопасный выбор.

Проверь себя
Викторина

Ты запускаешь: cp report.pdf archive/. Каталог archive/ уже существует и пуст. Каков результат?

Итог

mkdir создаёт каталоги; добавь -p, чтобы создавать вложенные пути без ошибок. cp ИСТОЧНИК НАЗНАЧЕНИЕ копирует файлы и, с -r, целые деревья каталогов — источник всегда сохраняется. mv ИСТОЧНИК НАЗНАЧЕНИЕ перемещает или переименовывает; источник исчезает, а на одной файловой системе операция мгновенна. rm навсегда удаляет файлы — корзины нет. rm -rf — самая разрушительная распространённая команда: она рекурсивно и принудительно удаляет целые деревья без подтверждения и без возможности восстановления. Всегда проверяй аргументы перед её запуском, и используй rm -ri при сомнении.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 5 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources4
expand
  1. 01
  2. 02
  3. 03
  4. 04

Trademarks belong to their respective owners. Editorial reference only.