Respostas:
install
não apenas copia arquivos, mas também altera sua propriedade e permissões e, opcionalmente, remove símbolos de depuração dos executáveis. Combina cp
com chown
, chmod
e strip
. É uma ferramenta conveniente de nível superior que realiza uma sequência comum de tarefas elementares.
Uma vantagem install
mais cp
para instalar executáveis é que, se o alvo já existir, ele remove o arquivo de destino e cria um novo. Isso elimina todas as propriedades atuais, como listas e recursos de controle de acesso, que podem ser vistas tanto como positivas quanto negativas. Ao atualizar os executáveis, se houver instâncias em execução desse executável, eles continuarão sendo afetados. Por outro lado, cp
atualiza o arquivo no local, se houver um. Na maioria das variantes do Unix, isso falha com o erro EBUSY¹ se o destino for um executável em execução; em alguns casos, pode causar falha no destino porque carrega seções de código dinamicamente e a modificação do arquivo faz com que o código sem sentido seja carregado.
install
é um comando BSD (adicionado em 4.2BSD , ou seja, no início dos anos 80). Não foi adotado pelo POSIX.
¹ “Arquivo de texto ocupado”. Nesse contexto, "arquivo de texto" significa "arquivo executável binário", por obscuras razões históricas .
Ele fornece uma maneira padronizada de manipular a propriedade e as permissões de um arquivo ou diretório enquanto copia o arquivo ou cria o diretório, em um único comando.
install
faz uma cópia seguida por chown e chmod, todos os syscalls separados e não usa renomear no lugar (pelo menos a partir do coreutils 8.13 a versão GNU não). Se você presumir que tudo acontece atomicamente, poderá ter uma surpresa desagradável.
Com o install
comando podemos copiar o arquivo com as permissões desejadas
Exemplo que é usado principalmente durante a configuração do LDAP
install -o ldap -g ldap /etc/openldap/DB_CONFIG_EXAMPLE /var/lib/ldap/DB_CONFIG
Isso nos economiza chown ldap. /var/lib/ldap/DB_CONFIG
, se você copiou usando cp
, também precisa chown
nesse cenário
Veja a página de manual para install
:
$ man install
excerto
SYNOPSIS
install [OPTION]... [-T] SOURCE DEST
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
install [OPTION]... -d DIRECTORY...
DESCRIPTION
This install program copies files (often just compiled) into
destination locations you choose. If you want to download and
install a ready-to-use package on a GNU/Linux system, you should instead
be using a package manager like yum(1) or apt-get(1).
In the first three forms, copy SOURCE to DEST or multiple SOURCE(s) to
the existing DIRECTORY, while setting permission modes and
owner/group. In the 4th form, create all components of the given
DIRECTORY(ies).
Mandatory arguments to long options are mandatory for short options too.
Outras coisas úteis, como instalar com propriedade específica, permissões e preservar os registros de data e hora dos arquivos originais, também podem ser obtidas com o uso de install
.
-g, --group=GROUP
set group ownership, instead of process' current group
-m, --mode=MODE
set permission mode (as in chmod), instead of rwxr-xr-x
-o, --owner=OWNER
set ownership (super-user only)
-p, --preserve-timestamps
apply access/modification times of SOURCE files to corresponding
destination files
install
, ao invés de apenas preservar as permissões existentes como comcp
rm
junto comcp
. Isso significa que ele pode sobrescrever arquivos que estão em uso, desvinculando-os (rm
) primeiro.cp
sozinho daria um erro.