KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Мендель Купер - Искусство программирования на языке сценариев командной оболочки

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Мендель Купер, "Искусство программирования на языке сценариев командной оболочки" бесплатно, без регистрации.
Перейти на страницу:

TeX, gs

TeX и Postscript -- языки разметки текста, используемые для подготовки текста к печати или выводу на экран.

TeX -- это сложная система подготовки к печати, разработанная Дональдом Кнутом (Donald Knuth). Эту утилиту удобнее использовать внутри сценария, чем в командной строке, поскольку в сценарии проще один раз записать все необходимые параметры, передаваемые утилите, для получения необходимого результата.

Ghostscript (gs) -- это GPL-версия интерпретатора Postscript.

groff, tbl, eqn

groff -- это еще один язык разметки текста и форматированного вывода. Является расширенной GNU-версией пакета roff/troff в UNIX-системах.

tbl -- утилита обработки таблиц, должна рассматриваться как составная часть groff, так как ее задачей является преобразование таблиц в команды groff.

eqn -- утилита преобразования математических выражений в команды groff.

lex, yacc

lex -- утилита лексического разбора текста. В Linux-системах заменена на свободно распространяемую утилиту flex.

yacc -- утилита для создания синтаксических анализаторов, на основе набора грамматик, задаваемых разработчиком. В Linux-системах, эта утилита заменена на свободно распространяемую утилиту bison.


12.5. Команды для работы с файлами и архивами

Архивация

tar

Стандартная, для UNIX, утилита архивирования. Первоначально -- это была программа Tape ARchiving, которая впоследствии переросла в универсальный пакет, который может работать с любыми типами устройств (см. Пример 3-4). В GNU-версию tar была добавлена возможность одновременно производить сжатие tar-архива, например команда tar czvf archive_name.tar.gz * создает tar-архив дерева подкаталогов и вызывает gzip для выполнения сжатия, исключение составляют скрытые файлы в текущем каталоге ($PWD)[ 30 ].

Некоторые, часто используемые, ключи команды tar:

1. -c -- создать (create) новый архив

2. -x -- извлечь (extract) файлы из архива

3. --delete -- удалить (delete) файлы из архива

Этот ключ игнорируется для накопителей на магнитной ленте.

4. -r -- добавить (append) файлы в существующий архив

5. -A -- добавить (append) tar-файлы в существующий архив

6. -t -- список файлов в архиве (содержимое архива)

7. -u -- обновить (update) архив

8. -d -- операция сравнения архива с заданной файловой системой

9. -z -- обработка архива с помощью gzip

(Сжатие или разжатие, в зависимости от комбинации сопутствующих ключей -c или -x)

10. -j -- обработка архива с помошью bzip2


При восстановлении "битых" tar.gz архивов могут возникнуть определенные сложности, поэтому делайте несколько резервных копий.

shar

Утилита создания shell-архива. Архивируемые файлы объединяются в единый файл без выполнения сжатия, в результате получается архив -- по сути полноценный сценарий на языке командной оболочки, начинающийся со строки #!/bin/sh, который содержит полный набор команд, необходимый для разархивирования. Такого рода архивы до сих пор можно найти в некоторых телеконференциях в Internet, но в последнее время они активно вытесняются связкой tar/gzip. Для распаковки shar-архивов предназначена команда unshar.

ar

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

rpm

Red Hat Package Manager, или rpm -- набор утилит, предназначенных для построения и обслуживания пакетов программного обеспечения как в исходном коде, так и в собранном (откомпилированном) виде. Среди всего прочего, включает в себя утилиты, производящие установку ПО, проверку зависимостей пакетов и проверку их целостности.

Самый простой вариант установки ПО из rpm -- выполнить команду rpm -i package_name.rpm.

Команда rpm -qa выдаст полный список всех установленных rpm-пакетов в данной системе. Команда rpm -qa package_name выведет только пакет(ы) с именем, содержащим комбинацию символов package_name.

bash$ rpm -qa

redhat-logos-1.1.3-1

glibc-2.2.4-13

cracklib-2.7-12

dosfstools-2.7-1

