Comando install in Linux: copiare file e impostare permessi e proprietà

install copia file e imposta esplicitamente permessi, proprietario e gruppo; può anche creare le directory necessarie e conservare le date dei file. È utile per collocare programmi e configurazioni nei percorsi previsti, ma non gestisce i pacchetti o le loro dipendenze.

Gli esempi si riferiscono a GNU Coreutils. Controlla install --help e man install sulla macchina di destinazione: le opzioni e i dettagli possono cambiare fra implementazioni. I comandi con sudo e percorsi di sistema illustrano operazioni da adattare dopo aver verificato file, utenti, gruppi e backup; la prova locale successiva non richiede privilegi amministrativi.

Che cos’è il comando install?

GNU install combina copia e impostazione degli attributi della destinazione. Non è una copia completa degli attributi originali: per esempio non conserva gli attributi estesi, detti xattr, che possono contenere metadati aggiuntivi. Per impostazione predefinita assegna lettura, scrittura ed esecuzione al proprietario e lettura ed esecuzione a gruppo e altri, disabilitando i bit speciali set-user-ID e set-group-ID. Questi bit modificano l’identità usata durante l’esecuzione o alcune regole di gruppo delle directory: se non ti servono, non abilitarli. Imposta sempre il modo adatto al ruolo del file.

Sintassi di base

install [OPTION]... SOURCE DESTINATION
install [OPTION]... SOURCE... DIRECTORY
install -d [OPTION]... DIRECTORY...

Con due percorsi, il primo è la sorgente e il secondo la destinazione. Se l’ultimo operando è una directory esistente, GNU copia le sorgenti al suo interno mantenendone i nomi; -T permette invece di indicare un percorso finale esatto. Racchiudi tra virgolette i percorsi con spazi e usa -- per terminare le opzioni quando un nome inizia con un trattino. La sintassi precedente contiene segnaposto e non va eseguita letteralmente.

Utilizzo base di install

Installare un eseguibile

Il file mytool deve già esistere ed essere adatto al sistema di destinazione; /usr/local/bin deve esistere. Il modo 0755 assegna tutti i permessi al proprietario e lettura ed esecuzione a gruppo e altri. Dopo il comando il programma si trova in /usr/local/bin/mytool; la sorgente rimane. sudo serve se non puoi scrivere nel percorso o impostare gli attributi richiesti. Prima di eseguire questa riga su una macchina reale, verifica che non sostituisca un programma già in uso.

sudo install -m 0755 mytool /usr/local/bin/mytool

Installare un file di configurazione

Prepara e valida mytool.conf prima della copia e verifica che /etc/mytool esista; senza -D le directory mancanti non vengono create automaticamente. 0644 permette a tutti di leggere il file e soltanto al proprietario di modificarlo: è adatto a configurazioni pubbliche, non a password o chiavi private. Per dati riservati valuta 0600 o 0640 con il gruppo appropriato. Un file già presente può essere sostituito: conserva prima una copia verificata.

sudo install -m 0644 mytool.conf /etc/mytool/mytool.conf

Creare una directory di installazione

Con -d, install crea directory senza copiare un file. Nell’esempio l’utente e il gruppo myapp devono esistere: il comando non li crea. Il risultato previsto è /var/lib/myapp con proprietario e gruppo myapp e modo 0750, cioè accesso completo al proprietario, lettura e attraversamento al gruppo, nessun accesso agli altri. GNU crea eventuali directory genitrici con gli attributi predefiniti e permessi di base 0755, indipendentemente da -m e dalla maschera di creazione umask: il modo richiesto non viene applicato a tutta la gerarchia. Anche gli attributi di una directory finale già esistente possono essere modificati; controlla prima il percorso.

sudo install -d -m 0750 -o myapp -g myapp /var/lib/myapp

Verificare copia e permessi in una prova locale

Crea una sottocartella nuova per la prova: se esiste già o un passaggio fallisce, il blocco si interrompe. Lo script dimostrativo stampa demo install. cmp controlla che i dati copiati siano uguali alla sorgente; stat mostra il modo del file installato. Le parentesi lasciano invariata la directory della shell principale.

(
  mkdir install-check || exit 1
  cd install-check || exit 1
  printf '%s\n' '#!/bin/sh' 'echo "demo install"' > demo-tool || exit 1
  install -m 755 demo-tool demo-tool-installed || exit 1
  cmp demo-tool demo-tool-installed || exit 1
  stat -c '%a %n' demo-tool-installed
)

Output atteso del blocco su un filesystem Linux che supporta i permessi indicati:

755 demo-tool-installed

755 è il modo della destinazione e non dimostra da solo che un programma sia corretto. Dalla cartella che contiene install-check puoi eseguire ./install-check/demo-tool-installed: l’output atteso è demo install. La prova confronta anche i dati con cmp; per un programma reale verifica separatamente architettura, interprete o librerie necessarie e percorso usato dal servizio.

Opzioni principali

Opzione Scopo
-m MODE Imposta i permessi del file o della directory finale: per esempio 0755 per un eseguibile e 0644 per dati pubblicamente leggibili.
-o OWNER Imposta il proprietario con i privilegi necessari; non crea l’account indicato.
-g GROUP Imposta il gruppo, se consentito; non crea il gruppo.
-d Crea le directory indicate e i genitori mancanti. Gli attributi richiesti riguardano le directory indicate, non automaticamente tutti i genitori.
-D Crea i genitori mancanti del file finale, poi lo copia. Con -t crea la directory contenitore e la relativa gerarchia.
-t DIR Specifica la directory contenitore. Deve esistere, salvo uso con -D.
-p Applica alla destinazione i tempi di accesso e modifica della sorgente.
-s Rimuove le tabelle dei simboli dagli eseguibili binari installati usando strip; non è un’opzione per normali script o configurazioni.
-C Confronta dati e attributi rilevanti e lascia invariata una destinazione già corrispondente. Non equivale a confrontare soltanto la data.

