Linux Sonntags-Optionen – Kleine unbekannte Schätze der CLI

Aus DebianforumWiki
Zur Navigation springen Zur Suche springen
Linux Sonntags Optionen

Linux Sonntags-Optionen – Kleine unbekannte Schätze der CLI

Diese Seite sammelt wöchentlich kleine, oft übersehene Optionen von klassischen Linux-Kommandos. Viele Tools nutzt jeder – aber manchmal verstecken sich gerade in den selten genutzten Optionen die spannendsten Details.

1: free -hl – Low/High Memory sichtbar machen

`free -h` kennt praktisch jeder. Aber mit der Option `-l` zeigt `free` zusätzlich die Aufteilung zwischen *Low-Memory* und

  • High-Memory*. Das ist besonders bei Systemen mit viel RAM

interessant, da die Kernel-Sicht manchmal überrascht. ]

Beispiel

$ free -hl
              gesamt       benutzt     frei      gemns.  Puffer/Cache verfügbar
Speicher:       38Gi        12Gi       4,3Gi       4,5Gi        26Gi        25Gi
Niedrig:        38Gi        34Gi       4,3Gi
Hoch:             0B          0B          0B
Swap:          5,0Gi       1,7Mi       5,0Gi

Alias

Für eine kurze, gut lesbare Ausgabe:

alias FREE-HL='free -hl'

Aus der Praxis: Swap sichtbar leeren

Mit 'free -hl' kann man die aktuelle Situation gut einschätzen. Wenn man allerdings eigentlich ausreichend RAM hat, der Swapspace aber dennoch gut gefüllt ist,

kann man auf die Idee kommen mit swapoff -a den swap abzuschalten und dann wieder zu aktivieren.

(nicht auf produktiven Systemen unter Last Rootserver / Testsystem / bewusst gemacht. dauert → Minuten, kein „mal eben“)

Ein Tipp aus der Praxis:

Setup

Terminal 1: swapoff -a

Terminal 2: free -hls 5 # (das zeigt den Status alle 5 Sekunden)

Wieder den swap aktivieren mit 'swapon -a'

Erläuterung

Schritt für Schritt am konkreten Beispiel

              gesamt       benutzt     frei        gemns.      Puffer/Cache verfügbar
Speicher:      7,6Gi       1,7Gi       4,5Gi       127Mi       1,8Gi        5,9Gi
Niedrig:       7,6Gi       3,1Gi       4,5Gi
Hoch:             0B          0B          0B

1️⃣ Warum „Niedrig = gesamt 7,6 Gi“?

Auf 64-Bit-Systemen (dein Fall) ist es heute normal, dass:

der gesamte RAM als „Low Memory“ gilt

„High Memory“ praktisch nicht mehr benutzt wird

Darum:

Niedrig gesamt = kompletter RAM Hoch = 0

2️⃣ Was bedeutet „Niedrig / benutzt = 3,1 Gi“?

Das ist der Teil des RAMs, der:

im Low-Memory-Bereich liegt und aktuell nicht frei ist

Dazu gehören u.a.: Kernel-Code & -Daten Treiber Slab-Allocator (Caches für Kernelobjekte) Page Tables DMA-fähige Speicherbereiche

Teile von Buffern/Caches, die im Lowmem liegen

👉 Das ist völlig normal.

3️⃣ Warum widerspricht das nicht den 1,7 Gi „Speicher benutzt“ oben?

Weil das verschiedene Sichten sind:

„Speicher / benutzt“ (1,7 Gi) → User-Space-Sicht (Prozesse, die du „siehst“)

„Niedrig / benutzt“ (3,1 Gi) → Kernel-Sicht (inkl. interner Kernelstrukturen)

Der Kernel „versteckt“ RAM nicht, er benutzt ihn einfach für Dinge, die nicht als Prozesse auftauchen.

4️⃣ Warum ist das kein Problem?

Der wichtigste Wert steht ganz rechts:

verfügbar: 5,9Gi

👉 Das ist der entscheidende Wert.

Er sagt:

So viel RAM kann sofort für neue Programme genutzt werden, ohne dass das System ins Schwitzen kommt.

Solange „verfügbar“ hoch ist und Swap leer, ist alles bestens. „‚benutzt‘ ist keine Warnung – ‚verfügbar‘ ist die Wahrheit.

Warum ist free -hl nützlich?

  • zeigt zusätzliche Kernel-Perspektive
  • erklärt scheinbare „phantomhafte RAM-Belegung“
  • hilft beim Debuggen von Speicherengpässen
  • ideal für jede Analyse jenseits von „free -h“

dd mit eingebautem Fortschritt

Es gibt halt kleine Tools, die einem in Fleisch und Blut übergegangen sind.

dd ist so ein Tool, klar, kennt jeder, der schon ein wenig mit Linux unterwegs ist. Häufig wird es benutzt, um Abbilder auf USB Sticks zu kopieren, blöd ist nur, dass man keinen Fortschritt sieht, man muss sich halt gedulden.

