(gelöst) apt <command> '~i'

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
michaa7
Beiträge: 4611
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

(gelöst) apt <command> '~i'

Beitrag von michaa7 » 22.12.2022 21:08:01

In den vergangenen Tagen habe ich hier in verschiedenen Postings die '~i' option als Filter für die Ausgabe für "nur installierte Pakete" gesehen.

Ich habe nun versucht das mit "apt policy <paketname>" zu kombinieren um eben die Ausgabe auf hier installierte Pakete zu beschränken. Das wäre besonders bei Kernel Images schön, weil da die Paketversion nicht zwingend die Kernelversion wiederspielgelt. Es mag aber natürlich auch andere Anwendungsfälle geben.

Ich habe versucht:

Code: Alles auswählen

apt policy linux-image*
Da werden alle verfügbaren linux images gelistet, installiert oder nicht.

Code: Alles auswählen

apt policy linux-image* '~i'
Das führt zu etwas vollkommen unvorhergesehenem: Da werden alle installierten Pakete, nicht nur linux-images gelistet.

Läßt sich ~i-Filter irgendwie so einsetzen dass das gewünschte dabei herauskommt?
Zuletzt geändert von michaa7 am 23.12.2022 20:53:17, insgesamt 1-mal geändert.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: apt <command> '~i'

Beitrag von tobo » 22.12.2022 21:18:31

Kannste mit aptitude einfach zusammenschreiben:

Code: Alles auswählen

aptitude search "~ilinux-image"
EDIT:
Hier werden die Optionen beschrieben:
https://www.debian.org/doc/manuals/apti ... 05.en.html

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: apt <command> '~i'

Beitrag von JTH » 22.12.2022 21:52:09

Hab jetzt nicht ausprobiert, ob die Filter auch bei apt policy funktionieren.

Aber grundsätzlich: Damit beide oder alle Bedingungen durch die Ergebnisse erfüllt sein müssen, muss man das Ganze, wie in tobos Antwort, in einem Stringargument übergeben:

Code: Alles auswählen

apt policy 'linux-image* ~i'

Siehe man apt-patterns.

Edit: Korrigiere, wenn man so ein Suchmuster wie ~i mit einem Namen mit Platzhalter kombinieren will, muss man das bei apt (ohne -itude) anscheinend etwas länger formulieren:

Code: Alles auswählen

apt policy '~i ~n^linux-image-'
Auf ~n folgt ein RegEx, der den/die gesuchten Namen matchen sollte.
Zuletzt geändert von JTH am 22.12.2022 22:27:37, insgesamt 1-mal geändert.
Manchmal bekannt als Just (another) Terminal Hacker.

michaa7
Beiträge: 4611
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: apt <command> '~i'

Beitrag von michaa7 » 23.12.2022 10:14:06

Super, danke.

Auch für den Tipp mit "man apt-patterns". Das hatte ich nicht auf dem Schirm. Ich hatte bei man apt nach "~i" gesucht und nichts gefunden.

Fragen:
Das ^ bewirkt eigentlich nichts, ist das nur ein optischer Trenner in der Eingabe?
Läßt sich die Ausgabe so beeinflussen, dass jeweils eine Leerzeile nach einem angezeigten Treffer ausgegeben wird? Das ist so wie es ist schwer zu lesen.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: apt <command> '~i'

Beitrag von tobo » 23.12.2022 10:38:36

michaa7 hat geschrieben: ↑ zum Beitrag ↑
23.12.2022 10:14:06
Das ^ bewirkt eigentlich nichts, ist das nur ein optischer Trenner in der Eingabe?
Wie schon von JTH gesagt wurde, gehört das zur RegEx. Schau dir mal den Unterschied (mit/ohne ^) hier an:

Code: Alles auswählen

apt list  "~i ~n^linux"

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: apt <command> '~i'

Beitrag von JTH » 23.12.2022 12:12:50

