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 -ualebopkgfile --updateje ekvivalentpacman -Fypkgfile -salebopkgfile --searchalebo jednoduchopkgfileje ekvivalentpacman -Fpkgfile -lalebopkgfile --listje ekvivalentpacman -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.