Jak kopírovat soubory pomocí příkazu „install“ v systému Linux

Příkaz install je univerzální nástroj pro kopírování souborů v systémech Linux a macOS, který ocení zejména náročnější uživatelé hledající efektivitu. V tomto článku se dozvíte, jak s ním pracovat chytřeji, ne usilovněji.

Není to náhodou pro instalaci softwaru?

Možná vás překvapí, že název příkazu install je poněkud zavádějící. Ve skutečnosti se totiž nejedná o nástroj pro instalaci softwaru. Pokud chcete instalovat balíčky softwaru z příkazové řádky v Ubuntu nebo jiných distribucích založených na Debianu, použijte příkaz apt-get. V jiných distribucích Linuxu se obraťte na správce balíčků specifický pro vaši distribuci, například dnf na Fedoře nebo zypper na openSUSE.

Co tedy příkaz install vlastně dělá?

Zjednodušeně řečeno, install v sobě kombinuje funkčnost příkazů cp (kopírování), chown (změna vlastníka), chmod (změna oprávnění), mkdir (vytvoření adresáře) a strip (odstranění symbolů). Umožňuje vám provádět operace, které byste jinak museli řešit pomocí několika různých příkazů.

Příkaz install dokáže:

  • Kopírovat soubory, podobně jako příkaz cp.
  • Umožňuje rozhodnout, zda se mají existující soubory přepsat.
  • Vytvořit cílový adresář, pokud neexistuje, jako to dělá mkdir.
  • Nastavit oprávnění pro uživatele a skupiny, podobně jako chmod.
  • Změnit vlastníka souborů, stejně jako chown.
  • Odstranit nepotřebné informace ze spustitelných souborů, jako to dělá strip.

Ačkoli má mnoho funkcí, příkaz install nemá přehnaně mnoho možností.

Kdy je vhodné ho použít?

Příkaz install pravděpodobně nebudete potřebovat každý den. Je to užitečný nástroj pro specifické situace. Jedním z příkladů je vývoj softwaru. Představte si, že programujete nový nástroj. Před jeho nasazením do produkčního prostředí je nutné ho otestovat. K tomu je potřeba zkopírovat soubory nového programu do testovacího adresáře. Možná budete muset tento adresář vytvořit a pro soubory nastavit správná oprávnění a vlastnictví.

Vzhledem k iterativní povaze vývoje se může stát, že budete tyto akce provádět opakovaně. Příkaz install vám v tomto ohledu usnadní práci. Nakonec, když je váš nový nástroj připraven k nasazení, můžete ho pomocí příkazu install snadno zkopírovat na jeho finální umístění se správnými oprávněními.

Praktický příklad

Představme si programátora, který pracuje na novém nástroji s názvem „ana“. Tento nástroj se skládá ze spustitelného binárního souboru a databáze. Po testování je potřeba zkopírovat oba soubory do adresáře /usr/local/bin, aby byly dostupné všem uživatelům systému Linux. Je důležité, abyste si názvy souborů a cest k adresářům v tomto příkladu přizpůsobili podle vašeho konkrétního počítače, až budete s příkazem install pracovat.

Dokud nebude nástroj připraven k vydání, testuje se v adresáři ~/test/ana. Členové skupiny „geek“ mají mít oprávnění ke čtení a spouštění, stejně tak i ostatní uživatelé. Pro nastavení oprávnění používá příkaz install číselnou reprezentaci, kterou známe z příkazu chmod. Náš programátor se rozhodl, že oprávnění by měla být následující:

  • Vlastník: čtení, zápis a spouštění.
  • Skupina: čtení a spouštění.
  • Ostatní: pouze spouštění.

Použití příkazu install

Pracovním adresářem našeho fiktivního programátora je ~/work. Napsal program, zkompiloval ho a vytvořil binární soubor s názvem ana. Stejně tak už vytvořil databázový soubor Words.db. Oba soubory jsou připraveny k testování. Podívejme se na ně:

ls -l ana Words.db

Nástroj ana vytváří anagramy z fráze zadané na příkazovém řádku. Ověřovací testování je vcelku jednoduché.

Náš programátor spustil ana s frází „biscuit“ a vše zdá se být v pořádku. Nyní chce zkopírovat tyto dva soubory do adresáře ~/test/ana, aby zjistil, zda nástroj funguje správně mimo vývojové prostředí. Použije následující příkaz:

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

Použité možnosti na příkazové řádce byly:

  • D: Vytvořit adresáře včetně nadřazených, pokud je to nutné.
  • v: Podrobný výstup, zobrazit každý vytvořený adresář a zkopírovaný soubor.
  • t: Cílový adresář.

Vidíme, že příkaz install nejprve vytvořil adresář ~/test a poté adresář ~/test/ana. Během kopírování souborů do cílového adresáře jsou soubory postupně vypisovány.

Výpis souborů v ~/test/ana potvrzuje, že byly zkopírovány správně.

ls -l

Dalším krokem je otestovat obslužný program ana spuštěním z adresáře ~/test/ana.