So sieht das ungefähr aus.

dd if=Superlinux.iso of=/dev/sdc bs=8M

Doch es lohnt sich alle paar Versionen mal wieder die Man Pages zu studieren, denn seit der Version 8.24 hat dd den Parameter status um progress erweitert.

Nun ist es bequem möglich, den Fortschritt zu beobachten, mit dem oflag=direct wird die Schreiboperation auch nicht gebuffert, (je nach Gerät/Filesystem nicht immer sinnvoll) d.h. Wenn dd sagt, es ist fertig, kann man den Stick entnehmen und muss nicht erst auf das Ende der Schreiboperation warten.

Direkt mit Fortschritt starten

dd if=/dev/sdX of=/mnt/backup/disk.img bs=16M status=progress conv=fsync

status=progress zeigt laufend Bytes + Durchsatz (geht auf stderr).

bs=16M macht’s meist deutlich schneller als Default.

Optional, damit er am Ende noch hübsch zusammenfasst:

conv=fsync sorgt dafür, dass am Ende wirklich alles raus geschrieben ist (langsamer, aber „ehrlicher“ beim Fertig werden).

Nachträglich Fortschritt anzeigen, obwohl ohne status=progress gestartet

Das ist der eigentliche Nerd-Goldklumpen:

1️⃣ PID finden pidof dd

oder:

pgrep -x dd

2️⃣ Status anfordern (ohne Abbruch) kill -USR1 <PID>


Dann schreibt dd sofort eine Statuszeile nach stderr (z.B. „bytes kopiert, Sekunden, MB/s“).

So, wars das?

Ich finde, da geht noch was...

Alternative

wenn pv verfügbar (also apt install pv ) ist, hat man eine bessere Ausgabe und auch eine 'Abschätzung der Laufzeit' des Vorgangs.

[==========> ] 58% ETA 0:00:10

Achtung: Die Syntax ist etwas anders, weil dd durch die Pipe gefüttert wird, fällt if= weg! Die Fütterung übernimmt pv ,welches den Data Stream per STDin in die Pipe sendet.

pv linux_isos/MX-23.4_x64.iso| dd of=test.iso bs=16M 2,13GiB 0:00:59 [36,9MiB/s] [========================================================================================>] 100%

0+34880 Datensätze ein 0+34880 Datensätze aus 2285895680 Byte (2,3 GB, 2,1 GiB) kopiert, 58,8298 s, 38,9 MB/s

und nein, hier braucht man wirklich nur das nackte pv nutzen, die üblichen Optionen sind bereits gesetzt. Aber ein conv=fsync fürs dd kann man noch dran hängen.

Vorteile von pv:

  • ETA-Anzeige
  • übersichtliche Progressbar
  • unabhängig von dd-Version

Zu pv sagt die man-page:

Zeigt den Fortschritt der Daten durch eine Pipeline an, indem Informationen wie die verstrichene Zeit, der Prozentsatz der abgeschlossenen Datenübertragung (mit Fortschrittsbalken), die aktuelle Durchsatzrate, die insgesamt übertragene Datenmenge und die voraussichtliche Ankunftszeit (ETA) angezeigt werden.

Jede DATEI wird in die Standardausgabe kopiert. Ohne DATEI oder wenn DATEI „-“ ist, wird die Standardeingabe gelesen. Dies entspricht dem Verhalten von cat(1).

Lokale IP gesucht

Warum? Eine LAN-Party, der Server wird nicht gefunden, ip a ist zu gesprächig. Man muss das auch kürzer hinbekommen...

Lösung

alias MYIP='ip -br -f inet a | grep -v UNKNOWN'


-br → kompakt

-f inet → nur IPv4

das grep -v UNKOWN macht die Sache noch übersichtlicher

Wer GNOME nutzt,

kann sich die lokale IP auch dauerhaft anzeigen lassen (Extension „LAN IP Address“).

uptime

Kennt ja jeder

Ja, na klar, aber auch dieses alltägliche command kann ein paar Dinge mehr.

Es mindestens 2 Optionen, die auch einen Blick Wert sind.

1️⃣ -p 👉 Pretty

zum Beispiel:

uptime -p

up 10 weeks, 3 days, 23 hours, 57 minutes

2️⃣ -s 👉 since

zum Beispiel:

uptime -s

2025-10-21 09:56:25

sort

sort wird häufig in Shell Scripten in pipes eingesetzt.

Oft sieht man das Konstrukt sort | uniq

Das funktioniert, aber das geht kürzer, schneller und wenn ihr mich fragt intuitiver

sort -u

👉 Denn sort hat uniq bereits an Bord!

  uniq funktioniert nur auf sortierten Daten – sort -u erledigt beides in einem Schritt.
ein Brutales Beispiel

zcat other_vhosts_access.log.*.gz |cut -d'-' -f1|sort -u |wc -l

funktioniert, aber Zeitersparnis praktisch an der Nachweisgrenze