ubuntuusers.de

yum update output into file

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

D1V1N3

Avatar von D1V1N3

Anmeldungsdatum:
29. November 2014

Beiträge: 53

Hi

Gerne würde ich ein Shellscript erstellen, welches yum update ausführt. Der command gibt entweder auf der letzten Zeile dies hier aus:

No Packages marked for Update

Oder das hier:

Transaction Summary
=====================================================================================================================================================================================
Install       2 Package(s)
Upgrade      19 Package(s)
Remove        2 Package(s)

bzw ggf:

Install       2 Package(s)
Upgrade     126 Package(s)
Remove        2 Package(s)
Reinstall     0 Package(s)
Downgrade     0 Package(s)

Ich möchte nun, dass dieser output in ein File geschrieben wird (in eine Zeile). Also entweder so:

No Packages marked for Update

oder so

Install 2 Package(s), Upgrade 126 Package(s), Remove 2 Package(s), Reinstall 0 Package(s), Downgrade 0 Package(s)

1) Wenn yum update ausgeführt und dies angezeigt wird, müsste man zum schluss noch mittels "N" das update abbrechen. Mit yum -y update könnte man automatisch annehmen. Aber ein -n gibt es beim aufrufen nicht. Wenn das Script dann mal via chron eingeplant wird, sollte das ja nicht noch auf den input warten, sondern beendet werden, oder?

2) Wie siehst das Script aus? Verm. noch was mit sed um die Leerzeichen Wegzukriegen, oder?

Besten dank für eure Hilfe

Bearbeitet von hefeweiz3n:

Falsche Versionsangabe entfernt.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Meinst Du das ernst, dass Du ein Ubuntu- System mit yum updaten willst ?

Das wird schief gehen, wenn Du auf diese Weise verschiedene Repositories mischt, vermute ich mal.
Ansonsten müsstest Du mal etwas konkreter werden, und vor allem Dein Skript mal mitliefern.

LG,

track

Hefeweiz3n Team-Icon

Moderator, Webteam
Avatar von Hefeweiz3n

Anmeldungsdatum:
15. Juli 2006

Beiträge: 5814

Wohnort: Ankh-Morpork

Unabhängig davon das du definitiv kein Ubuntu nutzt, hier ein paar Hinweise zu den Tools die du brauchst:

  • Pipen von einem Befehl in den nächsten

  • Umleiten mit >> in eine Datei

  • tail um die letzten Zeilen zu bekommen

  • sed oder awk um die Zeilenumbrüche durch normale Leerzeichen o.ä. zu ersetzen um das ganze auf eine Zeile zu bekommen

Zu den yum-Spezifischen Sachen wird man dir hier wohl eher weniger weiterhelfen können.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13189

D1V1N3 schrieb:

Gerne würde ich ein Shellscript erstellen, welches yum update ausführt. Der command gibt entweder auf der letzten Zeile dies hier aus:

No Packages marked for Update

Wird das auf Stdout oder Stderr ausgegeben?

1) Wenn yum update ausgeführt und dies angezeigt wird, müsste man zum schluss noch mittels "N" das update abbrechen. Mit yum -y update könnte man automatisch annehmen. Aber ein -n gibt es beim aufrufen nicht. Wenn das Script dann mal via chron eingeplant wird, sollte das ja nicht noch auf den input warten, sondern beendet werden, oder?

Du solltest einfach yum check-update nutzen. Ggf. kannst Du auch die Eingabe schließen (und hoffen, dass yum dann kein "y" annimmt).

2) Wie siehst das Script aus? Verm. noch was mit sed um die Leerzeichen Wegzukriegen, oder?

Dafür würde ich paste nehmen:

1
yum update ... | sed -ne '/No Packages marked for Update/ p;/^Install.*Package(s)$/,$ p' | paste -sd ', '

(ungetestet)

D1V1N3

(Themenstarter)
Avatar von D1V1N3

Anmeldungsdatum:
29. November 2014

Beiträge: 53

Hallo und schonmal danke an alle anworten.

Ja, ist nicht für ubuntu, deshalb yum. Da ich das forum hier aber so super finde und es um scripts geht, habe ich mich dennoch getraut hier zu posten. Die frage ist ja eig. auch nicht distro spezifisch, bzw. es geht ja nur um den output.

