Come copiare file utilizzando il comando “installa” su Linux

Il comando `install` si rivela uno strumento versatile per la copia di file in ambienti Linux e macOS, ideale per utenti esperti che ricercano efficienza. Approfondiamo insieme le sue funzionalità per ottimizzare il tuo flusso di lavoro.

Il nome inganna: non installa software

Potrebbe sorprenderti, ma il comando `install` non si occupa dell’installazione di software. Se il tuo obiettivo è installare un pacchetto su Ubuntu o altre distribuzioni Debian, il comando corretto è `apt-get`. Per altre distribuzioni, come Fedora o openSUSE, utilizza rispettivamente `dnf` o `zypper`.

Cosa fa realmente `install`?

Il comando `install` combina in sé le funzionalità di diversi comandi essenziali: `cp` (copia file), `chown` (modifica il proprietario), `chmod` (cambia le autorizzazioni), `mkdir` (crea directory) e `strip` (rimuove simboli). In pratica, `install` permette di eseguire azioni combinate in un’unica operazione.

Nello specifico, `install` può:

  • Copiare file, come farebbe `cp`.
  • Sovrascrivere o meno i file esistenti.
  • Creare la directory di destinazione se non esistente, emulando `mkdir`.
  • Impostare le autorizzazioni di accesso ai file, come `chmod`.
  • Modificare il proprietario dei file, come `chown`.
  • Rimuovere dati superflui dai file eseguibili, come `strip`.

Nonostante la sua potenza, il comando `install` non presenta un numero eccessivo di opzioni.

Quando usare `install`

L’uso del comando `install` non è quotidiano, ma si rivela prezioso in situazioni specifiche, come nello sviluppo software. Durante la creazione di una nuova utility, è necessario testarla al di fuori dell’ambiente di sviluppo, copiando i file in una directory di prova e impostando permessi e proprietà corretti. `install` semplifica queste operazioni, automatizzandole e riducendo il tempo necessario per queste iterazioni.

Una volta che la nuova utility è pronta per la distribuzione, `install` può essere usato per copiare i file nella posizione definitiva con le autorizzazioni corrette.

Esempio pratico

Immagina un programmatore che sta lavorando a una utility chiamata “ana”, composta da un file binario eseguibile e un database. Dopo i test, i file devono essere copiati in `/usr/local/bin` per renderla accessibile a tutti gli utenti del sistema. Ricorda di sostituire i nomi e i percorsi con quelli del tuo ambiente quando usi `install`.

Durante i test, i file saranno copiati in `~/test/ana`. I membri del gruppo “geek” dovranno avere permessi di lettura ed esecuzione, mentre altri utenti solo di esecuzione. Utilizzando la notazione numerica di `chmod`, il programmatore imposta i permessi come segue:

Proprietario: lettura, scrittura ed esecuzione.
Gruppo: lettura ed esecuzione.
Altri: solo esecuzione.

Come usare il comando `install`

Il programmatore lavora nella directory `~/work` e ha già creato i file `ana` (il binario) e `Words.db` (il database). Ecco come appaiono i file:

ls -l ana Words.db

La utility “ana” crea anagrammi da una frase data in input. Il test di verifica è semplice:

Dopo aver testato “ana” con la frase “biscotto”, il programmatore copia i file in `~/test/ana` con questo comando:

install -D -v ana Words.db -t ~/test/ana

Le opzioni usate sono:

  • `-D`: crea le directory principali se necessario.
  • `-v`: verbose, mostra le azioni compiute.
  • `-t`: directory di destinazione.

Come si vede dall’output, `install` crea le directory `~/test` e `~/test/ana` e poi copia i file al loro interno.

La verifica con `ls` conferma la corretta copia:

ls -l

Ora, è possibile testare l’utility dalla nuova posizione:

L’utility funziona correttamente, ma le autorizzazioni non sono corrette. Per risolvere questo problema e assegnare i permessi corretti, si usa `install` con `sudo`:

sudo install -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana

Le nuove opzioni sono:

  • `-b`: crea un backup prima di sovrascrivere.
  • `-S`: definisce il suffisso per i file di backup.
  • `-o`: specifica il proprietario dei file.
  • `-g`: specifica il gruppo proprietario dei file.
  • `-m`: imposta le modalità dei file con la notazione numerica di `chmod`.

Non è stato necessario usare `-D` perché la directory esiste già, e `-v` è stato omesso per ridurre l’output. Ecco l’output di `ls` dopo aver eseguito il comando:

ls -l

Ora, tutti i requisiti sono stati soddisfatti:

  • I file sono stati copiati.
  • Le autorizzazioni sono state impostate correttamente.
  • “dave” è il proprietario dei file.
  • “geek” è il gruppo proprietario.
  • Sono stati creati i backup dei file.

Un solo comando ha permesso di eseguire tutte queste operazioni.

Se il programmatore modifica l’utility e ricompila, può copiare le nuove versioni dei file usando l’opzione `-C` che confronta i file e copia solo quelli modificati:

sudo install -C -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana

Verificando i file, si nota che la dimensione e il timestamp del file `ana` sono cambiati, mentre quelli di `Words.db` sono rimasti invariati, perché non è stato modificato.

ls -l

L’opzione `-C` consente di risparmiare tempo e risorse copiando solo i file modificati, soprattutto in progetti con molti file.

Dopo ulteriori verifiche, è ora di copiare i file in `/usr/local/bin`. Per farlo, è necessario modificare il comando precedente, omettendo l’opzione `-C`, poiché non ci sono file da confrontare nella directory di destinazione, e le opzioni `-b` e `-S`, perché non c’è bisogno di backup:

sudo install -o dave -g geek -m 751 ana Words.db -t /usr/local/bin

La verifica con `ls` conferma che i file sono stati copiati:

ls -l

Ora, per verificare che l’utility funzioni da qualsiasi directory, si passa alla home e si esegue `ana`:

L’utility funziona senza specificare il percorso, dimostrando che è stata installata correttamente in `/usr/local/bin`.

Infine, `install` può ridurre le dimensioni del file binario rimuovendo le tabelle dei simboli. Per farlo, si usa l’opzione `-s` (strip). Ricorda che questa operazione è efficace solo sui file binari, non sui database. È stata aggiunta di nuovo l’opzione `-b` (backup) e `-S` con la S maiuscola per specificare l’estensione del backup.

sudo install -s -b -S .bak -o dave -g geek -m 751 ana -t /usr/local/bin

Confrontando le dimensioni del file `ana` nella directory `/usr/local/bin`, si può notare che la sua dimensione è diminuita del 60%:

ls -l /usr/local/bin

Conclusioni

Il comando `install` è uno strumento prezioso, anche se non di uso quotidiano per tutti. Familiarizzare con esso e comprenderne le funzionalità permette di ottimizzare il proprio workflow e di eseguire operazioni complesse con semplicità ed efficienza. In sintesi, conoscere `install` è un investimento di tempo che ripaga con un’esperienza d’uso più fluida e meno stress.