Ho visto l'install
comando utilizzato in molti Makefile, e la sua esistenza e il suo utilizzo sono un po' confusi. Dalle pagine di manuale, sembra una copia di cp
con meno funzioni, ma suppongo che non verrebbe utilizzato a meno che non avesse qualche vantaggio su cp
. Qual è il problema?
Risposta accettata:
install
non solo copia i file, ma ne cambia anche la proprietà e le autorizzazioni e facoltativamente rimuove i simboli di debug dagli eseguibili. Combina cp
con chown
, chmod
e strip
. È un comodo strumento di livello superiore per eseguire una sequenza comune di attività elementari.
Un vantaggio di install
su cp
per l'installazione di eseguibili è che se la destinazione esiste già, rimuove il file di destinazione e ne crea uno nuovo. Questo elimina tutte le proprietà attuali come gli elenchi di controllo di accesso e le funzionalità, che possono essere viste sia come un vantaggio che come un aspetto negativo. Quando si aggiornano gli eseguibili, se ci sono istanze in esecuzione di questo eseguibile, continuano a funzionare inalterati. Al contrario, cp
aggiorna il file in atto se ce n'è uno. Sulla maggior parte delle varianti Unix, questo non riesce con l'errore EBUSY¹ se la destinazione è un eseguibile in esecuzione; su alcuni può causare l'arresto anomalo del target perché carica le sezioni di codice in modo dinamico e la modifica del file provoca il caricamento di codice senza senso.
install
è un comando BSD (aggiunto in 4.2BSD, cioè all'inizio degli anni '80). Non è stato adottato da POSIX.
¹ “File di testo occupato”. In questo contesto, "file di testo" significa "file eseguibile binario", per oscuri motivi storici.