Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы / Куликова Н.В., Петровская Е.Н. (ч.1,2)

.pdf
Скачиваний:
52
Добавлен:
11.06.2015
Размер:
2.62 Mб
Скачать

Архиватор tar

Первоначально tar был разработан для резервного копирования на ленту, отсюда и его название – Tape ARchiver. Но, поскольку возможность помещать большое количество файлов внутрь одного чрезвычайно удобно (к примеру, для хранения и передачи групп файлов, например, дистрибутивов), то он получил более широкое распространение.

Вообще-то в каждом Unix есть свой подвид tar, со слегка отличающимися опциями. Но основные опции (создать, развернуть, проверить архив) одинаковы во всех версиях. В Linux используется GNU-версия tar, которая доступна в большинстве других Unix (иногда под именем «gtar»).

Если tar используется для работы с файлами-архивами (а не с лентой), то его вызов обычно выглядит так:

tar <буква-команды>f <имяархива.tar> [файлы...]

В качестве команды обычно используется одна из следующих букв:

c – (Create) создать архив;

x – (eXtract) распаковать архив;

t – (Test) просмотреть содержимое архива.

Например, чтобы создать архив /tmp/someconfs.tar, содержа-

щий файлы /etc/fstab и /etc/passwd:

/tmp/someconfs.tar

bobby:~%

tar

cf

/etc/fstab /etc/passwd

 

tar: Removing leading `/' from absolute path names in the archive

bobby:~% _

Здесь сразу надо заметить две особенности:

во-первых, у файлов, имена которых указаны в абсолютном виде, т.е. начинаются со «/», tar автоматически этот «/» обрезает, чтобы позже можно было распаковать архив в любое место (а не только обратно в /etc/);

во-вторых, при нормальной работе tar ничего не печатает на экране (в отличие от pkzip и arj); чтобы он показывал обрабатываемые файлы, надо указать ключ «v»:

141

bobby:~% tar cvf /tmp/someconfs.tar /etc/fstab /etc/passwd

tar: Removing leading `/' from absolute path names in the archive

etc/fstab

etc/passwd bobby:~% _

Если указать «vv», то кроме имен будут показываться те же атрибуты, что и при «ls -l».

Вообще у tar довольно нестандартный синтаксис команд: хотя все ключи и можно указывать обычным способом (т.е. через «-»), и даже длинные ключи (с «-»), но обычно первым параметром ему указывается сочетание из нескольких букв, первая из которых является командой, а остальные – ключами. Так, «f» – это тоже ключ, который говорит, что далее указано имя файлаархива (поэтому «f» надо указывать в конце списка).

Хотя в большинстве систем tar прекрасно понимает именно такой синтаксис, в неко-

Замечание торых старых Unix'ах перед «сочетанием букв» обязательно надо указывать «-».

Для просмотра архива используется команда «t» (ключ «v» указывает, что надо выдавать более полную информацию):

bobby:~% tar tvf /tmp/someconfs.tar

-rw-r--r-- root/root

756

1998-12-21

16:40

etc/fstab

1309

1999-02-22

-rw-r--r-- root/root

10:35

etc/passwd

 

 

bobby:~% _

 

 

Для распаковки применяется команда «x»: bobby:~% mkdir /tmp/test bobby:~% cd /tmp/test bobby:/tmp/test% ls -l

total 0

bobby:/tmp/test% tar xf /tmp/someconfs.tar bobby:/tmp/test% ls -l

total 1

142

drwxr-xr-x

2 ivanov

lab5

1024

Mar 4

16:03 etc/

 

 

bobby:/tmp/test% ls -l etc/

 

total 3

1 ivanov

lab5

756

-rw-r--r--

Dec 21

16:40 fstab

lab5

1309

-rw-r--r--

1 ivanov

Feb 22

10:35 passwd

 

 

bobby:/tmp/test% _

 

 

Tar разворачивает дерево-содержимое архива в текущей директории. Чтобы распаковать архив в другую директорию, надо или перейти в нее (командой cd) или указать ключ «-C» (распаковываем в директорию /tmp):

bobby:~% ls -l etc

/bin/ls: etc: No such file or directory bobby:~% ls -l /tmp/etc

/bin/ls: /tmp/etc: No such file or directory bobby:~% tar xf /tmp/someconfs.tar -C /tmp

bobby:~% ls -l /tmp/etc

 

 

total 3

1 ivanov

lab5

756

-rw-r--r--

Dec 21 16:40 fstab

lab5

1309

-rw-r--r--

1 ivanov

Feb 22 10:35 passwd

 

 

bobby:~% _

 

 

 

Вообще-то назначение ключа «-C» более общее, и надо хорошо себе представлять, что он

Замечание будет делать в каждом конкретном случае. Но при распаковке всего архива такое использование

достигает цели.