Il manuale GNU di install descrive anche -C: confronta contenuto, proprietario, gruppo, permessi ed eventualmente il contesto di sicurezza SELinux, cioè l’etichetta usata da quel sistema di controllo degli accessi. Specificare esplicitamente modo e identità richieste evita di basarsi su valori predefiniti non adatti; eredità di gruppo e liste di controllo degli accessi (ACL) possono rendere meno prevedibile la scelta degli attributi. Per -s serve un programma strip adatto al formato binario e alla piattaforma di destinazione; conserva il binario con i simboli se ti occorre per la diagnosi.

Esempi pratici

Installare un file creando i percorsi genitori

myapp.service deve essere un file sorgente già pronto. -D crea i genitori mancanti di /etc/systemd/system/myapp.service e vi copia il file con modo 0644; non avvia il servizio e non verifica che il suo contenuto sia valido. Questo è un esempio su un percorso di sistema da adattare, non un passaggio della prova locale. Se una directory richiede un proprietario o permessi diversi, preparala separatamente con install -d e verifica ogni livello: il modo del file non è il modo dei suoi genitori.

sudo install -D -m 0644 myapp.service /etc/systemd/system/myapp.service

Installare più file in una directory

Prepara templates con i file HTML da copiare e verifica che /usr/local/share/myapp esista già; con la sola opzione -t non viene creata. La shell espande templates/*.html prima di avviare install, che copia ciascun file con il suo nome finale. Controlla l’elenco selezionato: normalmente il pattern esclude i nomi nascosti e, con Bash predefinito, se non trova corrispondenze viene passato letteralmente e causa un errore. Il risultato atteso sono copie dei file in quella directory con modo 0644, senza rimuovere le sorgenti. Evita nomi finali duplicati e non presumere che una lista di copie venga annullata integralmente dopo un errore.

sudo install -m 0644 -t /usr/local/share/myapp templates/*.html

Verificare gli attributi installati

Dopo aver adattato ed eseguito l’esempio di installazione del programma, stat mostra permessi, proprietario, gruppo e percorso di /usr/local/bin/mytool; i nomi effettivi dipendono dagli utenti e dai gruppi del sistema. file identifica il formato riconosciuto, ma non dimostra da solo che il programma si avvii o che tutte le dipendenze siano disponibili. Per verificare che i dati siano rimasti identici puoi confrontare sorgente e destinazione con cmp; se hai usato -s, la rimozione dei simboli cambia intenzionalmente il binario.

stat -c '%A %U:%G %n' /usr/local/bin/mytool
file /usr/local/bin/mytool

install e comandi correlati

Comando o metodo Ruolo principale Quando usarlo
install Copiare file impostando gli attributi Collocare risultati di compilazione e configurazioni
cp Copiare file con una scelta più ampia di comportamenti Copie generiche o conservazione di attributi secondo le opzioni scelte
mkdir Creare directory senza copiare file Preparare una struttura di lavoro
apt o dnf Gestire pacchetti e dipendenze Software fornito dalla distribuzione

Avvertenze importanti

Non è un gestore di pacchetti

install non registra automaticamente i file in un database di pacchetti e non pianifica dipendenze, aggiornamenti o rimozione completa. Se il software è fornito dalla distribuzione, valuta il suo gestore di pacchetti. Per un’installazione manuale conserva l’elenco dei percorsi creati: rimuoverli in seguito richiede controlli e una procedura separata.

Specificare i permessi invece di assumere i valori predefiniti

Il modo predefinito GNU abilita anche l’esecuzione; non lasciarlo implicito per configurazioni o segreti. Usa -m e controlla anche il proprietario, il gruppo e i permessi delle directory genitrici. La proprietà della sorgente non viene semplicemente conservata: con privilegi amministrativi la destinazione è normalmente di root, salvo -o, mentre il gruppo predefinito è quello corrente del processo, salvo -g. Su sistemi con regole di sicurezza aggiuntive possono servire verifiche ulteriori.

Pianificare la sostituzione dei file attivi

Una copia riuscita non costituisce una distribuzione completa o una garanzia di sostituzione atomica dell’intero servizio. Prima di sostituire una configurazione salva una copia verificata, confronta le modifiche e valida il nuovo contenuto; GNU install -b può conservare la destinazione precedente con un suffisso di backup, normalmente ~ se non configurato diversamente. Per il ripristino servono quella copia e i suoi attributi corretti. Quando è necessaria una transizione atomica, cioè un cambio senza stato intermedio visibile, prepara una strategia separata nello stesso filesystem e verifica anche l’effetto sul servizio; non trattare install come una transazione con annullamento automatico.

FAQ

Il comando install installa pacchetti software?

No. Copia file e ne imposta gli attributi; non scarica pacchetti e non gestisce le loro dipendenze o registrazioni di installazione.

Perché usare install invece di cp?

Permette di specificare copia, permessi e proprietà nello stesso comando. -D può creare i genitori del percorso finale e -d prepara directory senza copiare file. Se devi conservare gli attributi originali, valuta invece le opzioni adatte di cp.

Può creare solo una directory?

Sì. Usa install -d percorso e aggiungi -m, -o e -g quando necessari e consentiti. Gli attributi richiesti non vengono applicati automaticamente a tutti i genitori creati.

Come si preservano i timestamp della sorgente?

Usa -p o --preserve-timestamps per applicare tempi di accesso e modifica della sorgente. Senza questa opzione GNU usa il momento dell’installazione; i tempi di creazione o cambiamento dei metadati non sono inclusi in questa promessa.

Documentazione di riferimento