урок 3 из 10

Файлы и папки

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

8 мин чтения · 4 главы ·5 заданий ·домашняя работа

Создать и поправить

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

mkdir reports              # новая папка
mkdir -p site/css/fonts    # вся цепочка папок сразу
touch notes.txt            # пустой файл (или обновить дату существующего)

Ключ -p у mkdir создаёт недостающие промежуточные папки и не ругается, если папка уже есть. Без него команда потребует, чтобы site и site/css уже существовали.

Чтобы что-то написать в файл, нужен редактор. На любом Linux почти наверняка есть nano — простой редактор прямо в терминале. Подсказки по клавишам он показывает внизу экрана.

nano notes.txt
# Ctrl+O — сохранить, Enter — подтвердить имя
# Ctrl+X — выйти

Есть и более мощный vim, который встречается на серверах даже там, где nano нет. У него другой способ работы, и если вы случайно в нём оказались, выйти без сохранения можно так: клавиша Esc, затем набрать :q! и Enter. Это стоит запомнить заранее — вопрос «как выйти из vim» задают все.

Копировать и переносить

Копироватьcp, перенести или переименоватьmv. Обе принимают сначала то, что, потом — куда.

cp notes.txt notes-old.txt      # копия рядом под другим именем
cp notes.txt reports/           # копия в папку
cp -r site site-backup          # копия папки целиком
mv draft.txt final.txt          # переименовать
mv final.txt reports/           # перенести в папку
projectssiteindex.htmlstyle.csssite-backup — новая копияindex.htmlstyle.css
После cp -r site site-backup рядом появилась полная копия со всеми вложенными файлами. Без ключа -r команда cp откажется копировать папку.

Переименования как отдельной команды в Linux нет: переименовать — значит «перенести на новое имя в той же папке», поэтому это делает mv.

Главная опасность обеих команд — тихая перезапись. Если файл с таким именем уже есть в папке назначения, cp и mv заменят его, ничего не спросив. Старое содержимое пропадёт. Защищают ключи:

КлючЧто делает
-iспросить перед перезаписью
-nникогда не перезаписывать
-vпечатать, что сделано

Иногда нужна не копия, а ссылка — ярлык, который ведёт к настоящему файлу или папке. Её делает ln -s: сначала на что ссылаться, потом имя ярлыка. В подробном ls -l ссылка отмечена буквой l и стрелкой к цели. Удаление ссылки не трогает оригинал, а вот если удалить оригинал, ссылка останется «висеть» и будет вести в пустоту. На серверах так часто включают настройки: файл лежит в одной папке, а ссылка на него — в той, откуда программа читает включённое.

Шаблоны

Когда файлов много, их называют шаблонами. Самые нужные:

ШаблонПодходитПример
*любые знаки, сколько угодно*.log — все файлы на .log
?ровно один любой знакimg?.jpg — img1.jpg, imgA.jpg
[abc]один знак из перечисленныхreport[12].pdf

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

Вы пишете:rm *.logОболочкараскрываетшаблонrm получает:a.log b.logc.logУдаленоровно это
Прежде чем запустить rm, оболочка заменяет *.log на список подходящих имён. Команда получает уже готовый список — и удалит ровно его. Поэтому шаблон проверяют ls или echo до удаления.

Отсюда самый полезный приём урока: проверить шаблон до действия. Замените опасную команду на ls или echo с тем же шаблоном и посмотрите, что попадёт в список:

ls *.log          # что подходит под шаблон
echo rm *.log     # показать команду, которая выполнится, не выполняя её
rm *.log          # и только потом — удалить

Если под шаблон не подошло ни одного файла, bash обычно передаёт его команде как есть, и та честно скажет «нет такого файла». Это не поломка, а знак, что шаблон не совпал ни с чем.

Удалить безопасно

Удалениеrm. Команда простая, и именно поэтому о ней стоит говорить отдельно.

rm notes-old.txt          # удалить файл
rm -i *.tmp               # спрашивать про каждый
rm -r old-site            # удалить папку со всем содержимым
rmdir empty-folder        # удалить только пустую папку

Три вещи, которые нужно знать о rm:

  • корзины нет. Удалённое командой не лежит в корзине и обычно не возвращается;
  • -r удаляет всё внутри — все вложенные папки и файлы, без счёта;
  • -f подавляет вопросы и ошибки. Сочетание rm -rf удаляет всё, до чего дотянется, молча. Им пользуются, когда точно знают, что делают, и никогда — с путём, который не проверили.

Порядок безопасного удаления — третье правило курса по шагам:

  1. pwd — я там, где думаю?
  2. ls с тем же путём или шаблоном — удалится ровно это?
  3. если ценное — копия или хотя бы перенос во временную папку вместо удаления;
  4. только теперь rm.

Для ежедневной работы в своём компьютере есть и мягкий вариант — вместо rm переносить ненужное в папку вроде ~/trash и чистить её раз в неделю. Это самодельная корзина, и она не раз спасёт.

Задания урока

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

  1. Сопоставьте задачу и команду.легко
  2. cp спросит, прежде чем перезаписать существующий файл.средне
  3. Разложите файлы: подходят под шаблон *.log или нет.средне
  4. Заполните пропуски.средне
  5. Расставьте безопасное удаление.средне
Пройти урок с проверкой заданий Курс «Linux и командная строка» открыт и бесплатен, прогресс сохраняется.
Открыть курс