Отправляет email-рассылки с помощью сервиса Sendsay

KirovLUG: пользователи Linux в Вятке

Чтиво: офис и дом, часть 004

Полезные утилиты. UU- и base64-кодирование.

Иногда, необходимо передавать информацию используя только ограниченный
набор символов (как вариант, только печатаемых английских). Примером
этому может послужить передача некоторого бинарного кода в тексте
электронного письма без использования функции attach почтового клиента,
потому что вложения запрещены в дискуссионных листах. Для этого нам
может помочь утилита uuencode. Для извлечения информации обратно -
uudecode.

Итак, пусть есть файлик foo.bin. Для того чтобы закодировать его можно
выполнить следующий набор команд:

$ uuencode foo.bin foo.bin > foo.bin.uu

или с использованием конвеера

$ cat foo.bin | uuencode /dev/stdout > foo.bin.uu

Теперь содержимое файлика foo.bin.uu можно смело вставлять в письмо.

Для раскодировки соответственно (естественно, содержимое файлика
foo.bin.uu нужно извлечь из письма):

$ uudecode foo.bin.uu

или

$ cat foo.bin.uu | uudecode > foo.bin

Если UU-кодирование не нравится - используем base64 (в моих тестах это
кодирование занимало меньше места), с применением ключа "-m":

$ cat foo.bin | uuencode -m /dev/stdout > foo.bin.64
$ cat foo.bin.64 | uudecode > foo.bin

Также можно задать использование программ сжатия (архивирования):

$ cat foo.bin | gzip -c | uuencode -m /dev/stdout > foo.bin.gz.64
$ cat foo.bin | bzip2 -c | uuencode -m /dev/stdout > foo.bin.bz2.64

Или, если foo - директория, тогда

$ tar cf - foo | bzip2 -c | uuencode -m /dev/stdout > foo.tar.bz2.64

тогда, раскодирование:

$ cat foo.bin.gz.64 | uudecode | gzip -d -c > foo.bin
$ cat foo.bin.bz2.64 | uudecode | bzip2 -d -c > foo.bin
$ cat foo.tar.bz2.64 | uudecode | bzip2 -d -c | tar xf -

Итогом может послужить создание самараспаковывыющегося исполняемого
файла на языке shell (спасибо за идею Александру Гордиенко):

скрипт для создания самораспаковывающегося архива

begin makeself.sh #!/bin/sh

if [ "$#" -eq "0" ]; then
echo Usage: makeself.sh file\|dir
fi

FILE_OU=$1.sh

if [ -d $1 ]; then

cat <<EOF > $FILE_OU
#!/bin/sh

cat <<tEOF | uudecode | bzip2 -d -c | tar xf -
EOF
tar cf - $1 | bzip2 -c | uuencode -m /dev/stdout >> $FILE_OU
echo "tEOF" >> $FILE_OU
chmod a+x $FILE_OU

elif [ -f $1 ]; then

cat <<EOF > $FILE_OU
#!/bin/sh

EOF
echo "cat <<tEOF | uudecode | bzip2 -d -c > $1" >> $FILE_OU
bzip2 -c $1 | uuencode -m /dev/stdout >> $FILE_OU
echo "tEOF" >> $FILE_OU
chmod a+x $FILE_OU

else
exit 0
fi
end makeself.sh после запуска команды

$ makeself.sh myfile

создастся скрипт myfile.sh, а после запуска

$ makeself.sh mydir

создастся скрипт mydir.sh, а после запуска

Например, вот какой файл получился после выполнения

$ makeself.sh makeself.sh

begin makeself.sh.sh #!/bin/sh

cat <<tEOF | uudecode | bzip2 -d -c > makeself.sh
begin-base64 664 /dev/stdout
QlpoOTFBWSZTWWLby+0AAErfgAAQfAvwHwMkgg6/7/9UMAESy2ElKeo09DQj
QNBpo0aAA9QJJI0CMjQ00ABo0GgAKlFTxRtQ9TQ2kDIGgPU0DR0LOTaBhoRi
th/GCAifOwXUuQtd3dW2yW7PgyTzTENKxU6kuPSJsZEoCeZayG8V/kxkZLNt
dDuTA91BPOMbsBjSqNFSroai1iDsMQnU2JpYoF50ZPwz/EtPQ2V7opJnWNR7
oyHDC3FGSMhtRci8wpLEUfuziajbLT2KMcKy86FDArhQHFspNyD5B4NL8x0U
g+ERhb4p9KWQiueidRisIiN31fgnvzX6lQUUkChTDgzFASjwe0hwws0zcouu
MXi7GDSpLDrVL25WuJUf3+LuSKcKEgxbeX2g
tEOF
end makeself.sh.sh --
C уважением, Kolotov Alexandr aka mr. Эбола
отвечать: akmypo***@m*****.ru
ICQ: 100349254

| Registered Linux user # 236664 |
-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.linux.kirovlug
Написать в лист: mailto:comp.soft.linux.kirovlug-list@subscribe.ru
Отписать: mailto:comp.soft.linux.kirovlug--unsub@subscribe.ru

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Tue, 7 Sep 2004 15:53:02 +0400 (#225693)