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
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
jaapt 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.
|awk -F'/' 'NR>1{print $1}'
apt-luettelokomentoon " on mahdollista lyhin vastaus vain " apt-luettelon nimille "