ОП.05Файлы, маски, поиск и справказанятие 4Материалы

Часть 1 из 7

Каталоги и файлы

В этой части создадим рабочий каталог занятия, пустые файлы и учебный набор файлов. На этом наборе построены все следующие части.

  1. 1.1 Создание каталога: mkdir
  2. 1.2 Пустой файл и время изменения: touch
  3. 1.3 Учебный набор файлов

1.1 Создание каталога: mkdir

Работа с файлами в терминале начинается с места, где эти файлы будут лежать. На прошлом занятии мы разбирали, что у каждого пользователя есть домашний каталог /home/имя и свои файлы держат в нём. Для этого занятия создадим в домашнем каталоге отдельный каталог files-lab. Все опыты занятия выполняются внутри него, поэтому системные файлы они не затрагивают.

Каталог создаёт команда mkdir (make directory — «создать каталог»). Ей передаётся имя или путь нового каталога. Если путь состоит из нескольких уровней, например site/css, то все каталоги, кроме последнего, уже должны существовать: mkdir создаёт только последний элемент пути и сообщает об ошибке, если предыдущего нет.

Когда промежуточных каталогов нет, нужен ключ -p (parents — «родительские каталоги»). С ним mkdir создаёт весь путь по порядку: сначала site, затем site/css. Если каталог уже есть, ошибки тоже не будет. Поэтому mkdir -p пишут в скриптах, которые запускаются повторно.

Это похоже на расстановку книг по полкам: поставить книгу на полку «css» в шкафу «site» можно только тогда, когда шкаф уже стоит в комнате. Ключ -p означает «если шкафа нет, сначала поставь его».

В терминалеКаталог занятия и структура сайта
  1. cd ~# домашний каталог
    что делает

    Что делает команда. Переходит в домашний каталог пользователя, у ubuntu это /home/ubuntu.

    По частям:

    cd
    сменить текущий каталог
    ~
    куда перейти (домашний каталог)
  2. mkdir files-lab# каталог занятия
    что делает

    Что делает команда. Создаёт каталог files-lab в текущем каталоге.

    По частям:

    mkdir
    создать каталог
    files-lab
    какой каталог создать
  3. cd files-lab
    что делает

    Что делает команда. Переходит в каталог files-lab, который лежит в текущем каталоге.

    По частям:

    cd
    сменить текущий каталог
    files-lab
    куда перейти
  4. mkdir site/css# каталога site ещё нет
    что делает

    Что делает команда. Пытается создать каталог css внутри site. Каталога site ещё нет, поэтому команда завершается ошибкой.

    По частям:

    mkdir
    создать каталог
    site/css
    какой каталог создать (путь относительно текущего каталога)
  5. mkdir -p site/css site/img# весь путь, два каталога
    что делает

    Что делает команда. Создаёт каталог site и в нём два каталога: css и img. Недостающий site создаётся автоматически.

    По частям:

    mkdir
    создать каталог
    -p
    создать и все промежуточные каталоги; не выдавать ошибку, если каталог уже есть
    site/css
    какой каталог создать (путь относительно текущего каталога)
    site/img
    какой каталог создать (путь относительно текущего каталога)
  6. touch site/index.html site/css/style.css# два пустых файла
    что делает

    Что делает команда. Создаёт два пустых файла: index.html в каталоге site и style.css в каталоге site/css.

    По частям:

    touch
    создать пустой файл или обновить время изменения
    site/index.html
    какой файл (путь относительно текущего каталога)
    site/css/style.css
    какой файл (путь относительно текущего каталога)
  7. ls
    что делает

    Что делает команда. Показывает имена файлов и каталогов в текущем каталоге, кроме скрытых.

    По частям:

    ls
    вывести содержимое каталога
  8. tree# структура в виде дерева
    что делает

    Что делает команда. Рисует дерево каталогов и файлов, начиная с текущего каталога, и в конце печатает их количество.

    По частям:

    tree
    нарисовать дерево каталогов
Результат

без -p появляется ошибка No such file or directory, с -p каталоги созданы; tree выводит 4 каталога и 2 файла.

Снимок 1.1Ubuntu 24.04
  1. 1каталога site нет, и mkdir сообщает об ошибке
  2. 2ключ -p создаёт недостающий каталог site
  3. 3tree рисует дерево от текущего каталога «.»
  4. 4итог: 4 каталога вместе с «.» и 2 файла
