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

10
  1. O make install com um Makefile na maioria das vezes chama /usr/bin/install ?

  2. Que trabalho necessário faz o /usr/bin/install além de copiar os arquivos justamente compilados para /usr/bin/local ?

  3. A página man diz /usr/bin/install copiar arquivos e definir atributos. Quais atributos são tão importantes para definir?

  4. É só definir modos de permissão e proprietário / grupo, que não são necessário?
por Tim 09.07.2014 / 18:30

2 respostas

15

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

  • a opção -s remove a tabela de símbolos de um executável, economizando espaço
  • a opção -m define os bits de permissão. Os arquivos que estão no diretório do desenvolvedor foram criados sujeitos a umask, o que pode impedir que outros os executem. install -m 755 file1 /usr/local/bin garante que todos possam executar o arquivo, o que é provável o que o desenvolvedor deseja para um arquivo em um diretório compartilhado.
  • as opções -o e -g definem 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 que o arquivo no diretório de construção, nenhum dos quais pode ser o que o desenvolvedor deseja. O programa wall precisa estar no grupo tty , o programa screen precisa ser o grupo utmp , etc.
  • reduz o número de comandos que precisam ser colocados em uma receita do makefile. install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR) é mais sucinto que os quatro comandos cp , strip , chmod e chown .

O último ponto de marcador é provável porque o comando install foi inventado e porque muitos makefiles o usam.

Install nem sempre é usado. Eu vi cp -r lib $(DESTDIR)/lib quando há uma árvore inteira cheia de coisas para copiar e ./install.sh se o desenvolvedor preferir usar um script personalizado. Muitos pacotes têm um install.sh derivado daquele que vem com o X11, que é como install , mas suporta a opção -t (transform) para renomear os arquivos de destino de uma maneira específica.

    
por 09.07.2014 / 19:10
2
  1. Como os comandos que são usados em um makefile são essencialmente para os desenvolvedores do projeto, é difícil dar uma resposta definitiva aqui. Geralmente eu diria que é uma boa prática usar o comando install em um makefile para qualquer processo de instalação mencionado em 2, mas novamente install não é POSIX, então usá-lo sempre pode não ser a abordagem mais portátil

    AFAIK a maioria das ferramentas pode ser usada para gerar automaticamente makefiles como automake e cmake usarão install .

  2. Geralmente install é usado para copiar arquivos e configurar 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. Ele também tem algumas opções extras para coisas como fazer backups antes de instalar e trabalhar dentro de um contexto do SELinux, o que pode ser útil.

Quais permissões escolher dependem do próprio arquivo. Na maioria das vezes, os arquivos instalados são legíveis por todos, mas podem ser gravados somente pelo usuário root (a idéia é colocar os arquivos de programas em um local acessível para todos, mas não pode ser adulterado). Este não é o caso com tudo, se o arquivo contiver dados sensíveis, então é comum limitar o acesso a um grupo ou apenas ao root.

    
por 09.07.2014 / 19:26