Создать и поправить
Файлы и папки в терминале создают, копируют, переносят и удаляют несколькими короткими командами. Начнём с создания.
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/ # перенести в папку
Переименования как отдельной команды в 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 уже не знает про звёздочку — ей передан готовый список имён.
Отсюда самый полезный приём урока: проверить шаблон до действия. Замените опасную команду на 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удаляет всё, до чего дотянется, молча. Им пользуются, когда точно знают, что делают, и никогда — с путём, который не проверили.
Порядок безопасного удаления — третье правило курса по шагам:
pwd— я там, где думаю?lsс тем же путём или шаблоном — удалится ровно это?- если ценное — копия или хотя бы перенос во временную папку вместо удаления;
- только теперь
rm.
Для ежедневной работы в своём компьютере есть и мягкий вариант — вместо rm переносить ненужное в папку вроде ~/trash и чистить её раз в неделю. Это самодельная корзина, и она не раз спасёт.