Обычно .tar-файлы держат упакованными (чаще всего gzip'ом). Самое простое – создать архив и затем упаковать его. Но можно указать в качестве имени архива «-»: тогда результат будет отправлен на стандартный вывод, и затем передан gzip'у, стандартный вывод которого перенаправлен в файл:

143

bobby:~% tar cf – /etc/fstab /etc/passwd | gzip >someconfs.tgz

tar: Removing leading `/' from absolute path

names in the archive

 

 

bobby:~% ls -l

 

 

total 1

1 ivanov

lab5

990

-rw-r--r--

Mar 4 16:28 someconfs.tgz bobby:~% _

При использовании GNU tar (например, в Linux) есть еще более простой способ: можно указать ключ «z», который означает

«пропустить файл через gzip»:

bobby:~% tar czf someconfs.tgz /etc/fstab /etc/passwd

tar: Removing leading `/' from absolute path

names in the archive

 

 

bobby:~% ls -l

 

 

total 1

1 ivanov

lab5

990

-rw-r--r--

Mar 4 16:31 someconfs.tgz bobby:~% _

Этот же ключ можно указывать при распаковке и просмотре архива.

Если сказать tar'у создать архив в той же директории, откуда берутся исходные файлы (к примеру, в текущей: «tar cf archive.tar .»), то сам

.tar-файл тоже попадет в архив – точнее, та его часть, что была создана на момент

начала добавления его самого. Предупреждение Дело в том, что tar (в отличие от Dos'о-

вских pkzip и arj) не проверяет, что файл, который он собирается поместить в архив

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

144

Man-страница по tar довольно запутанна, поэтому лучше воспользоваться info-документацией

Совет

info tar»), которая содержит разделы специ-

