<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linuxkurs-Blog (Einträge über Shell)</title><link>https://lannert.de/debloss/</link><description></description><atom:link href="https://lannert.de/debloss/categories/shell.xml" rel="self" type="application/rss+xml"></atom:link><language>de</language><copyright>Contents © 2026 &lt;a href="mailto:lannert@hhu.de"&gt;Detlef Lannert&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-NC-SA"
style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"&gt;&lt;/a&gt;</copyright><lastBuildDate>Fri, 20 Mar 2026 21:56:19 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Speicherplatz sparen durch Deduplizieren</title><link>https://lannert.de/debloss/posts/speicherplatz-sparen-durch-deduplizieren/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;Wenn man im Firefox mehrere Webseiten einer Site „komplett“ (in einem
dafür eigens angelegten Unterverzeichnis) speichert, legt er zusätzlich
zu einer HTML-Datei pro Seite jeweils ein Verzeichnis mit den verlinkten
Dateien an. Dadurch entstehen meist zahlreiche Kopien derselben JS- und
CSS-Dateien, Hintergrund- oder Titelbilder usw. usf., die unnötig Platz
beanspruchen. Wie kann man diese Daten platzsparender speichern?&lt;/p&gt;
&lt;p&gt;Das Programm &lt;code class="docutils literal"&gt;rdfind&lt;/code&gt; (das z.B. für Debian-Systeme als gleichnamiges Paket
existiert) kann helfen: Man wechselt in das Verzeichnis, in dem die Downloads
liegen, und ruft es zunächst im dry-run-Modus auf:&lt;/p&gt;
&lt;pre class="literal-block"&gt;rdfind -dryrun true -makehardlinks true .&lt;/pre&gt;
&lt;p&gt;Wenn die Ausgabe plausibel erscheint, klopft man dreimal auf Holz und lässt es
im Normalmodus laufen:&lt;/p&gt;
&lt;pre class="literal-block"&gt;rdfind -makehardlinks true .&lt;/pre&gt;
&lt;p&gt;Es gibt einige Informationen über den Ablauf aus und teilt u.a. mit, wieviel
Speicherplatz eingespart wurde, indem die Dateiduplikate durch Hardlinks
ersetzt wurden. Das heißt, in jedem Seitenverzeichnis sind nach wie vor alle
Dateien vorhanden, aber identische Dateien sind nur einmal im Dateisystem
gespeichert, alle Kopien verweisen auf denselben Datenbereich. Löscht man
später einzelne Verzeichnisse, so bleiben die Daten so lange erhalten, bis die
letzte Referenz (der letzte Hardlink) gelöscht wurde – genau so, wie man es
braucht.&lt;/p&gt;
&lt;p&gt;Je nachdem, welches Backup-Tool man verwendet (hoffentlich überhaupt eines!),
kann es sein, dass dieses die Hardlinks nicht berücksichtigt und die Dateien
pro Link einmal auf das Backup-Medium kopiert. Dadurch kann sich der
Speicherplatzbedarf der Backups unerwartet vergrößern. Falls das Tool selbst
dedupliziert, dürfte dieser Effekt nicht auftreten.&lt;/p&gt;</description><category>CLI</category><category>Dateisystem</category><category>Shell</category><category>Web</category><guid>https://lannert.de/debloss/posts/speicherplatz-sparen-durch-deduplizieren/</guid><pubDate>Fri, 20 Mar 2026 19:00:00 GMT</pubDate></item><item><title>Die (nähere) Zukunft von Git</title><link>https://lannert.de/debloss/posts/die-nahere-zukunft-von-git/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;Die Git-Entwickler haben die nähere Zukunft von Git &lt;a class="reference external" href="https://lwn.net/ml/all/aOQVeVYY6zadPjln@nand.local"&gt;diskutiert&lt;/a&gt;;
zu den zentralen Themen gehören die Umstellung auf SHA256 (statt SHA1, das nicht mehr
ausreichend sicher ist!), die Migration auf Rust und die Vorbereitung auf Git 3.0, das
einige breaking changes mit sich bringen wird.&lt;/p&gt;</description><category>CLI</category><category>Linux</category><category>Rust</category><category>Shell</category><category>Versionsverwaltung</category><guid>https://lannert.de/debloss/posts/die-nahere-zukunft-von-git/</guid><pubDate>Sun, 09 Nov 2025 21:00:00 GMT</pubDate></item><item><title>Interessante CLI-Tools, die mit Rust erstellt wurden</title><link>https://lannert.de/debloss/posts/interessante-cli-tools-die-mit-rust-erstellt-wurden/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;Orhun Parmaksız hat bei RustLab 2024 seine 7 bevorzugten CLI-Tools vorgestellt:
&lt;a class="reference external" href="https://www.youtube.com/watch?v=ATiKwUiqnAU"&gt;7 Rust Terminal Tools That You Should Use&lt;/a&gt;.
Er selbst ist Entwickler beim Projekt &lt;a class="reference external" href="https://ratatui.rs"&gt;Ratatui&lt;/a&gt;,
das TUI-Schnittstellen für Rust bereitstellt.&lt;/p&gt;
&lt;p&gt;Seine Favoriten sind:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;tui-journal: &lt;a class="reference external" href="https://github.com/AmmarAbouZor/tui-journal"&gt;https://github.com/AmmarAbouZor/tui-journal&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;repgrep: &lt;a class="reference external" href="https://github.com/acheronfail/repgrep"&gt;https://github.com/acheronfail/repgrep&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;serie: &lt;a class="reference external" href="https://github.com/lusingander/serie"&gt;https://github.com/lusingander/serie&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;rainfrog: &lt;a class="reference external" href="https://github.com/achristmascarl/rainfrog"&gt;https://github.com/achristmascarl/rainfrog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;netscanner: &lt;a class="reference external" href="https://github.com/Chleba/netscanner"&gt;https://github.com/Chleba/netscanner&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;glim: &lt;a class="reference external" href="https://github.com/junkdog/glim"&gt;https://github.com/junkdog/glim&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;atac: &lt;a class="reference external" href="https://github.com/Julien-cpsn/ATAC"&gt;https://github.com/Julien-cpsn/ATAC&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Meine Erfahrungen damit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;tui-journal - ein TUI-Journal- (Notizen-) Programm. Leicht zu installieren.
Für jedes topic, das man anlegt, gibt es einen Editierbereich, der aber per se
unstrukturiert ist. Also kein Ersatz für ein Weblog oder meine reST-Notizen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;repgrep – Suchen und Ersetzen in Verzeichnisbäumen. Es basiert auf dem Tool
ripgrep, das nicht so simpel zu installieren ist, daher:&lt;/p&gt;
&lt;pre class="literal-block"&gt;git clone https://github.com/BurntSushi/ripgrep
cd ripgrep
cargo build --release --features pcre2
cargo install repgrep&lt;/pre&gt;
&lt;p&gt;Man kann beispielsweise in einem Source tree nach einem Bezeichner suchen, bekommt
die Treffer (pseudo-) grafisch angezeigt, kann sie aus- oder abwählen und anschließend
durch einen anderen String ersetzen.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;serie – git-Historie im TUI grafisch darstellen. Installation einfach mit
&lt;code class="docutils literal"&gt;cargo install &lt;span class="pre"&gt;--frozen&lt;/span&gt; serie&lt;/code&gt; (lt. Homepage auszusprechen wie im Deutschen!).
Aufruf in einem git-Baum zeigt direkt die Historie an; man kann mit dem Cursor
einen Commit auswählen, Enter drücken und bekommt Details dazu angezeigt. Sehr
einfach, sehr nützlich.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;rainfrog – ein TUI-Datenbank-Client für PostgreSQL, SQLite, duckdb (experimentell)
und andere. Installation mit &lt;code class="docutils literal"&gt;cargo install rainfrog&lt;/code&gt;. Bedienung und Funktionalität
können mich nicht überzeugen; mit den CLI-Clients (psql, sqlite3) geht's einfacher.
Vermutlich soll rainfrog mit abgespeicherten Queries manche häufigen Abfragen
abrufbar machen, aber die könnte man genausogut auch anders skripten.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;netscanner – ein Tool zur Analyse des Datenverkehrs im LAN. Installation einfach mit
&lt;code class="docutils literal"&gt;cargo install netscanner&lt;/code&gt;; das Programm muss mit Root-Rechten ausgeführt werden.
Es werden zunächst die lokalen Interfaces und die erkannten Wifi-Netze angezeigt;
man kann ein lokal erreichbares Netz scannen. Man kann sich die ein- und ausgehenden
Pakete anzeigen lassen, die offenen Ports und den Traffic. Die Navigation im TUI ist
nicht gerade selbsterklärend (in den Labels sind hier und da einzelne Buchstaben
hervorgehoben, wenn man die drückt, passiert was).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;glim – “terminal user interface (TUI) for monitoring GitLab CI/CD pipelines and
projects”. Nicht ausprobiert.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;atac – ein Web-API-Client fürs TUI. Installation mit &lt;code class="docutils literal"&gt;cargo install atac &lt;span class="pre"&gt;--locked&lt;/span&gt;&lt;/code&gt;
scheiterte mit einer Compilerfehlermeldung.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kurz gefasst: repgrep und serie passen gut in eine Sammlung von CLI-Tools.&lt;/p&gt;</description><category>CLI</category><category>Linux</category><category>Rust</category><category>Shell</category><guid>https://lannert.de/debloss/posts/interessante-cli-tools-die-mit-rust-erstellt-wurden/</guid><pubDate>Sun, 09 Nov 2025 20:00:00 GMT</pubDate></item><item><title>Neuer Python-REPL ab Version 3.13</title><link>https://lannert.de/debloss/posts/neuer-python-repl-ab-version-313/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;Trey Hunner (der eine umfangreiche &lt;a class="reference external" href="https://www.pythonmorsels.com/articles/"&gt;Liste&lt;/a&gt;
von Python-Artikeln, geordnet nach Themenfeldern und für Einsteiger geeignet,
anbietet – die meisten frei zugänglich) hat die alten und neuen Features des
Python-REPL in Version 3.13 (also des Read-Eval-Process-Loop)
&lt;a class="reference external" href="https://www.pythonmorsels.com/repl-features/"&gt;zusammengestellt&lt;/a&gt;.&lt;/p&gt;</description><category>CLI</category><category>Programmieren</category><category>Python</category><category>Shell</category><guid>https://lannert.de/debloss/posts/neuer-python-repl-ab-version-313/</guid><pubDate>Tue, 16 Sep 2025 20:59:51 GMT</pubDate></item><item><title>Dateisysteme: Nicht die Übersicht verlieren</title><link>https://lannert.de/debloss/posts/dateisysteme-nicht-die-ubersicht-verlieren/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;Noch ein moderner, in Rust geschriebener Ersatz für einen Klassiker der Unix-Kommandos: &lt;code class="docutils literal"&gt;dysk&lt;/code&gt;
gibt eine gegenüber &lt;code class="docutils literal"&gt;df &lt;span class="pre"&gt;-h&lt;/span&gt;&lt;/code&gt; erweiterte und übersichtlichere Tabelle der gemounteten Dateisysteme aus.
Sie enthält auch die Dateisystem- und Gerätetypen, kennzeichnet den Belegungsstand farblich und mit
Balkengrafik, kann die Ausgabe nach verschiedenen Kriterien filtern und optional als JSON bereitstellen.
Die Pseudodateisysteme (z. B. unter &lt;code class="docutils literal"&gt;/run&lt;/code&gt; und &lt;code class="docutils literal"&gt;/dev&lt;/code&gt;) werden standardmäßig ausgeblendet.&lt;/p&gt;
&lt;p&gt;Debian stellt das Tool als Paket &lt;code class="docutils literal"&gt;dysk&lt;/code&gt; zur Verfügung.&lt;/p&gt;</description><category>Linux</category><category>Shell</category><guid>https://lannert.de/debloss/posts/dateisysteme-nicht-die-ubersicht-verlieren/</guid><pubDate>Mon, 29 Jul 2024 09:00:00 GMT</pubDate></item><item><title>Wer frisst meinen Plattenplatz?</title><link>https://lannert.de/debloss/posts/wer-frisst-meinen-plattenplatz/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;Für das altbekannte Kommando &lt;code class="docutils literal"&gt;du&lt;/code&gt; (disk usage), mit dem man sich über den Speicherplatzverbrauch
innerhalb eines Verzeichnisses informieren kann, gibt es eine modernere Alternative: &lt;code class="docutils literal"&gt;dust&lt;/code&gt; zeigt
(auf Wunsch) die Dateien und Unterverzeichnisse nach Größe der Belegung sortiert an, „menschenlesbare“
Größenangaben und Prozentbalken, die ärgsten Platzfresser werden farblich gekennzeichnet, und weil
es in Rust geschrieben ist, ist es auch ziemlich schnell.&lt;/p&gt;
&lt;p&gt;Debian bietet das Programm im Paket &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;du-dust&lt;/span&gt;&lt;/code&gt; an.&lt;/p&gt;</description><category>Linux</category><category>Shell</category><guid>https://lannert.de/debloss/posts/wer-frisst-meinen-plattenplatz/</guid><pubDate>Mon, 29 Jul 2024 08:00:00 GMT</pubDate></item><item><title>Komponieren unter Linux (compose)</title><link>https://lannert.de/debloss/posts/komponieren-unter-linux-compose/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;Wo findet man die Compose-Definitionen?&lt;/p&gt;
&lt;p&gt;Die Datei &lt;code class="docutils literal"&gt;/usr/share/X11/locale/Compose.dir&lt;/code&gt; ordnet den Locales die Compose-Dateien zu,
z.B. zu &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;de_DE.UTF-8&lt;/span&gt;&lt;/code&gt; findet sich dort &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;en_US.UTF-8/Compose&lt;/span&gt;&lt;/code&gt;. Diese wiederum ist relativ zu
&lt;code class="docutils literal"&gt;/usr/share/X11/locale&lt;/code&gt; zu sehen, also ist die für die genannte Locale relevante Datei
&lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;/usr/share/X11/locale/en_US.UTF-8/Compose&lt;/span&gt;&lt;/code&gt;. Sie enthält Zeilen folgender Art:&lt;/p&gt;
&lt;pre class="literal-block"&gt;&amp;lt;Multi_key&amp;gt; &amp;lt;S&amp;gt; &amp;lt;bar&amp;gt;                   : "$"   dollar # DOLLAR SIGN
…
&amp;lt;Multi_key&amp;gt; &amp;lt;s&amp;gt; &amp;lt;o&amp;gt;                     : "§"   section # SECTION SIGN&lt;/pre&gt;
&lt;p&gt;Dabei steht &lt;code class="docutils literal"&gt;&amp;lt;Multi_key&amp;gt;&lt;/code&gt; für die Compose-Taste, deren Tastaturzuordnung in den
KDE-Einstellungen gewählt werden kann (mein Favorit: AltGr-Windows). Man findet dies
in den Systemeinstellungen → Hardware → Eingabegeräte → Tastatur → erweitert,
„Position der Compose-Taste“, „Dritte Ebene der linken Windows-Taste“.&lt;/p&gt;
&lt;p&gt;Drückt man also AltGr und die (linke) Windowstaste, ändert sich die Cursordarstellung,
und tippt man danach die Kleinbuchstaben s und o, erscheint das Paragraphenzeichen.&lt;/p&gt;
&lt;p&gt;In der Datei &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;~/.XCompose&lt;/span&gt;&lt;/code&gt; kann ein Benutzer eigene Compose-Definitionen hinzufügen,
beispielsweise:&lt;/p&gt;
&lt;pre class="literal-block"&gt;include "%L"
&amp;lt;Multi_key&amp;gt; &amp;lt;backslash&amp;gt; &amp;lt;slash&amp;gt; : "¯\\_(ツ)_/¯" # UTF-8 shrug
&amp;lt;Multi_key&amp;gt; &amp;lt;E&amp;gt; &amp;lt;plus&amp;gt; : "∑" U2211 # summation&lt;/pre&gt;
&lt;p&gt;(Siehe &lt;code class="docutils literal"&gt;man 5 Compose&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;Die Datei mit den Standardzuordnungen ist schon ein Quell freudvoller Inspiration,
etwa mit den Einträgen für Compose-8-8 oder Compose-v-/, Compose-&amp;lt;-&amp;gt;, Compose-=-&amp;gt;, …&lt;/p&gt;</description><category>Linux</category><category>Shell</category><category>X11</category><guid>https://lannert.de/debloss/posts/komponieren-unter-linux-compose/</guid><pubDate>Thu, 22 Feb 2024 15:00:00 GMT</pubDate></item><item><title>Doit zur Automatisierung voneinander abhängiger Verarbeitungen</title><link>https://lannert.de/debloss/posts/doit-zur-automatisierung-voneinander-abhangiger-verarbeitungen/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;&lt;a class="reference external" href="https://pydoit.org"&gt;doit&lt;/a&gt; kann die Make-Aufgaben übernehmen, die mit Abhängigkeiten zu
tun haben.&lt;/p&gt;
&lt;p&gt;Die Aufgaben werden mit Python-Code beschrieben; doit analysiert die Verknüpfungen, kann
einen Abhängigkeitsgraphen ausgeben und führt dann die Aktionen in geeigneter Reihenfolge aus.&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;durch Plugins erweiterbar&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debug-Unterstützung&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;API&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;parallele Ausführung von Aktionen&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;mögliches Caching von Ergebnissen&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;kann als &lt;em&gt;watcher&lt;/em&gt; Veränderungen erkennen und die zugehörigen Aktionen auslösen&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>Make</category><category>Programmieren</category><category>Python</category><category>Shell</category><guid>https://lannert.de/debloss/posts/doit-zur-automatisierung-voneinander-abhangiger-verarbeitungen/</guid><pubDate>Tue, 16 Jan 2024 11:00:00 GMT</pubDate></item><item><title>Just als Alternative zu Phony-Targets von Make</title><link>https://lannert.de/debloss/posts/just-als-alternative-zu-phony-targets-von-make/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;&lt;a class="reference external" href="https://github.com/casey/just"&gt;just&lt;/a&gt; ist ein in Rust geschriebenes „verbessertes Make“,
jetzt auch verfügbar als Debian-Paket.&lt;/p&gt;
&lt;p&gt;Die justfiles sind den bekannten Makefiles sehr ähnlich, aber anwenderfreundlicher
(kein Zwangs-Tab!). Die Fehlerbehandlung und die „Hilfefunktion“ sind besser,
die Rezepte können in beliebigen Programmiersprachen geschrieben sein (beispielsweise
in Python …), und das justfile muss nicht im aktuellen Verzeichnis liegen.&lt;/p&gt;</description><category>Make</category><category>Programmieren</category><category>Shell</category><guid>https://lannert.de/debloss/posts/just-als-alternative-zu-phony-targets-von-make/</guid><pubDate>Tue, 02 Jan 2024 11:00:00 GMT</pubDate></item><item><title>nushell, eine neue Shell</title><link>https://lannert.de/debloss/posts/nushell-eine-neue-shell/</link><dc:creator>Detlef Lannert</dc:creator><description>&lt;p&gt;&lt;a class="reference external" href="https://github.com/nushell/nushell"&gt;nushell&lt;/a&gt;
ist ein Projekt zur Entwicklung einer neuen, modernen Shell
(&lt;a class="reference external" href="https://www.nushell.sh/book/"&gt;Doku hierzu&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Installation:&lt;/p&gt;
&lt;pre class="literal-block"&gt;apt install pkg-config libssl-dev
cargo install nu --locked --features=dataframe
sudo cp ~/.cargo/bin/nu /usr/local/bin  # sofern gewünscht
nu --help&lt;/pre&gt;
&lt;p&gt;Besonderheiten:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nushell-Skripte werden kompiliert, nicht zeilenweise interpretiert.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variablen sind vom let-Typ (allerdings mit der Möglichkeit des Shadowing);
dadurch können Kommandos in der Shell parallelisiert werden.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wie andere (Unix-) Shells unterstützt Nushell Pipelines, aber diese transportieren
vorzugsweise Datenstrukturen (Tabellen) anstelle reiner Textzeilen.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>Programmieren</category><category>Shell</category><guid>https://lannert.de/debloss/posts/nushell-eine-neue-shell/</guid><pubDate>Tue, 02 Jan 2024 11:00:00 GMT</pubDate></item></channel></rss>