Cosa fa / usr / bin / install oltre alla copia?


11
  1. Fa make installcon un Makefile la maggior parte del servizio di guardia /usr/bin/install?

  2. Quale lavoro necessario fa /usr/bin/installoltre a copiare i file appena compilati /usr/bin/local?

  3. La pagina man dice /usr/bin/installcopiare i file e impostare gli attributi. Quali attributi sono così importanti da impostare?

  4. Imposta solo le modalità di autorizzazione e il proprietario / gruppo, che non sono necessari?

"Effettua l'installazione con un Makefile il più delle volte chiamando / usr / bin / install?" No, fa quello che vuole. È un obiettivo da raggiungere. La tua domanda sull'eseguibile di installazione? O di fare? Non è chiaro.
Faheem Mitha,

entrambi. @FaheemMitha
Tim

Ok, bene, 1 e 2 sono domande diverse, e la risposta a 1 è, probabilmente no, ma definisce "il più delle volte". Non sono sicuro del punto 1, comunque.
Faheem Mitha,

Risposte:


17

install offre una serie di funzioni oltre alla copia di file in una directory.

  • l' -sopzione rimuove la tabella dei simboli da un eseguibile, risparmiando spazio
  • l' -mopzione imposta i bit di autorizzazione. I file presenti nella directory dello sviluppatore sono stati creati in base alla sua umask, il che potrebbe impedire ad altri di eseguirli. install -m 755 file1 /usr/local/binassicura che tutti possano eseguire il file, che è probabilmente ciò che lo sviluppatore desidera per un file in una directory condivisa.
  • le opzioni -oe -gimpostano il proprietario e il gruppo. Con cp, il proprietario e il gruppo del file di destinazione verrebbero impostati sull'UID e il gid di chiunque eseguisse il cp, e con cp -p, il proprietario e il gruppo del file di destinazione sarebbero gli stessi del file nella directory di compilazione, nessuno dei quali potrebbe essere ciò che lo sviluppatore vuole. Il wallprogramma deve essere in gruppo tty, il screenprogramma deve essere in gruppo utmp, ecc.
  • riduce il numero di comandi che devono essere inseriti in una ricetta di makefile. install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)è più succinta rispetto alle quattro comandi cp, strip, chmod, e chown.

L'ultimo punto elenco è probabilmente il motivo per cui il installcomando è stato inventato e perché molti makefile lo utilizzano.

Installnon è sempre usato, però. Ho visto cp -r lib $(DESTDIR)/libquando c'è un intero albero pieno di cose da copiare e ./install.shse lo sviluppatore preferisce usare uno script personalizzato. Molti pacchetti hanno un install.shderivato da quello fornito con X11, che è simile installma supporta -tun'opzione (trasforma) per rinominare i file di destinazione in un modo specificato.


2
  1. Dato che i comandi utilizzati in un makefile dipendono essenzialmente dagli sviluppatori del progetto, è difficile dare una risposta definitiva qui. Generalmente direi che è buona norma usare il installcomando in un makefile per tutti i processi di installazione menzionati in 2, ma poi installnon è POSIX quindi usarlo sempre potrebbe non essere l'approccio più portatile

    AFAIK la maggior parte degli strumenti può essere utilizzata per generare automaticamente makefile come automakee cmakeverranno utilizzati install.

  2. Generalmente installviene utilizzato per copiare file e impostare autorizzazioni / proprietario / gruppo in un comando come dici tu. Un'altra funzione comunemente usata è quella di rimuovere simboli non necessari (ad es. Simboli di debug) da un binario che non ne ha più bisogno. Ha anche alcune opzioni extra per cose come fare backup prima di installare e lavorare in un contesto SELinux che può essere utile.

Quali autorizzazioni scegliere dipendono dal file stesso. I file per lo più installati sono leggibili da tutti, ma possono essere scritti solo da root (l'idea è quella di mettere i file di programma in un luogo accessibile da tutti ma non manomettibili). Questo non è il caso di tutto, se il file contiene dati sensibili, è comune limitare l'accesso a un gruppo o solo alla radice.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.