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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 41 42 43 44 45 46 47 48 49 ... 96

bash$ cksum /boot/vmlinuz

1670054224 804083 /boot/vmlinuz

bash$ md5sum /boot/vmlinuz

0f43eccea8f09e0a0b2b5cf1dcf333ba /boot/vmlinuz

Обратите внимание: утилита cksum выводит контрольную сумму и размер файла в байтах.

Пример 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.

Пример 12-30. Декодирование файлов

#!/bin/bash

lines=35 # 35 строк для заголовка (более чем достаточно).

for File in * # Обход всех файлов в текущем каталоге...

do

search1=`head -$lines $File | grep begin | wc -w`

search2=`tail -$lines $File | grep end | wc -w`

# Закодированные файлы начинаются со слова "begin",

#+ и заканчиваются словом "end".

if [ "$search1" -gt 0 ]

then

if [ "$search2" -gt 0 ]

then

echo "декодируется файл - $File -"

uudecode $File

fi

fi

done

# Обратите внимание: если передать сценарию самого себя, для декодирования,

#+ то это введет его в заблуждение

#+ поскольку в тексте сценария встречаются слова "begin" и "end".

exit 0

При декодировании и выводе длинных текстовых сообщений из новостных групп Usenet, очень нелишним будет передать текст, по конвейеру, команде fold -s.

mimencode, mmencode

Утилиты mimencode и mmencode предназначены для обработки закодированных мультимедийных вложений в электронные письма. Хотя почтовые программы (такие как pine или kmail) имеют возможность автоматической обработки таких вложений, тем не менее эти утилиты позволяют обрабатывать вложения вручную, из командной строки или в пакетном режиме, из сценария на языке командной оболочки.

crypt

Одно время, это была стандартная, для UNIX, утилита шифрования файлов.[ 31 ] Политически мотивированные, правительственные постановления ряда стран, напрямую запрещают экспорт программного обеспечения для шифрования, что, в результате, привело практически к полному исчезновению crypt из большинства UNIX-систем (в том числе и Linux). К счастью, программистами было разработано множество вполне приличных альтернатив, и среди них cruft (см. Пример A-5).

Прочее

mktemp

Создает временный файл с "уникальным" именем.

PREFIX=filename

tempfile=`mktemp $PREFIX.XXXXXX`

# ^^^^^^ Необходимо по меньшей мере 6 заполнителей

echo "имя временного файла = $tempfile"

# имя временного файла = filename.QA2ZpY

# или нечто подобное...

make

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

Команда make использует в своей работе Makefile, который содержит перечень зависимостей и операций, которые необходимо выполнить для удовлетворения этих зависимостей.

install

Своего рода -- утилита копирования файлов, похожа на cp, но дополнительно позволяет изменять права доступа и атрибуты копируемых файлов. Напрямую эта команда практически не используется, чаще всего она встречается в Makefile (в разделе make install :). Она может использоваться в сценариях установки ПО.

dos2unix

Автор утилиты -- Benjamin Lin со-товарищи. Предназначена для преобразования текстовых файлов из формата DOS (в котором строки завершаются комбинацией символов CR-LF) в формат UNIX (в котором строки завершаются одним символом LF) и обратно.

ptx

Команда ptx [targetfile] выводит a упорядоченный предметный указатель для targetfile, который можно обработать, по мере необходимости, какой либо утилитой форматирования, в конвейере.

more, less

Команды постраничного просмотра текстовых файлов или потоков на stdout. Могут использоваться в сценариях в качестве фильтров.

12.6. Команды для работы с сетью

Команды, описываемые в этом разделе, могут найти применение при исследовании и анализе процессов передачи данных по сети, а также могут использоваться в борьбе со спамерами.

Информация и статистика

host

Возвращает информацию об узле Интернета, по заданному имени или IP адресу, выполняя поиск с помощью службы DNS.

bash$ host surfacemail.com

surfacemail.com. has address 202.92.42.236

1 ... 41 42 43 44 45 46 47 48 49 ... 96
На этой странице вы можете бесплатно читать книгу Искусство программирования на языке сценариев командной оболочки - Мендель Купер бесплатно.
Похожие на Искусство программирования на языке сценариев командной оболочки - Мендель Купер книги

Оставить комментарий