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