Чтение онлайн

ЖАНРЫ

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

Купер Мендель

Шрифт:

Самый простой вариант установки ПО из 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.

Поделиться с друзьями: