MarcyVega
Anmeldungsdatum: 5. April 2018
Beiträge: 162
Wohnort: Meißen / Schwabington BC
|
Hey, ich arbeite ja gelegentlich die Befehle aus dem "Systempflege/Alte Kernel entfernen"-Wiki durch. Jetzt überleg ich gerade ob es möglich ist, die in ein ausführbares Skript zu bauen, so dass ich nur noch drauf "doppelklicken" muss, statt die jedes Mal im Terminal abzutippen (bzw. per Copy/Paste einzufügen) Ja, ich weiß, ich bin faul 😉 Ist das denn technisch möglich und wie müsste das Skript denn dann aussehen, damit ich das wie ein Programm einfach per Doppelklick starten kann (nen entsprechenden Starter würde ich mir evtl. selbst zimmern können)?
|
NORACSA
Anmeldungsdatum: 31. Januar 2010
Beiträge: 180
|
Kann es sein, dass du einfach ein ganz normales Shellscript machen willst?
|
MarcyVega
(Themenstarter)
Anmeldungsdatum: 5. April 2018
Beiträge: 162
Wohnort: Meißen / Schwabington BC
|
Falls das den Effekt hätte, dass ich da nur noch Doppelklicken muss um es durchzuführen, ginge auch das 😀 Ich hab mich zugegebenermaßen noch nie damit beschäftigt. Ich stell mir das ungefähr so vor: Doppelklick auf "Systempflege" → Führt die entsprechenden Befehle aus dem Systempflege-Wiki aus und fragt maximal bei den Befehlen wo das sudo-Passwort erforderlich ist nach dem Passwort. Dadurch müsste ich ja dann quasi nur noch einmal was tippen (das sudo-Passwort). Kannst nachvollziehen wie ich das mein?
|
NORACSA
Anmeldungsdatum: 31. Januar 2010
Beiträge: 180
|
Ich vermute du willst sowas in der Art machen, oder?
|
MarcyVega
(Themenstarter)
Anmeldungsdatum: 5. April 2018
Beiträge: 162
Wohnort: Meißen / Schwabington BC
|
Kommt dem schon relativ nahe ☺
Für "Alte Kernel entfernen" sähe es jetzt so in meinem Test-Skript aus: #!/bin/bash
uname -a
dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | tee zu_entfernende_Kernel
cat zu_entfernende_Kernel | xargs sudo apt-get -y purge
rm zu_entfernende_Kernel
ls
Wäre ja korrekt so, oder? Wie gesagt, ich hab mich noch nie mit dem Skripte-Programmieren beschäftigt. Was mich jetzt noch ein bisschen stört, ist, dass das Terminal dann danach sofort wieder zu geht, ich nach dem Doppeklick noch auf "im Terminal ausführen" klicken muss und er die Befehle zwar "durchrattert" aber im Terminal nicht ausgibt, welchen Befehl er gerade ausführt. Cool, wäre halt, wenn er mir auch im Terminal anzeigt welchen Befehl er gerade ausführt (quasi so als ob ich ihn selbst im Terminal eingegeben hab) Ich schätze mal, den Umweg über "im Terminal starten" könnte ich dann ja über ne .desktop-Datei umgehen, oder? Aber danke schonmal für deine Hilfe, bin schon ne Ecke weiter dank dir ☺
|
fleet_street
Top-Wikiautor
Anmeldungsdatum: 30. August 2016
Beiträge: 2130
Wohnort: Hunsrück
|
Ich halte das Kommando für potentiell zu gefährlich, als dass es per Skript automatisiert laufen sollte. Es sollte ein kluger Kopf nochmal drüberschauen, was da alles deinstalliert würde. Wenn sich etwas in der Struktur ändert (soll gelegentlich vorkommen – sogar im laufenden Release), dann kann das Skript nicht entscheiden, dass etwas anders ist als früher™. Im schlimmsten Fall sind alle Kernel weg und das System startet nicht mehr. Die Reparatur benötigt mehr Zeit als zuvor mit der Mausklickerei gespart wurde. Was spricht gegen Aufräumen per Systempflege?
Der Befehl sudo apt autoremove
entfernt ebenfalls alte Kernel. (Der aktuelle und der davor bleiben erhalten)
Dafür lässt sich auch ein alias anlegen. PS: Alte Kernel lasse ich seit 18.04 automatisch von unattended-upgrades entfernen. Dabei hatte ich bislang keine Nebenwirkungen zu beklagen.
|
RamSpeicher
Anmeldungsdatum: 17. Juli 2009
Beiträge: 2508
|
fleet_street schrieb:
PS: Alte Kernel lasse ich seit 18.04 automatisch von unattended-upgrades entfernen.
Das wusste ich noch nicht, Besten Dank für die Info 👍
|
MarcyVega
(Themenstarter)
Anmeldungsdatum: 5. April 2018
Beiträge: 162
Wohnort: Meißen / Schwabington BC
|
fleet_street schrieb: Ich halte das Kommando für potentiell zu gefährlich, als dass es per Skript automatisiert laufen sollte. Es sollte ein kluger Kopf nochmal drüberschauen, was da alles deinstalliert würde. Wenn sich etwas in der Struktur ändert (soll gelegentlich vorkommen – sogar im laufenden Release), dann kann das Skript nicht entscheiden, dass etwas anders ist als früher™. Im schlimmsten Fall sind alle Kernel weg und das System startet nicht mehr. Die Reparatur benötigt mehr Zeit als zuvor mit der Mausklickerei gespart wurde.
Ah okay... ist natürlich auch ein Argument... wobei "Alte Kernel entfernen" in dem Fall hauptsächlich nur als Beispiel herhalten sollte
Was spricht gegen Aufräumen per Systempflege?
Der Befehl sudo apt autoremove
entfernt ebenfalls alte Kernel. (Der aktuelle und der davor bleiben erhalten)
Da ich meist mehrere Befehle aus dem "Systempflege"-Wiki durcharbeite, würde ich das ja dann mir als Skript bauen, was alle Befehle mit einem mal durcharbeitet (um mir wie gesagt die Tipperei, vom Passwort abgesehen, komplett zu sparen).
Da dürfte das mit der "Automatisierung" ja unproblematisch sein, da ja eigentlich der aktuelle und der vorherige Kernel erhalten bleiben, wenn ich richtig denke, oder? Mein Skript sähe dann so aus: | #!/bin/bash
uname -a ## Aktuellen Kernel anzeigen
sudo apt autoremove ## Alte Kernel löschen (bis auf den aktuellen und den vorletzten)
sudo apt-get autoremove ## überflüssige Abhängigkeiten entfernen
sudo apt-get clean ## Paket-Cache leeren
sudo rm -rf /var/lib/apt/lists/* && sudo apt-get update ## Paketlisten aufräumen
echo "Done" ## "Done" am Ende schreiben
read ## Terminal erst nach "Enter" schließen
ls
|
Was mir da aber noch fehlt, ist dass er mir im Terminal auch anzeigt, dass er z.B. gerade "sudo apt-get clean" ausführt, also auch den jeweiligen Befehl ins Terminalfenster schreibt und ihn nicht nur einfach ausführt. EDIT die 433532.: Habs per "echo "Aktion XY wird durchgeführt:" gelöst 😀
Das fängt an Spass zu machen, das Programmieren von kleine Bash-Skripten 😀
|
MarcyVega
(Themenstarter)
Anmeldungsdatum: 5. April 2018
Beiträge: 162
Wohnort: Meißen / Schwabington BC
|
Sorry für den Doppelpost: Aber ich hab mein "Problem" selbst gelöst. Mein "Systempflege-Skript" ist fertig und macht haargenau das was es soll.
Die Befehle aus dem "Systempflege"-Wiki umsetzen ohne dass ich die dauernd abtippen bzw. "copy/pasten" muss 😀 Dafür dass ich das vorher noch nie gemacht hab, find ich's ganz gut, auch wenn ein Profi das bestimmt besser und eleganter hinbekommt... aber es erfüllt seinen Zweck. Falls es jemanden interessiert wie es aussieht (die Echo-Ausgaben sind sogar farblich hinterlegt 😀 ): 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #!/bin/bash
echo -e "\033[41m \033[1m Aktueller Kernel: \033[0m"
uname -a ## Aktuellen Kernel anzeigen
echo -e "\033[41m \033[1m Alte Kernel werden gelöscht: \033[0m"
sudo apt autoremove ## Alte Kernel löschen (bis auf den aktuellen und den vorletzten)
echo -e "\033[41m \033[1m Überflüssige Abhängigkeiten werden entfernt: \033[0m"
sudo apt-get autoremove ## überflüssige Abhängigkeiten entfernen
echo -e "\033[41m \033[1m Paket-Cache wird geleert: \033[0m"
sudo apt-get clean ## Paket-Cache leeren
echo -e "\033[41m \033[1m Paketlisten werden aufgeräumt: \033[0m"
sudo rm -rf /var/lib/apt/lists/* && sudo apt-get update ## Paketlisten aufräumen
echo -e "\033[42m \033[1m Fertig... bitte ENTER drücken \033[0m" ## "Abschlussmeldung" am Ende schreiben
read ## Terminal erst nach "Enter" schließen
ls
|
Programmstarter noch dazu erstellt und schon muss ich für die Befehle nur noch mein Passwort eingeben ☺
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
MarcyVega schrieb:
Falls es jemanden interessiert wie es aussieht (die Echo-Ausgaben sind sogar farblich hinterlegt 😀 ):
Danke fürs Teilen!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #!/bin/bash
echo -e "\033[41m \033[1m Aktueller Kernel: \033[0m"
uname -a ## Aktuellen Kernel anzeigen
echo -e "\033[41m \033[1m Alte Kernel werden gelöscht: \033[0m"
sudo apt autoremove ## Alte Kernel löschen (bis auf den aktuellen und den vorletzten)
echo -e "\033[41m \033[1m Überflüssige Abhängigkeiten werden entfernt: \033[0m"
sudo apt-get autoremove ## überflüssige Abhängigkeiten entfernen
echo -e "\033[41m \033[1m Paket-Cache wird geleert: \033[0m"
sudo apt-get clean ## Paket-Cache leeren
echo -e "\033[41m \033[1m Paketlisten werden aufgeräumt: \033[0m"
sudo rm -rf /var/lib/apt/lists/* && sudo apt-get update ## Paketlisten aufräumen
echo -e "\033[42m \033[1m Fertig... bitte ENTER drücken \033[0m" ## "Abschlussmeldung" am Ende schreiben
read ## Terminal erst nach "Enter" schließen
ls
|
Die beiden autoremove sind redundant. Anstatt apt-get clean würde ich vielleicht eher apt-get autoclean nehmen. Aber das ist auf jeden Fall besser als das mit der Ermittlung der Kernels. Die Paketverwaltung ist so aufgesetzt, dass man bei apt-get autoremove auf jeden Fall die alten Kernels los wird.
Programmstarter noch dazu erstellt und schon muss ich für die Befehle nur noch mein Passwort eingeben ☺
Prima! Hier ist das Skript, das ich von Zeit zu Zeit ausführe: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 | #!/bin/sh
# Do a complete apt update to the current
# state of affairs.
set -fe
test $(id -u) -eq 0 || exec sudo "DEBUG=$DEBUG" "$0" "$@"
# debugging
test -n "$DEBUG" && set -x
d() { date +%s "$@"; }
finalize(){
( set -x; sync )
echo "Took $(($(d) - start_time))s"
}
# main
start_time=$(d)
stamp=/var/lib/apt/periodic/update-success-stamp
(
set -x
apt-get install -f
if [ ! -e "$stamp" ] || [ $(( start_time - $(d -r "$stamp") )) -gt 3600 ]; then
# cache is older than one hour
apt-get update || apt-get update || apt-get update || echo 'Ignoring some errors'
fi
apt-get dist-upgrade --yes
apt-get autoclean
snap refresh
)
# now check for kernel updates
if [ -r /run/reboot-required ]; then
finalize
cat /run/reboot-required
else
(
set -x
apt-get autoremove --yes
dpkg-query -l | awk '/^rc/ {print $2}' | xargs -trd \\n apt-get purge --yes
)
finalize
fi
|
|
RamSpeicher
Anmeldungsdatum: 17. Juli 2009
Beiträge: 2508
|
MarcyVega schrieb:
Auch von mir Danke fürs Teilen, und ja ist ein Wahnsinns Gefühl. Du bist aber nicht zufällig Ihre Schwester?
|
MarcyVega
(Themenstarter)
Anmeldungsdatum: 5. April 2018
Beiträge: 162
Wohnort: Meißen / Schwabington BC
|
rklm schrieb: MarcyVega schrieb:
Falls es jemanden interessiert wie es aussieht (die Echo-Ausgaben sind sogar farblich hinterlegt 😀 ):
Danke fürs Teilen!
Kein Ding 😀
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #!/bin/bash
echo -e "\033[41m \033[1m Aktueller Kernel: \033[0m"
uname -a ## Aktuellen Kernel anzeigen
echo -e "\033[41m \033[1m Alte Kernel werden gelöscht: \033[0m"
sudo apt autoremove ## Alte Kernel löschen (bis auf den aktuellen und den vorletzten)
echo -e "\033[41m \033[1m Überflüssige Abhängigkeiten werden entfernt: \033[0m"
sudo apt-get autoremove ## überflüssige Abhängigkeiten entfernen
echo -e "\033[41m \033[1m Paket-Cache wird geleert: \033[0m"
sudo apt-get clean ## Paket-Cache leeren
echo -e "\033[41m \033[1m Paketlisten werden aufgeräumt: \033[0m"
sudo rm -rf /var/lib/apt/lists/* && sudo apt-get update ## Paketlisten aufräumen
echo -e "\033[42m \033[1m Fertig... bitte ENTER drücken \033[0m" ## "Abschlussmeldung" am Ende schreiben
read ## Terminal erst nach "Enter" schließen
ls
|
Die beiden autoremove sind redundant. Anstatt apt-get clean würde ich vielleicht eher apt-get autoclean nehmen. Aber das ist auf jeden Fall besser als das mit der Ermittlung der Kernels. Die Paketverwaltung ist so aufgesetzt, dass man bei apt-get autoremove auf jeden Fall die alten Kernels los wird.
Sagte ja, dass ein "Profi" das bestimmt eleganter und besser macht... aber für mein erstes find ichs ganz okay und es macht ja trotzdem was es soll ☺ Vielleicht bastel ich es irgendwann mal eleganter um ☺
Programmstarter noch dazu erstellt und schon muss ich für die Befehle nur noch mein Passwort eingeben ☺
Prima! Hier ist das Skript, das ich von Zeit zu Zeit ausführe: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 | #!/bin/sh
# Do a complete apt update to the current
# state of affairs.
set -fe
test $(id -u) -eq 0 || exec sudo "DEBUG=$DEBUG" "$0" "$@"
# debugging
test -n "$DEBUG" && set -x
d() { date +%s "$@"; }
finalize(){
( set -x; sync )
echo "Took $(($(d) - start_time))s"
}
# main
start_time=$(d)
stamp=/var/lib/apt/periodic/update-success-stamp
(
set -x
apt-get install -f
if [ ! -e "$stamp" ] || [ $(( start_time - $(d -r "$stamp") )) -gt 3600 ]; then
# cache is older than one hour
apt-get update || apt-get update || apt-get update || echo 'Ignoring some errors'
fi
apt-get dist-upgrade --yes
apt-get autoclean
snap refresh
)
# now check for kernel updates
if [ -r /run/reboot-required ]; then
finalize
cat /run/reboot-required
else
(
set -x
apt-get autoremove --yes
dpkg-query -l | awk '/^rc/ {print $2}' | xargs -trd \\n apt-get purge --yes
)
finalize
fi
|
Ui... so weit bin ich noch nicht XD RamSpeicher schrieb: MarcyVega schrieb:
Auch von mir Danke fürs Teilen, und ja ist ein Wahnsinns Gefühl. Du bist aber nicht zufällig Ihre Schwester?
Ähm... nee... und wenn dann eher der Bruder 😀 "Marcy" steht für "Marcel" 😀
|
RamSpeicher
Anmeldungsdatum: 17. Juli 2009
Beiträge: 2508
|
MarcyVega schrieb:
Ähm... nee... und wenn dann eher der Bruder 😀 "Marcy" steht für "Marcel" 😀
Ups .... Naja .... 😳 ich ähm mach dann mal weiter ...
|
MarcyVega
(Themenstarter)
Anmeldungsdatum: 5. April 2018
Beiträge: 162
Wohnort: Meißen / Schwabington BC
|
RamSpeicher schrieb: MarcyVega schrieb:
Ähm... nee... und wenn dann eher der Bruder 😀 "Marcy" steht für "Marcel" 😀
Ups .... Naja .... 😳 ich ähm mach dann mal weiter ...
😀 😀 😀 😀 😀
|
MarcyVega
(Themenstarter)
Anmeldungsdatum: 5. April 2018
Beiträge: 162
Wohnort: Meißen / Schwabington BC
|
Doppelpost die zweite: Danke @rklm für deine Anregungen um mein Baby ein wenig eleganter und flinker (ist zumindest mein Eindruck) zu machen. Hab die jetzt mal übernommen und ich hab das Gefühl das es ein wenig schneller läuft. Generelles Danke an alle die mir dabei geholfen haben (auch Schubser in die richtige Richtung sind bekanntlich "Hilfe" ) ☺ Hier nun die finale Version von "Systempflege": 1
2
3
4
5
6
7
8
9
10
11
12
13 | #!/bin/bash
echo -e "\033[41m \033[1m Aktueller Kernel: \033[0m"
uname -a ## Aktuellen Kernel anzeigen
echo -e "\033[41m \033[1m Überflüssige Abhängigkeiten und alte Kernel werden entfernt: \033[0m"
sudo apt-get autoremove ## Überflüssige Abhängigkeiten & alte Kernel entfernen
echo -e "\033[41m \033[1m Paket-Cache wird geleert: \033[0m"
sudo apt-get autoclean ## Paket-Cache leeren
echo -e "\033[41m \033[1m Paketlisten werden aufgeräumt: \033[0m"
sudo rm -rf /var/lib/apt/lists/* && sudo apt-get update ## Paketlisten aufräumen
echo -e "\033[42m \033[1m Fertig... bitte ENTER drücken \033[0m" ## "Abschlussmeldung" am Ende schreiben
read ## Terminal erst nach "Enter" schließen
ls
|
Ist mir egal ob ihrs benutzt, verändert oder was auch immer damit macht 😀 Selbst "Sticheleien" weil ich einfach nur die Befehle aus dem Wiki kopiert hab, wären mir wurscht. Schließlich muss man nicht alles wissen, es reicht schon wenn man weiss wo das steht was man braucht ☺
|