Oikea tapa saada luettelo asennetuista paketeista, jotka vastaavat mallia?

Olen järjestelmässä, jossa on (melko äskettäinen) Debian-pohjainen jakelu.

Haluan luoda tavallisen luettelo kaikista asennetuista paketeista, jotka vastaavat tiettyä mallia. Voin tehdä sen juoksemalla, sanomalla,

apt list --installed "linux-image-*" | cut -d/ -f1 

mutta saan rivejä, joista en välitä, esimerkiksi:

WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Listing... 

Joten ehkä en parempi käyttää apt. Voin suorittaa dpkg-kyselyn näin:

dpkg-query --showformat="${Package}\n" --show "linux-image*" 

mutta se ei rajoitu asennettuihin paketteihin. Voisin käyttää

dpkg-query --list "linux-image-*" | grep "ii" 

mutta sitten minun pitäisi tehdä joukko tekstinkäsittelyä, ja kuka voi luottaa näihin tiloihin, eikö?

Joten, rivi: Mikä on oikea tapa saada luettelo asennetuista paketeista, jotka vastaavat mallia?


Huomautus :

  • Bonuspisteitä, jos se voi olla oikea regexp eikä pelkästään kuoripallo.
  • Tekstin jäsentäminen on vähemmän kuin ihanteellinen ratkaisu; jos ehdotat tätä, perustelkaa, miksi ei ole parempaa tapaa.

vastaus

aptitude tukee hakua kaikkien paketinhallintatyökalujen tuntemien, asennettujen tai muuten, säännöllisten lausekkeiden avulla , ilman ulkopuolista ulostuloa, ja hänelle voidaan kertoa, kuinka sen muotoilu:

Vain asennettujen pakettien luetteloiminen:

aptitude search "linux-image-.* ~i" 

Vain asennettujen pakettien nimet vastaa säännöllistä lauseketta:

aptitude search "linux-image-.* ~i" -F "%p" 

Dokumentaatio kattaa käytettävissä olevat hakumallit ja lähtömuodon määrittelijät yksityiskohtaisesti. Löydät myös esimerkkejä tältä sivustolta, esimerkiksi onko mahdollista käyttää regexpia aptituden kanssa? , regexp aptitude part 2: n kanssa ja Linux – näytä tai päivitä tietoturvapäivityksiä vain apt : n avulla.

Vastaa

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F"/" "NR>1{print $1}" linux-image-3.16.0-4-amd64 linux-image-4.11.0-1-amd64 linux-image-4.12.0-1-amd64 linux-image-4.13.0-1-amd64 linux-image-4.8.0-2-amd64 linux-image-4.9.0-1-amd64 linux-image-4.9.0-2-amd64 linux-image-4.9.0-3-amd64 

Regexistä puhuminen:

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F"/" "NR>1 && $0~/4.1/{print $1}" linux-image-4.11.0-1-amd64 linux-image-4.12.0-1-amd64 linux-image-4.13.0-1-amd64 

Voit myös käyttää dpkg-query kanssa -f (–showformat) -vaihtoehtoa, joka käytettäessä ilman paketin nimeä oletuksena vain asennetut paketit on lueteltu.

$ dpkg-query -f "${Package}\n" -W |grep "linux-image" #-W == --show 

Kommentit

  • " lisää |awk -F'/' 'NR>1{print $1}' apt-luettelokomentoon " on mahdollista lyhin vastaus vain " apt-luettelon nimille "

Vastaa

Tässä on yksi hyvä tapa saa luettelon jumitetut paketit Debian-pohjaisessa järjestelmässä:

dpkg -l | grep ^ii | awk "{print $2}" 

dpkg -l -viivan lähtölinjojen voidaan luottaa olevan järkeviä . Kuvio ^ii vastaa asennettujen pakettien rivejä, ja yksinkertainen Awk purkaa toisen sarakkeen, pakettien nimet (samat nimet, joita käytetään apt-get install -komennot). Pakettien nimissä ei voi olla välilyöntejä, joten tämä on jälleen turvallinen toimenpide.

Kommentit

  • Tämä toimii, kun haluat grepata versiona. Vastaukset, joissa on aptitude search ja apt list, tässä tapauksessa älä ' t.

Vastaa

”ansaan” etsimäsi termi, kun grep ping dpkg output, hakutermin on oltava koteloitu seuraavasti. ” git ” käytetään mallihakuterminä:

dpkg -l |grep "^ii git[[:space:]]" 

karaatti (^) ii ja sen jälkeen (2) etsittyä termiä edeltävät välilyönnit eivät takaa mitään ENNEN muuta kuin kyseinen merkkikombinaatio voi täsmätä.

[[:space:]] etsivät hakutermiä estää osittaisten osumien esiintymisen vain vastaavien välilyöntien sen jälkeen.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *