В Linux команда ar
используется для создания, изменения и извлечения отдельных файлов из архивов, то есть из набора файлов.
Содержание
Введение
Команда ar
создаёт и модифицирует архивы, а также извлекает компоненты из архива. Архив, это одиночный файл содержащий коллекцию других файлов (членов архива) в особом формате, который делает возможным восстановление оригинальных файлов, которые называются компонентами архива.
Содержимое оригинального файла, права доступа, временные метки, владелец и группа сохраняются в архиве и могут быть восстановлены при извлечении.
Утилита может обслуживать архивы, файлы в которых имеют имена любой длины, однако, в зависимости от того как утилита конфигурируется для вашей системы, может быть введено ограничение на длину имени (для совместимости с архивным форматом поддерживаемым другими программами). Если это имеет место, то ограничение обычно составляет 15 символов (обычно для формата a.out
) или 16 символов (обычно для формата coff
).
Команда ar
является бинарной, потому что архивы этого сорта очень часто используют библиотеки, содержащие часто употребляющиеся подпрограммы.
Синтаксис
ar [эмуляция параметров] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [имя_члена] [счёт] архивный_файл файл...
Параметры
Команды
d
Удаление файлов из архива
m[ab]
Перемещение файлов в архив
p
Вывод файлов, найденных в архиве
q[f]
Быстрое добавление файлов в архив
r[ab][f][u]
Замена существующих или вставка новых файлов в архив
s
Действовать как ranlib
t[O][v]
Отображение содержимого архива
x[o]
Извлечение файлов из архива
Особые модификаторы для команд
[a]
Размещение файлов после [имени_члена]
[b]
Размещение файлов до [имени_члена] (то же, что и [i])
[D]
Использование нуля для отметок времени и uids/gids (по умолчанию)
[U]
Использование актуальных отметок времени и uids/gids
[N]
Использование [счета], как варианта имени
[f]
Обрезание имен вставленных файлов
[P]
Использование полных путевых имен при сопоставлении
[o]
Сохранение исходных дат
[O]
Отображение смещений файлов в архиве
[u]
Замена файлов более новыми, чем текущее содержимое архива
[c]
Не предупреждать, если должна быть создана библиотека
[s]
Создание индекса архива (cf. ranlib)
[l
] Указать зависимости этой библиотеки
[S]
Не создавать таблицу символов
[T]
Устарел, вместо него использовать --thin
[v]
Подробный режим
[V]
Вывод номера версии
@<файл>
Чтение параметров из <файла>
--target=BFDNAME
Назначить форматом объекта назначения BFDNAME
--output=DIRNAME
Указать выходной каталог для операций извлечения
--record-libdeps=
указать зависимости этой библиотеки
--thin
Создать тонкий архив
Использование в Linux команды ar
Создание архива
Создадим в каталоге Directory
файлы с именами ar1.txt
и ar2.txt
. Нам необходимо создать архив с именем archive
без модификатора. В этом случае используем следующую команду:
oleg@mobile:~/Directory:$ ar r archive.a *ar1.txt
ar: создаётся archive.a
oleg@mobile:~/Directory:$
В результате был создан архив с файлом (членом) ar1.txt
.
С модификатором это будет выглядеть так:
oleg@mobile:~/Directory:$ ar rv archive.a *ar1.txt
r - ar1.xt
oleg@mobile:~/Directory:$
Модификатор v
создаёт строку или вывод с буквой a
или r
, указывающей, добавлен файл или нет.
Добавляем в архив файл ar2.txt
:
oleg@mobile:~/Directory:$ ar r archive.a *ar2.txt
oleg@mobile:~/Directory:$
Удаление файла из архива
Для удаления файлов из архива утилита используется с параметром d
. Указываем имена всех удаляемых членов. При добавлении модификатора v
, каждый файл перечисляется по мере его удаления.
В нашем предыдущем случае мы использовали файл ar1.txt
при создании архива archive.a
, теперь мы удалим этот файл из архива:
oleg@mobile:~/Directory:$ ar d archive.a ar1.txt
oleg@mobile:~/Directory:$
У нас был архив archive.a
, хранящий ar1.txt
, после использования d
без модификатора файл ar1.txt
был просто удалён.
Рассмотрим тот же пример с модификатором v
:
oleg@mobile:~/Directory:$ ar dv archive.a ar1.txt
d - ar1.txt
oleg@mobile:~/Directory:$
При использовании модификатора v
выводится список файлов по мере их удаления.
Возвращаем файл ar1.txt
в архив:
oleg@mobile:~/Directory:$ ar r archive.a ar1.txt
oleg@mobile:~/Directory:$
Отображение элементов архива
Для отображения элементов архива в стандартном выходном файле утилита запускается с параметром p
. Если модификатор не используется, элемент будет отображён так, словно это выходной файл. Если же используется модификатор v
, то имя элемента будет показано до его копирования в выходной файл:
oleg@mobile:~/Directory:$ ar p archive.a
fistName lastName age city ID Ivan Ivanov 28 Toronto 400 Peter Petrov 43 Berlin 600 Sidor Sidorov 52 Sofia N/ Paul Pavlov 33 London 300 Carl Carlson 30 Rome N/A
fristName lastName age city ID
Ivan Ivanov 28 Toronto 400
Peter Petrov 43 Berlin 600
Sidor Sidorov 52 Sofia N/A
Paul Pavlov 33 London 300
Carl Carlson 30 Rome N/A
oleg@mobile:~/Directory:$
Здесь он выдал вывод, который был записан в наших файлах ar1.txt
и ar2.txt
, теперь давайте проверим, что произойдёт, если мы используем в нем модификатор v
:
oleg@mobile:~/Directory:$ ar pv archive.a
<ar2.txt>
fistName lastName age city ID Ivan Ivanov 28 Toronto 400 Peter Petrov 43 Berlin 600 Sidor Sidorov 52 Sofia N/ Paul Pavlov 33 London 300 Carl Carlson 30 Rome N/A
<ar1.txt>
fristName lastName age city ID
Ivan Ivanov 28 Toronto 400
Peter Petrov 43 Berlin 600
Sidor Sidorov 52 Sofia N/A
Paul Pavlov 33 London 300
Carl Carlson 30 Rome N/A
oleg@mobile:~/Directory:$
При использовании модификатора, мы сначала получаем имя файла, а затем записанное внутри него содержимое.
Для отображения содержимого архива в виде списка утилита запускается с параметром t
. Обычно он показывает содержимое архива, но если мы используем модификатор O
, то он также показывает соответствующее смещение каждого члена архива:
oleg@mobile:~/Directory:$ ar t archive.a
ar2.txt
ar1.txt
oleg@mobile:~/Directory:$
Здесь отображены все члены архива.
Теперь выполним то же с использованием модификатора:
oleg@mobile:~/Directory:$ ar tO archive.a
ar2.txt 0x44
ar1.txt 0x122
oleg@mobile:~/Directory:$
На этот раз с помощью модификатора мы получаем соответствующее смещение каждого члена.
Извлечение файлов из архива
Для извлечения файлов из архива используется параметр x
. При этом из архива извлекается каждый названный член, но если не называть имена файлов, которые необходимо извлечь, то извлекается весь архив:
oleg@mobile:~/Directory:$ ar x archive.a
oleg@mobile:~/Directory:$
Модификатор v
отображает каждый извлечённый файл. Если при этом не указаны имена файлов, то извлекается весь архив:
oleg@mobile:~/Directory:$ ar xv archive.a
x - ar2.txt
x - ar1.txt
oleg@mobile:~/Directory:$
Мы можем использовать модификатор v
для перечисления имени каждого извлекаемого члена. Если указывать имена элементов, то только они будут извлекаться из архива:
oleg@mobile:~/Directory:$ ar xv archive.a ar1.txt
x - ar1.txt
oleg@mobile:~/Directory:$
Заключение
В Linux команда ar
является полезной, нужной и функциональной. Изучение её и работа с этой утилитой не представляют особых сложностей.