Без ключа -p команда mkdir не создаёт промежуточный каталог; tree показывает получившуюся структуру.Весь снимок ↗

Без ключа -p команда mkdir не создаёт промежуточный каталог; tree показывает получившуюся структуру.

Что показывает снимок. mkdir без -p не смог создать site/css, потому что каталога site не было; с -p созданы все каталоги, а tree нарисовал результат.

Где это пригодится. Структуру нового проекта — каталоги для исходного кода, стилей, изображений — создают одной командой mkdir -p. Её же пишут в скриптах установки: повторный запуск не вызывает ошибки.

1.2 Пустой файл и время изменения: touch

В предыдущем примере файлы index.html и style.css появились после команды touch. У неё два действия. Если файла нет, touch создаёт пустой файл размером 0 байт. Если файл есть, его содержимое не меняется, а время последнего изменения становится текущим.

Время изменения хранится в inode файла вместе с размером и правами, мы разбирали это на прошлом занятии. Команда ls -l выводит его в каждой строке. По этому времени программы определяют, какие файлы изменились: программа резервного копирования копирует только новые файлы, система сборки пересобирает только изменённые исходные файлы. Поэтому touch применяют и для того, чтобы отметить существующий файл как изменённый.

Ключ -d записывает файлу заданное время изменения вместо текущего; содержимое файла по-прежнему не меняется. На этом построен учебный набор следующего раздела: часть файлов в нём помечена датами мая и августа, и в части 5 мы будем искать старые файлы по времени изменения.

Ключ --time-style=+%T у ls выводит время с секундами: в обычном выводе разница в несколько секунд не видна. Для файлов старше полугода ls -l выводит год вместо времени, поэтому после touch -d в строке стоит 2026.

В терминалеВремя изменения файла
  1. cd ~/files-lab
    что делает

    Что делает команда. Переходит в каталог занятия files-lab из любого места.

    По частям:

    cd
    сменить текущий каталог
    ~/files-lab
    куда перейти (путь от домашнего каталога)
  2. ls -l --time-style=+%T site/index.html# время с секундами
    что делает

    Что делает команда. Выводит подробную строку о файле index.html; время изменения показано с секундами.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    --time-style=+%T
    выводить время изменения с секундами (формат %T — часы:минуты:секунды)
    site/index.html
    что показать (путь относительно текущего каталога)
  3. touch site/index.html# файл есть: меняется только время
    что делает

    Что делает команда. Файл уже существует, поэтому его содержимое не меняется, а время изменения становится текущим.

    По частям:

    touch
    создать пустой файл или обновить время изменения
    site/index.html
    какой файл (путь относительно текущего каталога)
  4. ls -l --time-style=+%T site/index.html
    что делает

    Что делает команда. Выводит подробную строку о файле index.html; время изменения показано с секундами.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    --time-style=+%T
    выводить время изменения с секундами (формат %T — часы:минуты:секунды)
    site/index.html
    что показать (путь относительно текущего каталога)
  5. touch -d "2026-01-15 09:00" site/index.html# записать заданную дату
    что делает

    Что делает команда. Записывает файлу index.html время изменения 15 января 2026 года, 09:00; содержимое не меняется.

    По частям:

    touch
    создать пустой файл или обновить время изменения
    -d "2026-01-15 09:00"
    записать заданную дату и время: "2026-01-15 09:00"
    site/index.html
    какой файл (путь относительно текущего каталога)
  6. ls -l site/index.html
    что делает

    Что делает команда. Выводит подробную строку о файле index.html: права, владелец, размер, дата изменения.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    site/index.html
    что показать (путь относительно текущего каталога)
Результат

после touch время стало позже; после touch -d в строке стоит Jan 15 2026; размер файла по-прежнему 0.

Снимок 1.2Ubuntu 24.04
  1. 1время после создания файла
  2. 2touch записал текущее время
  3. 3touch -d записал заданную дату
  4. 4размер 0: содержимое не изменилось
touch меняет время изменения файла и не трогает содержимое.Весь снимок ↗

touch меняет время изменения файла и не трогает содержимое.

Что показывает снимок. Первый touch изменил только время файла, размер остался 0; touch -d записал дату 15 января 2026 года.

Где это пригодится. Время изменения используют программы резервного копирования и системы сборки. touch помогает отметить файл как изменённый или подготовить тестовые данные с нужными датами.

1.3 Учебный набор файлов

