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.




