Модуль 03 — Файлы и каталоги

Создать, скопировать, переименовать, удалить и не потерять нужное

Прогресс курса Модуль 3 из 9

Что вы освоите в этом модуле

01

Создать: mkdir и touch

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
Расширение в Linux — часть имени, а не тип файла. Файл README без расширения и notes.txt одинаково текстовые. Узнать, что внутри на самом деле, — команда file (раздел 07).
02

Копировать и перемещать: cp и mv

Порядок аргументов у обеих команд одинаковый: откуда, куда. Если последний аргумент — существующий каталог, файлы кладутся в него под прежними именами.

$ 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: так делают резервные копии.
03

Удалить: rm и rmdir

В командной строке нет корзины. Удалённый 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: подтверждение на каждый файл.
04

Просмотр: cat, less, head, tail

Выбор команды зависит от размера файла и от того, что нужно увидеть.

КомандаКогда использовать
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.

05

Редактор nano

Конфигурация 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. Ошибка в конфигурации может остановить службу, а копия возвращает рабочее состояние одной командой.
06

Шаблоны имён

Чтобы работать сразу с группой файлов, в именах используют шаблоны. Их раскрывает оболочка до запуска команды: 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.

07

Ссылки и тип файла

Содержимое файла и его имя хранятся отдельно. Данные и сведения о файле (размер, права, владелец) лежат в индексном дескрипторе — 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, с сохранением прав — -a
  • Корзины нет: перед rm -r проверьте аргументы через ls или echo
  • Большие файлы — less, начало и конец — head и tail, журнал в реальном времени — tail -f
  • Шаблоны * ? [...] раскрывает оболочка, скрытые файлы в них не попадают
  • Жёсткая ссылка — второе имя данных, символическая — ярлык с путём
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Модуль 02: Терминал Все модули Модуль 04: Права