Nástroj funguje dle očekávání, což je skvělé. Oprávnění však nejsou správně nastavena. Požadavek je nastavit členům skupiny „geek“ oprávnění pro čtení a spouštění a pro ostatní uživatele pouze spouštění.

Oba problémy můžeme vyřešit pomocí následujícího příkazu. Je důležité si povšimnout použití příkazu sudo, který spustí příkaz s oprávněními roota. To je nutné pro volby -o a -g. Po zadání příkazu budete vyzváni k zadání hesla.

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

Jednotlivé volby mají následující význam:

  • -b (záloha): Vytvoří zálohy souborů před jejich přepsáním.
  • -S (přípona): Definuje příponu pro záložní soubory. Pokud příponu neuvedete, použije se ~ (tilda). V tomto případě žádáme install, aby používal příponu .bak.
  • -o (vlastník): Nastavuje vlastníka souborů na dave.
  • -g (skupina): Nastavuje skupinu vlastníků souborů na geek.
  • -m (režim): Nastavuje oprávnění souborů pomocí číselné syntaxe chmod.

Už nepotřebujeme volbu -D (vytvořit adresáře), protože víme, že testovací adresář již existuje. Vynechali jsme také volbu -v (podrobný výpis). Následující výpis souborů v adresáři ~/test/ana nám ukáže, že jsou oprávnění nastavena správně:

ls -l

Tímto jsme ověřili, že všechny naše požadavky byly splněny:

  • Soubory byly zkopírovány do testovacího adresáře.
  • Oprávnění byla nastavena správně.
  • Vlastníkem souborů je uživatel dave.
  • Skupina geek je skupinou vlastníků obou souborů.
  • Pro oba soubory byly vytvořeny záložní kopie s příponou .bak (ana.bak a Words.db.bak).

Toho všeho jsme dosáhli pomocí jediného příkazu. Efektivní, že?

Náš programátor provedl několik posledních změn v nástroji a znovu ho zkompiloval. Změněné soubory je potřeba zkopírovat do adresáře ~/test/ana z adresáře ~/work. Můžeme k tomu použít volbu -C (porovnat). Pokud jsou zdrojový a cílový soubor stejné, zdrojový soubor se nepřekopíruje.

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

Výpis souborů v cílovém adresáři nám ukazuje, že se velikost souboru ana změnila. Je větší než soubor ana.bak. Změnil se také čas posledního upravení. Tyto změny jsou důsledkem překopírování nové verze souboru.

ls -l

Velikost souboru a čas posledního upravení souboru Words.db se nezměnily. V souboru Words.db nebyly provedeny žádné změny, proto nebyl překopírován. U projektů s větším počtem souborů může volba -C (porovnat) ušetřit spoustu času a místa na pevném disku tím, že překopíruje pouze změněné soubory.

Programátor znovu otestoval, že nástroj ana funguje i nadále správně.

Nyní je na čase použít příkaz install pro zkopírování souborů do adresáře /usr/local/bin. Tím se nový nástroj stane dostupným pro všechny uživatele tohoto počítače se systémem Linux. Protože víme, že adresář /usr/local/bin již existuje, nemusíme ho vytvářet. Můžeme použít upravenou verzi našeho posledního příkazu.

Změnili jsme cílový adresář na /usr/local/bin. Odebrali jsme volbu -C (porovnat), protože v cílovém adresáři zatím nejsou žádné kopie těchto souborů, tudíž není s čím porovnávat. Také není co zálohovat, proto můžeme odstranit i volby -b (záloha) a -S (přípona).

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

Můžeme se přesvědčit, že soubory byly zkopírovány do adresáře /usr/local/bin:

ls -l

Jako poslední test změníme aktuální adresář na domovský a uvidíme, zda odtud můžeme spustit nový nástroj.

Všimněte si, že před příkazem ana jsme nemuseli zadávat ./, což znamená, že se spouští z adresáře /usr/local/bin. Mise splněna.

Zmínili jsme se, že příkaz install může odstranit nepotřebné tabulky symbolů a další „zavazadla“ z binárního souboru, aby se zmenšila jeho velikost. Udělejme to teď. Všimněte si, že následující příkaz neobsahuje Words.db. Důvodem je, že Words.db je databázový soubor, ne spustitelný binární soubor. Pro překopírování a zmenšení binárního souboru ana můžeme použít následující příkaz. Přidali jsme volbu -s (zmenšit) s malým písmenem „s“. Znovu jsme přidali volbu -b (záloha) a volbu -S (přípona) s velkým písmenem „S“.

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

Výpis souborů v adresáři /usr/local/bin nám umožňuje porovnat velikost souboru ana s jeho záložní verzí. Velikost souboru ana se zmenšila na přibližně 60 % původní velikosti.

ls -l /usr/local/bin

Závěrem

Příkaz install je poměrně všestranný. Mnoho lidí ho pravděpodobně nebude používat každý den, možná ani každý měsíc. Nicméně, install je užitečný nástroj, se kterým se vyplatí se seznámit a mít ho ve svém arzenálu. V situacích, kdy ho budete potřebovat, se vám vynaložené úsilí na jeho osvojení vrátí v podobě zvýšené efektivity, jednoduchosti a menšího počtu stisknutí kláves.