Ich möchte ein Script machen, dass die unterschiedlichen Programme von 2 Rechnern ausgibt. Dazu erstellt man also mit rpm -qa eine Datei Ein Ausschniit wäre zB gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 exiftags-0.99.1-2.1.fc3.rf libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rfnmap nmap-3.81-1.1.fc3.rf libkipi-0.1-2 Ein 2 Datei wäre. zB: gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rf libkipi-0.1-2 Der Unterschied wäre also: exiftags-0.99.1-2.1.fc3.rf nmap-3.81-1.1.fc3.rf Gesucht ist: exiftags nmap Wie kürze ich nun gnome-media-2.8.0-3.FC3.1 auf gnome-media? Man kann ja nicht einfach "-" als Trenner verwenden. Manchmal ist der Programmname nach dem 1. "-" definiert, manchmal sind es aber mehrere "-". Eventuell könnte man nach dem 1. "-" mit folgender Zahl suchen? Die 2. Frage ist wie man am einfachsten die "Diff-Kennzeichnungen" wegbekommt, also ">", Zeilennummern, etc., sodass nur eine Liste mit den unterschiedlichen Programmen übrigbleibt und zwar alles in 1 Zeile, sodass man das dann direkt rpm, apt oder yum übergeben kann. Bitte nachfragen, wenn die Fragestellung nicht klar ist. Al
Am Donnerstag, 24. März 2005 20:56 schrieb Al Bogner:
Ich möchte ein Script machen, dass die unterschiedlichen Programme von 2 Rechnern ausgibt.
Dazu erstellt man also mit rpm -qa eine Datei
Ein Ausschniit wäre zB
gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 exiftags-0.99.1-2.1.fc3.rf libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rfnmap nmap-3.81-1.1.fc3.rf libkipi-0.1-2
Ein 2 Datei wäre. zB:
gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rf libkipi-0.1-2
Der Unterschied wäre also: exiftags-0.99.1-2.1.fc3.rf nmap-3.81-1.1.fc3.rf
Gesucht ist: exiftags nmap
Wie kürze ich nun gnome-media-2.8.0-3.FC3.1 auf gnome-media?
Man kann ja nicht einfach "-" als Trenner verwenden. Manchmal ist der Programmname nach dem 1. "-" definiert, manchmal sind es aber mehrere "-". Eventuell könnte man nach dem 1. "-" mit folgender Zahl suchen?
hosta $ rpm -qa --queryformat '%{NAME}\n' > datei1.txt hostb $ rpm -qa --queryformat '%{NAME}\n' > datei2.txt
Die 2. Frage ist wie man am einfachsten die "Diff-Kennzeichnungen" wegbekommt, also ">", Zeilennummern, etc., sodass nur eine Liste mit den unterschiedlichen Programmen übrigbleibt und zwar alles in 1 Zeile, sodass man das dann direkt rpm, apt oder yum übergeben kann.
$ cat datei1.txt datei2.txt | sort | uniq -u | tr '\n' ' ' -- Andreas
Hallo, Am Thu, 24 Mar 2005, Andreas Winkelmann schrieb:
Am Donnerstag, 24. März 2005 20:56 schrieb Al Bogner:
Ich möchte ein Script machen, dass die unterschiedlichen Programme von 2 Rechnern ausgibt.
Dazu erstellt man also mit rpm -qa eine Datei [..] Wie kürze ich nun gnome-media-2.8.0-3.FC3.1 auf gnome-media?
Man kann ja nicht einfach "-" als Trenner verwenden. Manchmal ist der Programmname nach dem 1. "-" definiert, manchmal sind es aber mehrere "-". Eventuell könnte man nach dem 1. "-" mit folgender Zahl suchen?
sed 's/-[0-9].*//'
hosta $ rpm -qa --queryformat '%{NAME}\n' > datei1.txt hostb $ rpm -qa --queryformat '%{NAME}\n' > datei2.txt
Ich frage mich, ob man die Versionen beim Vergleich nicht braucht...
Die 2. Frage ist wie man am einfachsten die "Diff-Kennzeichnungen" wegbekommt, also ">", Zeilennummern, etc., sodass nur eine Liste mit den unterschiedlichen Programmen übrigbleibt
rpm -qa | sort > datei1 ## analog fuer datei2 diff -U1 datei1 datei2 | sed 's/^[+-]//' | tr '\n' ' '
und zwar alles in 1 Zeile, sodass man das dann direkt rpm, apt oder yum übergeben kann.
$ cat datei1.txt datei2.txt | sort | uniq -u | tr '\n' ' '
Useless use of cat. sort datei1 datei2 | uniq -u | tr '\n' ' ' Bzw. evtl. dann zusammen (mit Versionen beim Vergleich): rpm -qa > datei1 ## und datei2 sort datei1 datei2 | uniq -u | sed 's/-[0-9].*//' | xargs rpm -Uvh HTH, -dnh -- Unix ist echt Scheisse, einmal eingerichtet laeuft es einfach. Wie soll man da Erfahrung sammeln -- sfr in #debian.de
Am Donnerstag, 24. März 2005 21:31 schrieb Andreas Winkelmann:
Am Donnerstag, 24. März 2005 20:56 schrieb Al Bogner:
Ich möchte ein Script machen, dass die unterschiedlichen Programme von 2 Rechnern ausgibt.
Dazu erstellt man also mit rpm -qa eine Datei
Ein Ausschniit wäre zB
gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 exiftags-0.99.1-2.1.fc3.rf libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rfnmap nmap-3.81-1.1.fc3.rf libkipi-0.1-2
Ein 2 Datei wäre. zB:
gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rf libkipi-0.1-2
Der Unterschied wäre also: exiftags-0.99.1-2.1.fc3.rf nmap-3.81-1.1.fc3.rf
Gesucht ist: exiftags nmap
Wie kürze ich nun gnome-media-2.8.0-3.FC3.1 auf gnome-media?
Man kann ja nicht einfach "-" als Trenner verwenden. Manchmal ist der Programmname nach dem 1. "-" definiert, manchmal sind es aber mehrere "-". Eventuell könnte man nach dem 1. "-" mit folgender Zahl suchen?
hosta $ rpm -qa --queryformat '%{NAME}\n' > datei1.txt hostb $ rpm -qa --queryformat '%{NAME}\n' > datei2.txt
Danke für die Erinnerung an die Option queryformat. Ich verwende die sogar in anderen Scripts.
Die 2. Frage ist wie man am einfachsten die "Diff-Kennzeichnungen" wegbekommt, also ">", Zeilennummern, etc., sodass nur eine Liste mit den unterschiedlichen Programmen übrigbleibt und zwar alles in 1 Zeile, sodass man das dann direkt rpm, apt oder yum übergeben kann.
$ cat datei1.txt datei2.txt | sort | uniq -u | tr '\n' ' '
Das ist aber nicht ganz so das, was ich will. Unabhängig davon verstehe ich nicht, warum du nicht sort -u verwendest. Ich möchte nicht alle rpms von Host A und B, sondern die Differenz. Die Anwendung ist folgende: Host A hat verschiedenste rpms. Host B wurde neu installiert und enthält eventuell Pakete, die A nicht hat, aber Host B soll auf jeden Fall alle Pakete von Host A haben. Daher meine Idee mit diff, aber das muß auch nachbearbeitet werden. Al
Am Donnerstag, 24. März 2005 22:24 schrieb Al Bogner:
Ich möchte ein Script machen, dass die unterschiedlichen Programme von 2 Rechnern ausgibt.
Dazu erstellt man also mit rpm -qa eine Datei
Ein Ausschniit wäre zB
gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 exiftags-0.99.1-2.1.fc3.rf libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rfnmap nmap-3.81-1.1.fc3.rf libkipi-0.1-2
Ein 2 Datei wäre. zB:
gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rf libkipi-0.1-2
Der Unterschied wäre also: exiftags-0.99.1-2.1.fc3.rf nmap-3.81-1.1.fc3.rf
Gesucht ist: exiftags nmap
Wie kürze ich nun gnome-media-2.8.0-3.FC3.1 auf gnome-media?
Man kann ja nicht einfach "-" als Trenner verwenden. Manchmal ist der Programmname nach dem 1. "-" definiert, manchmal sind es aber mehrere "-". Eventuell könnte man nach dem 1. "-" mit folgender Zahl suchen?
hosta $ rpm -qa --queryformat '%{NAME}\n' > datei1.txt hostb $ rpm -qa --queryformat '%{NAME}\n' > datei2.txt
Danke für die Erinnerung an die Option queryformat. Ich verwende die sogar in anderen Scripts.
Die 2. Frage ist wie man am einfachsten die "Diff-Kennzeichnungen" wegbekommt, also ">", Zeilennummern, etc., sodass nur eine Liste mit den unterschiedlichen Programmen übrigbleibt und zwar alles in 1 Zeile, sodass man das dann direkt rpm, apt oder yum übergeben kann.
$ cat datei1.txt datei2.txt | sort | uniq -u | tr '\n' ' '
Das ist aber nicht ganz so das, was ich will.
Unabhängig davon verstehe ich nicht, warum du nicht sort -u verwendest.
Weil das was anderes ist. $ man sort $ man uniq
Ich möchte nicht alle rpms von Host A und B, sondern die Differenz. Die Anwendung ist folgende:
Host A hat verschiedenste rpms.
Host B wurde neu installiert und enthält eventuell Pakete, die A nicht hat, aber Host B soll auf jeden Fall alle Pakete von Host A haben. Daher meine Idee mit diff, aber das muß auch nachbearbeitet werden.
Liste 1: paket1 paket3 paket2 Liste 2: paket2 paket1 Nach cat: paket1 paket3 paket2 paket2 paket1 Nach sort: paket1 paket1 paket2 paket2 paket3 Nach uniq -u: paket3 -- Andreas
Am Donnerstag, 24. März 2005 22:40 schrieb Andreas Winkelmann:
Am Donnerstag, 24. März 2005 22:24 schrieb Al Bogner:
Ich möchte ein Script machen, dass die unterschiedlichen Programme von 2 Rechnern ausgibt.
Dazu erstellt man also mit rpm -qa eine Datei
Ein Ausschniit wäre zB
gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 exiftags-0.99.1-2.1.fc3.rf libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rfnmap nmap-3.81-1.1.fc3.rf libkipi-0.1-2
Ein 2 Datei wäre. zB:
gnome-media-2.8.0-3.FC3.1 rhgb-0.16.2-1.FC3 openssh-askpass-3.9p1-8.0.1 NetworkManager-gnome-0.3.4-1.1.0.fc3 libdvdcss-1.2.8-4.1.fc3.rf xvidcore-1.0.3-1.1.fc3.rf perl-Net-DNS-0.48-1.1.fc3.rf libkipi-0.1-2
Der Unterschied wäre also: exiftags-0.99.1-2.1.fc3.rf nmap-3.81-1.1.fc3.rf
Gesucht ist: exiftags nmap
$ cat datei1.txt datei2.txt | sort | uniq -u | tr '\n' ' '
Das ist aber nicht ganz so das, was ich will.
Unabhängig davon verstehe ich nicht, warum du nicht sort -u verwendest.
Weil das was anderes ist.
$ man sort $ man uniq
Ok, sorry, ich sollte die Manpage genau lesen.
Ich möchte nicht alle rpms von Host A und B, sondern die Differenz. Die Anwendung ist folgende:
Host A hat verschiedenste rpms.
Host B wurde neu installiert und enthält eventuell Pakete, die A nicht hat, aber Host B soll auf jeden Fall alle Pakete von Host A haben. Daher meine Idee mit diff, aber das muß auch nachbearbeitet werden.
Liste 1:
paket1 paket3 paket2
Liste 2:
paket2 paket1
Nach cat:
paket1 paket3 paket2 paket2 paket1
Nach sort:
paket1 paket1 paket2 paket2 paket3
Nach uniq -u:
paket3
Für die Praxis ist das schon ganz brauchbar. Wenn ich es aber nun richtig verstanden habe, dann wird ein Paket, dass bei Host B gelistet ist und bei A nicht, nun wieder gelistet, da ja alle Pakete zusammen kommen und dann uniq -u die Pakete listet, die nur 1x vorkommen. D.h. mit dieser Liste würde rpm meckern, dass das Paket bereits vorhanden ist, oder? Zusatzfrage, kann man im Nachhinein aus der ursprgl. geposteten Beispielliste den Dateinamen noch extrahieren? Ich habe nämlich nur mehr die Ausgabe von rpm -qa. Wenn es nicht geht, ist es aber auch kein großes Problem. Ich habe noch einen weiteren ähnlichen Rechner, bei dem ich die formatierte Abfrage machen kann. Al
Am Donnerstag, 24. März 2005 23:13 schrieb Al Bogner:
Ich möchte nicht alle rpms von Host A und B, sondern die Differenz. Die Anwendung ist folgende:
Host A hat verschiedenste rpms.
Host B wurde neu installiert und enthält eventuell Pakete, die A nicht hat, aber Host B soll auf jeden Fall alle Pakete von Host A haben. Daher meine Idee mit diff, aber das muß auch nachbearbeitet werden.
Liste 1:
paket1 paket3 paket2
Liste 2:
paket2 paket1
Nach cat:
paket1 paket3 paket2 paket2 paket1
Nach sort:
paket1 paket1 paket2 paket2 paket3
Nach uniq -u:
paket3
Für die Praxis ist das schon ganz brauchbar. Wenn ich es aber nun richtig verstanden habe, dann wird ein Paket, dass bei Host B gelistet ist und bei A nicht, nun wieder gelistet, da ja alle Pakete zusammen kommen und dann uniq -u die Pakete listet, die nur 1x vorkommen. D.h. mit dieser Liste würde rpm meckern, dass das Paket bereits vorhanden ist, oder?
Yep. Um dies zu vermeiden könntest Du die Ausgabe vor dem tr nochmal gegen die Ursprungsliste von Host-A laufen lassen. Nur diesmal alle Ausgeben, die mehr als einmal vorkommen (uniq -d)/(man uniq ;-)). cat diff.txt hosta.txt | sort | uniq -d | tr ...
Zusatzfrage, kann man im Nachhinein aus der ursprgl. geposteten Beispielliste den Dateinamen noch extrahieren? Ich habe nämlich nur mehr die Ausgabe von rpm -qa. Wenn es nicht geht, ist es aber auch kein großes Problem. Ich habe noch einen weiteren ähnlichen Rechner, bei dem ich die formatierte Abfrage machen kann.
Ist schwierig, da man bei einigen Paketen den Namen nicht sauber von der Version trennen kann. Auch in der Version kommen schonmal Buchstaben vor. -- Andreas
Am Donnerstag, 24. März 2005 23:30 schrieb Andreas Winkelmann:
Für die Praxis ist das schon ganz brauchbar. Wenn ich es aber nun richtig verstanden habe, dann wird ein Paket, dass bei Host B gelistet ist und bei A nicht, nun wieder gelistet, da ja alle Pakete zusammen kommen und dann uniq -u die Pakete listet, die nur 1x vorkommen. D.h. mit dieser Liste würde rpm meckern, dass das Paket bereits vorhanden ist, oder?
Yep. Um dies zu vermeiden könntest Du die Ausgabe vor dem tr nochmal gegen die Ursprungsliste von Host-A laufen lassen. Nur diesmal alle Ausgeben, die mehr als einmal vorkommen (uniq -d)/(man uniq ;-)).
cat diff.txt hosta.txt | sort | uniq -d | tr ...
Danke, so wird das für mich nun gut brauchbar. Unter Fedora brauche ich nun nur mehr yum install <Paketliste> machen und hol mir so die aktuellen Pakete aus dem Internet. Mit apt-get unter Debian funktioniert es ähnlich, wenn man eine Paketliste hat. Gibt es einen ähnlichen Weg auch bei SuSE? Der Weg via user.sel und you ist klar. Al
Am Freitag, 25. März 2005 00:06 schrieb Al Bogner:
Für die Praxis ist das schon ganz brauchbar. Wenn ich es aber nun richtig verstanden habe, dann wird ein Paket, dass bei Host B gelistet ist und bei A nicht, nun wieder gelistet, da ja alle Pakete zusammen kommen und dann uniq -u die Pakete listet, die nur 1x vorkommen. D.h. mit dieser Liste würde rpm meckern, dass das Paket bereits vorhanden ist, oder?
Yep. Um dies zu vermeiden könntest Du die Ausgabe vor dem tr nochmal gegen die Ursprungsliste von Host-A laufen lassen. Nur diesmal alle Ausgeben, die mehr als einmal vorkommen (uniq -d)/(man uniq ;-)).
cat diff.txt hosta.txt | sort | uniq -d | tr ...
Danke, so wird das für mich nun gut brauchbar.
Unter Fedora brauche ich nun nur mehr yum install <Paketliste> machen und hol mir so die aktuellen Pakete aus dem Internet. Mit apt-get unter Debian funktioniert es ähnlich, wenn man eine Paketliste hat.
Gibt es einen ähnlichen Weg auch bei SuSE? Der Weg via user.sel und you ist klar.
# yast -i paket Weiss aber jetzt nicht, ob es mehrere Paketnamen akzeptiert. Vermute es aber mal. -- Andreas
Hallo, Am Fri, 25 Mar 2005, Al Bogner schrieb: [..]
Danke, so wird das für mich nun gut brauchbar.
Unter Fedora brauche ich nun nur mehr yum install <Paketliste> machen und hol mir so die aktuellen Pakete aus dem Internet. Mit apt-get unter Debian funktioniert es ähnlich, wenn man eine Paketliste hat.
Gibt es einen ähnlichen Weg auch bei SuSE? Der Weg via user.sel und you ist klar.
Du kannst rpm direkt URLs verfuettern. Wenn du den Pfad kennst, wo die auf dem Server liegen z.B: sed 's/^/ftp://ftp.gwdg.de/..../suse/' Paketliste | xargs rpm Oder du saugst die erstmal per wget und verfuetterst die dann lokal sed 's/^/ftp://ftp.gwdg.de/..../suse/' Paketliste | wget -i - rpm -Uvh *.rpm HTH, -dnh -- Do infants have as much fun in infancy as adults do in adultery?
Hallo Al, hallo Leute, Am Donnerstag, 24. März 2005 22:24 schrieb Al Bogner:
Am Donnerstag, 24. März 2005 21:31 schrieb Andreas Winkelmann:
Am Donnerstag, 24. März 2005 20:56 schrieb Al Bogner: [...] hosta $ rpm -qa --queryformat '%{NAME}\n' > datei1.txt hostb $ rpm -qa --queryformat '%{NAME}\n' > datei2.txt
Sinnvollerweise sollte man gleich noch ein | sort dazwischenhängen.
Danke für die Erinnerung an die Option queryformat. Ich verwende die sogar in anderen Scripts.
;-) [...]
Ich möchte nicht alle rpms von Host A und B, sondern die Differenz. Die Anwendung ist folgende:
Host A hat verschiedenste rpms.
Host B wurde neu installiert und enthält eventuell Pakete, die A nicht hat, aber Host B soll auf jeden Fall alle Pakete von Host A haben. Daher meine Idee mit diff, aber das muß auch nachbearbeitet werden.
ungetestet: diff -u datei1.txt datei2.txt | sed -n '/^+[^+]/ s/^+//p' Der sed-Befehl macht folgendes: - Zeilen, die auf ^+[^+] matchen [1], werden ausgegeben. Dabei wird das + am Zeilenanfang entfernt. - Dank -n werden die restlichen Zeilen nicht ausgegeben. Ggf. musst Du die Reihenfolge der beiden Dateien beim diff-Aufruf tauschen. Gruß Christian Boltz [1] Sprich: Ein + am Zeilenanfang, gefolgt von irgendwas anderem als einem + -- ...........why use Windows, if there is a door.............
participants (4)
-
Al Bogner
-
Andreas Winkelmann
-
Christian Boltz
-
David Haller