yum check-update → Ja, an das habe ich auch gedacht. Dies gibt aber einen anderen, nicht passenden output zurück.

No Packages marked for Update → Das ist die normale Std Ausgabe bzw. die letzte Zeile davon (wenn es keine Updates gibt)

yum update ... | sed -ne '/No Packages marked for Update/ p;/^Install.*Package(s)$/,$ p' | paste -sd ', '

Das ist schon nahe dran. Es liefert folgenden Output:

Install      22 Package(s),Upgrade     591 Package(s) ,Total download size: 769 M Is this ok [y/N]: Exiting on user Command

Wenn dieser nun so aussehen würde, wäre das perfekt: Install 22 Package(s), Upgrade 591 Package(s)

Das ganze würde ich dann gerne jeweils in das gleiche Textfile schreiben und den bestehenden text löschen. D.h. ich müsste hinter den command noch > /var/log/textdate hinzufügen, oder? Super wäre es, wenn die Zeile so aussehen würde: Install 22 Package(s), Upgrade 591 Package(s) stand 22.06.2015 15:00 Also dahinter noch das aktuelle Datum bzw Zeit.

Das man nach dem ausführen des commands ein "Y" oder "N" drücken müsste das es weiter geht, stellt kein Problem dar? Nicht das da mit der Zeit div. offene Prozesse rumhängen....

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13189

D1V1N3 schrieb:

Hallo und schonmal danke an alle anworten.

Bitte zitiere ordentlich.

Wenn dieser nun so aussehen würde, wäre das perfekt: Install 22 Package(s), Upgrade 591 Package(s)

Dann selektiere halt anders, z.B.:

1
2
3
4
yum ... \
| egrep '^(No Packages marked for Update|(Install|Upgrade|...)[[:space:]]+[0-9]+ Package\(s\))$' \
| sed -e 's#  *# #' \
| paste -sd ', '

(Ellipsen entsprechend füllen)

Das ganze würde ich dann gerne jeweils in das gleiche Textfile schreiben und den bestehenden text löschen. D.h. ich müsste hinter den command noch > /var/log/textdate hinzufügen, oder? Super wäre es, wenn die Zeile so aussehen würde: Install 22 Package(s), Upgrade 591 Package(s) stand 22.06.2015 15:00 Also dahinter noch das aktuelle Datum bzw Zeit.

Du willst Englisch und Deutsch mischen? Das sieht aber seltsam aus.

Das man nach dem ausführen des commands ein "Y" oder "N" drücken müsste das es weiter geht, stellt kein Problem dar? Nicht das da mit der Zeit div. offene Prozesse rumhängen....

Siehe meine frühere Bemerkung.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

D1V1N3 schrieb:

Install      22 Package(s),Upgrade     591 Package(s) ,Total download size: 769 M Is this ok [y/N]: Exiting on user Command

Wenn dieser nun so aussehen würde, wäre das perfekt:
Install 22 Package(s), Upgrade 591 Package(s)

Falls Dein Beispiel exakt so stimmt, reicht dafür ein simpler sed- Befehl:

track@lucid:~$ echo 'Install      22 Package(s),Upgrade     591 Package(s) ,Total download size: 769 M Is this ok [y/N]: Exiting on user Command'  |  sed 's/ \+/ /g; s/ ,T.*//'
Install 22 Package(s),Upgrade 591 Package(s) 

LG,

track

D1V1N3

(Themenstarter)
Avatar von D1V1N3

Anmeldungsdatum:
29. November 2014

Beiträge: 53

Du willst Englisch und Deutsch mischen? Das sieht aber seltsam aus.

Nein, da hast du recht.

Das man nach dem ausführen des commands ein "Y" oder "N" drücken müsste das es weiter geht, stellt kein Problem dar? Nicht das da mit der Zeit div. offene Prozesse rumhängen....

Siehe meine frühere Bemerkung.

Ja, aber yum check gibt wie gesagt nicht den selben output. Deshalb muss ich yum update verwenden. Ist es dann kein Problem, dass das Script dann bei der Anfragen [y,N] nicht weitermacht?

Vielen dank für eure Beispiele! Leider haben diese nicht wie gewünscht funktioniert 😢

yum update | sed 's/ \+/ /g; s/ ,T.*//'

