Skip to content

Commit 4b47001

Browse files
author
marci
committed
add post bash script
1 parent b11c125 commit 4b47001

2 files changed

Lines changed: 203 additions & 4 deletions

File tree

.vscode/settings.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,9 @@
1414
"editor.minimap.enabled": false
1515
},
1616
"frontMatter.panel.openOnSupportedFile": true,
17-
"window.autoDetectColorScheme": true
17+
"window.autoDetectColorScheme": false,
18+
"workbench.colorTheme": "Monokai",
19+
"workbench.editor.autoLockGroups": {
20+
"mainThreadWebview-markdown.preview": true
21+
}
1822
}

content/posts/linux/automatische-update-debian-bash-script.de.md

Lines changed: 198 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ description: Automatisierte Updates auf einem debian-basierenden OS mit einem Ba
44
date: 2025-08-15T08:57:42.002Z
55
tags:
66
- bash
7-
- linux
87
- debian
8+
- linux
99
categories:
1010
- Linux
1111
- Tutorials
@@ -81,7 +81,7 @@ Um diese zu Bash-Script-Datei zu erstellen, erstellt ihr eine neue Datei mit der
8181
>
8282
>sudo apt install nano
8383
>```
84-
84+
### Schritt 1 - Erstellung einer Bash-Script-Datei
8585
In diesem Beispiel nutze ich einfachshalber den `nano-editor` im Terminal, da dieser einfach zu Bedienen ist und auch für alle Distros (meines Wissens) verfügbar ist.
8686
8787
```sh
@@ -101,17 +101,182 @@ Im nun offnen Editor-Fenster der Datei `simple_update_debian_script.sh`, gibt ih
101101

102102
> Mit dieser ersten Zeile `/bin/bash` weisen wir aus, das es sich hier um ein Bash-Script handelt und so weiß das Betriebssystem, mit welchem Interpreter (Shell) unser Script ausgeführt werden soll.
103103
104-
### Bash-Script-Beschreibung einfügen
104+
### Schritt 2 - Bash-Script Kommentare und Anweisungen einfügen
105+
#### Warum Kommentare und Anweisungen erstellen?
106+
Generell sollte man sich von Anfang angewöhnen, die erstellten Bash-Scripte gut zu Dokumentieren.
107+
108+
Erstens hilft es einem Selbst, wenn man eine Vielzahl an Bash-Scripte in seinem Werkzeugkasten hat, um sich auch später noch daran erinnern zu können, welche Funktionalität mit dem Script bereitgestellt wird.
109+
110+
Zweitens ist natürlich von Vorteil, dass auch Andere mit dem Bash-Script etwas anfangen können, wenn ihr eure Scripte zum Beispiel intern oder auf GitHub etc. mit anderen Usern teilt.
111+
#### Einfügen von Kommentare oder Anweisungen
112+
Ich für meinen Teil schreibe am Anfang meiner Scripte immer erst die Versionsnummer (für den Versionsverlauf), eine Beschreibung wofür dieses Script gedacht ist und Anweisungen für die Nutzung des Scripts.
105113

114+
Den einzelnen auszuführenden Befehle im Bash-Script, füge ich auch noch eine kurze Beschriftung sowie Funktionsart hinzu, wenn ich diese mit Dritten teile.
106115

116+
**Im folgendem sieht das dann so aus:**
117+
118+
```bash
119+
# Version: 1.0
120+
121+
# Hinweis:
122+
# Dieses Script ist für Debian-basierte Systeme gedacht.
123+
# Es aktualisiert das System und entfernt nicht mehr benötigte Pakete.
124+
# Es überprüft, ob ein Neustart des Systems erforderlich ist und startet es gegebenenfalls SOFORT neu.
125+
# Es ist wichtig, dass das Script als root ausgeführt wird.
107126

127+
# Anwendung:
128+
# sudo chmod +x simple_update_debian_script.sh
129+
# sudo ./simple_update_debian_script.sh
108130

131+
# Info:
132+
# This script is intended for Debian-based systems.
133+
# It updates the system and removes unused packages.
134+
# It checks if a system restart is required and restarts the system if necessary.
135+
# It is important that the script is run as root.
136+
137+
# Using:
138+
# sudo chmod +x simple_update_debian_script.sh
139+
# sudo ./simple_update_debian_script.sh
140+
141+
142+
143+
# Automatisches Update-Script für Debian-basierte Systeme / Automatic update script for Debian-based systems
144+
```
145+
146+
### Schritt 3 - `echo` Ausgabe im Terminalfenster
147+
Um dem Anwender des Bash-Scripts eine Rückmeldung zu geben, was gerade bei der Ausführung des Scripts ausgeführt wird, gibt es den Befehl `echo` für den Ausdruck im Terminal.
148+
149+
In unserem Beispiel-Script nutzen wir den Befehl `echo` zum ersten Mal, um dem Anwender eine Nachricht im Terminal zu übergeben, welche darüber informiert, was nun durch dieses Script auf dem System durchgeführt wird.
150+
151+
```bash
152+
echo "================================================================="
153+
echo " Automatisches System-Update / Automatic system update"
154+
echo " (Debian/Ubuntu/Mint)"
155+
echo "================================================================="
156+
```
157+
### Schritt 4 - Bash-Anweisung `if, then, fi` (root-Berechtigung überprüfen)
158+
Unsere erste Anweisung die wir in unser Bash-Update-Script einfügen werden, ist die Überprüfung, ob wir die `root - Rechte` haben, um die Befehle auf dem System ausführen zu können.
159+
160+
```bash
161+
# Prüfen, ob root-Rechte vorhanden sind / Check if root privileges are present
162+
if [ "$EUID" -ne 0 ]; then
163+
echo "Bitte führen Sie dieses Script als root aus (sudo) / Please run this script as root (sudo)."
164+
exit 1
165+
fi
166+
```
167+
Hierzu bedienen wir uns der `if, then, fi` -Anweisung.
168+
Im Klarnamen heißt das, **'wenn (`if`)' "nicht gleich Benutzer-ID + 0 `[ "$EUID" -ne 0 ];` ist (root-User)", 'dann (`then`)' gebe eine Ausgabe im Terminal (`echo`) ab "Bitte führen Sie dieses Script als root aus (sudo) / Please run this script as root (sudo)." und beende das Script (`exit 1` (steht für "Script wurde mit Fehler oder besonderem Status beendet")). Der Befehl `fi` beendet die Anweisung.
169+
170+
### Schritt 5 - Bash-Anweisung (Überprüfung Paketmanager)
171+
In diesem Schritt werden wir eine weitere Systemprüfung durchführen, um zu Überprüfen, ob der Paketmanager `apt` auf dem System vorhanden ist.
172+
173+
```bash
174+
# Prüfen, ob apt verfügbar ist / Check if apt is available
175+
if ! command -v apt >/dev/null 2>&1; then
176+
echo "Kein 'apt'-Paketmanager gefunden. Dieses Script funktioniert nur auf Debian-basierten Systemen / No 'apt' package manager found. This script only works on Debian-based systems."
177+
exit 2
178+
fi
179+
```
180+
181+
182+
<!-- FM:Snippet:Start data:{"id":"Info","fields":[]} -->
183+
{{< alert type="info" >}}
184+
```bash
185+
if ! command -v apt >/dev/null 2>&1;
186+
```
187+
Damit wird überprüft, ob das Kommando apt im System verfügbar ist.
188+
{{< /alert >}}
189+
<!-- FM:Snippet:End -->
190+
191+
### Schritt 4 - Bash-Anweisung (Paketquellen aktualisieren)
192+
In diesem Schritt geben wir zunächst die Ausgabe (`echo`) in das Terminal, dass die Paketquellen aktualisiert werden.
193+
Dann wird der Befehl `apt update -y` ausgeführt um die angekündigte Aktualisierung der Paketquellen durchzuführen.
194+
195+
```bash
196+
# Paketquellen aktualisieren / Update package sources
197+
echo "Aktualisiere Paketquellen / Update package sources"
198+
apt update -y
199+
```
200+
### Schritt 5 - Bash-Anweisung (Debian-System aktualisieren)
201+
Nun wieder die `echo`-Anweisung, um die folgende Ausgabe im Terminal anzuzeigen: "Installiere verfügbare Updates / Install available updates" und gefolgt von dem Terminal-Befehl `apt upgrade -y`, um das Debian-System zu aktualisieren.
202+
203+
```bash
204+
# Upgrades installieren / Install available updates
205+
echo "Installiere verfügbare Updates / Install available updates"
206+
apt upgrade -y
207+
```
208+
### Schritt 6 - Bash-Anweisung (Abhängigkeiten aktualisieren)
209+
Um auch Abhängigkeiten bei dem Upgrade-Prozess aufzulösen, zum Beispiel Sprung auf eine neue Version, führen auch den folgenden Terminal-Befehl in unserem Bash-Update-Script aus.
210+
211+
```bash
212+
# Optionale Komplett-Aktualisierung (inklusiver Entfernungen/Neuinstallationen) / Optional full upgrade (including removals/reinstallations)
213+
echo "Führe vollständige Aktualisierung durch / Run full upgrade"
214+
apt full-upgrade -y
215+
```
216+
### Schritt 7 - Bash-Anweisung (unnötige apt-Pakete entfernen)
217+
Als nächstes werden wir noch eine Anweisung einbauen, um unnötige / nicht mehr benötigte `apt`-Pakete automatisch zu löschen.
218+
219+
```bash
220+
# Nicht mehr benötigte Pakete entfernen / Remove unused packages
221+
echo "Entferne nicht mehr benötigte Pakete / Remove unused packages"
222+
apt autoremove -y
223+
```
224+
225+
### Schritt 8 - Bash-Anweisung (apt-cache leeren)
226+
Zu guter Letzt werden wir noch eine letzte Anweisung für den Update-Prozess einfügen, um den Cache des Paketmanager zu leeren.
227+
228+
```bash
229+
# Paketdatenbank bereinigen / Clean up cached package data
230+
echo "Bereinige zwischengespeicherte Paketdaten / Clean up cached package data"
231+
apt clean
232+
```
233+
234+
### Schritt 9 - Bash-Anweisung (echo-Ausgabe Update-Prozess abgeschlossen)
235+
Da der Update-Prozess nach den letzten Anweisungen fertiggestellt ist, geben wir noch eine Mitteilung an den User im Terminal, dass der Update-Prozess zu Ende ist.
236+
237+
```bash
238+
echo "================================================================="
239+
echo " System-Update abgeschlossen / System update completed"
240+
echo "================================================================="
241+
```
242+
243+
### Schritt 10 - Bash-Anweisung (Erforderliches Reboot überprüfen)
244+
Da zum Beispiel einige Aktualisierungen (z.B. Änderung am Kernel) einen Neustart des Betriebssystem benötigen, werden wir noch eine letzte Anweisung hinzufügen, um dieses zu überprüfen und gegebenfalls einen Neustart auslösen.
245+
246+
```bash
247+
# Überprüfen ob ein Neustart des Systems erforderlich ist / Check if a system restart is required
248+
if [ -f /var/run/reboot-required ]; then
249+
echo "Ein Neustart des Systems ist erforderlich. Das System wird jetzt neu gestartet / A system restart is required. The system will now restart."
250+
reboot
251+
fi
252+
```
253+
254+
#### Bash-Update-Script abspeichern
255+
> Nach einer letzten Überprüfung von unserem Script müssen wir dieses natürlich nach abspeichern!
109256
110257
## Fertiges Debian-Update Bash-Script
258+
Hier nun das fertige Bash-Script um automatisiert Update-Routinen auf Debian-Systemen durchlaufen zu lassen.
259+
260+
Diese könnt ihr dann wie cronjob automatisiert auf den Linux-Systemen laufen lassen.
261+
262+
<!-- FM:Snippet:Start data:{"id":"Success","fields":[]} -->
263+
{{< alert type="success" >}}
264+
Gerade wenn ihr eine Vielzahl an Linux-Server zum Beispiel auf einen Proxmox VE-Server laufen habt, erleichtern euch solche Bash-Scripte enorm die Arbeit.
265+
{{< /alert >}}
266+
267+
<!-- FM:Snippet:End -->## Schritt 11 - Bash-Update-Script ausführbar machen
268+
Damit wir das Bash-Update-Script auch nutzen / ausführen können, muss das Script noch mit dem entsprechenden Rechten versehen werden.
269+
270+
```sh
271+
sudo chmod +x simple_update_debian_script.sh
272+
```
273+
111274
112275
```bash
113276
#!/bin/bash
114277

278+
# Version: 1.0
279+
115280
# Hinweis:
116281
# Dieses Script ist für Debian-basierte Systeme gedacht.
117282
# Es aktualisiert das System und entfernt nicht mehr benötigte Pakete.
@@ -188,6 +353,36 @@ fi
188353

189354
```
190355
356+
## Schritt 11 - Bash-Update-Script ausführbar machen
357+
Damit wir das Bash-Update-Script auch nutzen / ausführen können, muss das Script noch mit dem entsprechenden Rechten versehen werden.
358+
359+
**Script-Rechte anpassen**
360+
361+
```sh
362+
# Sript-Rechte anpassen
363+
364+
sudo chmod +x simple_update_debian_script.sh
365+
366+
```
367+
368+
**Bash-Update-Script ausführen**
369+
370+
```sh
371+
# Möglichkeit 1: Ausführen des Bash-Scripts
372+
373+
sh simple_update_debian_script.sh
374+
375+
# Möglichkeit 2: Ausführung des Scripts
376+
377+
./simple_update_debian_script.sh
378+
379+
```
380+
381+
## Fazit zum Bash-Scripting
382+
Wer effizient mehrere Linux-Server zu administrieren hat, kommt an Bash- / oder Python-Scripting meiner Meinung nicht vorbei.
383+
384+
Natürlich gibt es zum Beispiel auch mächtige Tools wie [**Ansible**](https://docs.ansible.com/ansible/latest/index.html) für die Automatisierung von Deployment, Wartung, etc., aber ist das Lernen einer Script-Sprache in meinen Augen der beste Anfang.
385+
191386
<!-- FM:Snippet:Start data:{"id":"Help deutsch","fields":[]} -->
192387
> ## Fragen und Antworten
193388
>

0 commit comments

Comments
 (0)