Skip to content

Лекція 18. Формати файлів і розширення

Лекція 18. Формати файлів і розширення

Section titled “Лекція 18. Формати файлів і розширення”

Рівень 4: Хранитель файлів

Марко, сьогодні ми не просто вивчимо новий термін — ми відкриємо ще один шар того, як насправді працює комп’ютер.

Що ми сьогодні розкриємо

Section titled “Що ми сьогодні розкриємо”
  • розуміти, що формат — це правила організації байтів
  • не плутати формат із розширенням
  • побачити початок файлу у шістнадцятковому вигляді

Зв’язок з попередніми лекціями

Section titled “Зв’язок з попередніми лекціями”

У цій лекції ми використаємо знання про файли з лекції 17, щоб зрозуміти, як програми домовляються про формат даних.

Формат — домовленість між програмами

Section titled “Формат — домовленість між програмами”

Файл — це байти, але програма має знати, як їх читати. Формат описує структуру: де заголовок, де дані, як записані числа, кольори чи блоки тексту.

PNG, JPEG, ZIP, PDF, WAV — різні формати. Вони можуть зберігати різні типи інформації й мають різні внутрішні правила.

Розширення — підказка в імені

Section titled “Розширення — підказка в імені”

.png, .txt, .py — це частина імені файлу після крапки. Розширення допомагає людині й програмам швидко здогадатися про формат. Але перейменування cat.jpg у cat.txt не перетворює JPEG-байти на текст.

Сигнатури та заголовки

Section titled “Сигнатури та заголовки”

Багато форматів починаються характерними байтами. Їх інколи називають magic bytes або сигнатурою. Команда file використовує такі ознаки разом з іншими правилами.

Для дослідження байтів зручно дивитися hex — шістнадцятковий запис, де один байт компактно представлений двома цифрами від 00 до ff.

Якщо скопіювати program.py у program.jpg, байти не зміняться. file program.jpg все одно може впізнати текст.

Шістнадцяткове 41 відповідає десятковому 65 — коду ASCII-символу A, який ми вже зустрічали.

PNG-файли мають характерний початок, а ZIP — інший. Це дає програмам додаткову підказку про формат.

Linux-лабораторія: заглядаємо всередину

Section titled “Linux-лабораторія: заглядаємо всередину”

У папці з минулої лекції:

Terminal window
cd ~/marko-lab/files
cp hello.txt fake.jpg
file fake.jpg
xxd hello.txt | head
xxd fake.jpg | head

Ти побачиш: перейменований файл має ті самі байти. Якщо xxd не встановлено, можна використати od -An -tx1 hello.txt.

Виконай місію по черзі. Якщо щось не виходить — спочатку перечитай приклад вище й спробуй знайти, на якому кроці результат відрізняється.

  1. створи копію program.py під назвою program.png і перевір file
  2. порівняй перші байти оригіналу й копії через xxd
  3. зміни текст усередині копії та подивися, чи зміниться hex-вивід
  4. поясни різницю між форматом і розширенням
  5. знайди у xxd hello.txt hex-коди букв слова Hello та зв’яжи хоча б одну з ASCII-кодом
  • Що таке формат файлу?
  • Чи змінює перейменування байти файлу?
  • Навіщо потрібне розширення?
  • Що таке сигнатура формату?
  • Для чого зручно використовувати xxd?
  • Формат файлу — правила, за якими впорядковані байти (PNG, ZIP, PDF…).
  • Заголовок — початок файлу, де часто записана службова інформація про формат.
  • Сигнатура / magic bytes — характерні байти на початку, за якими впізнають формат.
  • Розширення — підказка в імені після крапки; не змінює вміст.
  • Hex (шістнадцятковий запис) — компактний запис байта двома цифрами від 00 до ff.
  • xxd — команда, що показує байти файлу в hex-вигляді.

Чек-лист перед наступною лекцією

Section titled “Чек-лист перед наступною лекцією”
  • Чи можеш ти пояснити, що таке magic bytes та hex-подання?
  • Чи знаєш ти, як використовувати xxd для перегляду вмісту файлу?
  • Чи розумієш ти, як програми визначають формат файлу?

Що потрібно винести з лекції

Section titled “Що потрібно винести з лекції”
  • формат задає правила читання байтів
  • розширення — лише підказка в імені
  • hex-представлення дозволяє людині компактно дивитися на байти

Хакерський принцип: не запам’ятовуй магічні слова. Намагайся пояснити своїми словами, що відбулося і чому.