Una differenza significativa è che cp tronca il file di destinazione e inizia a copiare i dati dall'origine nel file di destinazione.
install, invece, rimuove prima il file di destinazione.
Questo è significativo perché se il file di destinazione è già in uso, potrebbero accadere cose brutte a chiunque stia usando quel file nel caso tu cp
un nuovo file sopra di esso. per esempio. la sovrascrittura di un eseguibile in esecuzione potrebbe non riuscire. Il troncamento di un file di dati su cui un processo esistente è impegnato a leggere/scrivere potrebbe causare un comportamento piuttosto strano. Se rimuovi prima il file di destinazione, come fa l'installazione, le cose continuano come al solito:il file rimosso non viene effettivamente rimosso fino a quando tutti i processi non chiudono quel file.
Tecnicamente, la differenza tra install -c
e cp
è quel install
imposta i permessi del file di destinazione su rwxr-xr-x
. cp
conserva i permessi del file sorgente meno l'umask. Questi comportamenti predefiniti sono utili in diverse situazioni. Ovviamente, con tutte le opzioni che entrambi cp
e install
offerta al giorno d'oggi, le funzionalità sono convergenti.
Al giorno d'oggi, install
è comunemente usato nei makefile, cp
in qualsiasi altro posto. Questa distinzione è occasionalmente utile perché alcuni sistemi operativi o sistemi di installazione consentono di collegarsi 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 i permessi del file di destinazione nello stesso passaggio è molto comoda.
Il install
utility, alla sua base, è un elegante cp
. Ma essendo uno strumento specificamente installato, contiene alcune funzionalità che cp
no. Il mio /usr/bin/install
da GNU coreutils non solo copia, ma può anche cambiare perms/ownership come flag arg (salvando chgrp
, chown
, chmod
invocazioni) un'opzione per rimuovere le informazioni di debug (salvando un strip
invocazione) e anche qualche mojo per i contesti SELinux.
Fornisce solo azioni di convenienza utili per le installazioni di software. Nessuno cambia la vita, tutti sono utili e rendono i tuoi script più puliti.