Лекція 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.
Приклади
Section titled “Приклади”Приклад 1
Section titled “Приклад 1”Якщо скопіювати program.py у program.jpg, байти не зміняться. file program.jpg все одно може впізнати текст.
Приклад 2
Section titled “Приклад 2”Шістнадцяткове 41 відповідає десятковому 65 — коду ASCII-символу A, який ми вже зустрічали.
Приклад 3
Section titled “Приклад 3”PNG-файли мають характерний початок, а ZIP — інший. Це дає програмам додаткову підказку про формат.
Linux-лабораторія: заглядаємо всередину
Section titled “Linux-лабораторія: заглядаємо всередину”У папці з минулої лекції:
cd ~/marko-lab/filescp hello.txt fake.jpgfile fake.jpgxxd hello.txt | headxxd fake.jpg | headТи побачиш: перейменований файл має ті самі байти. Якщо xxd не встановлено, можна використати od -An -tx1 hello.txt.
Місія для Марка
Section titled “Місія для Марка”Виконай місію по черзі. Якщо щось не виходить — спочатку перечитай приклад вище й спробуй знайти, на якому кроці результат відрізняється.
- створи копію
program.pyпід назвоюprogram.pngі перевірfile - порівняй перші байти оригіналу й копії через
xxd - зміни текст усередині копії та подивися, чи зміниться hex-вивід
- поясни різницю між форматом і розширенням
- знайди у
xxd hello.txthex-коди букв словаHelloта зв’яжи хоча б одну з ASCII-кодом
Перевір себе
Section titled “Перевір себе”- Що таке формат файлу?
- Чи змінює перейменування байти файлу?
- Навіщо потрібне розширення?
- Що таке сигнатура формату?
- Для чого зручно використовувати
xxd?
Терміни однією фразою
Section titled “Терміни однією фразою”- Формат файлу — правила, за якими впорядковані байти (PNG, ZIP, PDF…).
- Заголовок — початок файлу, де часто записана службова інформація про формат.
- Сигнатура / magic bytes — характерні байти на початку, за якими впізнають формат.
- Розширення — підказка в імені після крапки; не змінює вміст.
- Hex (шістнадцятковий запис) — компактний запис байта двома цифрами від
00доff. xxd— команда, що показує байти файлу в hex-вигляді.
Чек-лист перед наступною лекцією
Section titled “Чек-лист перед наступною лекцією”- Чи можеш ти пояснити, що таке magic bytes та hex-подання?
- Чи знаєш ти, як використовувати
xxdдля перегляду вмісту файлу? - Чи розумієш ти, як програми визначають формат файлу?
Що потрібно винести з лекції
Section titled “Що потрібно винести з лекції”- формат задає правила читання байтів
- розширення — лише підказка в імені
- hex-представлення дозволяє людині компактно дивитися на байти
Хакерський принцип: не запам’ятовуй магічні слова. Намагайся пояснити своїми словами, що відбулося і чому.