Команда 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 байт. Сам же установленный исполняемый файл будет функционировать абсолютно идентично оригинальному.