Для следующих частей нужен каталог с разными файлами: отчёты, фотографии, журналы, таблицы, резервные копии, скрытый файл и файл с пробелом в имени. Создавать его вручную долго, поэтому набор создаёт скрипт files-lab-setup.sh из материалов занятия.

Скрипт — это текстовый файл с командами оболочки. Команда bash имя-файла выполняет эти команды по порядку. Скрипт создаёт каталог ~/files-lab/inbox, а при повторном запуске удаляет только этот каталог и создаёт его заново. Так к исходному состоянию можно вернуться в любой момент, если в опытах что-то пошло не так.

Порядок действийПодготовка набора
  1. 1
    Скачайте files-lab-setup.sh, files-lab-check.sh и journal-template.md из раздела «Материалы» на странице занятия. Firefox в Ubuntu сохраняет файлы в каталог ~/Downloads.
  2. 2
    Откройте files-lab-setup.sh в текстовом редакторе и просмотрите команды. Скрипт из интернета запускают только после того, как прочитали, что он делает.
  3. 3
    Выполните bash ~/Downloads/files-lab-setup.sh. Скрипт выведет строку Ready: 28 files.
  4. 4
    Проверьте содержимое каталога командами ls и ls -A.

Ключ -A (almost all — «почти все») показывает скрытые файлы, имена которых начинаются с точки. В отличие от -a он не выводит служебные имена . и ... Ключ -h вместе с -l выводит размер в килобайтах и мегабайтах.

В терминалеСоздание набора
  1. cd ~/files-lab
    что делает

    Что делает команда. Переходит в каталог занятия files-lab из любого места.

    По частям:

    cd
    сменить текущий каталог
    ~/files-lab
    куда перейти (путь от домашнего каталога)
  2. bash ~/Downloads/files-lab-setup.sh# создать inbox
    что делает

    Что делает команда. Выполняет команды скрипта files-lab-setup.sh: создаёт каталог ~/files-lab/inbox с 28 учебными файлами.

    По частям:

    bash
    запустить оболочку bash и выполнить команды из файла
    ~/Downloads/files-lab-setup.sh
    файл скрипта (путь от домашнего каталога)
  3. ls inbox
    что делает

    Что делает команда. Показывает содержимое каталога inbox без скрытых файлов.

    По частям:

    ls
    вывести содержимое каталога
    inbox
    что показать
  4. ls -A inbox# вместе со скрытыми
    что делает

    Что делает команда. Показывает содержимое inbox вместе со скрытыми файлами, но без служебных имён . и ..

    По частям:

    ls
    вывести содержимое каталога
    -A
    показать скрытые файлы, кроме служебных . и ..
    inbox
    что показать
  5. ls -lh inbox/dump.bin inbox/photo-001.jpg# размеры в K и M
    что делает

    Что делает команда. Выводит подробные строки о двух файлах с размером в понятном виде: K, M.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    -h
    размеры в понятном виде: K, M, G
    inbox/dump.bin
    что показать (путь относительно текущего каталога)
    inbox/photo-001.jpg
    что показать (путь относительно текущего каталога)
Результат

скрипт сообщает о 28 файлах; в выводе ls -A появляется .settings; dump.bin занимает 5.0M.

Снимок 1.3Ubuntu 24.04
  1. 1скрипт создал 28 файлов
  2. 2скрытый .settings виден только с ключом -A
  3. 3имя с пробелом ls берёт в кавычки
  4. 4размеры в понятном виде: 5.0M и 40K
Каталог inbox после запуска скрипта: обычный и полный список, размеры двух файлов.Весь снимок ↗

Каталог inbox после запуска скрипта: обычный и полный список, размеры двух файлов.

Что показывает снимок. Скрипт создал 28 файлов; скрытый .settings появился только в выводе ls -A; ls -lh показал размеры 5.0M и 40K.

Где это пригодится. Скрытые файлы с точкой — это обычно настройки программ. Если в каталоге «нет» файла, о котором говорит инструкция, сначала проверяют ls -A.

Итоги части 1

  • mkdir создаёт каталог; с ключом -p — весь путь и без ошибки, если каталог уже есть.
  • touch создаёт пустой файл или обновляет время изменения существующего; -d записывает заданную дату.
  • ls -A показывает скрытые файлы, ls -lh — размеры в K и M.
  • Скрипт files-lab-setup.sh возвращает каталог inbox в исходное состояние.

В отчётСнимок tree с каталогом site и снимок ls -A inbox.

Открыть в отдельной вкладке ↗