Книга: Искусство программирования на языке сценариев командной оболочки

Пример 12-29. Проверка целостности файла

Пример 12-29. Проверка целостности файла

#!/bin/bash

# file-integrity.sh: Проверка целостности файлов в заданном каталоге

E_DIR_NOMATCH=70

E_BAD_DBFILE=71

dbfile=File_record.md5

# Файл для хранения контрольных сумм.

set_up_database ()

{

echo ""$directory"" > "$dbfile"

# Записать название каталога в первую строку файла.

md5sum "$directory"/* >> "$dbfile"

# Записать контрольные суммы md5 и имена файлов.

}

check_database ()

{

local n=0

local filename

local checksum

# ------------------------------------------- #

# Возможно эта проверка и не нужна,

#+ но лучше перестраховаться сейчас, чем жалеть об этом потом.

if [ ! -r "$dbfile" ]

then

echo "Не могу прочитать файл с контрольными суммами!"

exit $E_BAD_DBFILE

fi

# ------------------------------------------- #

while read record[n]

do

directory_checked="${record[0]}"

if [ "$directory_checked" != "$directory" ]

then

echo "Имя каталога не совпадает с записаным в файле!"

# Попытка использовать файл контрольных сумм для другого каталога.

exit $E_DIR_NOMATCH

fi

if [ "$n" -gt 0 ] # Не имя каталога.

then

filename[n]=$( echo ${record[$n]} | awk '{ print $2 }' )

# md5sum записывает в обратном порядке,

#+ сначала контрольную сумму, затем имя файла.

checksum[n]=$( md5sum "${filename[n]}" )

if [ "${record[n]}" = "${checksum[n]}" ]

then

echo "Файл ${filename[n]} не был изменен."

else

echo "ОШИБКА КОНТРОЛЬНОЙ СУММЫ для файла ${filename[n]}!"

# Файл был изменен со времени последней проверки.

fi

fi

let "n+=1"

done <"$dbfile" # Чтение контрольных сумм из файла.

}

# =================================================== #

# main ()

if [ -z "$1" ]

then

directory="$PWD" # Если каталог не задан,

else #+ то используется текущий каталог.

directory="$1"

fi

clear # Очистка экрана.

# ------------------------------------------------------------------ #

if [ ! -r "$dbfile" ] # Необходимо создать файл с контрольными суммами?

then

echo "Создание файла с контрольными суммами, ""$directory"/"$dbfile""."; echo

set_up_database

fi

# ------------------------------------------------------------------ #

check_database # Выполнить проверку.

echo

# Вывод этого сценария можно перенаправить в файл,

#+ это особенно полезно при проверке большого количества файлов.

# Более строгая проверка целостности файлов,

#+ может быть выполнена с помощью пакета "Tripwire",

#+ http://sourceforge.net/projects/tripwire/.

exit 0

Более творческий подход к использованию md5sum вы нйдете в Пример A-21.

shred

Надежное, с точки зрения безопасности, стирание файла, посредством предварительной, многократной записи в файл случайной информации, перед тем как удалить его. Эта команда имеет тот же эффект, что и Пример 12-42, но делает это более изящным и безопасным способом.

Является составной частью пакета GNU fileutils.


Имеется ряд технологий, с помощью которых все-таки возможно восстановить файлы, удаленные утилитой shred.

Кодирование и шифрование

uuencode

Эта утилита используется для кодирования двоичных файлов в символы ASCII, после такого кодирования файлы могут, с достаточной степенью безопасности, передаваться по сети, вкладываться в электронные письма и т.п..

uudecode

Утилита декодирования файлов, прошедших обработку утилитой uuencode.

Оглавление книги


Генерация: 1.084. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз