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
?
fonte
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
?
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.
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.Além das descrições anteriores aqui sobre o uso, há uma diferença de baixo nível entre
cp
einstall
, pelo menos no Linux. Se copiar sobre um arquivo existente,cp
substitui o inode existente do arquivo, enquantoinstall
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, enquantoinstall
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.fonte
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
einstall
do GNU coreutils . Ambos usam a mesmamake_dir_parents
função, mas com opreserve_existing
parâmetro está sendo definido comofalse
outrue
, respectivamente.fonte