Domine o Comando `install` no Linux/macOS: Copie, Configure e Otimize!

O comando `install` no Linux e macOS é uma ferramenta de cópia de arquivos muito versátil, ideal para usuários experientes que buscam otimizar seu trabalho. Este artigo explora como utilizar este comando de forma eficaz, maximizando a produtividade.

Atenção: Não é um Instalador de Software!

O nome do comando `install` pode ser confuso, pois ele não realiza a instalação de software. Para instalar pacotes em distribuições Linux baseadas em Debian, como o Ubuntu, use o comando `apt-get`. Em outras distribuições, empregue as ferramentas de gerenciamento de pacotes nativas, como `dnf` no Fedora ou `zypper` no openSUSE.

Qual a Função do Comando Install?

Essencialmente, o `install` combina funcionalidades de vários comandos, como `cp` (cópia de arquivos), `chown` (alteração de proprietário), `chmod` (modificação de permissões), `mkdir` (criação de diretórios) e `strip` (remoção de símbolos). Ele permite que você execute essas operações de forma integrada.

O comando `install` permite:

  • Copiar arquivos, similar ao comando `cp`.
  • Controlar a substituição de arquivos existentes.
  • Criar o diretório de destino caso ele não exista, como o `mkdir`.
  • Definir as permissões de acesso aos arquivos, como o `chmod`.
  • Atribuir a propriedade dos arquivos, como o `chown`.
  • Remover informações desnecessárias de arquivos executáveis, como o `strip`.

Apesar da vasta gama de funções, o comando `install` não possui uma grande quantidade de opções.

Casos de Uso

O comando `install` não é uma ferramenta de uso diário, mas é extremamente útil em situações específicas, especialmente no desenvolvimento de software. Imagine que você está criando um novo utilitário e precisa testá-lo fora do ambiente de desenvolvimento. Isso envolve copiar os arquivos do programa para um diretório de teste, que pode precisar ser criado, além de definir as permissões e a propriedade corretas dos arquivos.

Como o desenvolvimento é um processo iterativo, você pode realizar essa sequência de ações várias vezes. O `install` automatiza esse trabalho. E quando o utilitário estiver pronto para ser implantado, o comando `install` garante que ele seja copiado com as permissões adequadas para seu local de uso final.

Exemplo Prático

Um programador está trabalhando em um utilitário chamado “ana”, composto por um arquivo binário executável e um banco de dados. Após os testes, este utilitário deve ser movido para `/usr/local/bin`, tornando-o acessível a todos os usuários do sistema. É importante substituir os nomes de arquivo e os caminhos dos diretórios deste exemplo pelos equivalentes em sua máquina.

Durante o desenvolvimento e os testes, o utilitário será executado em um diretório chamado `~/test/ana`. Os membros do grupo “geek” devem ter permissões de leitura e execução, enquanto outros usuários terão apenas permissão de execução. O `install` utiliza a mesma representação numérica que o `chmod` para as permissões. O programador define as permissões para:

Proprietário: Ler, escrever e executar.
Grupo: Ler e executar.
Outros: Executar.

Utilizando o Comando Install

O diretório de trabalho do programador é `~/work`. O programa foi compilado, gerando o binário “ana”, e o arquivo de banco de dados “Words.db” foi criado. Ambos os arquivos estão prontos para teste. Veja como eles aparecem:

ls -l ana Words.db

O utilitário “ana” gera anagramas a partir de uma frase fornecida via linha de comando. Um teste simples confirma seu funcionamento:

O programador invoca “ana” com a frase “biscoito” e o resultado é o esperado. Agora, é necessário copiar esses arquivos para `~/test/ana` para verificar se o utilitário opera corretamente fora do ambiente de desenvolvimento. O seguinte comando é executado:

install -D -v ana Words.db -t ~/test/ana

As opções usadas no comando são:

  • `D`: Cria diretórios, incluindo diretórios pai, se necessário.
  • `v`: Modo verbose, listando cada diretório criado e cada arquivo copiado.
  • `t`: Especifica o diretório de destino.

A instalação cria o diretório `~/test` e, em seguida, `~/test/ana`. Os arquivos são listados individualmente à medida que são copiados para o diretório de destino.

A listagem dos arquivos em `~/test/ana` confirma que a cópia foi bem-sucedida:

ls -l

