Eu já vi em muitos lugares usados install -dpara criar diretórios e install -ccopiar um arquivo. Por que não usar mkdire cp? Existe uma vantagem em usar install?
Eu já vi em muitos lugares usados install -dpara criar diretórios e install -ccopiar um arquivo. Por que não usar mkdire cp? Existe uma vantagem em usar install?
Respostas:
Depende do que você está fazendo.
O installcomando é 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 -de que -cvocê tem -mpara especificar as novas permissões do arquivo a ser instalado, não é necessário fazer a cpe a chmodpara obter o mesmo resultado. Por exemplo:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Você também tem opções -ge -opara definir o grupo-alvo e o proprietário, respectivamente. Isso evita chamadas separadas para chown. Em geral, o uso installreduz 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 cpe install, pelo menos no Linux. Se copiar sobre um arquivo existente, cpsubstitui o inode existente do arquivo, enquanto installsempre 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 cpcausa um erro EBUSY, enquanto installterá ê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 mkdire installdo GNU coreutils . Ambos usam a mesma make_dir_parentsfunção, mas com o preserve_existingparâmetro está sendo definido como falseou true, respectivamente.
installou$(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.