Создать, скопировать, переименовать, удалить и не потерять нужное
nano*, ?, [...]mkdir создаёт каталог. Если промежуточных каталогов нет, нужна опция -p (parents) — она создаст всю цепочку и не будет ругаться, если каталог уже есть:
$ mkdir project
$ mkdir a/b/c
mkdir: cannot create directory ‘a/b/c’: Нет такого файла или каталога
$ mkdir -p project/docs project/src
touch создаёт пустой файл, а если файл есть — обновляет время его изменения. Посмотреть дерево целиком — ls -R (или программа tree, её ставят отдельно, модуль 06):
$ touch project/README.md project/src/main.c
$ ls -R project
project:
docs README.md src
project/docs:
project/src:
main.c
README без расширения и notes.txt одинаково текстовые. Узнать, что внутри на самом деле, — команда file (раздел 07).Порядок аргументов у обеих команд одинаковый: откуда, куда. Если последний аргумент — существующий каталог, файлы кладутся в него под прежними именами.
$ cp project/README.md project/docs/ # копия в каталог
$ cp project/README.md /tmp/readme-old.md # копия под новым именем
$ cp project/docs project/docs2
cp: не указан -r; пропускается каталог 'project/docs'
$ cp -r project/docs project/docs2 # каталог — только с -r
mv и перемещает, и переименовывает: в Linux это одна операция — поменять путь к файлу.
$ mv project/docs2 project/old-docs # переименовать
$ mv /tmp/readme-old.md project/old-docs/ # переместить
cp и mv молча перезаписывают файл с тем же именем в месте назначения. Опция -i спрашивает подтверждение, -n запрещает перезапись. Копировать с сохранением прав и дат — cp -a: так делают резервные копии.В командной строке нет корзины. Удалённый rm файл не восстановить штатными средствами — только из резервной копии.
$ rm project/old-docs/readme-old.md # файл
$ rm project/old-docs
rm: невозможно удалить 'project/old-docs': Это каталог
$ rmdir project/src # rmdir удаляет только пустой каталог
rmdir: не удалось удалить 'project/src': Каталог не пуст
$ rm -r project/old-docs # каталог со всем содержимым
rmdir безопаснее: он откажется удалять каталог, в котором что-то осталось. rm -r удаляет всё дерево без вопросов, а с -f (force) — даже защищённые от записи файлы и без сообщений об ошибках.
rm -rf перечитайте строку целиком. Лишний пробел превращает rm -rf ./build в rm -rf . /build — удаление текущего каталога. Привычка: сначала ls с теми же аргументами, потом заменить ls на rm. Для неуверенных случаев — rm -ri: подтверждение на каждый файл.Выбор команды зависит от размера файла и от того, что нужно увидеть.
| Команда | Когда использовать |
|---|---|
cat файл | Короткий файл целиком, на один экран |
less файл | Длинный файл: листание, поиск /, выход q — как в man |
head -n 20 файл | Первые 20 строк (без -n — 10) |
tail -n 20 файл | Последние 20 строк — свежие записи журнала |
tail -f файл | Следить за файлом: новые строки появляются по мере записи, выход Ctrl+C |
wc -l файл | Сколько строк (-w — слов, -c — байт) |
$ seq 1 30 > n.txt # файл с числами 1…30, перенаправление — модуль 07
$ head -3 n.txt
1
2
3
$ tail -3 n.txt
28
29
30
$ wc -l n.txt
30 n.txt
Не открывайте cat большой файл или двоичную программу: на экран выльются тысячи строк или мусор, способный сбить настройки терминала (помогает команда reset). Незнакомый файл сначала проверьте: file, wc -l, head.
Конфигурация Linux — это текстовые файлы, поэтому редактор нужен с первого дня. В Debian по умолчанию стоит nano: команды подписаны внизу экрана, ^ означает Ctrl.
$ nano project/README.md
| Клавиши | Действие |
|---|---|
| Ctrl+O, Enter | Сохранить (Write Out) |
| Ctrl+X | Выйти; если есть несохранённое, спросит: Y — сохранить, N — нет |
| Ctrl+W | Найти |
| Ctrl+K / Ctrl+U | Вырезать строку / вставить |
| Alt+U | Отменить действие |
На серверах встретится и vim. Если вы случайно в него попали, выйти без сохранения: Esc, затем :q! и Enter. Редактор по умолчанию для системных команд меняется так: sudo update-alternatives --config editor.
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak. Ошибка в конфигурации может остановить службу, а копия возвращает рабочее состояние одной командой.Чтобы работать сразу с группой файлов, в именах используют шаблоны. Их раскрывает оболочка до запуска команды: ls получает уже готовый список имён.
| Шаблон | Совпадает с | Пример |
|---|---|---|
* | Любое число любых символов | *.txt — все файлы на .txt |
? | Ровно один символ | ?.txt — a.txt, но не ab.txt |
[abc] | Один символ из перечисленных | [ab].txt — a.txt, b.txt |
[0-9] | Один символ из диапазона | log[0-9] — log1…log9 |
$ ls
a.txt b.txt c.log report-2026.txt
$ ls *.txt
a.txt b.txt report-2026.txt
$ ls ?.txt
a.txt b.txt
$ echo *.md # совпадений нет — шаблон остаётся как есть
*.md
Посмотреть, во что раскроется шаблон, проще всего через echo: так проверяют шаблон перед rm. Шаблоны не совпадают со скрытыми файлами: * не включит .bashrc.
Содержимое файла и его имя хранятся отдельно. Данные и сведения о файле (размер, права, владелец) лежат в индексном дескрипторе — inode с уникальным номером. Имя в каталоге лишь указывает на inode.
Жёсткая ссылка (ln) — второе имя того же inode. Символическая ссылка (ln -s) — отдельный маленький файл, внутри которого записан путь, как ярлык в Windows.
$ ln n.txt hard # жёсткая ссылка
$ ln -s n.txt link # символическая
$ ls -li n.txt hard link
71926 -rw-rw-r-- 2 student student 81 окт 14 21:35 hard
71930 lrwxrwxrwx 1 student student 5 окт 14 21:35 link -> n.txt
71926 -rw-rw-r-- 2 student student 81 окт 14 21:35 n.txt
Опция -i показывает номер inode. У n.txt и hard он один, и счётчик ссылок (третье поле) равен 2. Удалим исходное имя:
$ rm n.txt
$ head -2 hard # данные живы: осталось второе имя
1
2
$ cat link # ярлык указывает в пустоту
cat: link: Нет такого файла или каталога
$ file hard link /bin/ls
hard: ASCII text
link: broken symbolic link to n.txt
/bin/ls: ELF 64-bit LSB pie executable, x86-64, ...
| Жёсткая ссылка | Символическая ссылка | |
|---|---|---|
| Что это | Ещё одно имя того же inode | Файл с путём к другому файлу |
| Удалили оригинал | Данные доступны по второму имени | Ссылка «битая» |
| На каталог | Нельзя | Можно |
| На другой диск | Нельзя | Можно |
| Где встречается | Резервные копии без дублирования данных | Повсюду: /etc/os-release, включение сайтов nginx, версии библиотек |
Файл удаляется с диска, только когда счётчик ссылок станет нулевым и его не держит открытым ни одна программа.
mkdir -p создаёт цепочку каталогов; touch — пустой файлcp и mv: сначала откуда, потом куда; каталог копируется с -r, с сохранением прав — -arm -r проверьте аргументы через ls или echoless, начало и конец — head и tail, журнал в реальном времени — tail -f* ? [...] раскрывает оболочка, скрытые файлы в них не попадают