В чем разница между установкой -c и cp? Большинство установок, как правило, используют install -c, но со страницы руководства это не похоже на то, что она делает что-то отличное от cp (кроме, возможно, установки разрешений). Когда я должен использовать install -c и когда cp?
3 ответа
Одно существенное отличие состоит в том, что cp усекает файл назначения и начинает копировать данные из источника в файл назначения.
install, с другой стороны, сначала удаляет файл назначения.
Это важно, потому что, если целевой файл уже используется, с тем, кто использует этот файл, могут случиться плохие вещи, если вы cp
новый файл поверх него. Например, перезапись исполняемого файла, который выполняется, может привести к ошибке Усечение файла данных, который существующий процесс занят чтением / записью, может вызвать довольно странное поведение. Если вы сначала просто удалите файл назначения, как это делает установка, все будет продолжаться как обычно - удаленный файл фактически не будет удален, пока все процессы не закроют этот файл.
Технически, разница между install -c
и cp
том, что install
устанавливает права доступа к целевому файлу как rwxr-xr-x
. cp
сохраняет права доступа к исходному файлу за вычетом umask. Такое поведение по умолчанию полезно в разных ситуациях. Очевидно, что со всеми опциями, которые сегодня предлагают cp
и install
, функциональные возможности слились.
В настоящее время install
обычно используется в make-файлах, cp
везде. Это различие иногда полезно, потому что некоторые операционные системы или системы установки позволяют вам подключиться к программе install
для регистрации установленных пакетов. Современные системы управления пакетами делают этот вид устаревшим, но некоторые люди все еще используют его. Также очень удобна возможность установки прав доступа к целевому файлу.
Утилита install
, в своей основе, представляет собой фантастический cp
. Но поскольку инструмент специально устанавливает, он содержит несколько функций, которых нет у cp
. Мой /usr/bin/install
из GNU coreutils не только копирует, но и может изменять perms/ владельца как флаги arg (сохранение вызовов chgrp
, chown
, chmod
), возможность убрать отладочную информацию (сохранение вызова strip
), а также некоторые mojo для Контексты SELinux.
Это просто обеспечивает удобные действия, полезные для установки программного обеспечения. Ничто не меняет жизнь, все полезно и делает ваши сценарии чище.