bzw

yum update | sed 's/ \+/ /g; s/ ,T.*//' > output.txt

Geht beides nicht: Bleibt stehen und gibt nichts aus.

Das selbe leider auch hier:

yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's#  *# #' | paste -sd ', '

Ev. mal hier der komplette text, wenn es updates gibt:

[root@r01vm015ux240 ~]# yum update
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Update Process
Loading mirror speeds from cached hostfile
 * base: centos.bio.lmu.de
 * extras: centos.bio.lmu.de
 * updates: centos.bio.lmu.de
Resolving Dependencies
--> Running transaction check
---> Package cairo.x86_64 0:1.8.8-3.1.el6 will be updated
---> Package cairo.x86_64 0:1.8.8-6.el6_6 will be an update
---> Package mysql.x86_64 0:5.1.73-3.el6_5 will be updated
---> Package mysql.x86_64 0:5.1.73-5.el6_6 will be an update
---> Package mysql-devel.x86_64 0:5.1.73-3.el6_5 will be updated
---> Package mysql-devel.x86_64 0:5.1.73-5.el6_6 will be an update
---> Package mysql-libs.x86_64 0:5.1.73-3.el6_5 will be updated
---> Package mysql-libs.x86_64 0:5.1.73-5.el6_6 will be an update
---> Package mysql-server.x86_64 0:5.1.73-3.el6_5 will be updated
---> Package mysql-server.x86_64 0:5.1.73-5.el6_6 will be an update
---> Package nfs-utils-lib.x86_64 0:1.1.5-9.el6 will be updated
---> Package nfs-utils-lib.x86_64 0:1.1.5-9.el6_6 will be an update
---> Package selinux-policy.noarch 0:3.7.19-260.el6_6.3 will be updated
---> Package selinux-policy.noarch 0:3.7.19-260.el6_6.5 will be an update
---> Package selinux-policy-targeted.noarch 0:3.7.19-260.el6_6.3 will be updated
---> Package selinux-policy-targeted.noarch 0:3.7.19-260.el6_6.5 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================================================================================================================================================
 Package                                                   Arch                                     Version                                                Repository                                 Size
===========================================================================================================================================================================================================
Updating:
 cairo                                                     x86_64                                   1.8.8-6.el6_6                                          updates                                   309 k
 mysql                                                     x86_64                                   5.1.73-5.el6_6                                         updates                                   894 k
 mysql-devel                                               x86_64                                   5.1.73-5.el6_6                                         updates                                   129 k
 mysql-libs                                                x86_64                                   5.1.73-5.el6_6                                         updates                                   1.2 M
 mysql-server                                              x86_64                                   5.1.73-5.el6_6                                         updates                                   8.6 M
 nfs-utils-lib                                             x86_64                                   1.1.5-9.el6_6                                          updates                                    68 k
 selinux-policy                                            noarch                                   3.7.19-260.el6_6.5                                     updates                                   864 k
 selinux-policy-targeted                                   noarch                                   3.7.19-260.el6_6.5                                     updates                                   3.0 M

Transaction Summary
===========================================================================================================================================================================================================
Upgrade       8 Package(s)

Total download size: 15 M
Is this ok [y/N]:

Wenn es keine updates gibt, sieht der komplette output so aus:

[root@r01vm015ux240 ~]# yum update
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Update Process
Loading mirror speeds from cached hostfile
 * base: centos.bio.lmu.de
 * extras: centos.bio.lmu.de
 * updates: centos.bio.lmu.de
No Packages marked for Update

Ziel ist wie geschrieben, den dass der output so: No Packages marked for Update - "aktuelles Datum/Zeit"

bzw: Install 2 Package(s), Upgrade 126 Package(s), Remove 2 Package(s) - "aktuelles Datum/Zeit"

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13189

D1V1N3 schrieb:

Das man nach dem ausführen des commands ein "Y" oder "N" drücken müsste das es weiter geht, stellt kein Problem dar? Nicht das da mit der Zeit div. offene Prozesse rumhängen....

Siehe meine frühere Bemerkung.

Ja, aber yum check gibt wie gesagt nicht den selben output. Deshalb muss ich yum update verwenden. Ist es dann kein Problem, dass das Script dann bei der Anfragen [y,N] nicht weitermacht?

