<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tipp am Donnerstag</title>
    <link>https://blog.tuxomat.eu/</link>
    <description>Immer donnerstags gibts hier einen Tipp, der das Leben an der Tastatur leichter macht.</description>
    <pubDate>Sun, 07 Jun 2026 05:25:31 +0000</pubDate>
    <item>
      <title>Berechnungen auf der Kommandozeile</title>
      <link>https://blog.tuxomat.eu/berechnungen-auf-der-kommandozeile</link>
      <description>&lt;![CDATA[Die Shell ermöglicht die Auswertung arithmetischer Ausdrücke.  Das umfasst die Grundrechenarten, Exponentialrechnung, sowie bitweise und logische Operationen.  !--more--&#xA;&#xA;Der auszuwertende Ausdruck steht innerhalb doppelter runder Klammern: (( expr ))&#xA;Für die Anzeige setze ein Dollarzeichen davor: echo $(( expr ))&#xA;Die Auswertung erfolgt mit den größten verfügbaren Ganzzahlen fester Länge, ohne Überprüfung auf Überlauf&#xA;Als Operanden sind auch Shell-Variablen möglich. Die Variablen können ohne das führende Dollarzeichen geschrieben werden (siehe Beispiele unten)&#xA;Nachkommastellen werden abgeschnitten, nicht gerundet. Wenn Nachkommastellen benötigt werden, rechne mit 10- oder 100-fach größeren Zahlen und setze im Ergebnis selbst das Komma&#xA;&#xA;Einige Beispiele:&#xA;&#xA;echo $(( 42 / 7 ))  # Division --  6&#xA;echo $(( 48 / 7 ))  # Division --  6, Nachkomma abgeschnitten&#xA;echo $(( 7 ** 3 ))  # Exponentialfunktion --  343&#xA;echo $(( 7 % 3 ))   # Remainder --  1&#xA;&#xA;number=666&#xA;echo $(( number + 42 ))  #  --  708&#xA;echo $number             #  Variable unverändert 666&#xA;echo $(( number += 42 )) #  --  708&#xA;echo $number             #  Variable neuer Wert 708&#xA;&#xA;echo $(( number  666 )) # logisch falsch -- 0&#xA;echo $(( number   42 ))  # logisch wahr   --  1&#xA;if (( number   42)) ; then echo ja; fi  # --  ja&#xA;oder einfacher:&#xA;(( number   42 )) &amp;&amp; echo ja&#xA;&#xA;echo $(( 42 &lt; 1 ))  # bitweise 1 x links schieben -- 84&#xA;&#xA;Hinweise&#xA;&#xA;Die Regeln für die Auswertung sind in der bash man page im Kapitel ARITHMETIC EVALUATION erläutert.&#xA;Wenn die arithmetischen Möglichkeiten der bash nicht ausreichen, installiere das Programm calc.]]&gt;</description>
      <content:encoded><![CDATA[<p>Die Shell ermöglicht die Auswertung arithmetischer Ausdrücke.  Das umfasst die Grundrechenarten, Exponentialrechnung, sowie bitweise und logische Operationen.  </p>
<ul><li>Der auszuwertende Ausdruck steht innerhalb doppelter runder Klammern: <code>(( expr ))</code></li>
<li>Für die Anzeige setze ein Dollarzeichen davor: <code>echo $(( expr ))</code></li>
<li>Die Auswertung erfolgt mit den größten verfügbaren Ganzzahlen fester Länge, ohne Überprüfung auf Überlauf</li>
<li>Als Operanden sind auch Shell-Variablen möglich. Die Variablen können ohne das führende Dollarzeichen geschrieben werden (siehe Beispiele unten)</li>
<li>Nachkommastellen werden abgeschnitten, nicht gerundet. Wenn Nachkommastellen benötigt werden, rechne mit 10- oder 100-fach größeren Zahlen und setze im Ergebnis selbst das Komma</li></ul>

<p>Einige Beispiele:</p>

<pre><code class="language-bash">echo $(( 42 / 7 ))  # Division --&gt; 6
echo $(( 48 / 7 ))  # Division --&gt; 6, Nachkomma abgeschnitten
echo $(( 7 ** 3 ))  # Exponentialfunktion --&gt;  343
echo $(( 7 % 3 ))   # Remainder --&gt; 1

number=666
echo $(( number + 42 ))  #  --&gt; 708
echo $number             #  Variable unverändert 666
echo $(( number += 42 )) #  --&gt; 708
echo $number             #  Variable neuer Wert 708

echo $(( number &lt; 666 )) # logisch falsch --&gt; 0
echo $(( number &gt; 42 ))  # logisch wahr   --&gt; 1
if (( number &gt; 42)) ; then echo ja; fi  # --&gt; ja
# oder einfacher:
(( number &gt; 42 )) &amp;&amp; echo ja

echo $(( 42 &lt;&lt; 1 ))  # bitweise 1 x links schieben --&gt; 84
</code></pre>

<h3 id="hinweise">Hinweise</h3>
<ul><li>Die Regeln für die Auswertung sind in der bash man page im Kapitel ARITHMETIC EVALUATION erläutert.</li>
<li>Wenn die arithmetischen Möglichkeiten der bash nicht ausreichen, installiere das Programm <em>calc</em>.</li></ul>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/berechnungen-auf-der-kommandozeile</guid>
      <pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Basics des Pagers less</title>
      <link>https://blog.tuxomat.eu/basics-des-pagers-less</link>
      <description>&lt;![CDATA[Ein laufendes less lässt sich mit einer Vielzahl von Kommandos steuern. Zum Einstieg sind hier die wichtigsten aufgeführt. !--more--&#xA;&#xA;Bewegen&#xA;G: springe zur letzten Zeile&#xA;1G: springe zur ersten Zeile&#xA;Ctrl-f: eine Seite weiter&#xA;Ctrl-b: eine Seite zurück&#xA;&#xA;Suchen&#xA;/pattern: Suche vorwärts nach pattern. pattern ist ein regulärer Ausdruck&#xA;?pattern: Suche rückwärts nach pattern. pattern ist ein regulärer Ausdruck&#xA;n: wiederhole die letzte Suche&#xA;N: wiederhole die letzte Suche in umgekehrter Richtung&#xA;&#xA;Optionen&#xA;-S: Zeilenumbruch ein-/ausschalten&#xA;-I: Beachte Groß-/Kleinschreibung beim Suchen umschalten&#xA;-N: Zeilennummern anzeigen umschalten&#xA;&#xA;Sonstiges&#xA;v: Datei im Editor ($VISUAL, $EDITOR) öffnen. Geht nur, wenn die Eingabe eine Datei ist. Nach dem Verlassen des Editors zeigt less die editierte Datei.&#xA;q: Verlasse less&#xA;h oder H: Hilfe anzeigen. Merke dir wenigstens dieses!]]&gt;</description>
      <content:encoded><![CDATA[<p>Ein laufendes <code>less</code> lässt sich mit einer Vielzahl von Kommandos steuern. Zum Einstieg sind hier die wichtigsten aufgeführt. </p>

<h3 id="bewegen">Bewegen</h3>

<p><code>G</code>: springe zur letzten Zeile
<code>1</code><code>G</code>: springe zur ersten Zeile
<code>Ctrl</code>-<code>f</code>: eine Seite weiter
<code>Ctrl</code>-<code>b</code>: eine Seite zurück</p>

<h3 id="suchen">Suchen</h3>

<p><code>/pattern</code>: Suche vorwärts nach <em>pattern</em>. <em>pattern</em> ist ein regulärer Ausdruck
<code>?pattern</code>: Suche rückwärts nach <em>pattern</em>. <em>pattern</em> ist ein regulärer Ausdruck
<code>n</code>: wiederhole die letzte Suche
<code>N</code>: wiederhole die letzte Suche in umgekehrter Richtung</p>

<h3 id="optionen">Optionen</h3>

<p><code>-</code><code>S</code>: Zeilenumbruch ein-/ausschalten
<code>-</code><code>I</code>: Beachte Groß-/Kleinschreibung beim Suchen umschalten
<code>-</code><code>N</code>: Zeilennummern anzeigen umschalten</p>

<h3 id="sonstiges">Sonstiges</h3>

<p><code>v</code>: Datei im Editor ($VISUAL, $EDITOR) öffnen. Geht nur, wenn die Eingabe eine Datei ist. Nach dem Verlassen des Editors zeigt <em>less</em> die editierte Datei.
<code>q</code>: Verlasse <em>less</em>
<code>h</code> oder <code>H</code>: Hilfe anzeigen. Merke dir wenigstens dieses!</p>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/basics-des-pagers-less</guid>
      <pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Dateinamen und TAB-Taste</title>
      <link>https://blog.tuxomat.eu/dateinamen-und-tab-taste</link>
      <description>&lt;![CDATA[Für einen problemlosen und effizienten Umgang mit Dateinamen gibt es einige einfache Regeln. !--more--&#xA;&#xA;Verwende nur Zeichen aus dem 7-Bit-ASCII-Zeichensatz, also weder Umlaute noch [Akzente]. Das ist insbesondere für Remote-Dateisysteme wichtig.&#xA;Verwende keine special characters der Shell. Das sind Zeichen, die eine besondere Bedeutung haben. Leerzeichen und Klammern sind z. B. pfui.&#xA;Ideal sind Zeichen aus der Menge [a-zA-Z0-9.-].&#xA;Wenn du auf Großbuchstaben [A-Z] verzichtest, sparst du dir das Drücken der Shift-Taste.&#xA;Achte darauf, dass sich die Dateinamen innerhalb eines Ordners bereits nach möglichst wenig Buchstaben eindeutig voneinander unterscheiden. Dadurch wird die Benutzung der TAB-Taste zur Vervollständigung der Dateinamen viel effizienter.&#xA;&#xA;Anmerkungen&#xA;&#xA;zu Nr. 1: Das Remote-Verzeichnis kann auf anderen Rechnern mit anderem Zeichencode eingebunden sein. Bei dir sieht der Dateiname Die\Schöne\und\das Biest.mp4 gut aus, auf anderen Rechnern muss das aber nicht der Fall sein.&#xA;&#xA;zu Nr. 2: Die special characters der Bash sind in deren man-Page im Kapitel DEFINITIONS genannt. Vermeide sie in Dateinamen. Leider wird diese Regel viel zu häufig aufs Übelste verletzt. Oft sind es Programme oder Systeme, die solche Kack-Namen (z. B. »Dokumente und Einstellungen«) automatisch erzeugen. Ganz schlimm sind Programme, die Dateinamen aus den ID3-Tags von Musikdateien erzeugen. Da sind in einem einzigen Dateinamen Leerzeichen, Zeichen aus dem erweiterten ASCII-Zeichensatz (oder Unicodezeichen) und Klammern (z. B. das Erscheinungsjahr in eckigen Klammern) zu finden.&#xA;&#xA;zu Nr. 5: Die Mächtigkeit der TAB-Taste wird oft unterschätzt. Oft reicht ein einzelner TAB, um einen langen Dateinamen einzufügen.]]&gt;</description>
      <content:encoded><![CDATA[<p>Für einen problemlosen und effizienten Umgang mit Dateinamen gibt es einige einfache Regeln. </p>
<ol><li>Verwende nur Zeichen aus dem 7-Bit-ASCII-Zeichensatz, also weder Umlaute noch <a href="https://de.wikipedia.org/wiki/Akzent_(Schrift)">Akzente</a>. Das ist insbesondere für Remote-Dateisysteme wichtig.</li>
<li>Verwende keine <em>special characters</em> der Shell. Das sind Zeichen, die eine besondere Bedeutung haben. Leerzeichen und Klammern sind z. B. pfui.</li>
<li>Ideal sind Zeichen aus der Menge [a-zA-Z0-9_.–].</li>
<li>Wenn du auf Großbuchstaben [A-Z] verzichtest, sparst du dir das Drücken der Shift-Taste.</li>
<li>Achte darauf, dass sich die Dateinamen innerhalb eines Ordners bereits nach möglichst wenig Buchstaben eindeutig voneinander unterscheiden. Dadurch wird die Benutzung der TAB-Taste zur Vervollständigung der Dateinamen viel effizienter.</li></ol>

<h3 id="anmerkungen">Anmerkungen</h3>

<p><strong>zu Nr. 1:</strong> Das Remote-Verzeichnis kann auf anderen Rechnern mit anderem Zeichencode eingebunden sein. Bei dir sieht der Dateiname <em>Die_Schöne_und_das Biest.mp4</em> gut aus, auf anderen Rechnern muss das aber nicht der Fall sein.</p>

<p><strong>zu Nr. 2:</strong> Die <em>special characters</em> der Bash sind in deren man-Page im Kapitel DEFINITIONS genannt. Vermeide sie in Dateinamen. Leider wird diese Regel viel zu häufig aufs Übelste verletzt. Oft sind es Programme oder Systeme, die solche Kack-Namen (z. B. »<em>Dokumente und Einstellungen</em>«) automatisch erzeugen. Ganz schlimm sind Programme, die Dateinamen aus den ID3-Tags von Musikdateien erzeugen. Da sind in einem einzigen Dateinamen Leerzeichen, Zeichen aus dem erweiterten ASCII-Zeichensatz (oder Unicodezeichen) und Klammern (z. B. das Erscheinungsjahr in eckigen Klammern) zu finden.</p>

<p><strong>zu Nr. 5:</strong> Die Mächtigkeit der TAB-Taste wird oft unterschätzt. Oft reicht ein einzelner <code>TAB</code>, um einen langen Dateinamen einzufügen.</p>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/dateinamen-und-tab-taste</guid>
      <pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Elemente aus der Zeile löschen</title>
      <link>https://blog.tuxomat.eu/elemente-aus-der-zeile-loeschen</link>
      <description>&lt;![CDATA[Sehr viele Menschen benutzen zum Löschen von Zeichen nur die Tasten Del und Backspace. Es geht aber auch viel komfortabler. !--more--&#xA;&#xA;rückwärts löschen&#xA;Ctrl-w: rückwärts löschen bis zum nächsten Whitespace&#xA;Alt-Backspace: rückwärts löschen, nur alphanumerische Zeichen&#xA;Ctrl-u: löschen bis Zeilenanfang&#xA;&#xA;vorwärts löschen&#xA;Alt-d: bis zum Wortende löschen, alphanumerische Zeichen&#xA;Ctrl-k: bis zum Zeilenende löschen&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Sehr viele Menschen benutzen zum Löschen von Zeichen nur die Tasten <code>Del</code> und <code>Backspace</code>. Es geht aber auch viel komfortabler. </p>

<h3 id="rückwärts-löschen">rückwärts löschen</h3>

<p><code>Ctrl</code>-<code>w</code>: rückwärts löschen bis zum nächsten <a href="https://de.wikipedia.org/wiki/Leerraum">Whitespace</a>
<code>Alt</code>-<code>Backspace</code>: rückwärts löschen, nur alphanumerische Zeichen
<code>Ctrl</code>-<code>u</code>: löschen bis Zeilenanfang</p>

<h3 id="vorwärts-löschen">vorwärts löschen</h3>

<p><code>Alt</code>-<code>d</code>: bis zum Wortende löschen, alphanumerische Zeichen
<code>Ctrl</code>-<code>k</code>: bis zum Zeilenende löschen</p>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/elemente-aus-der-zeile-loeschen</guid>
      <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Kommandozeile im Editor bearbeiten</title>
      <link>https://blog.tuxomat.eu/kommandozeile-im-editor-bearbeiten</link>
      <description>&lt;![CDATA[Die Tastenkombination Ctrl-x Ctrl-e startet einen Editor mit dem Inhalt der aktuellen Kommandozeile (Ctrl gedrückt halten während der Eingabe von x und e). Nach dem Beenden des Editors wird die bearbeitete Kommandozeile direkt ausgeführt. !--more--&#xA;&#xA;Die bash versucht nacheinander, die Editoren der Umgebungsvariablen $VISUAL und $EDITOR auszuführen. Schlägt beides fehl, wird emacs gestartet. Aus man bash:&#xA;&#xA;  Bash attempts to invoke $VISUAL, $EDITOR, and emacs as the editor, in that order&#xA;&#xA;Sicherlich hast du deinen Lieblingseditor (vim … 😁) bereits dort eingetragen, schließlich greifen viele Programme auf die genannten Umgebungsvariablen zu. &#xA;&#xA;Hinweise&#xA;&#xA;Achtung: Nach Beendigung des Editors wird dessen Inhalt sofort als Kommando ausgeführt, egal ob diese verändert und/oder gespeichert wurde. Solltest du das im Einzelfall nicht wollen, platziere die Raute # als Kommentarzeichen an den Anfang der Zeile. Speichern nicht vergessen, bevor du den Editor verlässt.&#xA;&#xA;Übrigens: Andere Shells können abweichend konfiguriert sein – lies die man-Page dazu.]]&gt;</description>
      <content:encoded><![CDATA[<p>Die Tastenkombination <code>Ctrl</code>-<code>x</code> <code>Ctrl</code>-<code>e</code> startet einen Editor mit dem Inhalt der aktuellen Kommandozeile (<code>Ctrl</code> gedrückt halten während der Eingabe von <code>x</code> und <code>e</code>). Nach dem Beenden des Editors wird die bearbeitete Kommandozeile direkt ausgeführt. </p>

<p>Die <em>bash</em> versucht nacheinander, die Editoren der Umgebungsvariablen <em>$VISUAL</em> und <em>$EDITOR</em> auszuführen. Schlägt beides fehl, wird <em>emacs</em> gestartet. Aus <code>man bash</code>:</p>

<blockquote><p>Bash attempts to invoke $VISUAL, $EDITOR, and emacs as the editor, in that order</p></blockquote>

<p>Sicherlich hast du deinen Lieblingseditor (vim … 😁) bereits dort eingetragen, schließlich greifen viele Programme auf die genannten Umgebungsvariablen zu.</p>

<h3 id="hinweise">Hinweise</h3>

<p><strong>Achtung:</strong> Nach Beendigung des Editors wird dessen Inhalt sofort als Kommando ausgeführt, egal ob diese verändert und/oder gespeichert wurde. Solltest du das im Einzelfall nicht wollen, platziere die Raute <code>#</code> als Kommentarzeichen an den Anfang der Zeile. Speichern nicht vergessen, bevor du den Editor verlässt.</p>

<p><strong>Übrigens:</strong> Andere Shells können abweichend konfiguriert sein – lies die <code>man</code>-Page dazu.</p>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/kommandozeile-im-editor-bearbeiten</guid>
      <pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Terminalfenster aufräumen</title>
      <link>https://blog.tuxomat.eu/terminalfenster-aufraeumen</link>
      <description>&lt;![CDATA[Nach der Eingabe mehrerer Befehle wird das Terminalfenster unübersichtlich. Prompts, Eingaben und Ausgaben der Befehle kommen direkt nacheinander, ohne erkennbare Struktur. Das macht es für das Auge schwer, die Informationen zu erfassen. Wie wäre es, auf Tastendruck das Terminalfenster zu löschen und den Prompt in der ersten Zeile zu positionieren? !--more--&#xA;Genau dieses macht die Tastenkombination Ctrl-l (Buchstabe l wie in linux oder lustig). Das geht auch mitten im Tippen eines Befehls, die Eingabe bleibt erhalten. Und auch der bisherige Terminalinhalt ist nicht verloren, er ist weiterhin im Zeilenpuffer des Terminals vorhanden. &#xA;&#xA;Technische Informationen&#xA;&#xA;Der Buchstabe l ist der zwölfte des Alphabets, Ctrl-l sendet also das Steuerzeichen 12 (dezimal 12, hex 0c). Das ist das ASCII-Steuerzeichen für Form Feed ↡(siehe man 7 ascii), also Seitenvorschub. Damit wird Druckern mit Endlospapier der Befehl gegeben, so viele Zeilen weiterzuschalten, bis unter dem Druckkopf die erste Zeile der nächsten Seite steht. Und genau dieses Verhalten wird im Terminal nachgebildet. Das Drücken von Ctrl-l füllt das Terminalfenster mit Leerzeilen, bis keine bisherigen Ausgaben mehr zu sehen sind. Dann wird die Eingabezeile ganz oben im Terminalfenster positioniert. Im Zeilenpuffer, wenn du mit dem Scrollbalken oder Mausrad nach oben scrollst, sind also keine, einige oder etliche Leerzeilen zu sehen, je nachdem, wie voll das Terminalfenster vorher war. &#xA;Bei Einzelblatt-Druckern wird das aktuelle Blatt sofort ausgeworfen.&#xA;&#xA;Weiteres&#xA;&#xA;Kommandozeilenprogramme, die einen Eingabeprompt zur Verfügung stellen und die readline-Bibliothek einbinden, stellen diese Funktionalität auch zur Verfügung. Dazu zählen z. B. sqlite3, mariadb und der GNU-Debugger gdb. &#xA;Für andere Programme kann Ctrl-l einen Neuaufbau der aktuellen Seite bedeuten, so z. B. in Editoren wie vim und nano, oder im Pager less.]]&gt;</description>
      <content:encoded><![CDATA[<p>Nach der Eingabe mehrerer Befehle wird das Terminalfenster unübersichtlich. Prompts, Eingaben und Ausgaben der Befehle kommen direkt nacheinander, ohne erkennbare Struktur. Das macht es für das Auge schwer, die Informationen zu erfassen. Wie wäre es, auf Tastendruck das Terminalfenster zu löschen und den Prompt in der ersten Zeile zu positionieren? 
Genau dieses macht die Tastenkombination <code>Ctrl</code>-<code>l</code> (Buchstabe <strong>l</strong> wie in <strong>l</strong>inux oder <strong>l</strong>ustig). Das geht auch mitten im Tippen eines Befehls, die Eingabe bleibt erhalten. Und auch der bisherige Terminalinhalt ist nicht verloren, er ist weiterhin im Zeilenpuffer des Terminals vorhanden.</p>

<h3 id="technische-informationen">Technische Informationen</h3>

<p>Der Buchstabe <strong>l</strong> ist der <em>zwölfte</em> des Alphabets, <code>Ctrl</code>-<code>l</code> sendet also das Steuerzeichen <em>12</em> (dezimal 12, hex 0c). Das ist das ASCII-Steuerzeichen für <strong>Form Feed</strong> ↡(siehe <code>man 7 ascii</code>), also <a href="https://de.wikipedia.org/wiki/Seitenvorschub">Seitenvorschub</a>. Damit wird Druckern mit Endlospapier der Befehl gegeben, so viele Zeilen weiterzuschalten, bis unter dem Druckkopf die erste Zeile der nächsten Seite steht. Und genau dieses Verhalten wird im Terminal nachgebildet. Das Drücken von <code>Ctrl</code>-<code>l</code> füllt das Terminalfenster mit Leerzeilen, bis keine bisherigen Ausgaben mehr zu sehen sind. Dann wird die Eingabezeile ganz oben im Terminalfenster positioniert. Im Zeilenpuffer, wenn du mit dem Scrollbalken oder Mausrad nach oben scrollst, sind also keine, einige oder etliche Leerzeilen zu sehen, je nachdem, wie voll das Terminalfenster vorher war.
Bei Einzelblatt-Druckern wird das aktuelle Blatt sofort ausgeworfen.</p>

<h3 id="weiteres">Weiteres</h3>

<p>Kommandozeilenprogramme, die einen Eingabeprompt zur Verfügung stellen und die readline-Bibliothek einbinden, stellen diese Funktionalität auch zur Verfügung. Dazu zählen z. B. <em>sqlite3</em>, <em>mariadb</em> und der GNU-Debugger <em>gdb</em>.
Für andere Programme kann <code>Ctrl</code>-<code>l</code> einen Neuaufbau der aktuellen Seite bedeuten, so z. B. in Editoren wie <em>vim</em> und <em>nano</em>, oder im Pager <em>less</em>.</p>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/terminalfenster-aufraeumen</guid>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Befehlstyp eines Kommandos feststellen</title>
      <link>https://blog.tuxomat.eu/befehlstyp-eines-kommandos-feststellen</link>
      <description>&lt;![CDATA[Was eigentlich ist ll?  Oder echo? Oder for? Oder cp?&#xA;Es ist einfach herauszufinden, von welchem Befehlstyp ein Kommando ist. !--more--&#xA;Benutze dafür type. Das zeigt: ist der Befehl&#xA;&#xA;ein alias&#xA;ein keyword&#xA;eine function&#xA;ein builtin&#xA;ein file?&#xA;&#xA;Beispiele&#xA;&#xA;Beantworten wir die vier Eingangsfragen:&#xA;&#xA;  user@kiste:~$ type ll&#xA;ll is aliased to ls -lF&#xA;user@kiste:~$ type echo&#xA;echo is a shell builtin&#xA;user@kiste:~$ type for&#xA;for is a shell keyword&#xA;user@kiste:~$ type cp&#xA;cp is /usr/bin/cp&#xA;&#xA;Das geht auch auf einmal:&#xA;&#xA;  user@kiste:~$ type ll echo for cp&#xA;ll is aliased to `ls -lF&#39;&#xA;echo is a shell builtin&#xA;for is a shell keyword&#xA;cp is /usr/bin/cp&#xA;&#xA;Und was ist type selbst? Sieh selbst nach! type type&#xA;&#xA;Anmerkungen&#xA;&#xA;Die obigen Abfragen wurden auf einem unmodifizierten Linux Mint unter bash ausgeführt. Je nach Systemkonfiguration können die Ergebnisse bei dir abweichen.&#xA;Die csh scheint type nicht zu kennen, bash, die ksh und fish aber schon.]]&gt;</description>
      <content:encoded><![CDATA[<p>Was eigentlich ist <code>ll</code>?  Oder <code>echo</code>? Oder <code>for</code>? Oder <code>cp</code>?
Es ist einfach herauszufinden, von welchem Befehlstyp ein Kommando ist. 
Benutze dafür <code>type</code>. Das zeigt: ist der Befehl</p>
<ul><li>ein <em>alias</em></li>
<li>ein <em>keyword</em></li>
<li>eine <em>function</em></li>
<li>ein <em>builtin</em></li>
<li>ein <em>file</em>?</li></ul>

<h3 id="beispiele">Beispiele</h3>

<p>Beantworten wir die vier Eingangsfragen:</p>

<blockquote><p>user@kiste:~$ <code>type ll</code>
ll is aliased to ls -lF
user@kiste:~$ <code>type echo</code>
echo is a shell builtin
user@kiste:~$ <code>type for</code>
for is a shell keyword
user@kiste:~$ <code>type cp</code>
cp is /usr/bin/cp</p></blockquote>

<p>Das geht auch auf einmal:</p>

<blockquote><p>user@kiste:~$ <code>type ll echo for cp</code>
ll is aliased to `ls -lF&#39;
echo is a shell builtin
for is a shell keyword
cp is /usr/bin/cp</p></blockquote>

<p>Und was ist <em>type</em> selbst? Sieh selbst nach! <code>type type</code></p>

<h3 id="anmerkungen">Anmerkungen</h3>

<p>Die obigen Abfragen wurden auf einem unmodifizierten Linux Mint unter bash ausgeführt. Je nach Systemkonfiguration können die Ergebnisse bei dir abweichen.
Die <em>csh</em> scheint <em>type</em> nicht zu kennen, <em>bash</em>, die <em>ksh</em> und <em>fish</em> aber schon.</p>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/befehlstyp-eines-kommandos-feststellen</guid>
      <pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Cursor auf der Kommandozeile bewegen</title>
      <link>https://blog.tuxomat.eu/cursor-auf-der-kommandozeile-bewegen</link>
      <description>&lt;![CDATA[Immer wieder sehe ich Leute, die recht ungelenk eine Kommandozeile editieren, die sie aus der Historie gefischt haben. Der Cursor wird ausschließlich mit den Pfeiltasten bewegt, auch in langen Kommandos. Das ist selbst bei Benutzern zu beobachten, die schon seit vielen Jahren auf der Kommandozeile unterwegs sind. !--more--&#xA;&#xA;Deshalb heute die wirklich einfachen und dennoch sehr hilfreichen Tastenkombinationen zum Bewegen des Cursors.&#xA;&#xA;Ctrl-a: (a wie Anfang): Cursor an den Anfang der Kommandozeile&#xA;Ctrl-e: (e wie Ende): Cursor an das Ende der Kommandozeile&#xA;Ctrl-←: Cursor wortweise nach links bewegen&#xA;Ctrl-→: Cursor wortweise nach rechts bewegen&#xA;&#xA;Und noch dieses: Erst kürzlich habe ich gesehen, wie ein langjähriger Linuxuser auf der fertig editierten Kommandozeile ca. 20x Pfeil rechts → gedrückt hat, bis der Cursor am Zeilenende war, und erst dann RETURN. Der hat sich offensichtlich nie getraut, einfach zu probieren, ob das auch einfacher geht. Denn um die Zeile abzuschließen, muss der Cursor nicht am Zeilenende stehen! Einfach RETURN drücken, und die komplette Kommandozeile wird abgeschickt, inklusive der Zeichen nach dem Cursor.]]&gt;</description>
      <content:encoded><![CDATA[<p>Immer wieder sehe ich Leute, die recht ungelenk eine Kommandozeile editieren, die sie aus der Historie gefischt haben. Der Cursor wird ausschließlich mit den Pfeiltasten bewegt, auch in langen Kommandos. Das ist selbst bei Benutzern zu beobachten, die schon seit vielen Jahren auf der Kommandozeile unterwegs sind. </p>

<p>Deshalb heute die wirklich einfachen und dennoch sehr hilfreichen Tastenkombinationen zum Bewegen des Cursors.</p>

<p><code>Ctrl</code>-<code>a</code>: (<strong>a</strong> wie <strong>A</strong>nfang): Cursor an den <strong>A</strong>nfang der Kommandozeile
<code>Ctrl</code>-<code>e</code>: (<strong>e</strong> wie <strong>E</strong>nde): Cursor an das <strong>E</strong>nde der Kommandozeile
<code>Ctrl</code>-<code>←</code>: Cursor wortweise nach links bewegen
<code>Ctrl</code>-<code>→</code>: Cursor wortweise nach rechts bewegen</p>

<p><strong>Und noch dieses</strong>: Erst kürzlich habe ich gesehen, wie ein langjähriger Linuxuser auf der fertig editierten Kommandozeile ca. 20x Pfeil rechts <code>→</code> gedrückt hat, bis der Cursor am Zeilenende war, und erst dann <code>RETURN</code>. Der hat sich offensichtlich nie getraut, einfach zu probieren, ob das auch einfacher geht. Denn um die Zeile abzuschließen, muss der Cursor nicht am Zeilenende stehen! Einfach <code>RETURN</code> drücken, und die komplette Kommandozeile wird abgeschickt, inklusive der Zeichen <em>nach</em> dem Cursor.</p>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/cursor-auf-der-kommandozeile-bewegen</guid>
      <pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Begrüßung beim Login abschalten</title>
      <link>https://blog.tuxomat.eu/begruessung-beim-login-abschalten</link>
      <description>&lt;![CDATA[Viele Systeme zeigen eine Willkommensmeldung beim Login. Oft sieht das so aus:&#xA;Last login: Wed Apr  8 17:57:48 2026 from ipaddress&#xA;Manche Systeme sind so konfiguriert, dass erst einmal ein halber Roman über den Bildschirm scrollt. Das muss nicht sein! !--more--&#xA;&#xA;So wird die Begrüßung abgestellt&#xA;Wenn beim Login eine Datei namens .hushlogin im Home-Verzeichnis vorhanden ist, wird die Meldung unterdrückt. Der Inhalt ist egal, normalerweise ist das eine leere Datei. Die kann z. B. mit &#xA;touch ~/.hushlogin&#xA;erstellt werden. &#xA;&#xA;Weitere Informationen&#xA;Das Deaktivieren der Willkommensmeldung kann auch systemweit abgestellt werden, entweder komplett oder auf einzelne Benutzer oder shells begrenzt. Siehe man 1 login.]]&gt;</description>
      <content:encoded><![CDATA[<p>Viele Systeme zeigen eine Willkommensmeldung beim Login. Oft sieht das so aus:
<code>Last login: Wed Apr  8 17:57:48 2026 from &lt;ipaddress&gt;</code>
Manche Systeme sind so konfiguriert, dass erst einmal ein halber Roman über den Bildschirm scrollt. Das muss nicht sein! </p>

<h3 id="so-wird-die-begrüßung-abgestellt">So wird die Begrüßung abgestellt</h3>

<p>Wenn beim Login eine Datei namens <code>.hushlogin</code> im Home-Verzeichnis vorhanden ist, wird die Meldung unterdrückt. Der Inhalt ist egal, normalerweise ist das eine leere Datei. Die kann z. B. mit
<code>touch ~/.hushlogin</code>
erstellt werden.</p>

<h3 id="weitere-informationen">Weitere Informationen</h3>

<p>Das Deaktivieren der Willkommensmeldung kann auch systemweit abgestellt werden, entweder komplett oder auf einzelne Benutzer oder shells begrenzt. Siehe <code>man 1 login</code>.</p>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/begruessung-beim-login-abschalten</guid>
      <pubDate>Thu, 09 Apr 2026 00:00:01 +0000</pubDate>
    </item>
    <item>
      <title>Letzten Befehl nach Suchmuster ausführen</title>
      <link>https://blog.tuxomat.eu/letzten-befehl-nach-suchmuster-ausfuehren</link>
      <description>&lt;![CDATA[!string wird durch die letzte vollständige Kommandozeile ersetzt, die mit string begonnen hat. &#xA;!?string? wird durch die letzte vollständige Kommandozeile ersetzt, die irgendwo string enthalten hat. !--more--&#xA;&#xA;Beispiele&#xA;!vi führt das letzte Kommando aus, das mit vi begonnen hat. Je nachdem, was du zuletzt getippt hast, könnte das z. B. vi, vim oder auch vidir sein – jeweils die komplette Kommandozeile. &#xA;Konkretes Beispiel: die letzten drei Befehle seien:&#xA;vim /etc/samba/smb.conf&#xA;man smb.conf&#xA;sudo !vi&#xA;Es wird sudo vim /etc/samba/smb.conf ausgeführt.&#xA;&#xA;Du schreibst ein kleines C-Programm. Der Befehlszyklus ist&#xA;vim myprogram.c   # editiere Quelldatei&#xA;make myprogram    # erstelle Binary&#xA;./myprogram       # führe das Programm aus&#xA;Der Test offenbart, dass du nochmal was editieren musst:&#xA;!v&#xA;Dann nochmal kompilieren&#xA;!m&#xA;Und nochmal ausführen&#xA;!.&#xA;Viel Tipparbeit gespart!&#xA;&#xA;Technisches&#xA;Das führende Ausrufezeichen ! bedeutet: Wir greifen auf die Befehlshistorie zu.&#xA;Danach kommt ein Suchstring.&#xA;Ist der Suchstring ein weiteres Ausrufezeichen, ersetze durch die letzte Kommandozeile&#xA;Ist der Suchstring in Fragezeichen ? eingeschlossen, suche den String auf der gesamten Kommandozeile&#xA;Ansonsten suche die letzte Kommandozeile, die mit dem Suchstring beginnt.&#xA;&#xA;Weiteres dazu ist in der bash man page unter dem Abschnitt HISTORY EXPANSION zu finden.&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><code>!string</code> wird durch die letzte vollständige Kommandozeile ersetzt, die <strong>mit string begonnen</strong> hat.
<code>!?string?</code> wird durch die letzte vollständige Kommandozeile ersetzt, die <strong>irgendwo string enthalten</strong> hat. </p>

<h3 id="beispiele">Beispiele</h3>
<ul><li><p><code>!vi</code> führt das letzte Kommando aus, das mit <strong>vi</strong> begonnen hat. Je nachdem, was du zuletzt getippt hast, könnte das z. B. <strong>vi</strong>, <strong>vim</strong> oder auch <strong>vidir</strong> sein – jeweils die komplette Kommandozeile.
Konkretes Beispiel: die letzten drei Befehle seien:</p>

<pre><code class="language-shell">vim /etc/samba/smb.conf
man smb.conf
sudo !vi
</code></pre>

<p>Es wird <code>sudo vim /etc/samba/smb.conf</code> ausgeführt.</p></li>

<li><p>Du schreibst ein kleines C-Programm. Der Befehlszyklus ist</p>

<pre><code class="language-bash">vim myprogram.c   # editiere Quelldatei
make myprogram    # erstelle Binary
./myprogram       # führe das Programm aus
</code></pre>

<p>Der Test offenbart, dass du nochmal was editieren musst:
<code>!v</code>
Dann nochmal kompilieren
<code>!m</code>
Und nochmal ausführen
<code>!.</code>
Viel Tipparbeit gespart!</p></li></ul>

<h3 id="technisches">Technisches</h3>
<ul><li>Das <em>führende</em> Ausrufezeichen <code>!</code> bedeutet: Wir greifen auf die Befehlshistorie zu.</li>
<li>Danach kommt ein Suchstring.</li>
<li>Ist der Suchstring ein weiteres Ausrufezeichen, ersetze durch die letzte Kommandozeile</li>
<li>Ist der Suchstring in Fragezeichen <code>?</code> eingeschlossen, suche den String auf der gesamten Kommandozeile</li>
<li>Ansonsten suche die letzte Kommandozeile, die mit dem Suchstring beginnt.</li></ul>

<p>Weiteres dazu ist in der bash man page unter dem Abschnitt <strong>HISTORY EXPANSION</strong> zu finden.</p>
]]></content:encoded>
      <guid>https://blog.tuxomat.eu/letzten-befehl-nach-suchmuster-ausfuehren</guid>
      <pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate>
    </item>
  </channel>
</rss>