[БОНУСНОЕ] Написать скрипт, который по имени файла выдаст отчет по inode и блокам из которых состоит файл, отчет должен выглядеть примерно так посмотреть
Разработка под linux / подсказка к 2 задачке
Чтобы получить мета инфу файла
stat filename
выдаст что-то такое:
Файл: index.html
Размер: 18877 Блоков: 40 Блок В/В: 4096 обычный файл
Устройство: 802h/2050d Инода: 1251 Ссылки: 1
Доступ: (0664/-rw-rw-r--) Uid: ( 1000/ m) Gid: ( 1001/ m)
Доступ: 2022-02-14 13:00:11.843496966 +0800
Модифицирован: 2022-02-14 13:00:11.843496966 +0800
Изменён: 2022-02-14 13:00:11.843496966 +0800
Создан: -
Чтобы узнать inode файла воспользуйтесь следующим
stat -c "%i" file_name
чтобы получить список блоков, из которых состоит файл надо выполнить команду
sudo debugfs -R "blocks <file_inode_id>" 2>/dev/null /dev/sda2
чтобы вывести содержимое блока, например, с номером 68320 надо использовать следующую команду.
Чтобы вытащить содержимое конкретного блока надо использовать команду dd
, у нее есть следующий набор параметров
- if – название диска с которого читаете файли, если файла в папке home то должно быть /dev/sda2
- ibs – размер блока, на лекции рассказал про размер блока в lubuntu
- skip – собственно блок с которого хотим начать считать
- count – сколько блоков прочитать
то есть как-то так надо вызывать
sudo dd if=/dev/sda2 ibs=??? skip=??? count=1 2>/dev/null
для более удобного вывода блока использовать утилиту hd
которая выводит результат в удобном виде, для этого перенаправьте вывод в нее
sudo dd if=/dev/sda2 ibs=??? skip=??? count=1 2>/dev/null | hd
и получится вот так
кстати так как у вас будет список блоков, разделенных пробелом, то вам надо будет его обойти в цикле. Для этого просто сделайте цикл по переменной — вот так
for block in $blocks
do
echo $block
done
2.2