gdbm-1.8.0-10

ksymoops-2.4.1-1

mktemp-1.5-11

perl-5.6.0-17

reiserfs-utils-3.x.0j-2

...


bash$ rpm -qa docbook-utils

docbook-utils-0.6.9-2


bash$ rpm -qa docbook | grep docbook

docbook-dtd31-sgml-1.0-10

docbook-style-dsssl-1.64-3

docbook-dtd30-sgml-1.0-10

docbook-dtd40-sgml-1.0-11

docbook-utils-pdf-0.6.9-2

docbook-dtd41-sgml-1.0-10

docbook-utils-0.6.9-2


cpio

Специализированная утилита архивации и копирования (copy input and output). Используется все реже и реже, поскольку вытесняется более мощным архиватором tar/gzip. Наиболее употребительна для таких операций, как перемещение дерева каталогов.

Пример 12-22. Пример перемещения дерева каталогов с помощью cpio

#!/bin/bash


# Копирование дерева каталогов с помощью cpio.


ARGS=2

E_BADARGS=65


if [ $# -ne "$ARGS" ]

then

echo "Порядок использования: `basename $0` source destination"

exit $E_BADARGS

fi


source=$1

destination=$2


find "$source" -depth | cpio -admvp "$destination"

# Информацию по ключам утилиты cpio вы найдете в страницах руководства "man cpio".


exit 0

rpm2cpio

Эта утилита конвертирует rpm-пакет в архив cpio.

Пример 12-23. Распаковка архива rpm

#!/bin/bash

# de-rpm.sh: Распаковка архива 'rpm'


: ${1?"Порядок использования: `basename $0` target-file"}

# Сценарию должно быть передано имя архива 'rpm'.


TEMPFILE=$$.cpio # Временный файл с "уникальным" именем.

# $$ -- PID процесса сценария.


rpm2cpio < $1 > $TEMPFILE # Конверсия из rpm в cpio.

cpio --make-directories -F $TEMPFILE -i # Рапсковка cpio-архива.

rm -f $TEMPFILE # Удаление cpio-архива.


exit 0


# Упражнение:

# Добавьте проверку на: 1) Существование "target-file"

#+ 2) Действительно ли "target-file" является rpm-архивом.

# Подсказка: используйте комсанду 'file'.

Сжатие

gzip

Стандартная GNU/UNIX утилита сжатия, заменившая более слабую, и к тому же проприетарную, утилиту compress. Соответствующая утилита декомпрессии (разжатия) -- gunzip, которая является эквивалентом команды gzip -d.

Для работы со сжатыми файлами в конвейере используется фильтр zcat, который выводит результат своей работы на stdout, допускает перенаправление вывода. Фактически это та же команда cat, только приспособленная для работы со сжатыми файлами (включая файлы, сжатые утилитой compress). Эквивалент команды zcat -- gzip -dc.

В некоторых коммерческих версиях UNIX, команда zcat является синонимом команды uncompress -c, и не может работать с файлами, сжатыми с помощью gzip.

См. также Пример 7-7.

bzip2

Альтернативная утилита сжатия, обычно дает более высокую степень сжатия (но при этом работает медленнее), чем gzip, особенно это проявляется на больших файлах. Соответствующая утилита декомпрессии -- bunzip2.

В современные версии tar добавлена поддержка bzip2.

compress, uncompress

Устаревшие проприетарные утилиты для работы с архивами, входящие в состав некоторых коммерческих дистрибутивов UNIX. В последнее время вытесняются более мощной утилитой gzip. Linux-дистрибутивы, как правило, включают в свой состав эти утилиты для обратной совместимости, однако gunzip корректно разархивирует файлы, обработанные с помощью compress.

Утилита znew предназначена для преобразования compress-архивов в gzip-архивы.

sq

Еще одна утилита-фильтр сжатия, которая обслуживает только отсортированные списки слов. Использует стандартный, для фильтров, синтаксис вызова -- sq < input-file > output-file. Быстрая, но не такая эффективная как gzip. Соответствующая ей утилита декомпрессии называется unsq, синтаксис вызова аналогичен утилите sq.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*