michaa7 hat geschrieben: ↑ zum Beitrag ↑
23.12.2022 10:14:06
Läßt sich die Ausgabe so beeinflussen, dass jeweils eine Leerzeile nach einem angezeigten Treffer ausgegeben wird? Das ist so wie es ist schwer zu lesen.
Die apt-policy-Ausgabe lässt sich mein ich nicht verändern, nein. Aber es gibt etliche Helferlein, mit denen du das erreichen könntest ;)

Code: Alles auswählen

apt-cache policy '~i ~n^linux-image-' | sed '2,$s#^[[:graph:]]*:$#\n\0#'
Hier mit apt-cache policy, da apt ja ungern in Skripten benutzt werden möchte.
Zuletzt geändert von JTH am 23.12.2022 14:52:26, insgesamt 1-mal geändert.
Grund: Überflüssige Umleitung `2>/dev/null` entfernt
Manchmal bekannt als Just (another) Terminal Hacker.

michaa7
Beiträge: 4611
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: apt <command> '~i'

Beitrag von michaa7 » 23.12.2022 14:34:58

tobo hat geschrieben: ↑ zum Beitrag ↑
23.12.2022 10:38:36
michaa7 hat geschrieben: ↑ zum Beitrag ↑
23.12.2022 10:14:06
Das ^ bewirkt eigentlich nichts, ist das nur ein optischer Trenner in der Eingabe?
Wie schon von JTH gesagt wurde, gehört das zur RegEx. Schau dir mal den Unterschied (mit/ohne ^) hier an:

Code: Alles auswählen

apt list  "~i ~n^linux"
Ok, verstanden, ist ne wildcard. Danke.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

michaa7
Beiträge: 4611
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: apt <command> '~i'

Beitrag von michaa7 » 23.12.2022 14:41:14

JTH hat geschrieben: ↑ zum Beitrag ↑
23.12.2022 12:12:50
...

Code: Alles auswählen

apt-cache policy '~i ~n^linux-image-' 2>/dev/null | sed '2,$s#^[[:graph:]]*:$#\n\0#'
Hier mit apt-cache policy, da apt ja ungern in Skripten benutzt werden möchte.
Schaut viel übersichtlicher aus. Code ist natürlich ein Ungetüm, für Normalsterbliche die da durchsteigen wollen mindestens eine WE Beschäftigung, falls die Geduld und der Ehrgeiz ausreicht.
Ich werde mir das in ein Alias packen.
Und mal schaun, vielleicht file ich da auch nen wishbug. Eigentlich ist doch völlig offensichtlich dass so eine Leerzeilenoption notwendig ist, ohne ist das ja fast Kauderwelsch.

Danke.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: apt <command> '~i'

Beitrag von tobo » 23.12.2022 16:53:41

michaa7 hat geschrieben: ↑ zum Beitrag ↑
23.12.2022 14:34:58
Ok, verstanden, ist ne wildcard. Danke.
Ne, ist keine Wildcard. Eine Wildcard ist ein Platzhalter für etwas anderes. Der Joker ist im Kartenspiel eine Wildcard - man kann ihn als Ersetzung für jede andere Karte einsetzen. Der . wäre in einer RegEx eine Wildcard - er steht dort als Platzhalter für ein anderes Zeichen. Das ^ steht gerade nicht für ein anderes Zeichen, sondern markiert den Anfang der Zeichenkette. "^linux" findet Pakete, die mit linux beginnen und "linux" findet Pakete, bei denen linux irgendwo im Namen auftaucht.

EDIT:
Ich werde mir das in ein Alias packen.
Besser in eine Funktion. Das hat unter anderem den Vorteil, dass ddu die RegEx als Parameter übergeben und damit variabel gestalten kannst:

Code: Alles auswählen

$ f(){ apt-cache policy "~i ~n$1" 2>/dev/null | sed '2,$s#^[[:graph:]]*:$#\n\0#'; }
$ f "^ut.*x$"
util-linux:
  Installed: 2.36.1-8+deb11u1
  Candidate: 2.36.1-8+deb11u1
  Version table:
 *** 2.36.1-8+deb11u1 500
        500 https://debian.inf.tu-dresden.de/debian bullseye/main amd64 Packages
        500 https://debian.inf.tu-dresden.de/debian-security bullseye-security/main amd64 Packages
        100 /var/lib/dpkg/status

