Первые полезные команды: смотреть, создавать, копировать, удалять
В прошлом уроке вы научились ориентироваться: знать, где вы, и перемещаться. Теперь начнём что-то делать с файлами. Шесть команд этого урока — это рабочая лошадка, которой пользуются каждый день годами: посмотреть содержимое файла, создать папку, скопировать, переместить, переименовать, удалить.
Все примеры мы делаем в безопасной песочнице — в новой папке, которую сами создадим. Так нельзя случайно навредить системе. Давайте сразу её и создадим.
mkdir — создать папку
mkdir (make directory) создаёт новую папку. Дадим ей имя sandbox и зайдём внутрь:
$ cd ~
$ mkdir sandbox
$ cd sandbox
$ pwd
/home/lev/sandbox
Папка создана, и мы внутри. Если нужно создать сразу вложенную цепочку папок, поможет флаг -p (parents):
$ mkdir -p data/raw/2026
$ ls -F
data/
Без -p команда mkdir data/raw/2026 ругалась бы: «нет такой папки data». Флаг -p создаёт всю цепочку сразу и не жалуется, если папка уже есть.
Создадим файл, чтобы было с чем играть
Чтобы потренироваться, нам нужен текстовый файл. Самый простой способ для новичка — команда echo со стрелкой >:
$ echo "first line" > notes.txt
$ ls -F
data/ notes.txt
Стрелка > означает «отправить вывод команды в файл». Здесь echo напечатал бы first line, но стрелка перехватила это и записала в notes.txt. Мы подробно разберём стрелки в модуле про перенаправление; сейчас просто пользуемся, чтобы создать файл.
Добавим ещё пару строк двойной стрелкой >> (она дописывает в конец, а не перезаписывает):
$ echo "second line" >> notes.txt
$ echo "third line" >> notes.txt
Одна стрелка > стирает файл и пишет заново. Две стрелки >> дописывают в конец. Перепутать их — частая ошибка новичка: написали > вместо >> и потеряли всё, что было в файле. Запомните: одна стрелка перезаписывает, две добавляют.
cat — показать файл целиком
cat печатает всё содержимое файла прямо в терминал. Для маленьких файлов это идеально:
$ cat notes.txt
first line
second line
third line
Имя cat происходит от concatenate (сцепить) — команда умеет склеивать несколько файлов в один вывод, но чаще всего ей просто смотрят один файл. Подойдёт для коротких файлов в десяток-другой строк.
less — листать большой файл
А вот если файл большой — на тысячи строк — cat вывалит всё разом, и вы увидите только последний экран. Для таких файлов есть less. Он открывает файл в режиме просмотра, где можно листать:
$ less /etc/services
Внутри less работают клавиши:
- Стрелки вверх/вниз или колесо мыши — листать построчно.
- Пробел — следующая страница.
/и слово, затем Enter — поиск по тексту.q— выйти обратно в терминал.
Главное, что нужно запомнить про less: выход — это клавиша q. Новички часто «застревают» в less, не понимая, как вернуться. Просто нажмите q.
cp — скопировать
cp (copy) делает копию файла. Сначала исходник, потом имя копии:
$ cp notes.txt notes-backup.txt
$ ls -F
data/ notes-backup.txt notes.txt
Появилась копия notes-backup.txt, оригинал на месте. Чтобы скопировать папку целиком (со всем содержимым), нужен флаг -r (recursive — рекурсивно, то есть вместе со всем внутри):
$ cp -r data data-copy
$ ls -F
data/ data-copy/ notes-backup.txt notes.txt
Без -r команда отказалась бы копировать папку. Запомните: папки копируются с -r.
mv — переместить или переименовать
mv (move) делает две вещи сразу, в зависимости от того, что вы укажете. Если цель — другая папка, файл переезжает туда. Если цель — новое имя, файл переименовывается. Это одна и та же операция «дать файлу новый адрес».
$ mv notes-backup.txt notes-old.txt # переименование
$ ls -F
data/ data-copy/ notes-old.txt notes.txt
$ mv notes-old.txt data/ # перемещение в папку data
$ ls -F data
notes-old.txt raw/
В первом случае мы дали файлу новое имя (он остался на месте). Во втором — переместили его внутрь папки data. Никакого -r для папок тут не нужно: mv перемещает папки так же легко, как файлы.
rm — удалить (осторожно!)
rm (remove) удаляет файл. И вот здесь начинается самая опасная часть урока.
В терминале НЕТ корзины. Когда вы удаляете файл через rm, он исчезает навсегда — его не восстановить через «Корзину», как в графической системе. Дважды проверяйте, что именно вы удаляете, ОСОБЕННО если используете флаг -r (удалить папку со всем содержимым) и звёздочку * (все файлы). Команда rm -rf способна стереть огромные объёмы данных за долю секунды и без единого вопроса.
Удалим один файл — это безопасно и обычно:
$ rm notes.txt
$ ls -F
data/ data-copy/
Файл notes.txt исчез. Чтобы удалить папку со всем содержимым, нужен -r:
$ rm -r data-copy
$ ls -F
data/
Для новичка есть отличная страховка — флаг -i (interactive). Он спрашивает подтверждение перед каждым удалением:
$ rm -i data/notes-old.txt
rm: remove regular file 'data/notes-old.txt'? y
Вы отвечаете y (yes) или n (no). Пока вы не уверены в себе, привычка писать rm -i спасёт вас не раз. Никогда не запускайте rm -rf на пути, который не прочитали глазами дважды — особенно если в нём есть ~ или / в начале.
Попробуй сам
Соберём всё вместе в одной безопасной тренировке. Скопируйте команды по очереди:
$ cd ~
$ mkdir -p practice/backup # создаём песочницу с подпапкой
$ cd practice
$ echo "hello linux" > greeting.txt
$ cat greeting.txt # смотрим, что записалось
hello linux
$ cp greeting.txt backup/ # копируем в подпапку
$ ls -F backup
greeting.txt
$ mv greeting.txt hello.txt # переименовываем оригинал
$ ls -F
backup/ hello.txt
$ rm -i hello.txt # удаляем с подтверждением (ответьте y)
$ ls -F
backup/
Когда закончите играть, можно убрать за собой всю песочницу одной командой (прочитайте путь дважды перед Enter):
$ cd ~
$ rm -r practice
Вы только что прошли полный жизненный цикл файла: создали, посмотрели, скопировали, переименовали, удалили. Это 80 процентов ежедневной работы с файлами в терминале.