Respostas:
Uma diferença significativa é que o cp trunca o arquivo de destino e começa a copiar dados da origem para o arquivo de destino.
instalar, por outro lado, remove o arquivo de destino primeiro.
Isso é significativo porque, se o arquivo de destino já estiver em uso, poderão ocorrer coisas ruins para quem estiver usando esse arquivo, caso você tenha cp
um novo arquivo sobre ele. por exemplo, sobrescrever um executável em execução pode falhar. Truncar um arquivo de dados em que um processo existente esteja ocupado lendo / gravando pode causar um comportamento bem estranho. Se você apenas remover o arquivo de destino primeiro, assim como a instalação, as coisas continuarão como o normal - o arquivo removido não será removido até que todos os processos fechem esse arquivo.
Tecnicamente, a diferença entre install -c
e cp
é que install
define as permissões do arquivo de destino rwxr-xr-x
. cp
preserva as permissões do arquivo de origem menos as umask. Esses comportamentos padrão são úteis em diferentes situações. Obviamente, com todas as opções que ambos oferecem cp
e install
hoje em dia, as funcionalidades convergiram.
Atualmente, install
é comumente usado em makefiles, em cp
qualquer outro lugar. Essa distinção é ocasionalmente útil porque alguns sistemas operacionais ou sistemas de instalação permitem conectar-se ao install
programa para registrar os pacotes instalados. Os sistemas modernos de gerenciamento de pacotes tornam esse tipo de obsoleto, mas algumas pessoas ainda o usam. Além disso, a possibilidade de definir as permissões do arquivo de destino da mesma maneira é muito conveniente.
O install
utilitário, em sua base, é uma fantasia cp
. Mas, como uma ferramenta especificamente instalada, ela contém alguns recursos que cp
não. Meu /usr/bin/install
partir coreutils GNU não apenas cópias, mas também pode alterar perms / propriedade como bandeiras Arg (poupança chgrp
, chown
, chmod
invocações) uma opção para informações tira depuração (salvando uma strip
invocação) e também algum mojo para contextos SELinux.
Ele apenas fornece ações de conveniência úteis para instalações de software. Nada muda a vida, todos são úteis e torna seus scripts mais limpos.
cp --remove-destination
no GNU coreutils.