ально для начинающих (включая tutorial'ы)

 

 

Совместимость с Dos: zip/unzip, unarj

zip/unzip. Для манипуляций с .zip файлами практически в любом Unix есть программы zip и unzip, совместимые с pkzip/pkunzip версии 2.04.

Поскольку ключи zip и unzip почти идентичны pkzip и pkunzip, мы не будем здесь их подробно рассматривать. Получить краткую справку можно, запустив любую из этих программ без параметров.

unarj. Для распаковки .arj-файлов есть программа unarj, совместимая с версией 2.41. В отличие от «настоящего» arj, она не умеет создавать .arj-архивы, не оптимизирована по скорости и поддерживает лишь небольшое количество опций.

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

Краткую справку можно получить, набрав просто «unarj» без

параметров:

 

 

 

 

 

bobby:~% unarj

 

Copyright

(c)

UNARJ

(Demo

version) 2.41a

1991-93 Robert K Jung

 

 

Usage:

UNARJ

archive[.arj]

(list

ar-

chive)

UNARJ

e

archive

(extract

ar-

chive)

UNARJ

l

archive

(list

ar-

chive)

UNARJ

t

archive

(test

ar-

chive)

UNARJ x archive

(extract with

 

pathnames)

 

 

 

 

145

This is an ARJ demonstration program and ** IS NOT OPTIMIZED ** for speed.

You may freely use, copy and distribute this program, provided that no fee

is charged for such use, copying or distribution, and it is distributed

ONLY in its original unmodified state. UNARJ is provided as is without

warranty of any kind, express or implied, including but not limited to

the implied warranties of merchantability and fitness for a particular

purpose. Refer to UNARJ.DOC for more war-

ranty

information.

 

ARJ Software

Internet ad-

dress

:

robjung@world.std.com

CompuServe

Robert

and Susan Jung

userid:

72077,445

 

2606 Village Road West Norwood, Massachusetts 02062 USA

bobby:~% _

Поскольку unarj – имеющаяся документация – файл

/usr/doc/unarj-2.41a/unarj.doc (это обычный тексто-

вый файл).

Литература

1.Фолькердинг П., Рейчард К., Фостер-Джонсон Э. Установка и конфигурирование LINUX: учебный курс. – СПб: Издво Питер, 1999.

2.Билл Болл, Хойт Даф и др. Red Hat Linux 8/9: Настольная книга пользователя. Изд-во DiaSoft, 2004.

146

РАЗДЕЛ 9. ПРОГРАММИРОВАНИЕ В КОМАНДНОМ ИНТЕРПРЕТАТОРЕ SHELL (ОС LINUX)

Среди операционных систем особое место занимает UNIX. ОС UNIX проектировалась как инструментальная система, предназначенная для создания и отладки новых средств программного обеспечения. Она может работать практически на всех выпускаемых платформах. UNIX это семейство открытых и мобильных операционных систем (поскольку название UNIX запатентовано компанией AT&T – различные юниксы называются различно: SCO UNIX, BSDI, Solaris, LINUX, DG/UX, AIX и т.д.).

Это не только многозадачная, но и многопользовательская система. Она обеспечивает современный пользовательский интерфейс на базе системы X WINDOW и межмашинную связь на базе протоколов TCP/IP и т.п.

UNIX спроектирована так, чтобы минимизировать число функций, реализуемых ядром системы за счет использования утилит. Все программы ОС UNIX подразделяются на два класса: програм- мы-утилиты и прикладные программы. Утилиты поставляются вместе с ОС, прикладныесоздаются независимо от ОС.

ОС UNIX была создана Кеном Томпсоном и Деннисом Ритчи в Bell Laborotories (AT&T). Широко распространяться Unix/v7 (версия 7) начала в 80-х годах. Вручение создателям UNIX в 1983 г. Международной премии А.Тьюринга в области программирования ознаменовало признание этой системы мировой научной (computer science) общественностью.

1. Командный интерпретатор SHELL

Одной из самых важных программ, входящих в UNIX, является системный монитор SHELL. Это – интерактивная программа, управление которой осуществляется с помощью системы команд, которые она интерпретирует. В отличие от интерпретаторов других ОС SHELL – самая обычная программа, работающая под управлением системы (в других ОС интерпретатор – это составная часть внутренней структуры). Таким образом, командный интерпретатор SHELL – это некая командная оболочка, которая анализирует введенные команды и их аргументы, проверяет синтаксис, допустимость тех или иных ключей и только после тщательного анализа запускает соответствующую программу.

147

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

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

Файл, содержащий программу, может храниться в любом каталоге и иметь произвольное имя. Набор команд языка SHELL является расширяемым: его пополняет каждая новая программа, написанная пользователем. Команды делятся на внешние, которые SHELL только запускает, и внутренние, которые ему приходится выполнять самому.

Исторически существует несколько подвидов оболочек; «генеалогическое древо» представлено на рис.6.

Рис.6. Семейство интерпретаторов командной строки

Не вдаваясь в подробности истории, стоит лишь заметить, что csh и tcsh не в полной мере реализуют командный язык sh, а zsh, являясь самой последней разработкой, умеет все, что и любой другой подвид, и плюс много чего еще.

148

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

Изложение в данном разделе основано на zsh (которая и используется на практических занятиях), но большая часть описанного верно и для других оболочек.

 

Чтобы узнать, какой используется shell, надо

Совет

выполнить команду echo $SHELL

 

2. Простейшие средства SHELL

Под SHELL подразумевается не только интерпретатор команд, но и более развитые языки программирования. Командный язык SHELL фактически есть язык программирования высокого уровня. На этом языке пользователь осуществляет управление компьютером. Обычно после входа в систему вы начинаете взаимодействовать с командной оболочкой. Признаком того, что оболочка SHELL готова к приему команд, служит выдаваемый ею на экран промптер (например, знак доллара $).

SHELL не является необходимым и единственным командным языком (хотя именно он стандартизован в рамках POSIX [POSIX 1003.2] стандарта мобильных систем). Например, немалой популярностью пользуется язык cshell, есть также kshell, bashell (из наиболее популярных в последнее время) и др. Более того, каждый пользователь может создать свой командный язык; одновременно на одном экземпляре операционной системы работать с разными командными языками.

shell это одна из многих команд UNIX, т.е. в набор команд оболочки (интерпретатора) SHELL входит команда sh вызов интерпретатора SHELL. Первый shell вызывается автоматически при входе в систему и выдает на экран промтер. После этого вы можете вызывать на выполнение любые команды, в том числе и снова сам SHELL, который создаст новую оболочку внутри прежней.

Например, если подготовить в редакторе файл f1 echo Hello!

149

то это будет обычный текстовый файл, содержащий команду echo, которая при выполнении выдает все написанное правее ее на экран. Можно сделать файл f1 выполняемым с помощью команды chmod 755 f1. Но его можно выполнить, вызвав явно ко-

манду sh (shell): sh f1

или

sh < f1

Файл можно выполнить и в текущем экземпляре SHELL. Для этого существует специфическая команда «.» (точка), т.е.

. f1

Не начинайте командные файлы с символа #, хотя естественно начинать его с комментария. Дело в том, что такой командный файл в оболочке C-SHELL (CSH) будет интерпретирован как выполняемый в csh, в результате активизируется интерпретатор csh.

Начинайте командный sh-файл с пустой строки или пустого оператора «:».

Поскольку UNIX система многопользовательская, можно работать параллельно на нескольких экранах (переход с экрана на экран

функциональная клавиша ALT), имея на каждом экране своего пользователя со своей командной оболочкой. В графическом режиме X WINDOW можно также открыть большое число окон, в которых может работать свой пользователь со своей командной оболочкой. СтержневымэлементомязыкаSHELL является команда.

Структура команд

Команды в SHELL обычно имеют следующий формат: <имя команды> <флаги> <аргумент(ы)>

ls -ls /usr/bin

ls имя команды выдачи содержимого директории;

-ls флаги ( «-» признак флагов, l длинный формат, s объем файлов в блоках);

/usr/bin директория, для которой выполняется команда.

Эта команда выдаст на экран в длинном формате содержимое директории /usr/bin, при этом добавит информацию о размере каждого файла в блоках.

150