Comanda `install` reprezintă un instrument polivalent pentru copierea fișierelor în sistemele Linux și macOS, fiind ideală pentru utilizatorii experimentați ce caută eficiență maximă. Acest articol explorează modalitățile de utilizare a acestei comenzi pentru a lucra mai eficient.
Atenție! Nu este pentru instalarea de software?
Comanda `install` are un nume care poate induce în eroare. În realitate, ea nu se ocupă cu instalarea de software. Dacă dorești să instalezi un pachet software din linia de comandă în Ubuntu sau altă distribuție bazată pe Debian, vei folosi comanda `apt-get`. În alte distribuții Linux, utilizează managerul de pachete specific distribuției, cum ar fi `dnf` în Fedora sau `zypper` în openSUSE.
Atunci, ce face `install`?
Pe scurt, `install` combină funcționalități din mai multe comenzi: `cp` (pentru copiere), `chown` (pentru a schimba proprietarul), `chmod` (pentru a schimba permisiunile), `mkdir` (pentru a crea directoare) și `strip` (pentru a elimina simboluri). Astfel, poți efectua multiple acțiuni cu o singură comandă.
Comanda `install` permite:
- Copierea fișierelor, similar cu `cp`.
- Alegerea dacă se suprascriu sau nu fișierele existente.
- Crearea directorului țintă, dacă acesta nu există, similar cu `mkdir`.
- Setarea permisiunilor de utilizator pentru fișiere, similar cu `chmod`.
- Stabilirea proprietarului fișierelor, similar cu `chown`.
- Eliminarea informațiilor inutile din fișierele executabile, similar cu `strip`.
În ciuda acestor funcționalități, comanda `install` nu are prea multe opțiuni de configurare.
Când să o folosești
Comanda `install` nu este una pe care o vei folosi zilnic. Ea devine utilă în anumite scenarii specifice, mai ales în dezvoltarea de software. Să presupunem că dezvolți un nou utilitar. Pentru a-l testa în afara mediului de dezvoltare, trebuie să copiezi fișierele programului într-un director de test. Acest director ar putea necesita crearea, iar fișierelor trebuie să li se atribuie permisiunile și proprietarul corect.
Deoarece dezvoltarea este un proces iterativ, vei repeta aceste acțiuni de multe ori. Comanda `install` simplifică aceste sarcini. Ulterior, când utilitarul este gata de lansare, poți folosi `install` pentru a-l copia în locația finală, cu permisiunile adecvate.
Exemplu practic
Un dezvoltator lucrează la un utilitar numit `ana`, constând dintr-un fișier binar executabil și o bază de date. După testare, acesta trebuie copiat în `/usr/local/bin` pentru a fi accesibil tuturor utilizatorilor sistemului Linux. În acest exemplu, vom folosi nume de fișiere și căi de directoare specifice, pe care le vei înlocui cu cele corespunzătoare din sistemul tău.
Înainte de lansare, utilitarul va fi testat în directorul `~/test/ana`. Membrii grupului de dezvoltatori vor avea permisiuni de citire și execuție, iar ceilalți utilizatori, doar permisiuni de execuție. Permisiunile vor fi setate folosind reprezentarea numerică a permisiunilor, specifică `chmod`:
- Proprietar: Citire, scriere și execuție.
- Grup: Citire și execuție.
- Alții: Doar execuție.
Cum se utilizează comanda `install`
Directorul de lucru al programatorului nostru fictiv este `~/work`. El a dezvoltat utilitarul `ana` și a creat baza de date `Words.db`. Ambele fișiere sunt gata de testare. Să le vizualizăm:
ls -l ana Words.db
Utilitarul `ana` generează anagrame dintr-o expresie introdusă din linia de comandă. Testul de verificare este simplu.
După ce testează funcționalitatea cu expresia „biscuit”, programatorul dorește să copieze fișierele în directorul `~/test/ana` pentru a verifica funcționarea în afara mediului de dezvoltare. Utilizează următoarea comandă:
install -D -v ana Words.db -t ~/test/ana
Opțiunile folosite în comandă sunt:
- `D`: Creează directoarele, inclusiv directoarele părinte, dacă este necesar.
- `v`: Modul verbos, care afișează fiecare director creat și fiecare fișier copiat.
- `t`: Directorul țintă.
Se observă că `install` creează directorul `~/test` și apoi `~/test/ana`. Fișierele sunt listate pe măsură ce sunt copiate în directorul țintă.
O vizualizare a fișierelor din `~/test/ana` confirmă că acestea au fost copiate corect.
ls -l
Următorul pas este testarea utilitarului `ana` în directorul `~/test/ana`.
Utilitarul funcționează conform așteptărilor. Cu toate acestea, permisiunile nu sunt corecte. Membrii grupului de dezvoltatori ar trebui să aibă permisiuni de citire și execuție, iar ceilalți utilizatori doar permisiuni de execuție.
Această problemă se rezolvă cu următoarea comandă. Notăm utilizarea `sudo` pentru a executa comanda cu drepturi de administrator. Opțiunile `-o` și `-g` necesită acest lucru. Ni se va cere parola când lansăm comanda.
sudo install -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana
- Opțiunea `-b` (backup) creează copii de siguranță ale fișierelor înainte de suprascriere.
- Opțiunea `-S` (sufix) definește sufixul fișierelor de rezervă. Dacă nu se furnizează un sufix, se utilizează tilda (~). Solicităm utilizarea sufixului `.bak`.
- Opțiunea `-o` (proprietar) setează proprietarul fișierului ca fiind `dave`.
- Opțiunea `-g` (grup) specifică grupul proprietar al fișierelor, în acest caz, `geek`.
- Opțiunea `-m` (mod) setează permisiunile folosind sintaxa numerică standard `chmod`.
Nu mai folosim opțiunea `-D` (creare directoare) deoarece directorul de testare există deja. Am omis și opțiunea `-v` (verbos). Vizualizarea fișierelor din directorul `~/test/ana` arată detaliile acestora:
ls -l
Acesta confirmă că cerințele noastre au fost îndeplinite.
- Fișierele au fost copiate în directorul de testare.
- Permisiunile au fost setate corect.
- `dave` este proprietarul fișierelor.
- Grupul `geek` este grupul proprietar al celor două fișiere.
- Au fost create copii de siguranță ale fișierelor, numite `ana.bak` și `Words.db.bak`.
Toate aceste acțiuni au fost efectuate cu o singură comandă.
Programatorul face câteva modificări finale utilitarului și îl recompilă. Fișierele modificate trebuie copiate în `~/test/ana`, din `~/work`. Opțiunea `-C` (comparare) ne permite să evităm copierea fișierelor care nu au fost modificate.
sudo install -C -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana
O vizualizare a fișierelor din directorul țintă arată că dimensiunea fișierului `ana` s-a modificat. El este mai mare decât `ana.bak`. Data și ora de modificare a fișierului `ana` s-au schimbat. Acest lucru se datorează copieri noii versiuni a fișierului.
ls -l
Dimensiunea și data de modificare a fișierului `Words.db` nu s-au schimbat, acesta nu fiind modificat. Opțiunea `-C` (comparare) este utilă în proiecte cu multe fișiere, deoarece economisește timp și spațiu prin copierea doar a fișierelor care au fost modificate.
Programatorul testează din nou utilitarul `ana` pentru a se asigura că funcționează în continuare.
Este timpul să folosim `install` pentru a copia fișierele în directorul `/usr/local/bin`. Astfel, utilitarul va fi accesibil tuturor utilizatorilor sistemului. Știm că `/usr/local/bin` există, așa că nu trebuie să-l creăm. Vom folosi o versiune modificată a ultimei comenzi.
Am schimbat directorul țintă în `/usr/local/bin`. Am eliminat opțiunea `-C` (comparare), deoarece nu există copii ale fișierelor în directorul țintă. De asemenea, am eliminat opțiunile `-b` (backup) și `-S` (sufix), deoarece nu este nevoie să facem copii de siguranță.
sudo install -o dave -g geek -m 751 ana Words.db -t /usr/local/bin
Verificăm că fișierele au fost copiate în `/usr/local/bin`:
ls -l
Pentru un ultim test, ne mutăm în directorul principal și verificăm dacă utilitarul poate fi accesat de acolo.
Comanda `ana` nu a necesitat prefixul `./`, ceea ce înseamnă că este executată din `/usr/local/bin`. Misiune îndeplinită.
Am menționat că `install` poate elimina tabelele de simboluri redundante din fișierele binare, reducându-le dimensiunea. Să facem acest lucru acum. Observă că comanda de mai jos nu include `Words.db`, deoarece acesta este un fișier de date și nu un executabil binar. Pentru a copia și micșora fișierul binar `ana` putem folosi următoarea comandă. Am adăugat opțiunea `-s` (micșorare) și din nou opțiunile `-b` (backup) și `-S` (sufix).
sudo install -s -b -S .bak -o dave -g geek -m 751 ana -t /usr/local/bin
O vizualizare a fișierelor din `/usr/local/bin` ne permite să comparăm dimensiunea fișierului `ana` cu versiunea sa de rezervă. Fișierul `ana` a fost redus la aproape 60% din dimensiunea inițială.
ls -l /usr/local/bin
Concluzie
Comanda `install` este potrivită pentru situații specifice. Pentru mulți, nu va fi o comandă utilizată zilnic sau chiar lunar. Cu toate acestea, este un instrument util de cunoscut. Pentru acele ocazii în care ai nevoie de el, vei aprecia beneficiile în ceea ce privește eficiența, simplitatea și numărul mai redus de apăsări de taste.