# Linux

# Linux Basics - OS

### Betriebssystem anzeigen

<div class="relative w-full mt-4 mb-1" id="bkmrk-"><div><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback">  
</div></div></div></div></div>```
cat /etc/os-release
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--1"><div><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl">  
</div></div></div></div>Output:

```
root@SYS_1:/ # cat etc/os-release 
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@SYS_1:/ #
```

<div class="relative w-full mt-4 mb-1" id="bkmrk-oder"><div><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div><div class="relative"><div><div class="relative z-0 flex max-w-full">oder <div class="relative w-full mt-4 mb-1"><div><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback">  
</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>```
. /etc/os-release && echo "$PRETTY_NAME"
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--2"><div><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div><div class="relative"><div><div class="relative z-0 flex max-w-full"><div class="relative w-full mt-4 mb-1"><div><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl">  
</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>Output:

```
root@SYS_1:/ # cat etc/os-release 
Debian GNU/Linux 11 (bullseye)
root@SYS_1:/ #
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--3"><div><div class="contents"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div>---

<div>  
</div></div></div></div></div></div></div></div>

# Neue Seite

### Betriebssystem anzeigen

Führe folgenden Befehl aus:

```
cat /etc/os-release
```

**Ausgabe:**

```
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
ID=debian
```

**Alternativer Befehl:**

```
. /etc/os-release && printf '%s\n' "$PRETTY_NAME"
```

**Ausgabe:**

```
Debian GNU/Linux 13 (trixie)
```

# rsync

# rsync loop until finish

# Rsync automatisch wiederholen

Mit dieser Schleife wird ein fehlgeschlagener `<span class="editor-theme-code">rsync</span>`-Kopiervorgang nach 60 Sekunden erneut gestartet.

Die Schleife endet automatisch, sobald `<span class="editor-theme-code">rsync</span>` erfolgreich abgeschlossen wurde. Sie kann jederzeit mit `<span class="editor-theme-code">Strg + C</span>` abgebrochen werden.

## Rsync-Schleife

```bash
while true; do
    rsync -avP --append-verify -- \
        /mnt/Source/ \
        /mnt/Destination/

    status=$?

    if [ "$status" -eq 0 ]; then
        printf '%s: rsync wurde erfolgreich abgeschlossen.\n' \
            "$(date '+%F %T')"
        break
    fi

    printf '%s: rsync ist mit Exit-Code %s fehlgeschlagen. Neuer Versuch in 60 Sekunden.\n' \
        "$(date '+%F %T')" "$status"

    sleep 60
done
```

## Pfade anpassen

Der Quellpfad ist:

```bash
/mnt/Source/
```

Der Zielpfad ist:

```bash
/mnt/Destination/
```

Der abschließende Schrägstrich beim Quellpfad ist wichtig:

- `<span class="editor-theme-code">/mnt/Source/</span>` kopiert den Inhalt des Ordners.
- `<span class="editor-theme-code">/mnt/Source</span>` kopiert den Ordner `<span class="editor-theme-code">Source</span>` selbst.

## Erklärung der Schleife

### `<span class="editor-theme-code">while true; do</span>`

Startet eine Endlosschleife. Alle Befehle zwischen `<span class="editor-theme-code">do</span>` und `<span class="editor-theme-code">done</span>` werden wiederholt ausgeführt.

### `<span class="editor-theme-code">rsync -avP</span>`

Startet die Datenübertragung mit `<span class="editor-theme-code">rsync</span>`.

- `<span class="editor-theme-code">-a</span>` aktiviert den Archivmodus. Dabei werden unter anderem Berechtigungen, Zeitstempel und symbolische Links erhalten.
- `<span class="editor-theme-code">-v</span>` zeigt ausführlich an, welche Dateien verarbeitet werden.
- `<span class="editor-theme-code">-P</span>` zeigt den Fortschritt an und behält unvollständig übertragene Dateien.

### `<span class="editor-theme-code">--append-verify</span>`

Eine bereits teilweise übertragene Datei wird beim nächsten Versuch fortgesetzt. Anschließend überprüft `<span class="editor-theme-code">rsync</span>`, ob die zusammengesetzte Datei korrekt ist.

Diese Option eignet sich besonders für große Dateien, die sich während der Übertragung nicht verändern.

### `<span class="editor-theme-code">--</span>`

Das doppelte Minuszeichen beendet die Verarbeitung von Optionen. Dadurch werden Pfade, die mit einem Minuszeichen beginnen, nicht versehentlich als Befehlsoption interpretiert.

### `<span class="editor-theme-code">status=$?</span>`

Speichert den Exit-Code des zuletzt ausgeführten Befehls in der Variable `<span class="editor-theme-code">status</span>`.

- Exit-Code `<span class="editor-theme-code">0</span>` bedeutet: erfolgreich abgeschlossen.
- Ein anderer Exit-Code bedeutet: ein Fehler ist aufgetreten.

### `<span class="editor-theme-code">if [ "$status" -eq 0 ]; then</span>`

Prüft, ob `<span class="editor-theme-code">rsync</span>` erfolgreich abgeschlossen wurde.

### `<span class="editor-theme-code">printf</span>`

Gibt eine Meldung mit aktuellem Datum und aktueller Uhrzeit aus.

### `<span class="editor-theme-code">break</span>`

Beendet die Schleife, sobald `<span class="editor-theme-code">rsync</span>` erfolgreich war.

### `<span class="editor-theme-code">sleep 60</span>`

Wartet nach einem Fehler 60 Sekunden, bevor der nächste Versuch gestartet wird.

Für eine Wartezeit von fünf Minuten kann der Wert beispielsweise auf `<span class="editor-theme-code">300</span>` geändert werden:

```bash
sleep 300
```

### `<span class="editor-theme-code">done</span>`

Markiert das Ende der Schleife. Wenn `<span class="editor-theme-code">break</span>` nicht ausgeführt wurde, beginnt die Schleife anschließend erneut.

## Schleife abbrechen

Die laufende Schleife kann im Terminal mit folgender Tastenkombination beendet werden:

```
Strg + C
```

## Wichtiger Hinweis bei Ein-/Ausgabefehlern

Eine Meldung wie diese weist häufig auf ein Problem mit dem Datenträger, dem Dateisystem, einem Kabel, einem USB-Gehäuse oder einer Netzwerkverbindung hin:

```
Input/output error (5)
```

Die Schleife behebt die Ursache nicht. Sie startet lediglich die Übertragung erneut. Bei wiederholten Ein-/Ausgabefehlern sollten die Kernel-Meldungen geprüft werden:

```bash
journalctl -k -n 100 --no-pager
```

### `<span class="editor-theme-code">journalctl -k</span>`

Zeigt Meldungen des Linux-Kernels an. Dazu gehören unter anderem Fehler von Festplatten, USB-Geräten, Controllern und Dateisystemen.

### `<span class="editor-theme-code">-n 100</span>`

Begrenzt die Ausgabe auf die letzten 100 Meldungen.

### `<span class="editor-theme-code">--no-pager</span>`

Gibt die Meldungen direkt im Terminal aus, ohne ein zusätzliches Anzeigeprogramm zu öffnen.