Eu já vi em muitos lugares usados install -d
para criar diretórios e install -c
copiar um arquivo. Por que não usar mkdir
e cp
? Existe uma vantagem em usar install
?
Eu já vi em muitos lugares usados install -d
para criar diretórios e install -c
copiar um arquivo. Por que não usar mkdir
e cp
? Existe uma vantagem em usar install
?
Respostas:
Depende do que você está fazendo.
O install
comando é normalmente usado em scripts de instalação que vêm com pacotes e código-fonte para instalar um binário no seu sistema. Também pode ser usado para instalar qualquer outro arquivo ou diretório. Além das opções -d
e que -c
você tem -m
para especificar as novas permissões do arquivo a ser instalado, não é necessário fazer a cp
e a chmod
para obter o mesmo resultado. Por exemplo:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Você também tem opções -g
e -o
para definir o grupo-alvo e o proprietário, respectivamente. Isso evita chamadas separadas para chown
. Em geral, o uso install
reduz o seu script e o torna mais conciso, criando criação de arquivo, cópia, configuração de modo e itens relacionados em um comando, em vez de muitos.
Para referência, consulte man install
. Para uso, basta dar uma olhada em qualquer script de instalação enviado com algum código-fonte do pacote .
"instalar" geralmente combina as seguintes ações:
Portanto, segue a abordagem do Unix que uma ferramenta deve ser feita para uma ação única, mas completa, de instalar um arquivo criado por alguma ferramenta de construção em seu local de trabalho.
O conceito completo, como descrevi, é implementado nos sistemas BSD (na chamada versão "xinstall"); Trato aqui o modo "cópia segura" (nova versão com renomeação atômica) como vital para isso. Os sistemas Linux (do coreutils) perdem essa parte importante e são propensos a disputas entre excluir e reabrir por um processo de espectador; mas isso poderia ter sido coberto pelos gerenciadores de pacotes.
Além das descrições anteriores aqui sobre o uso, há uma diferença de baixo nível entre cp
e install
, pelo menos no Linux. Se copiar sobre um arquivo existente, cp
substitui o inode existente do arquivo, enquanto install
sempre cria um novo inode para o mesmo nome de arquivo.
Isso faz a diferença ao instalar uma nova versão de um binário em execução. O uso cp
causa um erro EBUSY, enquanto install
terá êxito. O binário em execução ainda usará a versão antiga, mas a nova versão será usada se o programa for reiniciado.
Se o diretório em questão já existir:
mkdir -p
tentará definir os bits de propriedade e modo de arquivoinstall -d
não tentará definir os bits de propriedade e modo de arquivoIsto é para mkdir
e install
do GNU coreutils . Ambos usam a mesma make_dir_parents
função, mas com o preserve_existing
parâmetro está sendo definido como false
ou true
, respectivamente.
install
ou$(INSTALL)
em makefiles também sinaliza essas etapas como etapas de cópia de instalação e não como etapas comuns de cópia. Isso pode ser útil.