Hur man kopierar filer med kommandot ”installera” på Linux

By rik

Install-kommandot är ett flexibelt verktyg för filkopiering i Linux och macOS, särskilt användbart för avancerade användare som strävar efter effektivitet. Denna artikel utforskar hur du kan arbeta smartare med detta kommando.

Är det verkligen inte för programvaruinstallation?

Kommandot ”install” har kanske det mest missvisande namnet bland alla Linux-kommandon. Det faktiskt *installerar* inte programvara i traditionell mening. För att installera programpaket via kommandoraden i Ubuntu eller andra Debian-baserade system, använd istället kommandot `apt-get`. På andra Linux-distributioner, använd din distributions specifika pakethanterare, till exempel `dnf` på Fedora eller `zypper` på openSUSE.

Vad gör då ”install”?

I grund och botten kombinerar ”install” funktionalitet från flera kommandon som `cp` (kopiera), `chown` (ändra ägare), `chmod` (ändra behörigheter), `mkdir` (skapa katalog) och `strip` (ta bort symboler). Det ger dig möjlighet att utföra alla dessa funktioner i en enda operation.

Kommandot ”install” kan:

  • Kopiera filer, likt kommandot `cp`.
  • Erbjuder valmöjligheter för att skriva över befintliga filer.
  • Skapa målkataloger om de inte existerar, som `mkdir`.
  • Sätta behörighetsflaggor för filer, som `chmod`.
  • Ändra ägaren till filerna, som `chown`.
  • Ta bort onödiga data från körbara filer, som `strip`.

Trots sin funktionalitet har kommandot ”install” inte heller
många alternativ
att hantera.

När bör man använda det?

”install” är inte ett verktyg du förmodligen kommer att använda dagligen. Det är mest användbart i specifika situationer, som vid programvaruutveckling. Anta att du utvecklar ett nytt verktyg. För att testa det utanför utvecklingsmiljön, behöver du kopiera filerna till en testkatalog. Denna katalog kanske måste skapas, och du behöver justera filernas behörigheter och ägarskap.

Eftersom utveckling ofta är en iterativ process, kan denna sekvens av åtgärder behöva upprepas flera gånger. Kommandot ”install” kan automatisera detta arbete. När ditt verktyg är redo att distribueras kan ”install” användas för att placera det på rätt plats med korrekta behörigheter.

Ett konkret exempel

Tänk dig en utvecklare som arbetar med ett verktyg som heter ”ana”. Det består av en körbar fil och en databas. Efter tester behöver de placeras i `/usr/local/bin` så att alla systemanvändare kan använda dem. Använd egna filnamn och sökvägar i dina egna ”install” kommandon.

Under utvecklingen testas verktyget i katalogen `~/test/ana`. Endast medlemmar i utvecklargruppen ska ha läs- och körrättigheter, och andra användare enbart läsbehörighet. Utvecklaren bestämmer att rättigheterna ska vara följande:

  • Ägare: läsa, skriva och köra.
  • Grupp: läsa och köra.
  • Övriga: enbart köra.

Hur man använder install-kommandot

Utvecklarens arbetskatalog är `~/work`. Programmet är skrivet, kompilerat och skapat den binära filen ”ana”. Databasfilen ”Words.db” är också klar. Båda filerna är redo för testning. Låt oss inspektera dem:

ls -l ana Words.db

”ana” skapar anagram baserat på en fras i kommandoraden. Valideringstestet är enkelt.

Utvecklaren kör ”ana” med ordet ”test” och resultatet ser bra ut. Nu ska filerna kopieras till `~/test/ana` för att kontrollera att det fungerar korrekt utanför utvecklingsmiljön. Detta kommando används:

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

Följande alternativ användes i kommandot:

  • `D`: Skapa kataloger, inklusive överordnade, om det behövs.
  • `v`: Utförligt läge, lista varje skapad katalog och filkopiering.
  • `t`: Målkatalog.

Vi ser att `install` skapar katalogen `~/test`, sedan `~/test/ana` och att filerna listas allteftersom de kopieras.

Genom att lista filerna i `~/test/ana` bekräftas att de kopierats korrekt.

ls -l

Nästa steg är att testa ”ana” genom att köra det i katalogen `~/test/ana`.

Verktyget fungerar som förväntat. Behärigheterna är dock inte korrekta. Medlemmar i gruppen ”nörd” ska ha läs- och körrättigheter, och andra användare bara köra.

