Linux mini-HOWTO

         

Скрипт msinfo.sh


Этот скрипт анализирует загрузочный сектор заданного раздела и выдает различную информацию, включая "Общее Количество Специальных Секторов". Скрипт предполагает, что на данном разделе установлена файловая система FAT16. Если это не так, он выдаст сообщение об ошибке и прекратит работу. Скрипт запускается следующим образом

# msinfo

Для запуска этого скрипта вам понадобится программа "dialog", которая может выводить диалоговые окна на экран. Вы можете найти ее здесь.

#!/bin/sh # # msinfo.sh Этот скрипт показывает содержание загрузочного # сектора заданного раздела. # This shell script displays the boot sector of the # given partition. # # Автор: Rahul U. Joshi # Перевод: Станислав Рогин # # Изменения Убрано использование команды expr, замененной на команду let # Modifications Removed the use of expr and replaced it by the let # command.

# проверяем параметры командной строки # check for command line arguments if [ $# -ne 1 ]; then echo "Использование: msinfo " exit 1 fi

# проверяем, является ли входной файл блочным устройством # check whether the input name is a block device if [ ! -b $1 ]; then echo "msinfo: $1 не является блочным устройством" exit 1 fi

# создаем два временных файла # create two temporary files for use TMPFILE=`mktemp -q /tmp/$0.XXXXXX` if [ $? -ne 0 ]; then echo "msinfo: Не могу создать временный файл, прекращаю работу..." exit 1 fi

TXTFILE=`mktemp -q /tmp/$0.XXXXXX` if [ $? -ne 0 ]; then echo "msinfo: Не могу создать временный файл, прекращаю работу..." rm -f $TMPFILE exit 1 fi

backtitle="`printf "%78s" "msinfo, Информация о файловой системе FAT16 -- Rahul Joshi"`"

dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --infobox "\nАнализирую загрузочный сектор $1\nПодождите..." 14 60

# создаем пустой текстовый файл TXTFILE # truncate TXTFILE to zero length echo > $TXTFILE

# Получаем версию форматировавшей DOS # get Formatting DOS version dd 2>/dev/null if=$1 bs=1 count=8 skip=3 | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %s\n" "Версия форматировавшей DOS" "`cat $TMPFILE`"


# Получаем файловую систему # get file system dd 2>/dev/null if=$1 bs=1 count=8 skip=54 | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %s\n" "Файловая система" "`cat $TMPFILE`"
# проверяем, является ли файловая система FAT16 # check if filesystem in a FAT16 if [ "`cat $TMPFILE`" != "FAT16 " ]; then dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --infobox "\nФайловая система $1 не является FAT16" 14 60 exit 2 fi
# Получаем метку тома из загрузочного сектора # get volume label in boot sector dd 2>/dev/null if=$1 bs=1 count=11 skip=43 | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %s\n" "Метка тома в загрузочном секторе" "`cat $TMPFILE`"


# Получаем размер сектора # get Sector size dd 2>/dev/null if=$1 bs=1 count=2 skip=11| od -An -tdS | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %d\n" "Размер сектора" `cat $TMPFILE` sector_size=`cat $TMPFILE`
# Получаем количество резервных секторов # get Reserved sectors dd 2>/dev/null if=$1 bs=1 count=2 skip=14| od -An -tdS | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %d\n" " Резервные сектора" `cat $TMPFILE` reserved_sectors=`cat $TMPFILE`
# Получаем количество секторов FAT # get FAT sectors dd 2>/dev/null if=$1 bs=1 count=1 skip=16| od -An -tdS | dd 2>/dev/null of=$TMPFILE fat_count=`cat $TMPFILE`
dd 2/dev/null if=$1 bs=1 count=2 skip=22| od -An -tdS | dd 2>/dev/null of=$TMPFILE sectors_per_fat=`cat $TMPFILE`
# расчитываем количество секторов, занимаемых FAT # calculate the no of sectors allocated for FAT's let fat_sectors=fat_count*sectors_per_fat
printf >>$TXTFILE "%30s : %u (%u x %u) \n" "Секторов FAT" "$fat_sectors" "$fat_count" "$sectors_per_fat"
# Получаем количество секторов в корневом каталоге # get root directory sectors dd 2>/dev/null if=$1 bs=1 count=2 skip=17| od -An -tdS | dd 2>/dev/null of=$TMPFILE root_sectors=`cat $TMPFILE`
# расчитываем количество секторов, занимаемых корневым каталогом # calculate the no of sectors allocated for root directory let root_sectors=root_sectors*32/sector_size
printf >$TXTFILE "%30s : %u\n" "Секторов корневого каталога" "$root_sectors"
# получаем Общее Количество Специальных Секторов # get Total special sectors let total=reserved_sectors+fat_sectors+root_sectors printf >>$TXTFILE "%30s : %u\n" "Всего специальных секторов" "$total"
# вывод информации dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --msgbox "`cat $TXTFILE`" 14 60
# удаление временных файлов # delete temporary files rm -f $TMPFILE rm -f $TXTFILE
# end of msinfo.sh


Содержание раздела