Qual é o objetivo do comando 'install'?

48

Eu vi o comando install usado em muitos Makefiles, e sua existência e uso são meio confusos. Das manpages, parece uma imitação de cp com menos recursos, mas presumo que não seria usada a menos que tivesse alguma vantagem sobre cp . Qual é o problema?

    
por azernik 11.10.2013 / 22:04

4 respostas

48

install não apenas copia arquivos, mas também altera sua propriedade e permissões e, opcionalmente, remove os símbolos de depuração dos executáveis. Ele combina cp com chown , chmod e strip . É uma ferramenta conveniente de alto nível para realizar uma sequência comum de tarefas elementares.

Uma vantagem de install over cp para instalar executáveis é que, se o destino já existir, ele remove o arquivo de destino e cria um novo. Isso elimina quaisquer propriedades atuais, como listas de controle de acesso e capacidades, que podem ser vistas como vantagens e desvantagens. Ao atualizar executáveis, se houver instâncias em execução desse executável, elas não serão afetadas. Por outro lado, cp atualiza o arquivo se houver um. Na maioria das variantes Unix, isso falha com o erro EBUSY¹ se o destino for um executável em execução; em alguns, isso pode causar falha no destino, pois ele carrega seções de código dinamicamente e modifica o arquivo, fazendo 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”. Neste contexto, "arquivo de texto" significa "arquivo executável binário", para razões históricas obscuras .

    
por 14.10.2013 / 02:41
10

Ele fornece uma maneira padronizada de manipular a propriedade e as permissões de um arquivo ou diretório ao copiar o arquivo ou criar o diretório, em um único comando.

    
por 11.10.2013 / 22:07
3

Com o comando install , podemos copiar o arquivo com permissões de desejo

Exemplo que usa principalmente durante a configuração do ldap

install -o ldap -g ldap /etc/openldap/DB_CONFIG_EXAMPLE  /var/lib/ldap/DB_CONFIG

Isso nos poupa de fazer chown ldap. /var/lib/ldap/DB_CONFIG , se você copiou usando cp , você também precisará chown neste cenário

    
por 11.10.2013 / 22:15
1

Veja a man page de install :

$ man install

trecho

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 a instalação com propriedades específicas, permissões e preservação dos timestamps dos arquivos originais, também podem ser obtidas através do 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

Referências

por 11.10.2013 / 22:11