Vi åtgärdar detta med följande kommando. Observera användningen av `sudo` för att köra kommandot med root-behörighet, eftersom alternativen `-o` och `-g` kräver detta. Vi kommer att bli ombedda att ange lösenordet.

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

Alternativet `-b` (backup) skapar säkerhetskopior av filerna innan de skrivs över.

Alternativet `-S` (suffix) definierar suffixet för säkerhetskopiorna. Om inget suffix anges, används `~` (tilde). I det här fallet använder vi `.bak`.

Vi sätter filens ägare till ”dave” med `-o` (ägare).

Alternativet `-g` (grupp) används för att specificera en grupp som ska bli filernas ägargrupp. I det här fallet används gruppen ”geek”.

Alternativet `-m` (läge) anger fillägen i numerisk chmod-syntax.

Vi behöver inte längre `-D` (skapa kataloger), eftersom vi vet att testkatalogen redan existerar. Vi utelämnar även `-v` (verbose). Listning av filerna i `~/test/ana` visar fildetaljerna:

ls -l

Detta bekräftar att alla krav har uppfyllts:

  • Filerna har kopierats till testkatalogen.
  • Behörigheterna har satts korrekt.
  • ”dave” är filernas ägare.
  • ”geek” är ägargruppen för de två filerna.
  • Säkerhetskopior har skapats av varje fil, med namnen `ana.bak` och `Words.db.bak`.

Allt detta har uppnåtts med ett enda kommando. Perfekt.

Utvecklaren gör sista ändringar och kompilerar om. De modifierade filerna måste kopieras från katalogen `~/work` till katalogen `~/test/ana`. Detta görs med `-C` (jämför). Om källfilen och målfilen är identiska, kopieras källfilen inte.

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

En lista över filer i målkatalogen visar att storleken på filen `ana` har förändrats och att den nu är större än filen `ana.bak`. Även tidsstämpeln för `ana` har ändrats. Dessa förändringar indikerar att en ny version av filen har kopierats.

ls -l

Storleken och tidsstämpeln för `Words.db` har inte ändrats. Eftersom inga ändringar gjordes i filen `Words.db` har den inte kopierats. I ett projekt med många filer kan `-C` (jämför) spara tid och diskutrymme genom att bara kopiera de filer som har ändrats.

Utvecklaren har återigen testat att ”ana” fungerar.

Nu är det dags att använda ”install” för att kopiera filerna till katalogen `/usr/local/bin`, vilket gör dem tillgängliga för alla användare på datorn. Eftersom `/usr/local/bin` redan finns, behöver vi inte skapa den. Vi kan använda en modifierad version av det tidigare kommandot:

Målkatalogen är ändrad till `/usr/local/bin`. Alternativet `-C` (jämför) tas bort, eftersom det inte finns några tidigare kopior av filerna på destinationen. På samma sätt kan vi ta bort alternativen `-b` (säkerhetskopiering) och `-S` (suffix), eftersom ingenting behöver säkerhetskopieras.

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

Vi kan konstatera att filerna nu finns i `/usr/local/bin`:

ls -l

Som sista test kan vi byta till hemkatalogen och köra verktyget därifrån:

Notera att `ana`-kommandot körs utan `./`, vilket betyder att det körs från `/usr/local/bin`. Uppdraget slutfört.

Vi nämnde tidigare att `install` kan ta bort onödiga symboltabeller och annat som kan öka storleken på den binära filen. Låt oss göra det nu. Observera att `Words.db` inte ingår, eftersom det är en databasfil och inte en binär. För att kopiera och krympa `ana`, används detta kommando. Vi har lagt till `-s` (krymp) och lagt tillbaka `-b` (backup) och `-S` (suffix), med versalt `S`:

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

Genom att lista filerna i `/usr/local/bin` kan vi jämföra `ana` med sin backup. Filen `ana` har minskats till nästan 60 % av sin ursprungliga storlek.

ls -l /usr/local/bin

Sammanfattning

”install”-kommandot har ett ganska nischat användningsområde. Det kommer inte att vara ett verktyg som används dagligen för de flesta användare. Trots det är det ett värdefullt verktyg att vara bekant med. När du väl behöver det, kommer du att belönas med ökad effektivitet, enkelhet och färre knapptryckningar.