Risposte:
Una differenza significativa è che cp tronca il file di destinazione e inizia a copiare i dati dall'origine nel file di destinazione.
install, d'altra parte, rimuove prima il file di destinazione.
Ciò è significativo perché se il file di destinazione è già in uso, potrebbero accadere cose brutte a chiunque stia usando quel file nel caso in cui ci sia cp
un nuovo file sopra di esso. ad esempio, la sovrascrittura di un eseguibile in esecuzione potrebbe non riuscire. Troncare un file di dati su cui un processo esistente è impegnato a leggere / scrivere potrebbe causare comportamenti piuttosto strani. Se rimuovi prima il file di destinazione, come fa l'installazione, le cose continuano in modo molto simile al normale: il file rimosso non viene effettivamente rimosso fino a quando tutti i processi non lo chiudono.
Tecnicamente, la differenza tra install -c
e cp
è che install
imposta le autorizzazioni del file di destinazione su rwxr-xr-x
. cp
conserva le autorizzazioni del file di origine meno umask. Questi comportamenti predefiniti sono utili in diverse situazioni. Ovviamente, con tutte le opzioni che entrambe offrono cp
e install
offrono oggigiorno, le funzionalità sono convergenti.
Al giorno d'oggi, install
è comunemente usato nei makefile, cp
ovunque. Questa distinzione è talvolta utile perché alcuni sistemi operativi o sistemi di installazione consentono di agganciarsi al install
programma per registrare i pacchetti installati. I moderni sistemi di gestione dei pacchetti rendono questo tipo di obsoleto, ma alcune persone lo usano ancora. Inoltre, la possibilità di impostare le autorizzazioni del file di destinazione nello stesso modo è molto conveniente.
L' install
utilità, alla base, è una fantasia cp
. Ma come strumento specificamente installa, contiene alcune funzionalità che cp
non lo fanno. Il mio /usr/bin/install
da coreutils GNU non solo copie, ma anche in grado di cambiare permanenti / proprietà come bandiere Arg (risparmio chgrp
, chown
, chmod
invocazioni) l'opzione di informazioni di debug striscia (salvataggio di strip
un'invocazione) e anche qualche mojo per contesti SELinux.
Fornisce solo azioni utili utili per le installazioni di software. Nessuno sta cambiando la vita, tutti sono utili e rendono i tuoi script più puliti.
cp --remove-destination
nei coreutils GNU.