Я видел во многих местах, используемых install -d
для создания каталогов и install -c
копирования файлов. Почему бы не использовать mkdir
и cp
? Есть ли преимущество в использовании install
?
источник
Я видел во многих местах, используемых install -d
для создания каталогов и install -c
копирования файлов. Почему бы не использовать mkdir
и cp
? Есть ли преимущество в использовании install
?
Это зависит от того, что вы делаете.
Команда install
обычно используется в сценариях установки, которые поставляются с пакетами и исходным кодом для установки бинарного файла в вашу систему. Его также можно использовать для установки любого другого файла или каталога. В дополнение к -d
и -c
варианты у вас есть -m
для определения новых разрешений файла для установки, так что вы не должны делать cp
и chmod
получить тот же результат. Например:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
У вас также есть варианты -g
и -o
для установки целевой группы и владельца соответственно. Это позволяет избежать отдельных звонков chown
. В целом, использование install
сокращает ваш сценарий и делает его более кратким, делая создание файлов, копирование, настройку режима и связанные вещи одной командой вместо многих.
Для справки см man install
. Для использования просто взгляните на любой скрипт установки, поставляемый с некоторым исходным кодом пакета .
«install» обычно сочетает в себе следующие действия:
Таким образом, из подхода Unix следует, что инструмент должен быть создан для единственного, но полного действия по установке файла, созданного каким-либо строительным инструментом, на его рабочее место.
Полная концепция, как я описал, реализована в системах BSD (в так называемой версии "xinstall"); Здесь я рассматриваю режим «безопасного копирования» (новая версия с атомарным переименованием) как жизненно важный для этого. Системы Linux (из coreutils) пропускают эту важную часть и склонны к гонкам между удалением и повторным открытием процессом прохождения; но это могло бы быть покрыто менеджерами пакетов.
install
или$(INSTALL)
в make-файлах также помечает эти шаги как шаги копирования установки, а не как обычные шаги копирования. Это может быть полезно.Помимо предыдущих описаний, касающихся использования, существует небольшая разница между уровнями
cp
иinstall
, по крайней мере, в Linux. При копировании поверх существующего файлаcp
перезаписывает существующий индекс файла, ноinstall
всегда создает новый индекс для того же имени файла.Это имеет значение при установке новой версии работающего двоичного файла. Использование
cp
вызывает ошибку EBUSY, покаinstall
будет успешным. Работающий бинарный файл все равно будет использовать старую версию, но новая версия будет использоваться, если программа будет перезапущена.источник
Если рассматриваемый каталог уже существует:
mkdir -p
попытается установить биты владения и режима файлаinstall -d
не будет пытаться установить владение и биты режима файлаЭто для
mkdir
иinstall
из GNU coreutils . Они оба используют одну и ту жеmake_dir_parents
функцию, но сpreserve_existing
параметром, установленным вfalse
илиtrue
, соответственно.источник