Pozrime sa na niekoľko príkladov, ako získať názvy a cesty k súborom balíkov na systéme založenom na Arch. Začneme príkazom, ktorý je základom základov — správcom balíkov pacman.

Zistenie, ktorému balíku patrí súbor #

Na zistenie, ktorému balíku patrí súbor, možno použiť dva veľmi podobné prístupy. Prvý predpokladá prítomnosť aktuálnej databázy cez pacman -Fy:

pacman -F path/to/package/file  # pacman --files
path/to/package/file is owned by repository/package-name 1.2.3-1
path/to/package/file is owned by repository/another-package 2.3.4-2

Druhý, rovnako ako ostatné parametre súvisiace s -Q, vyžaduje, aby bol balík aj hľadaný súbor nainštalovaný na systéme:

pacman -Qo /path/to/package/file # pacman --query --owns
/path/to/package/file is owned by package-name 1.2.3-1

Rozdiel vo výstupe týkajúci sa úvodného lomítka označujúceho plne funkčnú absolútnu cestu s možnosťou -Qo je tu tiež prítomný. Následne, možnosť -Qo akceptuje len plnú cestu k hľadanému súboru a vracia len jeden zodpovedajúci lokálne nainštalovaný balík, ak existuje.

Možnosť -F na druhej strane akceptuje buď názov súboru alebo plnú cestu k súboru. Vracia všetky zodpovedajúce balíky, pričom tiež uvádza, do ktorého repozitára balíkov daný súbor patrí, ako napríklad core, extra alebo community. Navyše informuje používateľa, či je daný balík na systéme už nainštalovaný, a používa krajšie formátovanie výstupu, keď je zadaný len názov súboru.

Výpis súborov v balíku #

Opäť možno použiť dva podobné prístupy s pacmanom. Prvý predpokladá, že databáza je už aktuálna cez pacman -Fy:

pacman -Fl package # pacman --files --list
package path/to/package/file1
package path/to/package/file2

A druhý predpokladá, že balík je nainštalovaný na systéme:

pacman -Ql package # pacman --query --list
package /path/to/package/file1
package /path/to/package/file2

Oba výstupy sú navzájom porovnateľné s jemným rozdielom, ktorým je úvodné lomítko. Možnosť -Ql ho vypíše, zatiaľ čo -Fl nie. Nepýtajte sa ma prečo, ešte som to nezistil.

Moje aliasy #

Natoľko som bol presvedčený o možnostiach pacmanu a používal som ich tak často, že si postupne našli miesto medzi mojimi aliasmi:

alias pF='pacman -F'
alias Fl='pacman -Fl'
alias Ql='pacman -Ql'
alias Qo='pacman -Qo'

Tipujem, že aj ty máš niektoré aliasy súvisiace s pacmanom alebo yay definované, ale to je väčšinou vec osobných preferencií.

Výpis spustiteľných súborov balíka #

Niekedy je ešte užitočnejšie ako vypísať všetky súbory, ktoré balík poskytuje, vypísať len jeho spustiteľné súbory. S použitím vyššie uvedeného sú opäť aspoň dve možnosti, ktoré pravidelne používam, v závislosti od podmienok už opísaných. Buď pomocou databázy súborov:

pacman -Fl package | grep bin

Alebo dotazovaním lokálnych balíkov:

pacman -Ql package | grep bin

Tieto dva prístupy však nie sú ideálne, pretože vypisujú aj priečinky alebo nespustiteľné súbory obsahujúce podreťazec bin kdekoľvek v ceste. Toto by sa dalo zmierniť nejakým ďalším bash-fu hackovaním, ale pre rýchle skúmanie mi jednoduché grepovanie stačilo pre všetky moje prípady použitia.

Existuje ďalší spôsob #

Vyššie uvedené príklady som považoval za dostatočne robustné, myslel som, že som ich zvládol na výbornú, až kým som nenarazil na komentár na fóre Arch Linux, ktorý zmenil môj pohľad. Ten skromný príspevok uvádza:

pkgfile netstat
core/net-tools

Pre mňa to bolo zjavenie, keďže som nevedel, že taký nástroj existuje. Okamžite som sa pokúsil použiť príkaz pkgfile, ale nebol prítomný na systéme. S vedomosťami prezentovanými v predchádzajúcich sekciách nebol problém zistiť, ako ho získať:

pacman -F pkgfile
extra/pkgfile 21-2
    usr/bin/pkgfile
    usr/share/bash-completion/completions/pkgfile

Áno, názov balíka je rovnaký ako názov spustiteľného súboru. Veľmi bežné, ale nie vždy. Mohol som ho skúsiť nainštalovať hneď:

pacman -S pkgfile

Pozrime sa na jeho možnosti.

Vstupuje pkgfile #

Štúdiom manuálu teraz dostupného cez man pkgfile, keďže balík je nainštalovaný, sa ponúkajú alternatívy k spomínaným možnostiam pacmanu:

  • pkgfile -u alebo pkgfile --update je ekvivalent pacman -Fy
  • pkgfile -s alebo pkgfile --search alebo jednoducho pkgfile je ekvivalent pacman -F
  • pkgfile -l alebo pkgfile --list je ekvivalent pacman -Fl

Rozdiel je v tom, že štandardný výstup pkgfile je oveľa menej podrobný, väčšinou vynecháva akékoľvek slová v prirodzenom jazyku, čo nie je problém, keďže relevantné dáta sú vypísané priamo k veci. Niektoré detaily, ako verzie balíkov, možno zahrnúť pomocou možnosti --verbose, čo je zvyčajne norma.

Okrem toho pkgfile poskytuje niektoré šikovné možnosti, ktoré som predtým nevedel, že sú bežne dostupné, čo výrazne zmierňuje problémy opísané v predchádzajúcej kapitole o výpise binárnych súborov. Na výpis súborov poskytovaných balíkom umiestnených len v priečinkoch bin a sbin spusti:

pkgfile -lb package # pkgfile --list --binaries

Priečinky sú tu štandardne vynechané. Na ich výpis namiesto toho spusti:

pkgfile -ld package # pkgfile --list --directories

Považujem spoznanie pkgfile za výborný prírastok do môjho systémového správcovského arsenálu. Zistil som tiež, že pkgfile je v tomto smere trochu rýchlejší ako pacman, takmer okamžitý. Pokojne experimentuj sám.

Toto je 43. príspevok výzvy #100daystooffload.

Odkazy #