O que / usr / bin / install faz além de copiar?

11
  1. Faz make installcom um Makefile a maior parte do tempo de permanência /usr/bin/install?

  2. Que trabalho necessário faz /usr/bin/installalém de copiar apenas os arquivos compilados /usr/bin/local?

  3. A página do manual diz /usr/bin/installcopiar arquivos e definir atributos. Quais atributos são tão importantes para definir?

  4. Apenas define modos de permissão e proprietário / grupo, que não são necessários?
Tim
fonte
"Torna a instalação com um Makefile a maior parte do tempo chamada / usr / bin / install?" Não, faz o que quer. É um alvo de marca. Sua pergunta sobre a instalação é executável? Ou sobre make? Isso nao esta claro.
Faheem Mitha
ambos. @FaheemMitha
Tim
Ok, bem, 1 e 2 são perguntas diferentes, e a resposta para 1 é, provavelmente não, mas define "na maioria das vezes". Eu não tenho certeza do ponto 1, de qualquer maneira.
Faheem Mitha

Respostas:

17

install oferece vários recursos, além de copiar arquivos para um diretório.

  • a -sopção remove a tabela de símbolos de um executável, economizando espaço
  • a -mopção define os bits de permissão. Os arquivos localizados no diretório do desenvolvedor foram criados sujeitos à sua umask, o que pode impedir que outros os executem. install -m 755 file1 /usr/local/bingarante que todos possam executar o arquivo, o que provavelmente é o que o desenvolvedor deseja para um arquivo em um diretório compartilhado.
  • as opções -oe -gdefinem o proprietário e o grupo. Com cp, o proprietário e o grupo do arquivo de destino seriam definidos como uid e gid de quem executou o cp, e com cp -p, o proprietário e o grupo do arquivo de destino seriam os mesmos do arquivo no diretório de construção, nenhum dos quais pode seja o que o desenvolvedor deseja. O wallprograma precisa estar em grupo tty, o screenprograma precisa estar em grupo utmpetc.
  • reduz o número de comandos que precisam ser colocados em uma receita de makefile. install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)é mais sucinto do que os quatro comandos cp, strip, chmod, e chown.

O último marcador é provavelmente o motivo pelo qual o installcomando foi inventado e por que muitos makefiles o utilizam.

Installnem sempre é usado, no entanto. Vi cp -r lib $(DESTDIR)/libquando há uma árvore inteira cheia de coisas para copiar e ./install.shse o desenvolvedor prefere usar um script personalizado. Muitos pacotes são install.shderivados do que acompanha o X11, que é parecido, installmas suporta uma -topção (transformação) para renomear os arquivos de destino de uma maneira especificada.

Mark Plotnick
fonte
2
  1. Como os comandos usados ​​em um makefile dependem essencialmente dos desenvolvedores do projeto, é difícil dar uma resposta definitiva aqui. Geralmente eu diria que é uma boa prática usar o installcomando em um makefile para qualquer processo de instalação mencionado em 2, mas, novamente, installnão é POSIX, portanto, sempre usá-lo pode não ser a abordagem mais portátil

    O AFAIK, a maioria das ferramentas, pode ser usada para gerar automaticamente makefiles como automakee cmakeserão utilizados install.

  2. Geralmente installé usado para copiar arquivos e definir permissões / proprietário / grupo em um comando, como você diz. Uma outra função comumente usada é retirar símbolos desnecessários (por exemplo, símbolos de depuração) de um binário que não precisa mais deles. Também possui algumas opções extras para fazer backups antes de instalar e trabalhar em um contexto do SELinux, o que pode ser útil.

Quais permissões escolher dependem do próprio arquivo. Os arquivos instalados na maior parte são legíveis por todos, mas somente graváveis ​​pela raiz (a idéia é colocar os arquivos de programa em um local onde seja acessível a todos, mas não possa ser adulterado). Esse não é o caso de tudo, se o arquivo contiver dados confidenciais, é comum limitar o acesso a um grupo ou apenas a raiz.

Graeme
fonte