O próximo passo é testar o utilitário “ana” executando-o a partir de `~/test/ana`:

O utilitário funciona conforme o esperado, mas as permissões ainda não estão corretas. Os membros do grupo “geek” precisam ter permissões de leitura e execução, enquanto outros usuários devem ter apenas permissões de execução.

Para resolver isso, usamos o seguinte comando, executado com `sudo` para ter permissões de root, necessárias para as opções `-o` e `-g`:

sudo install -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana

As opções adicionadas são:

  • `-b` (backup): Cria backups dos arquivos antes de sobrescrevê-los.
  • `-S` (sufixo): Define o sufixo dos arquivos de backup. Se nenhum sufixo é fornecido, um “~” é usado. Neste caso, usamos “.bak”.
  • `-o` (proprietário): Define o proprietário dos arquivos, neste caso, “dave”.
  • `-g` (grupo): Define o grupo proprietário dos arquivos, neste caso, “geek”.
  • `-m` (modo): Define as permissões dos arquivos usando a sintaxe numérica padrão do `chmod`.

Não usamos mais a opção `-D` (criar diretórios), pois o diretório de teste já existe, e omitimos a opção `-v` (verbose). A listagem dos arquivos em `~/test/ana` mostra os detalhes:

ls -l

Isso confirma que todos os requisitos foram atendidos:

  • Os arquivos foram copiados para o diretório de teste.
  • As permissões foram definidas corretamente.
  • “dave” é o proprietário dos arquivos.
  • O grupo “geek” é o grupo proprietário dos arquivos.
  • Cópias de backup dos arquivos foram criadas, com os nomes “ana.bak” e “Words.db.bak”.

Tudo isso foi realizado com um único comando, o que é bastante eficiente.

O programador faz algumas alterações finais no utilitário e o recompila. Os arquivos alterados precisam ser copiados de `~/work` para `~/test/ana`. A opção `-C` (comparar) faz com que apenas os arquivos que foram alterados sejam copiados. Se o arquivo de origem e o de destino forem iguais, a cópia não é realizada:

sudo install -C -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana

A listagem dos arquivos no diretório de destino mostra que o tamanho do arquivo “ana” foi alterado, sendo maior que “ana.bak”, e seu timestamp também mudou. Isso indica que a nova versão foi copiada. Já “Words.db” não sofreu alteração, então não foi copiado:

ls -l

Em projetos com muitos arquivos, a opção `-C` economiza muito tempo e recursos de disco.

Após o novo teste, é hora de usar `install` para copiar os arquivos para `/usr/local/bin`, tornando o utilitário acessível a todos os usuários do sistema. Como `/usr/local/bin` já existe, não precisamos criá-lo. O comando é uma versão modificada do anterior:

Alteramos o diretório de destino para `/usr/local/bin`. Removemos a opção `-C` porque não existem cópias dos arquivos no destino, e as opções de backup (`-b` e `-S`) também não são necessárias.

sudo install -o dave -g geek -m 751 ana Words.db -t /usr/local/bin

Verificamos a cópia listando os arquivos em `/usr/local/bin`:

ls -l

Finalmente, mudamos o diretório para nossa pasta pessoal e verificamos se o utilitário pode ser executado a partir dali:

Como não é necessário usar `./ana`, o utilitário está sendo executado a partir de `/usr/local/bin`. Missão cumprida!

O comando `install` também pode remover tabelas de símbolos e outras informações desnecessárias dos arquivos binários, reduzindo seu tamanho. O comando abaixo aplica essa otimização ao arquivo “ana” (não ao “Words.db”, que não é um executável), usando a opção `-s` (strip), além de `-b` (backup) e `-S` (sufixo), sendo este último com “S” maiúsculo:

sudo install -s -b -S .bak -o dave -g geek -m 751 ana -t /usr/local/bin

Ao listar os arquivos em `/usr/local/bin`, podemos comparar o tamanho de “ana” com sua versão de backup. O arquivo foi reduzido para quase 60% de seu tamanho original:

ls -l /usr/local/bin

Conclusão

O comando `install` tem um uso bem específico. Embora não seja uma ferramenta de uso diário para muitos usuários, é uma adição valiosa ao seu conjunto de ferramentas. Para as ocasiões em que ele é necessário, o `install` recompensa o esforço de aprendizado com ganhos de eficiência, simplicidade e uma redução significativa na digitação.