Hast Du versucht, die Eingabe zu schließen? Alternativ einfach echo n | davor setzen.

Das selbe leider auch hier:

yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's#  *# #' | paste -sd ', '

s.o.

D1V1N3

(Themenstarter)
Avatar von D1V1N3

Anmeldungsdatum:
29. November 2014

Beiträge: 53

Meine Helden! Hat so funktioniert, besten Dank an alle! 👍

 echo -n | yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's#  *# #' | paste -sd ', '

Hab das Ganze noch wie folgt erweitert:

echo -n | yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's#  *# #' | paste -sd ', ' > beh_tmp.txt && date +%m-%d_%H:%M>> beh_tmp.txt

Das Datum wird jetzt aber in einer neuen Zeile angehängt. Wie kann ich den Text auf die gleiche Zeile bringen?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13189

D1V1N3 schrieb:

Meine Helden! Hat so funktioniert, besten Dank an alle! 👍

 echo -n | yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's#  *# #' | paste -sd ', '

Das ist nicht das, was ich vorgeschlagen habe. Merke: echo -n ist nicht dasselbe wie echo n.

ExcitedSpoon

Avatar von ExcitedSpoon

Anmeldungsdatum:
17. Juli 2010

Beiträge: Zähle...

Wohnort: /home/berlin

D1V1N3 schrieb:

Das Datum wird jetzt aber in einer neuen Zeile angehängt. Wie kann ich den Text auf die gleiche Zeile bringen?

Wenn der output nur aus einer Zeile besteht, dann so:

1
sed -i "s/$/ $(date +%m-%d_%H:%M)/" beh_tmp.txt

D1V1N3

(Themenstarter)
Avatar von D1V1N3

Anmeldungsdatum:
29. November 2014

Beiträge: 53

ExcitedSpoon Nein, sind mehrere Zeilen. Aber ich denke ein > /location/input.txt wird gehen.

rklm Oh, sorry, das habe ich übersehen und auf "echo n" angepasst.

Hab gesehen, dass es auch noch den output "Aktualisieren 2 Pakete" geben kann. Dieser wird aber nicht abgefangen:

echo n | yum update | egrep '^(No [pP]ackages marked for [uU]pdate|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's#  *# #' | paste -sd ', ' > /var/scripts/linux/motd/os_update_infos.txt

Hab gedacht, ich könnte dies einfach wie folgt ergänzen:

echo n | yum update | egrep '^(No [pP]ackages marked for [uU]pdate|(Install|Upgrade|Remove|Aktualisieren)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's#  *# #' | paste -sd ', ' > /var/scripts/linux/motd/os_update_infos.txt

Leider wird das aktualisieren nicht abgefangen. Was mache ich da noch falsch?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13189

D1V1N3 schrieb:

Hab gesehen, dass es auch noch den output "Aktualisieren 2 Pakete" geben kann. Dieser wird aber nicht abgefangen:

Dann solltest Du die Locale fix setzen, damit die Sprache sich nicht ändert. Also z.B.

1
echo n | LANG=en_US.UTF-8 yum update | ...

Leider wird das aktualisieren nicht abgefangen. Was mache ich da noch falsch?

Was meinst Du damit?

D1V1N3

(Themenstarter)
Avatar von D1V1N3

Anmeldungsdatum:
29. November 2014

Beiträge: 53

rklm schrieb:

D1V1N3 schrieb:

Hab gesehen, dass es auch noch den output "Aktualisieren 2 Pakete" geben kann. Dieser wird aber nicht abgefangen:

Dann solltest Du die Locale fix setzen, damit die Sprache sich nicht ändert. Also z.B.

1
echo n | LANG=en_US.UTF-8 yum update | ...

Ok, danke

Leider wird das aktualisieren nicht abgefangen. Was mache ich da noch falsch?

Was meinst Du damit?

Es gibt die verschiedenen Ausgabemöglichkeiten (siehe Text oben, z.b. Install, Upgrade etc). Dabei wurde aber die Möglichkeit "Aktualisieren XY Pakete" vergessen. Eine mögliche Ausgabe wäre z.B. Aktualisieren 2 Pakete Ich wollte es einfach mittels |Aktualisieren (siehe Unten) erweitern. Das hat aber nicht funktioniert.....

Antworten |