Ho visto in molti posti usato install -d
per creare directory e install -c
copiare un file. Perché non usare mkdir
e cp
? C'è un vantaggio nell'uso install
?
Ho visto in molti posti usato install -d
per creare directory e install -c
copiare un file. Perché non usare mkdir
e cp
? C'è un vantaggio nell'uso install
?
Risposte:
Dipende da cosa stai facendo.
Il install
comando viene normalmente utilizzato negli script di installazione forniti con pacchetti e codice sorgente per l'installazione di un file binario sul sistema. Può anche essere usato per installare qualsiasi altro file o directory. Oltre alle opzioni -d
e -c
che hai -m
per specificare le nuove autorizzazioni del file da installare, quindi non devi fare a cp
e a chmod
per ottenere lo stesso risultato. Per esempio:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Hai anche opzioni -g
e -o
per impostare rispettivamente il gruppo target e il proprietario. Questo evita chiamate separate a chown
. In generale, l'uso install
accorcia lo script e lo rende più conciso eseguendo la creazione di file, la copia, l'impostazione della modalità e le cose correlate in un comando anziché in molti.
Per riferimento, vedere man install
. Per l'utilizzo, basta dare un'occhiata a qualsiasi script di installazione fornito con un codice sorgente del pacchetto .
"installa" generalmente combina le seguenti azioni:
Quindi, segue l'approccio Unix che uno strumento deve essere creato per una singola ma completa azione di installazione di un file creato da uno strumento di costruzione nella sua posizione di lavoro.
Il concetto completo, come ho descritto, è implementato nei sistemi BSD (nella cosiddetta versione "xinstall"); Tratto qui la modalità "copia sicura" (nuova versione con ridenominazione atomica) come vitale per questo. I sistemi Linux (dai coreutils) mancano di questa parte importante e sono inclini a gareggiare tra l'eliminazione e la riapertura da parte di un processo di spettatori; ma questo avrebbe potuto essere coperto dai gestori di pacchetti.
Oltre alle descrizioni precedenti qui sull'uso, c'è una differenza di basso livello tra cp
e install
, almeno su Linux. Se si esegue la copia su un file esistente, cp
sovrascrive l'inode esistente del file, install
creando sempre un nuovo inode per lo stesso nome file.
Questo fa la differenza quando si installa una nuova versione di un binario in esecuzione. L'uso cp
causa un errore EBUSY, mentre install
riuscirà. Il binario in esecuzione utilizzerà comunque la versione precedente, ma la nuova versione viene utilizzata se il programma viene riavviato.
Se la directory in questione esiste già:
mkdir -p
proverà a impostare i bit di proprietà e modalità fileinstall -d
non tenterà di impostare i bit di proprietà e modalità fileQuesto è per mkdir
e install
da coreutils GNU . Entrambi usano la stessa make_dir_parents
funzione, ma con il preserve_existing
parametro è impostato su false
o true
, rispettivamente.
install
o$(INSTALL)
nei makefile contrassegna anche quei passaggi come passaggi di copia dell'installazione e non come normali passaggi di copia. Questo potrebbe essere utile.