Команда install

Команда install позволяет задействовать одноименную утилиту, предназначенную для автоматизации установки файлов программного обеспечения в систему. Обычно данная утилита не используется пользователями непосредственно — для установки предварительно собранных пакетов программного обеспечения используются такие утилиты, как apt, dnf, snap и другие. В случае же сборки программного обеспечения из исходных кодов шансы ее опосредованного использования достаточно велики — обычно ее вызовы можно обнаружить в файлах конфигурации сборочной системы Make. Грубо говоря, данная утилита является аналогом утилиты для копирования файлов cp с дополнительными функциями таких инструментов, как утилита для создания директорий mkdir, утилита для изменения прав доступа к файлам chmod, утилита для изменения владельца файлов chown, утилита для изменения группы владельцев файла chgrp и утилита для удаления отладочной информации их исполняемых файлов strip.

Базовый синтаксис команды выглядит следующим образом:

$ install [параметры] имя-файла путь-для-установки

В случае классического сценария использования команда принимает имя файла и путь для его установки, а также ряд параметров. Актуальными для обычного пользователя параметрами являются параметр -D, позволяющий создать структуру родительских директорий перед копированием файла в нее, параметр -d, позволяющий создать дерево директорий без копирования файлов, параметр -o, позволяющий задать имя владельца установленного файла, параметр -g, позволяющий задать имя группы владельцев установленного файла, параметр -m, позволяющий задать права доступа к установленному файлу, параметр -s, позволяющий удалить отладочную информацию из установленного исполняемого файла, а также параметр -v, позволяющий активировать механизм вывода подробных диагностических сообщений.

Примеры использования

Установка файла в существующую директорию

Для предварительного создания директории может использоваться сама утилита install с параметром -d.

$ install -d insdir
$ file insdir
insdir: directory

Директория успешно создана — теперь можно приступить к установке в нее файла. Для установки файла в существующую директорию достаточно задать имя файла и путь к целевой директории; дополнительных параметров не требуется.

$ install thread insdir
$ ls -al insdir
итого 40
drwxrwxr-x  2 alex alex    20 авг 16 20:41 .
drwx--x--x 41 alex alex  4096 авг 16 20:41 ..
-rwxr-xr-x  1 alex alex 36184 авг 16 20:41 thread

Файл был скопирован в целевую директорию — утилита сработала корректно.

Установка файла в несуществующую директорию

Для установки файла в несуществующую директорию достаточно использовать параметр -D. Утилита позволяет создать не одну родительскую директорию, а целое дерево директорий, но в этом случае должно быть явно указано и имя установленного файла. Для наглядности активируем режим вывода диагностических сообщений с помощью параметра -v:

$ install -Dv thread insdir/insidedir/thread
install: создание каталога 'insdir'
install: создание каталога 'insdir/insidedir'
'thread' -> 'insdir/insidedir/thread'
$ tree insdir
insdir
└── insidedir
    └── thread

1 directory, 1 file

Дерево родительских директорий успешно создано и файл скопирован в него.

Установка файла со сменой атрибутов

Для смены атрибутов файла следует использовать параметры -o, -g и -m:

# install -Dv -o nobody -g gdm -m 777 thread insdir/thread
install: создание каталога 'insdir'
'thread' -> 'insdir/thread'
$ ls -al insdir
итого 40
drwxr-xr-x  2 root   root    20 авг 16 21:00 .
drwx--x--x 41 alex   alex  4096 авг 16 21:00 ..
-rwxrwxrwx  1 nobody gdm  36184 авг 16 21:00 thread

Для смены имен владельца и группы владельцев файла необходимы права суперпользователя. Именно поэтому владельцем родительской директории в результате является пользователь root. Сам же установленный файл имеет заданных владельца и группу владельцев, а также права доступа.

Установка исполняемого файла с удалением отладочной информации

Для удаления отладочной информации из устанавливаемого исполняемого файла достаточно использовать параметр -s:

$ install -Dv -s thread insdir/thread
install: создание каталога 'insdir'
'thread' -> 'insdir/thread'
$ stat thread
  Файл: thread
  Размер: 36184         Блоков: 72         Блок В/В: 4096   обычный файл
Устройство: 803h/2051d  Инода: 146671      Ссылки: 1
Доступ: (0775/-rwxrwxr-x)  Uid: ( 1000/    alex)   Gid: ( 1000/    alex)
Доступ:        2022-08-16 20:41:44.637925377 +0300
Модифицирован: 2021-11-18 19:59:24.134960843 +0300
Изменён:       2021-11-18 19:59:24.134960843 +0300
Создан:        2021-11-18 19:59:24.050960896 +0300
$ stat insdir/thread
  Файл: insdir/thread
  Размер: 22824         Блоков: 48         Блок В/В: 4096    обычный файл
Устройство: 803h/2051d  Инода: 134375192   Ссылки: 1
Доступ: (0755/-rwxr-xr-x)  Uid: ( 1000/    alex)   Gid: ( 1000/     alex)
Доступ:        2022-08-16 21:07:57.969776952 +0300
Модифицирован: 2022-08-16 21:07:58.017776813 +0300
Изменён:       2022-08-16 21:07:58.017776813 +0300
Создан:        2022-08-16 21:07:57.741777616 +0300

В результате размер установленного исполняемого файла уменьшается с 36184 до 22824 байт. Сам же установленный исполняемый файл будет функционировать абсолютно идентично оригинальному.