michaa7
Beiträge: 4611
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: apt <command> '~i'

Beitrag von michaa7 » 23.12.2022 19:02:00

tobo hat geschrieben: ↑ zum Beitrag ↑
23.12.2022 16:53:41
...Das ^ steht gerade nicht für ein anderes Zeichen, sondern markiert den Anfang der Zeichenkette. "^linux" findet Pakete, die mit linux beginnen und "linux" findet Pakete, bei denen linux irgendwo im Namen auftaucht.
Maaaaaan, wieder schnell hingeschaut und deshalb missverstanden. Ich hatte mich schon gefragt warum es zwei "joker" gibt. Es verhält sich eben genau umgekehrt.
Danke für die Klarstellung.
tobo hat geschrieben: ↑ zum Beitrag ↑
23.12.2022 16:53:41
Besser in eine Funktion. Das hat unter anderem den Vorteil, dass ddu die RegEx als Parameter übergeben und damit variabel gestalten kannst:

Code: Alles auswählen

$ f(){ apt-cache policy "~i ~n$1" 2>/dev/null | sed '2,$s#^[[:graph:]]*:$#\n\0#'; }
$ f "^ut.*x$"
util-linux:
  Installed: 2.36.1-8+deb11u1
  Candidate: 2.36.1-8+deb11u1
  Version table:
 *** 2.36.1-8+deb11u1 500
        500 https://debian.inf.tu-dresden.de/debian bullseye/main amd64 Packages
        500 https://debian.inf.tu-dresden.de/debian-security bullseye-security/main amd64 Packages
        100 /var/lib/dpkg/status
Super. Habe es ausprobiert. Damit kann man ja sogar noch das gewünschte Ende des Strings filtern. Danke!
Dass es Funktionen gibt wußte ich gar nicht (naja, nicht dass ich sonst tief in der Materie steckte, aber aliase kannte ich ja schon ..). Wo kann ich mehr darüber lesen. Unter "man function(s)" finde ich nichts.

Danke.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: apt <command> '~i'

Beitrag von JTH » 23.12.2022 19:18:34

Ich korrigier nochmal meine Urversion von oben, die Umleitung 2>/dev/null kann sollte man weglassen, um Eingabefehler nicht zu verstecken. Die wäre nur hilfreich gewesen, wenn man dort apt, statt apt-cache benutzen würde. Also dies reicht:

Code: Alles auswählen

pretty_policy(){ apt-cache policy "~i ~n$1" | sed '2,$s#^[[:graph:]]*:$#\n\0#'; }

michaa7 hat geschrieben: ↑ zum Beitrag ↑
23.12.2022 19:02:00
Wo kann ich mehr darüber lesen. Unter "man function(s)" finde ich nichts.
Als Referenz hilft mir immer man bash (siehe FUNCTIONS dort), zum Einsteigen wahrscheinlich eher nicht. Dazu fand ich früher die Guides von tldp.org hilfreich: Ansonsten findest du zu „Linux Shell Functions“ garantiert unzählige Quellen im Netz ;)
Manchmal bekannt als Just (another) Terminal Hacker.

michaa7
Beiträge: 4611
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: apt <command> '~i'

Beitrag von michaa7 » 23.12.2022 20:52:57

So ... für alle die das sonst noch interessiert:

Ich habe das nun im user- und root-home in die .bashrc eingetragen (damit diese Funktion wie das ja auch bei aliasen ist beim nächsten boot wieder verfügbar ist), "f" aus dem Beispiel mit einem passenden Namen ersetzt (apts für apt Suche/Search) und einen Kommentar damit ich hier eine Erinnerung für alle Fälle habe.

Code: Alles auswählen

# Funktion zum Suchen installierter Pakete 
# ausführen mit 'apts "^Muster"', "^" erzwingt Anfang
apts(){ apt-cache policy "~i ~n$1" 2>/dev/null | sed '2,$s#^[[:graph:]]*:$#\n\0#'; }
Das Thema ist damit für heute gegessen.

Danke an alle!
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

Antworten