Полезные утилиты. 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