Qual é o objetivo do comando 'install'?


49

Eu já vi o installcomando usado em muitos Makefiles, e sua existência e uso são meio confusos. Nas páginas de manual, parece uma imitação cpcom menos recursos, mas presumo que não seria usado a menos que tivesse alguma vantagem cp. Qual é o problema?

Respostas:


50

installnã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 cpcom chown, chmode strip. É uma ferramenta conveniente de nível superior que realiza uma sequência comum de tarefas elementares.

Uma vantagem installmais cppara 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, cpatualiza 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 .


Nota importante (tanto quanto eu posso entendê-lo) é que ele também combina rmjunto com cp. Isso significa que ele pode sobrescrever arquivos que estão em uso, desvinculando-os ( rm) primeiro. cpsozinho daria um erro.
code_fodder

10

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.


9
Não é atômico. Atômico significa que não há estados intermediários visíveis para outros processos. installfaz 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.

3

Com o installcomando 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 chownnesse cenário


1

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

Referências


4
Como eu disse na pergunta, li a página principal; isso me deixou sem saber o que isso adiciona à funcionalidade do cp.
azernik

SLM destacou a funcionalidade específica que define os dois separados: você pode definir proprietário específico, grupo e modo para o arquivo destino com install, ao invés de apenas preservar as permissões existentes como comcp
Joshua Miller
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.