<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Linux Ecke on private Homepage von Rainer Rose</title>
    <link>https://www.rainerrose.de/docs/linux/</link>
    <description>Recent content in Linux Ecke on private Homepage von Rainer Rose</description>
    <generator>Hugo</generator>
    <language>de</language>
    <copyright>Copyright © 1998-2026 Rainer Rose. All Rights Reserved.
</copyright>
    <lastBuildDate>Mon, 20 Dec 2021 23:03:55 +0100</lastBuildDate><atom:link href="https://www.rainerrose.de/docs/linux/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Systemd</title>
      <link>https://www.rainerrose.de/docs/linux/systemd/</link>
      <pubDate>Sat, 28 Dec 2024 12:48:58 +0100</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/systemd/</guid>
      <description><![CDATA[<!-- Anreißer -->

<h2 id="notizensammlung" data-numberify>Notizensammlung<a class="anchor ms-1" href="#notizensammlung"></a></h2>
<p>Dinge, die ich mir bei <code>systemd</code> nicht merken kann. Und bevor ich wieder Suchmaschinen oder man-Pages bemühen muss, schreibe ich sie hier lieber nieder.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->

<h2 id="notizensammlung" data-numberify>Notizensammlung<a class="anchor ms-1" href="#notizensammlung"></a></h2>
<p>Dinge, die ich mir bei <code>systemd</code> nicht merken kann. Und bevor ich wieder Suchmaschinen oder man-Pages bemühen muss, schreibe ich sie hier lieber nieder.</p>

<h2 id="im-hintergrund-starten" data-numberify>Im Hintergrund starten<a class="anchor ms-1" href="#im-hintergrund-starten"></a></h2>
<p>Parameter <code>--no-block</code> verwenden, damit der Prompt gleich wieder kommt und nicht auf Beendigung gewartet wird; praktisch für Backup-Jobs außerhalb der Reihe.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl start resticprofile_full-backup.service --no-block
</span></span></code></pre></div>
<h2 id="timer-in-systemd" data-numberify>Timer in SystemD<a class="anchor ms-1" href="#timer-in-systemd"></a></h2>
<p>wird gerne von snap-Paketen genutzt, die keinen cronjob installieren.</p>
<p>Auflistung</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl list-timers <span class="o">[</span>--all<span class="o">]</span>
</span></span></code></pre></div><p>In der Auflistung steht dann auch der timer, wo die Zeitdefinition drin
steht und welche start-Unit anzieht.</p>
<p>Verzeichnis vielfach: <code>/etc/systemd/system/foo.timer</code></p>

<h2 id="als-ersatz-für-at" data-numberify>Als Ersatz für at<a class="anchor ms-1" href="#als-ersatz-für-at"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemd-run --user --on-calendar<span class="o">=</span><span class="s2">&#34;2024-12-28 10:31:19&#34;</span> Befehl Parameter....
</span></span></code></pre></div><p>ggf. <code>sudo</code> davor für <code>root</code>.</p>

<h2 id="failed-units" data-numberify>failed Units<a class="anchor ms-1" href="#failed-units"></a></h2>

<h3 id="alle-auflisten" data-numberify>Alle auflisten<a class="anchor ms-1" href="#alle-auflisten"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl status --failed
</span></span></code></pre></div>
<h3 id="resetten" data-numberify>Resetten<a class="anchor ms-1" href="#resetten"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl reset-failed &lt;unit-name&gt;
</span></span></code></pre></div>
<h2 id="auskunft-über-pids" data-numberify>Auskunft über pids<a class="anchor ms-1" href="#auskunft-über-pids"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl status &lt;pid&gt;
</span></span></code></pre></div>
<h2 id="changelog" data-numberify>Changelog<a class="anchor ms-1" href="#changelog"></a></h2>
<table>
  <thead>
      <tr>
          <th>Datum</th>
          <th>Änderung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>05.11.2025</td>
          <td>failed-Kommandos hinzugefügt</td>
      </tr>
      <tr>
          <td>28.03.2026</td>
          <td>Auskunft über pids</td>
      </tr>
  </tbody>
</table>]]></content:encoded>
    </item>
    
    <item>
      <title>apt</title>
      <link>https://www.rainerrose.de/docs/linux/apt/</link>
      <pubDate>Thu, 24 Oct 2024 17:11:51 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/apt/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Eine kleine Sammlung an Snippets, die ich immer wieder brauche, mir aber nicht merken kann.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Eine kleine Sammlung an Snippets, die ich immer wieder brauche, mir aber nicht merken kann.</p>

<h2 id="zu-welchem-paket-gehört-die-datei" data-numberify>Zu welchem Paket gehört die Datei?<a class="anchor ms-1" href="#zu-welchem-paket-gehört-die-datei"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">dpkg-query -S /bin/bash
</span></span></code></pre></div>
<h2 id="zeige-installierte-paket-version-an" data-numberify>Zeige installierte Paket-Version an<a class="anchor ms-1" href="#zeige-installierte-paket-version-an"></a></h2>
<p>Zeigt ebenfalls an, welche Versionen verfügbar sind. Dies sind ältere, als auch neuere, die noch nicht installiert sind.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">apt-cache policy rabbitmq-server
</span></span></code></pre></div>
<h2 id="zeige-alle-installierten-versionen-an" data-numberify>Zeige alle installierten Versionen an<a class="anchor ms-1" href="#zeige-alle-installierten-versionen-an"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">apt list --installed
</span></span></code></pre></div>
<h2 id="zeige-alle-pakete-an-die-aktualisiert-werden-können" data-numberify>Zeige alle Pakete an, die aktualisiert werden können<a class="anchor ms-1" href="#zeige-alle-pakete-an-die-aktualisiert-werden-können"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">apt list --upgradable
</span></span></code></pre></div>
<h2 id="zeige-alle-verfügbare" data-numberify>Zeige alle verfügbare<a class="anchor ms-1" href="#zeige-alle-verfügbare"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">apt list --all-versions
</span></span></code></pre></div>
<h2 id="zeige-die-enthaltenden-dateien-eines-deb-paketes-an" data-numberify>Zeige die enthaltenden Dateien eines deb-Paketes an<a class="anchor ms-1" href="#zeige-die-enthaltenden-dateien-eines-deb-paketes-an"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">dpkg -c percona-release_latest.generic_all.deb
</span></span></code></pre></div>]]></content:encoded>
    <enclosure url="https://www.rainerrose.de/wallpaper/docs/linux/apt.png" length="124789" type="image/.png" />
    </item>
    
    <item>
      <title>Bash-Tricks</title>
      <link>https://www.rainerrose.de/docs/linux/bash-tricks/</link>
      <pubDate>Sun, 22 Sep 2024 17:38:20 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/bash-tricks/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Eine kleine Sammlung an <code>bash</code>-Kniffen, Tricks und HowTos.</p>
<p>Diese Unterseite ist bisher ohne durchdachte Sortierung. Werde für Interessierte das Neueste immer oben anfügen.</p>

<h2 id="boot-stick-erstellen" data-numberify>Boot-Stick erstellen<a class="anchor ms-1" href="#boot-stick-erstellen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sudo dd <span class="nv">bs</span><span class="o">=</span>4M <span class="k">if</span><span class="o">=</span>/path/to/manjaro.iso <span class="nv">of</span><span class="o">=</span>/dev/sd<span class="o">[</span>drive letter<span class="o">]</span> <span class="nv">status</span><span class="o">=</span>progress <span class="nv">oflag</span><span class="o">=</span>sync
</span></span></code></pre></div>
<h2 id="dateien-anlegen-via-allokierung" data-numberify>Dateien anlegen via Allokierung<a class="anchor ms-1" href="#dateien-anlegen-via-allokierung"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">fallocate -l 10GB meine_grosse_datei
</span></span></code></pre></div><p>ggf. Parameter <code>-o offset</code> und <code>-n</code> beachten, bei Größenänderung swap-File.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Eine kleine Sammlung an <code>bash</code>-Kniffen, Tricks und HowTos.</p>
<p>Diese Unterseite ist bisher ohne durchdachte Sortierung. Werde für Interessierte das Neueste immer oben anfügen.</p>

<h2 id="boot-stick-erstellen" data-numberify>Boot-Stick erstellen<a class="anchor ms-1" href="#boot-stick-erstellen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sudo dd <span class="nv">bs</span><span class="o">=</span>4M <span class="k">if</span><span class="o">=</span>/path/to/manjaro.iso <span class="nv">of</span><span class="o">=</span>/dev/sd<span class="o">[</span>drive letter<span class="o">]</span> <span class="nv">status</span><span class="o">=</span>progress <span class="nv">oflag</span><span class="o">=</span>sync
</span></span></code></pre></div>
<h2 id="dateien-anlegen-via-allokierung" data-numberify>Dateien anlegen via Allokierung<a class="anchor ms-1" href="#dateien-anlegen-via-allokierung"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">fallocate -l 10GB meine_grosse_datei
</span></span></code></pre></div><p>ggf. Parameter <code>-o offset</code> und <code>-n</code> beachten, bei Größenänderung swap-File.</p>

<h2 id="passwort-generieren" data-numberify>Passwort generieren<a class="anchor ms-1" href="#passwort-generieren"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">tr -dc A-Za-z0-9 &lt;/dev/urandom <span class="p">|</span> head -c <span class="m">64</span>
</span></span></code></pre></div><p>Als kleine Script-Version in meinem <a href="https://tools.rainerrose.de/redirect.php?id=38" target="_blank" rel="noopener noreferrer">GitLab-Repository<i class="fas fa-external-link-square-alt ms-1"></i></a></p>

<h2 id="datumsberechnungen" data-numberify>Datumsberechnungen<a class="anchor ms-1" href="#datumsberechnungen"></a></h2>

<h3 id="übermorgen" data-numberify>Übermorgen<a class="anchor ms-1" href="#übermorgen"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">date  --date<span class="o">=</span><span class="s2">&#34;2 days&#34;</span> +<span class="s2">&#34;%d.%m.%Y&#34;</span>
</span></span></code></pre></div>
<h3 id="vorgestern" data-numberify>Vorgestern<a class="anchor ms-1" href="#vorgestern"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">date  --date<span class="o">=</span><span class="s2">&#34;2 days ago&#34;</span> +<span class="s2">&#34;%d.%m.%Y&#34;</span>
</span></span></code></pre></div>
<h2 id="ausgabe-von-du" data-numberify>Ausgabe von “du”<a class="anchor ms-1" href="#ausgabe-von-du"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">du -sk * <span class="p">|</span> sort -n
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">du -sb * <span class="p">|</span> sort -n <span class="p">|</span> numfmt --to<span class="o">=</span>iec
</span></span></code></pre></div><p>Etwas mehr Erklärung <a href="/posts/disk-usage/">hier im Blog-Artikel</a>.</p>

<h2 id="binary-installiert-" data-numberify>Binary installiert ?<a class="anchor ms-1" href="#binary-installiert-"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">if</span> ! <span class="nb">type</span> <span class="s2">&#34;docker-compose&#34;</span> &gt; /dev/null<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">    <span class="nb">echo</span> <span class="s1">&#39;Error: docker-compose is not installed.&#39;</span> &gt;<span class="p">&amp;</span><span class="m">2</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">    show_error_function
</span></span><span class="line"><span class="ln">4</span><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="k">fi</span>
</span></span></code></pre></div>
<h2 id="eingaben" data-numberify>Eingaben<a class="anchor ms-1" href="#eingaben"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">read</span> -rp <span class="s2">&#34;Hier eine Entscheidungsfrage (j/n): &#34;</span> VARIABLE_WO_DER_INHALT_REIN_SOLL
</span></span></code></pre></div>
<h2 id="tabellarische-umformartierung" data-numberify>tabellarische Umformartierung<a class="anchor ms-1" href="#tabellarische-umformartierung"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;a11 b12_Text c13&#34;</span> &gt; /tmp/beispiel
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;a21 b22 c23&#34;</span> &gt;&gt; /tmp/beispiel
</span></span><span class="line"><span class="ln">3</span><span class="cl">column -t /tmp/beispiel
</span></span></code></pre></div><p><strong>Ausgabe:</strong></p>
<pre><code>a11  b12_Text  c13
a21  b22       c23
</code></pre>

<h2 id="alias" data-numberify>Alias<a class="anchor ms-1" href="#alias"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">alias</span> <span class="nv">sdf</span><span class="o">=</span><span class="s1">&#39;df -h|egrep -v &#39;</span><span class="se">\&#39;</span><span class="s1">&#39;^(overlay|nsfs|shm|cgroup|tmpfs|debugfs|mqueue)&#39;</span><span class="se">\&#39;</span><span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">alias</span> <span class="nv">smount</span><span class="o">=</span><span class="s1">&#39;mount|egrep -v &#39;</span><span class="se">\&#39;</span><span class="s1">&#39;^(overlay|nsfs|shm|cgroup|tmpfs|debugfs|mqueue)&#39;</span><span class="se">\&#39;</span><span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nb">alias</span> <span class="nv">dc</span><span class="o">=</span><span class="s1">&#39;docker-compose&#39;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">de<span class="o">()</span> <span class="o">{</span> docker <span class="nb">exec</span> -it <span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">&#34;</span> bash<span class="p">;</span> <span class="o">}</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="nb">alias</span> <span class="nv">dpa</span><span class="o">=</span><span class="s1">&#39;docker ps -f status=exited&#39;</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl">psg<span class="o">()</span> <span class="o">{</span> ps aux <span class="p">|</span> grep <span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">&#34;</span> <span class="p">|</span> grep -v grep<span class="p">;</span> <span class="o">}</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="nb">alias</span> <span class="nv">t</span><span class="o">=</span><span class="s1">&#39;ls -lrt --color=auto&#39;</span>
</span></span></code></pre></div>
<h2 id="prompting" data-numberify>Prompting<a class="anchor ms-1" href="#prompting"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nv">PS1</span><span class="o">=</span><span class="s2">&#34;[\u@\H:\w]\$ &#34;</span>
</span></span></code></pre></div><p>Ggf <code>\n</code> einstreuen für extra Zeile.</p>

<h2 id="verzeichniswechsel" data-numberify>Verzeichniswechsel<a class="anchor ms-1" href="#verzeichniswechsel"></a></h2>
<p>Mal wieder beim Verzeichniswechsel vertippt?</p>
<p>Die <code>bash</code> speichert das letzte Verzeichnis, in welchem man sich
befunden hat in der Variable <code>$OLDPWD</code>.</p>
<p>Ein</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">cd</span> <span class="nv">$OLDPWD</span>
</span></span></code></pre></div><p>bringt einen also wieder zurück ins alte Verzeichnis.</p>
<p>Kürzer wird es mit:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">cd</span> -
</span></span></code></pre></div>
<h2 id="aktuelles-verzeichnis" data-numberify>aktuelles Verzeichnis<a class="anchor ms-1" href="#aktuelles-verzeichnis"></a></h2>
<p>Das aktuelle Verzeichnis kann man sich mit <code>pwd</code> ausgeben lassen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">pwd</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">erde:~$ <span class="nb">cd</span> /etc
</span></span><span class="line"><span class="ln">2</span><span class="cl">erde:/etc$ <span class="nb">cd</span> /var
</span></span><span class="line"><span class="ln">3</span><span class="cl">erde:/var$ <span class="nb">cd</span> -
</span></span><span class="line"><span class="ln">4</span><span class="cl">/etc
</span></span><span class="line"><span class="ln">5</span><span class="cl">erde:/etc$ <span class="nb">cd</span> <span class="nv">$OLDPWD</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl">erde:/var$
</span></span></code></pre></div>
<h2 id="schreiben-auf-stderr" data-numberify>Schreiben auf STDERR<a class="anchor ms-1" href="#schreiben-auf-stderr"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Dieser Text erscheint auf STDERR&#34;</span> &gt;<span class="p">&amp;</span><span class="m">2</span>
</span></span></code></pre></div>
<h2 id="fehlermeldungen-umleiten" data-numberify>Fehlermeldungen umleiten<a class="anchor ms-1" href="#fehlermeldungen-umleiten"></a></h2>

<h3 id="in-log-datei" data-numberify>in Log-Datei<a class="anchor ms-1" href="#in-log-datei"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">./foo.sh bar/* &gt;foo-bar.log  2&gt;<span class="p">&amp;</span><span class="m">1</span>
</span></span></code></pre></div>
<h3 id="wegwerfen" data-numberify>wegwerfen<a class="anchor ms-1" href="#wegwerfen"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">./foo.sh &gt; /dev/null 2&gt;<span class="p">&amp;</span><span class="m">1</span>
</span></span></code></pre></div>
<h2 id="backup-einer-datei" data-numberify>Backup einer Datei<a class="anchor ms-1" href="#backup-einer-datei"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">cp -p foo<span class="o">{</span>,.bak<span class="o">}</span>
</span></span></code></pre></div><p>ist dasselbe wie</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">cp -p foo foo.bak
</span></span></code></pre></div>
<h2 id="spezial-variablen" data-numberify>Spezial-Variablen<a class="anchor ms-1" href="#spezial-variablen"></a></h2>
<p>Es gibt ein paar Spezialvariablen in der bash, die einem das Tippen
ersparen.</p>

<h3 id="umgebungsvariablen" data-numberify>Umgebungsvariablen<a class="anchor ms-1" href="#umgebungsvariablen"></a></h3>
<table>
  <thead>
      <tr>
          <th>Name</th>
          <th>Erklärung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>$$</code></td>
          <td>Prozess-ID (PID) des laufenden Programms</td>
      </tr>
      <tr>
          <td><code>$?</code></td>
          <td>Rückgabewert des letzten Befehls</td>
      </tr>
  </tbody>
</table>

<h3 id="in-scripten" data-numberify>in Scripten<a class="anchor ms-1" href="#in-scripten"></a></h3>
<p><code>$*</code> Alle dem Programm übergebenen Parameter, durch Leerzeichen getrennt.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nv">$*</span><span class="o">=</span><span class="nv">$1</span> <span class="nv">$2</span> <span class="nv">$3</span> <span class="nv">$4</span> ...
</span></span></code></pre></div><p><code>&quot;$*&quot; </code>	Alle dem Programm übergebenen Parameter in Anführungszeichen, durch das 1. Zeichen der Variablen $IFS getrennt.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="s2">&#34;</span><span class="nv">$*</span><span class="s2">&#34;</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">c</span><span class="nv">$2</span><span class="s2">c</span><span class="nv">$3</span><span class="s2">c</span><span class="nv">$4</span><span class="s2">&#34;</span>...
</span></span></code></pre></div><p><code>$@ </code>	Alle dem Programm übergebenen Parameter, durch Leerzeichen getrennt.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nv">$@</span><span class="o">=</span><span class="nv">$1</span> <span class="nv">$2</span> <span class="nv">$3</span> <span class="nv">$4</span>
</span></span></code></pre></div><p><code>&quot;$@&quot;</code> 	Alle dem Programm übergebenen Parameter, einzeln in Anführungszeichen eingeschlossen und durch Leerzeichen getrennt.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="s2">&#34;</span><span class="nv">$@</span><span class="s2">&#34;</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$2</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$3</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$4</span><span class="s2">&#34;</span> ...
</span></span></code></pre></div><p><code>$#</code> 	Anzahl der übergebenen Parameter</p>

<h3 id="historie" data-numberify>Historie<a class="anchor ms-1" href="#historie"></a></h3>
<p><code>!$</code>   letzter Parameter des vorhergehenden Befehls</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">$ ls -l foo
</span></span><span class="line"><span class="ln">2</span><span class="cl">$ <span class="nb">echo</span> !$
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nb">echo</span> foo
</span></span><span class="line"><span class="ln">4</span><span class="cl">foo
</span></span></code></pre></div><p><code>!!</code>   letzter Befehl inkl. aller Parameter</p>

<h4 id="mal-wieder-sudo-vergessen-kein-problem" data-numberify>Mal wieder sudo vergessen? Kein Problem:<a class="anchor ms-1" href="#mal-wieder-sudo-vergessen-kein-problem"></a></h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">$ ein script
</span></span><span class="line"><span class="ln">2</span><span class="cl">$ sudo !!
</span></span></code></pre></div><table>
  <thead>
      <tr>
          <th>kurz</th>
          <th>lang</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>history 10</code></td>
          <td><code>history | tail</code></td>
      </tr>
      <tr>
          <td><code>cd !$:h</code></td>
          <td><code>cd !!:$:h</code></td>
      </tr>
  </tbody>
</table>
<p><strong>Beispiel</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">$ ls -l /etc/apt/apt.conf.d/20auto-upgrades 
</span></span><span class="line"><span class="ln">2</span><span class="cl">$ <span class="nb">cd</span> !$:h
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nb">cd</span> /etc/apt/apt.conf.d
</span></span></code></pre></div>
<h4 id="eselsbrücke-regex-like" data-numberify>Eselsbrücke: RegEx-like<a class="anchor ms-1" href="#eselsbrücke-regex-like"></a></h4>
<table>
  <thead>
      <tr>
          <th>Eingabe</th>
          <th>Funktion</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>!?abc</code></td>
          <td>das erste Kommando in der History suchen, das <code>abc</code> enthält</td>
      </tr>
      <tr>
          <td><code>!abc</code></td>
          <td>das erste Kommando in der History suchen, das mit <code>abc</code> beginnt</td>
      </tr>
      <tr>
          <td><code>!!</code></td>
          <td>zuletzt aufgerufener Befehl</td>
      </tr>
      <tr>
          <td><code>!^</code></td>
          <td>erster Parameter im vorherigen Befehl</td>
      </tr>
      <tr>
          <td><code>!*</code></td>
          <td>alle Parameter im vorherigen Befehl</td>
      </tr>
      <tr>
          <td><code>!$</code></td>
          <td>letzter Parameter im vorherigen Befehl</td>
      </tr>
      <tr>
          <td><code>!n</code></td>
          <td>Befehl an Position <code>n</code> in der History</td>
      </tr>
      <tr>
          <td><code>!-n</code></td>
          <td>Befehl, der an der <code>n</code>-ten Stelle von hinten in der History steht <code>:2</code></td>
      </tr>
      <tr>
          <td><code>:2</code></td>
          <td>Nur der zweite Parameter des Befehls</td>
      </tr>
      <tr>
          <td><code>:2-5</code></td>
          <td>der zweite bis fünfte Parameter des Befehls</td>
      </tr>
      <tr>
          <td><code>:2-$</code></td>
          <td>der zweite und alle weiteren Parameter des Befehls</td>
      </tr>
      <tr>
          <td><code>:*</code></td>
          <td>Sämtliche Parameter des Befehls</td>
      </tr>
      <tr>
          <td><code>:q</code></td>
          <td>den Text in Anführungsstriche setzen</td>
      </tr>
      <tr>
          <td><code>:p</code></td>
          <td>&quot;print&quot; den Befehl nur ausgeben</td>
      </tr>
      <tr>
          <td><code>:h</code></td>
          <td>≈ <code>dirname</code> in einer Pfadangabe das Ende abschneiden <code>/etc/apt/apt.conf.d</code></td>
      </tr>
      <tr>
          <td><code>:t</code></td>
          <td>≈ <code>basename</code> das Ende einer Pfadangabe (zum Beispiel der Dateiname) <code>20auto-upgrades</code></td>
      </tr>
      <tr>
          <td></td>
          <td><code>ls -l /foo/bar.baz</code></td>
      </tr>
      <tr>
          <td><code>:r</code></td>
          <td><strong>remove</strong> alles hinter dem letzten Punkt <strong>abschneiden</strong> (zum Beispiel die Dateiendung) <code>/foo/bar</code></td>
      </tr>
      <tr>
          <td><code>:e</code></td>
          <td><strong>Endung</strong> alles hinter dem letzten Punkt (zum Beispiel die Dateiendung) = <code>baz</code></td>
      </tr>
  </tbody>
</table>
<p><strong>Beispiel Befehlssuche</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">$ <span class="nb">echo</span> foo bar baz
</span></span><span class="line"><span class="ln">2</span><span class="cl">foo bar baz
</span></span><span class="line"><span class="ln">3</span><span class="cl">$ <span class="nb">echo</span> !echo:2
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nb">echo</span> bar
</span></span><span class="line"><span class="ln">5</span><span class="cl">bar
</span></span></code></pre></div><p>Nur ausgeben:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">$ <span class="nb">echo</span> foo bar baz
</span></span><span class="line"><span class="ln">2</span><span class="cl">foo bar baz
</span></span><span class="line"><span class="ln">3</span><span class="cl">$ <span class="nb">echo</span> !echo:2:p
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nb">echo</span> bar
</span></span></code></pre></div>
<h2 id="schnell-in-bash-mal-würfeln" data-numberify>schnell in bash mal würfeln<a class="anchor ms-1" href="#schnell-in-bash-mal-würfeln"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">let</span> <span class="nv">zufallszahl</span><span class="o">=</span><span class="nv">$RANDOM</span>%6
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">echo</span> <span class="nv">$zufallszahl</span>
</span></span></code></pre></div><table>
  <thead>
      <tr>
          <th>Datum</th>
          <th>Änderung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>03.11.2023</td>
          <td>Passwort generieren</td>
      </tr>
      <tr>
          <td>14.02.2024</td>
          <td>Hinweis auf <code>gen_passwort.sh</code> im GitLab-Repository</td>
      </tr>
      <tr>
          <td>11.09.2024</td>
          <td>fallocate</td>
      </tr>
      <tr>
          <td>22.09.2024</td>
          <td>Bootstick</td>
      </tr>
      <tr>
          <td>13.11.2024</td>
          <td>Fix Typo</td>
      </tr>
      <tr>
          <td>10.02.2026</td>
          <td>Zufallszahl mehr erläutert</td>
      </tr>
  </tbody>
</table>]]></content:encoded>
    </item>
    
    <item>
      <title>Sonstiges</title>
      <link>https://www.rainerrose.de/docs/linux/sonstiges/</link>
      <pubDate>Fri, 28 Jun 2024 23:16:19 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/sonstiges/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Alles was nicht so recht in eine Kategorie passt oder wo ich zu faul war zu kategorisieren. :-D</p>

<h2 id="curl-mit-ipv6" data-numberify>curl mit IPv6<a class="anchor ms-1" href="#curl-mit-ipv6"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">curl  <span class="s2">&#34;http://[ipv6:addresse]:port/&#34;</span>
</span></span></code></pre></div>
<h2 id="root-passwort-wieder-löschen" data-numberify>root passwort wieder löschen<a class="anchor ms-1" href="#root-passwort-wieder-löschen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">passwd -dl root
</span></span></code></pre></div>
<h2 id="magic-sys-key" data-numberify>Magic Sys Key<a class="anchor ms-1" href="#magic-sys-key"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> s &gt; /proc/sysrq-trigger
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">echo</span> u &gt; /proc/sysrq-trigger
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nb">echo</span> b &gt; /proc/sysrq-trigger
</span></span></code></pre></div><p>Und im Falle von Turnschuhnetzwerk und direkt vor dem Rechner geht das auch mit:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="ln">1</span><span class="cl">ALT-PrintScr-S
</span></span><span class="line"><span class="ln">2</span><span class="cl">ALT-PrintScr-U
</span></span><span class="line"><span class="ln">3</span><span class="cl">ALT-PrintScr-B 
</span></span></code></pre></div>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Alles was nicht so recht in eine Kategorie passt oder wo ich zu faul war zu kategorisieren. :-D</p>

<h2 id="curl-mit-ipv6" data-numberify>curl mit IPv6<a class="anchor ms-1" href="#curl-mit-ipv6"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">curl  <span class="s2">&#34;http://[ipv6:addresse]:port/&#34;</span>
</span></span></code></pre></div>
<h2 id="root-passwort-wieder-löschen" data-numberify>root passwort wieder löschen<a class="anchor ms-1" href="#root-passwort-wieder-löschen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">passwd -dl root
</span></span></code></pre></div>
<h2 id="magic-sys-key" data-numberify>Magic Sys Key<a class="anchor ms-1" href="#magic-sys-key"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> s &gt; /proc/sysrq-trigger
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">echo</span> u &gt; /proc/sysrq-trigger
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nb">echo</span> b &gt; /proc/sysrq-trigger
</span></span></code></pre></div><p>Und im Falle von Turnschuhnetzwerk und direkt vor dem Rechner geht das auch mit:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="ln">1</span><span class="cl">ALT-PrintScr-S
</span></span><span class="line"><span class="ln">2</span><span class="cl">ALT-PrintScr-U
</span></span><span class="line"><span class="ln">3</span><span class="cl">ALT-PrintScr-B 
</span></span></code></pre></div>
<h2 id="xubuntu-auf-neues-distro-upgrade-checken" data-numberify>XUbuntu auf neues Distro-Upgrade checken<a class="anchor ms-1" href="#xubuntu-auf-neues-distro-upgrade-checken"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">do</span>-release-upgrade -c
</span></span></code></pre></div>
<h2 id="resolvconf-wird-immer-überschrieben" data-numberify>resolv.conf wird immer überschrieben<a class="anchor ms-1" href="#resolvconf-wird-immer-überschrieben"></a></h2>
<p>Nach Änderung des DNS-Servers wird die <code>/etc/resolv.conf</code> immer wieder überschrieben?</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl restart NetworkManager.service
</span></span></code></pre></div><p>Erst mal alle Interfaces anzeigen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">nmcli -p connection show
</span></span></code></pre></div><p>In diesem Fall half, das Interface neu hochzufahren</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">nmcli c up enp0s8
</span></span></code></pre></div>
<h2 id="netzwerkkarten-konfiguration" data-numberify>Netzwerkkarten-Konfiguration<a class="anchor ms-1" href="#netzwerkkarten-konfiguration"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">nmtui
</span></span><span class="line"><span class="ln">2</span><span class="cl">systemctl restart NetworkManager.service
</span></span><span class="line"><span class="ln">3</span><span class="cl">ip link <span class="nb">set</span> enp0s8 down
</span></span><span class="line"><span class="ln">4</span><span class="cl">ip link <span class="nb">set</span> enp0s8 up
</span></span></code></pre></div>
<h2 id="ignore-case-bei-less" data-numberify>Ignore case bei less<a class="anchor ms-1" href="#ignore-case-bei-less"></a></h2>
<ol>
<li>im Befehlsmodus <code>-i</code></li>
<li>gleich als Parameter aufrufen <code>less -i</code></li>
</ol>

<h2 id="eben-mal-schnell-konvertieren" data-numberify>Eben mal schnell konvertieren<a class="anchor ms-1" href="#eben-mal-schnell-konvertieren"></a></h2>
<p>Eben mal schnell ein Dokument von einem Format ins andere konvertieren? Nicht überall gibt es <code>pandoc</code> oder zum Teil nur in einer veralteten Version. <code>docker</code> hilft hier:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker run --rm --volume <span class="s2">&#34;`pwd`:/data&#34;</span> --user <span class="sb">`</span>id -u<span class="sb">`</span>:<span class="sb">`</span>id -g<span class="sb">`</span> pandoc/latex <span class="nv">$*</span>
</span></span></code></pre></div><p>Benennt man das Script z.B. <code>pandoc.sh</code> lässt es sich zum Beispiel so von Markdown in Dokuwiki umwandeln</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">pandoc.sh -f markdown -t dokuwiki index.md
</span></span></code></pre></div>
<h2 id="usb-palm" data-numberify>USB-Palm<a class="anchor ms-1" href="#usb-palm"></a></h2>
<p>Wo schließe ich denn meinen USB-Palm an? Das Device heiß:
<code>/dev/usb/ttyUSB1</code></p>
<p>Im Kernel ist es zu konfigurieren als:</p>
<pre><code>USB support ---&gt; USB Serial Converter support ---&gt; USB Serial Converter support
USB Handspring Visor / Palm m50x / Sony Clie Driver
</code></pre>
<p>Am besten einfach einen symbolischen Link drauflegen.</p>

<h2 id="suchen-eines-textes-in-dateien-im-aktuellen-verzeichnis" data-numberify>Suchen eines Textes in Dateien im aktuellen Verzeichnis<a class="anchor ms-1" href="#suchen-eines-textes-in-dateien-im-aktuellen-verzeichnis"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">find . <span class="p">|</span> xargs grep Suchmuster 2&gt; /dev/null
</span></span></code></pre></div>
<h2 id="vergessen-in-welches-verzeichnis-ein-programm-installiert-wurde" data-numberify>Vergessen, in welches Verzeichnis ein Programm installiert wurde?<a class="anchor ms-1" href="#vergessen-in-welches-verzeichnis-ein-programm-installiert-wurde"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">which Programm-Name
</span></span></code></pre></div><p>liefert den absoluten Pfad, sofern es sich im Suchpfad befindet.</p>

<h2 id="scsii-zip-drive" data-numberify>SCSII-ZIP-Drive<a class="anchor ms-1" href="#scsii-zip-drive"></a></h2>
<p>Das SCSII-ZIP-Drive erst nach dem booten angeschlossen?</p>
<p>Kein Problem:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;scsi add-single-device 0 0 6 0&#34;</span> &gt; /proc/scsi/scsi
</span></span></code></pre></div><p>und mit</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">mount -t dateisystem /dev/sd?4 /mnt
</span></span></code></pre></div><p>ins Dateisystem einhängen.</p>
<p>Falls das ZIP-Drive die ID <code>5</code> hat, einfach oben die <code>6</code> durch die <code>5</code>
ersetzen.</p>

<h2 id="multivolume-archive-erstellen" data-numberify>Multivolume Archive erstellen<a class="anchor ms-1" href="#multivolume-archive-erstellen"></a></h2>

<h3 id="mit-gleichem-dateinamen" data-numberify>Mit gleichem Dateinamen<a class="anchor ms-1" href="#mit-gleichem-dateinamen"></a></h3>
<p>erstellen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">tar -c -L &lt;Größe in MB&gt; -f &lt;arch.tar&gt;
</span></span></code></pre></div><p>entpacken:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">tar -xMf &lt;archiv.tar&gt;
</span></span></code></pre></div><p>Mit unterschiedlichem Dateinamen (<code>archiv.tar.aa, archiv.tar..ab, archiv.tar..ac, archiv.tar..&lt;PREFIX&gt;...</code> )</p>

<h3 id="mit-temporärer-datei" data-numberify>Mit temporärer Datei<a class="anchor ms-1" href="#mit-temporärer-datei"></a></h3>
<p>erstellen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">tar -czf &lt;archiv.tar&gt; &lt;Source&gt;<span class="p">;</span> split -b&lt;Größe in MB&gt;M &lt;archiv.tar&gt; &lt;archiv.tar.split.&gt;
</span></span></code></pre></div><p>Bsp (95MB-Archive):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">tar czf /mnt/zip /home/user<span class="p">;</span> split -b95 archiv.tz archiv.tgz.split.
</span></span></code></pre></div><p>entpacken:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">cat &lt;archiv.tar.split.&gt;* &gt; archiv.tar
</span></span></code></pre></div><p>Bsp:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">cat archiv.tgz.split.* &gt; archiv.tgz
</span></span></code></pre></div>
<h3 id="ohne-temporärer-datei" data-numberify>ohne temporärer Datei<a class="anchor ms-1" href="#ohne-temporärer-datei"></a></h3>
<p>erstellen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">tar cz &lt;Source&gt; <span class="p">|</span> split -b&lt;Größe in MB&gt;M &lt;archiv.tar.split.&gt;
</span></span></code></pre></div><p>Bsp (95MB-Archive):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">tar cz /home/user <span class="p">|</span> split -b95M - archiv.tgz.split.
</span></span></code></pre></div><p>entpacken:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">cat &lt;archiv.tar.split.*&gt; <span class="p">|</span> tar xz
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="sb">```</span> bash
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl">Bsp: 
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="sb">```</span> bash
</span></span><span class="line"><span class="ln">6</span><span class="cl">cat archiv.tgz.split.* <span class="p">|</span> tar xz
</span></span></code></pre></div><p>entpacken unter Dos:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">copy /b archiv.tgz.split.aa+archiv.tgz.split.ab+archiv.split.ac archiv.tgz
</span></span></code></pre></div><p>Alle Dateien müssen beim <code>copy</code>-Befehl angegeben werden! Danach normal
das tgz-Archiv entpacken.</p>

<h2 id="datei-endung-datei-format-verbaselt-gelöscht-unbekannt" data-numberify>Datei-Endung, Datei-Format verbaselt, gelöscht, unbekannt<a class="anchor ms-1" href="#datei-endung-datei-format-verbaselt-gelöscht-unbekannt"></a></h2>
<p>mit dem kleinen Progrämmchen file bekommen Sie es heraus.</p>
<p>Beispiel:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">file unbekanntes_Datei-Format
</span></span><span class="line"><span class="ln">2</span><span class="cl">unbekanntes_Datei-Format: gzip compressed data, deflated, last modified: Wed Jan <span class="m">16</span> 21:36:14 2002, os: Unix
</span></span></code></pre></div>
<h2 id="attachments-in-der-mail" data-numberify>Attachments in der Mail<a class="anchor ms-1" href="#attachments-in-der-mail"></a></h2>
<p>Man kennt, es. Attachments landen mal wieder in der Mail.</p>
<ol>
<li>Mail in einer TextDatei abspeichern.</li>
<li>Alles vor dem: <code>begin 666 dateiname</code> in der Textdatei löschen.</li>
<li><code>uudecode -oneuer_dateiname codierte_datei_im_bin_format</code></li>
</ol>
<p>Fertich. (Version: uudecode (GNU sharutils) 4.2c)</p>

<h2 id="reguläre-ausdrücke" data-numberify>Reguläre Ausdrücke<a class="anchor ms-1" href="#reguläre-ausdrücke"></a></h2>
<p>Reguläre Ausdrücke (Englisch: Regular Expression, RegExp) sind
Suchmuster, die mittels Platzhalterzeichen (Jokers) gebildet werden. Sie
dienen hauptsächlich zum Suchen nach und dem Ersetzen von Textstellen.
Platzhalterzeichen sind Sonderzeichen wie z.B. der Stern (<code>*</code>) unter DOS
und Windows. Anders als dort sind in der Unix-Welt Reguläre Ausdrücke
mit zahlreichen weiteren Platzhalterzeichen und -sequenzen möglich. Die
wichtigsten sind nachstehend aufgeführt:</p>
<table>
  <thead>
      <tr>
          <th>Steuerzeichen</th>
          <th>Erläuterung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>[xyz...]</code></td>
          <td>Eines dieser Zeichen</td>
      </tr>
      <tr>
          <td><code>[^xyz...]</code></td>
          <td>Keines dieser Zeichen</td>
      </tr>
      <tr>
          <td><code>.</code></td>
          <td>Ein beliebiges Zeichen</td>
      </tr>
      <tr>
          <td><code>.*</code></td>
          <td>Keines, eines oder mehrere beliebige Zeichen. Greedy (gefräßig)Suche</td>
      </tr>
      <tr>
          <td><code>.+</code></td>
          <td>Eines oder mehrere beliebige Zeichen</td>
      </tr>
      <tr>
          <td><code>.?</code></td>
          <td>Keines oder ein beliebiges Zeichen</td>
      </tr>
      <tr>
          <td><code>.*?</code></td>
          <td>lazy Suche. Möglichst viel, aber auch möglichst wenig. Quasi beim ersten Treffer aufhören. Gegenteil von greedy</td>
      </tr>
      <tr>
          <td><code>$</code></td>
          <td>Am Ende einer Zeile</td>
      </tr>
      <tr>
          <td><code>^</code></td>
          <td>Am Anfang einer Zeile</td>
      </tr>
      <tr>
          <td><code>(...)</code></td>
          <td>Gruppe von Zeichen</td>
      </tr>
      <tr>
          <td><code>\</code></td>
          <td>Schutzzeichen für Jokers (wird vorangestellt, wenn z.B. nach . oder * gesucht wird)</td>
      </tr>
  </tbody>
</table>
<p>Reguläre Ausdrücke sind eine (mathematische) Wissenschaft für sich, und
es gibt ganze Bücher darüber. Die Anwendungen sind sehr vielfältig.</p>

<h2 id="strom-sparen" data-numberify>Strom sparen<a class="anchor ms-1" href="#strom-sparen"></a></h2>
<p>Bildschirmschoner sollte man deaktivieren. Sie verbrauchen nur CPU-Zeit
(damit Strom) und der Monitor nicht auch noch Strom verbraucht. Der
VESA-DPMS-Standard schaltet nämlich den Bildschirm selbstständig ab.</p>
<p>Ob der VESA-DPMS-Standard aktiviert ist, bekommt man durch die Eingabe
von:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">xset -q
</span></span></code></pre></div><p>auf der Kommandozeile zu sehen.</p>
<p>Neben verschiedenen Ausgaben sollte die aktuelle DPMS-Konfiguration eine
Antwort geben.</p>
<p>Die Zahlen geben wieder nach welchen Zeitabständen der Monitor die
nächste Stufe des DPMS-Standards annimmt.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">xset
</span></span></code></pre></div><p>mit &quot;DPMS is disabled&quot; sollten Sie:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">xset dpms
</span></span></code></pre></div><p>oder</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">xset dpms <span class="m">60</span> <span class="m">120</span> <span class="m">180</span>
</span></span></code></pre></div><p>DPMS aktivieren (mit 1, 2 und 3 Minuten).</p>
<p>Wird der xdm verwendet hilft zudem ein Eintrag in: <code>/etc/X11/xdm/Xsetup</code></p>
<p>Ein Ändern der Zeile von von <code>no</code> in <code>yes</code>.</p>
<p>Unter <em>KDE</em> im Kontroll-Zentrum beim Unterpunkt Energie-Kontrolle.</p>
<p>Unter <em>GNOME</em> ebenfalls im Kontroll-Zentrum.</p>
<p><code>CONFIG_APM_CPU_IDLE=y</code> in der Kernel-Konfiguration sorgt für einen
Stromsparmodus der CPU auf Kernelebene.</p>

<h2 id="letzte-zugriffszeit" data-numberify>letzte Zugriffszeit<a class="anchor ms-1" href="#letzte-zugriffszeit"></a></h2>
<p>Wer die letzte Zugriffszeit von seinen Dateien nicht braucht, kann zudem
seine Partitionen mit dem Parameter:</p>
<pre><code>noatime
</code></pre>
<p>mounten. Bei Dateien, die nur häufig gelesen werden, und sich eh im RAM
befinden, spart man somit einen Schreibzugriff. Bei Laptops mit fast
leerem Akku lebenswichtig.</p>

<h2 id="java-applets-unter-firefox" data-numberify>Java(-Applets) unter Firefox<a class="anchor ms-1" href="#java-applets-unter-firefox"></a></h2>
<p>Wenn es noch nicht existiert, <code>plugins</code>-Verzeichnis im Homeverzeichnis
des Firefox anlegen. Z.B.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">mkdir ~/.mozilla/plugins
</span></span></code></pre></div><p>Jetzt nur noch ein Symlink auf die Libary <code>libjavaplugin_oji.so</code> aus dem
JRE oder SDK in das <code>plugins</code>-Verzeichnis anlegen.</p>
<p>Ist etwas Sucharbeit, müsste sich aber finden lassen. Die besten
Erfahrungen habe ich mit dem JRE von Sun selbst gemacht. Bei vielen
Distributionen lässt sich das Java aber inzwischen auch per
Paketverwaltung als Plugin systemweit nachinstallieren. Der Ort der
Java-Installation lässt sich aus der Umgebungsvariablen JAVA_HOME
ablesen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="nv">$JAVA_HOME</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">/opt/java/jre
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nb">cd</span> ~/.mozilla/plugins
</span></span><span class="line"><span class="ln">4</span><span class="cl">ln -s /opt/java/jre/plugin/i386/ns610-gcc32/libjavaplugin_oji.so libjavaplugin_oji.so
</span></span></code></pre></div><p>&lt;note tip&gt;Inzwischen nutze ich OpenJDK und das ist genauso
gut&lt;/note&gt;</p>
<p>Jetzt noch den Firefox neu starten und das Plugin sollte benutzbar sein
sowie unter <code>about:plugins</code> auftauchen.</p>

<h2 id="mime-type--encoding-einer-datei-identifizieren" data-numberify>MIME-Type / Encoding einer Datei identifizieren<a class="anchor ms-1" href="#mime-type--encoding-einer-datei-identifizieren"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">file –bi &lt;dateiname&gt;
</span></span></code></pre></div>
<h2 id="avidemux-meldet-defekte-avi-datei" data-numberify>avidemux meldet defekte avi-Datei<a class="anchor ms-1" href="#avidemux-meldet-defekte-avi-datei"></a></h2>
<p>Reparatur mit:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">avconv -i defekt.avi -codec copy reparatiert.avi
</span></span></code></pre></div>
<h2 id="ip-adresse" data-numberify>IP-Adresse<a class="anchor ms-1" href="#ip-adresse"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">hostname -i
</span></span></code></pre></div>
<h2 id="md5" data-numberify>md5<a class="anchor ms-1" href="#md5"></a></h2>
<p>md5-Summe in Text-Datei mit Dateinamen reinschreiben</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;2317a049f2c83b735e75cad08022247b foo.sh&#34;</span> &gt; foo.md5.txt
</span></span></code></pre></div><p>Checken mit Download, der dann <code>foo.sh</code> im Dateinamen haben muss.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">md5sum -c foo.md5.txt
</span></span></code></pre></div>
<h2 id="einstellungen-von-putty-exportieren--importieren" data-numberify>Einstellungen von PuTTY exportieren / importieren<a class="anchor ms-1" href="#einstellungen-von-putty-exportieren--importieren"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="ln">1</span><span class="cl">regedit /e &#34;%userprofile%\Desktop\PuttyEinstellungen.reg&#34; HKEY_CURRENT_USER\Software\Simontatham
</span></span></code></pre></div><p>legt reg-Datei auf den Desktop. Per Doppelklick $IRGENDWO wieder
importieren, fertig.</p>

<h2 id="patch-files" data-numberify>Patch-Files<a class="anchor ms-1" href="#patch-files"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">diff -u original.txt modifiziert.txt &gt; original.patch
</span></span></code></pre></div><p>patch -u working.slang.c -i slang.patch</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">patch -b -u original.txt -i original.patch
</span></span></code></pre></div><p><code>-b</code> für Backup</p>

<h2 id="changelog" data-numberify>Changelog<a class="anchor ms-1" href="#changelog"></a></h2>
<table>
  <thead>
      <tr>
          <th>Datum</th>
          <th>Änderung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>30.10.2023</td>
          <td>Xubuntu-Distro-Upgrade Tipp</td>
      </tr>
      <tr>
          <td>14.11.2023</td>
          <td>Magic Sys Key</td>
      </tr>
      <tr>
          <td>28.06.2024</td>
          <td>curl mit IPv6</td>
      </tr>
      <tr>
          <td>28.12.2024</td>
          <td>Systemd-Timer umgelagert auf <a href="../systemd">Systemd</a>.</td>
      </tr>
      <tr>
          <td>29.09.2025</td>
          <td>root passwort wieder löschen</td>
      </tr>
  </tbody>
</table>]]></content:encoded>
    </item>
    
    <item>
      <title>Docker</title>
      <link>https://www.rainerrose.de/docs/linux/docker/</link>
      <pubDate>Sat, 01 Jun 2024 16:28:13 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/docker/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Ein paar kleine Tricks und Kniffe zum Thema Docker.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Ein paar kleine Tricks und Kniffe zum Thema Docker.</p>

<h2 id="mysqldump-ohne-passwort-in-prozessliste" data-numberify>mysqldump ohne Passwort in Prozessliste<a class="anchor ms-1" href="#mysqldump-ohne-passwort-in-prozessliste"></a></h2>
<p>Unter docker werden die Zugangsdaten meist über Umgebungsvariablen
weitergegeben.</p>
<p>Arbeitet man jedoch bei <code>mysqldump</code> mit dem Parameter <code>-p</code> gibt es
folgende Warnung</p>
<pre><code>mysqldump: [Warning] Using a password on the command line interface can be insecure.
</code></pre>
<p>Um jetzt nicht alles nach <code>/dev/null</code> umzuleiten, um noch echte Fehler
mitzubekommen, kann man mittels des Parameters <code>--defaults-file</code> das
Passwort in eine Datei kopieren. Da sich Zugangsdaten ändern können,
empfiehlt es sich, das dynamisch per Script zu erzeugen und das Passwort
aus der Umgebungsvariable des Containers auszulesen.</p>
<p>Das Script legt man entweder in ein lokales Volume oder kopiert es via
<code>docker cp</code> in den Container.</p>
<p>Das Beispiel-Script zum dynamischen Erzeugen der Credentials-Datei:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="cp"></span><span class="nv">CRED_FILE</span><span class="o">=</span><span class="s2">&#34;/docker-entrypoint-initdb.d/credentials-root.conf&#34;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="c1">#loeschen</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">&gt; <span class="s2">&#34;</span><span class="si">${</span><span class="nv">CRED_FILE</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">chmod <span class="m">600</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">CRED_FILE</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;[client]&#34;</span> &gt;&gt;  <span class="s2">&#34;</span><span class="si">${</span><span class="nv">CRED_FILE</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;password=</span><span class="si">${</span><span class="nv">MYSQL_ROOT_PASSWORD</span><span class="si">}</span><span class="s2">&#34;</span> &gt;&gt; <span class="s2">&#34;</span><span class="si">${</span><span class="nv">CRED_FILE</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span></code></pre></div><p>Und noch ein Auszug aus einem Backup-Script:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker <span class="nb">exec</span> -i  onlyoffice-mysql-server  /bin/bash /docker-entrypoint-initdb.d/gen_cred_config.sh
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="o">(</span>docker <span class="nb">exec</span> -i onlyoffice-mysql-server mysqldump  --defaults-file<span class="o">=</span>/docker-entrypoint-initdb.d/credentials-root.conf &lt;weitere Dump-Parameter&gt;  -u root -h&lt;hostname&gt;  <span class="p">|</span> xz -c &gt; <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BACKUPDIR</span><span class="si">}</span><span class="s2">/dump.sql.xz&#34;</span>
</span></span></code></pre></div>
<h2 id="umgebungsvariable-aus-docker-container-auslesen" data-numberify>Umgebungsvariable aus Docker-Container auslesen<a class="anchor ms-1" href="#umgebungsvariable-aus-docker-container-auslesen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker <span class="nb">exec</span> -i onlyoffice-community-server /bin/bash -c <span class="s1">&#39;/bin/echo ${MYSQL_SERVER_PASS}&#39;</span>
</span></span></code></pre></div>
<h2 id="unterordner-in-docker-volume-ignorieren" data-numberify>Unterordner in Docker-Volume ignorieren<a class="anchor ms-1" href="#unterordner-in-docker-volume-ignorieren"></a></h2>
<p>Dem <code>docker-compose</code> ein Verzeichnis der lokalen Maschine übergeben,
aber einzelne Unterverszeichnisse davon ausnehmen:</p>
<p>Das funktioniert, indem für die auszunehmenden Unterordner ein zweites
Volume angeben wird. Volume darf keine Zuordnung mit einem Doppelpunkt
enhalten:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln">1</span><span class="cl"><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="w"></span>- <span class="l">./webseite/html:/var/www/html</span><span class="w">
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="w"></span>- <span class="l">/var/www/html/static/</span><span class="w">
</span></span></span></code></pre></div><p>Im Beispiel bekommt ein Webserver die ganze Webseite übergeben, der
Ordner <code>static</code> wird aber aus dem Container benutzt.</p>

<h2 id="backups--recover-via-volume-mounten" data-numberify>Backups & Recover via Volume mounten<a class="anchor ms-1" href="#backups--recover-via-volume-mounten"></a></h2>

<h3 id="reingucken" data-numberify>reingucken<a class="anchor ms-1" href="#reingucken"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker run -it --rm -v portainer_data:/data:ro -v <span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>:/backup alpine /bin/sh
</span></span></code></pre></div>
<h3 id="sichern" data-numberify>sichern<a class="anchor ms-1" href="#sichern"></a></h3>

<h4 id="variante-1" data-numberify>Variante 1<a class="anchor ms-1" href="#variante-1"></a></h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker run --rm -v portainer_data:/data:ro -v <span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>:/backup alpine tar cjvf /backup/data.tbz2 -C /data ./
</span></span></code></pre></div>
<h4 id="variante-2" data-numberify>Variante 2<a class="anchor ms-1" href="#variante-2"></a></h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker run --rm -v portainer_data:/data alpine tar cf - -C /data ./ <span class="p">|</span> xz &gt; ./portainer_data_volume.txz
</span></span></code></pre></div>
<h3 id="recover" data-numberify>Recover<a class="anchor ms-1" href="#recover"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker run --rm -v portainer_data:/data -v ./portainer_data_volume.txz:/backup.tgz alpine tar tJf -C /data /backup.tgz
</span></span></code></pre></div>
<h2 id="volumes" data-numberify>Volumes<a class="anchor ms-1" href="#volumes"></a></h2>
<p>Wie unterscheiden sich nochmal die Bezeichnungen bei den Volumes?</p>
<ul>
<li>bind volume</li>
<li>named volume</li>
<li>volume</li>
</ul>

<h2 id="logfiles-auf-die-konsole" data-numberify>Logfiles auf die Konsole<a class="anchor ms-1" href="#logfiles-auf-die-konsole"></a></h2>
<p>Logfile-Ausgaben können über STDOUT einfach an das &quot;Terminal&quot; geblasen
werden, der dann via <code>docker log &lt;container-name&gt;</code> bzw. Portainer
auslesbar ist.</p>
<p>Eine Apache-Konfig <code>conf-enabled/other-vhosts-access-log.conf</code> kann z.B. so aussehen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-apache" data-lang="apache"><span class="line"><span class="ln">1</span><span class="cl"><span class="c"># Define an access log for VirtualHosts that don&#39;t define their own logfile</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">CustomLog</span> <span class="sx">/proc/self/fd/1</span> vhost_combined
</span></span></code></pre></div><p>Im Container selbst ist dann der Grund zu sehen, warum das funktioniert:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># ls -l /proc/self/fd/1</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">lrwx------. <span class="m">1</span> root root <span class="m">64</span> Jul  <span class="m">8</span> 16:19 /proc/self/fd/1 -&gt; /dev/pts/0
</span></span></code></pre></div><p>Habe ich mal in einem ubuntu-basierten Container gesehen, ziemlich
genial.</p>

<h2 id="docker-entrypoint" data-numberify>docker ENTRYPOINT<a class="anchor ms-1" href="#docker-entrypoint"></a></h2>
<p>Weil ich mir nie merken kann, wie wann was gestartet wird, hier mal eine Tabelle:</p>
<table>
  <thead>
      <tr>
          <th>ENTRYPOINT</th>
          <th>CMD</th>
          <th>run-Parameter</th>
          <th>ausgeführt wird</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>[&quot;script.sh&quot;]</code></td>
          <td></td>
          <td></td>
          <td><code>script.sh</code></td>
      </tr>
      <tr>
          <td><code>[&quot;script.sh&quot;]</code></td>
          <td></td>
          <td><code>/bin/bash</code></td>
          <td><code>script.sh /bin/bash</code></td>
      </tr>
      <tr>
          <td><code>[&quot;script.sh&quot;]</code></td>
          <td><code>[&quot;mysqld&quot;]</code></td>
          <td></td>
          <td><code>script.sh mysqld</code></td>
      </tr>
      <tr>
          <td><code>[&quot;script.sh&quot;]</code></td>
          <td><code>[&quot;mysqld&quot;]</code></td>
          <td><code>/bin/bash</code></td>
          <td><code>script.sh /bin/bash</code></td>
      </tr>
      <tr>
          <td></td>
          <td><code>[&quot;/bin/sh&quot;]</code></td>
          <td></td>
          <td><code>/bin/sh</code></td>
      </tr>
      <tr>
          <td></td>
          <td><code>[&quot;/bin/sh&quot;]</code></td>
          <td><code>/bin/bash</code></td>
          <td><code>/bin/bash</code></td>
      </tr>
  </tbody>
</table>

<h2 id="zeitzonen" data-numberify>Zeitzonen<a class="anchor ms-1" href="#zeitzonen"></a></h2>
<p>Die lokale Zeitzone lässt sich per Volume-Mount an den Container durchreichen, sofern die Applikation das unterstützt bzw. beachtet.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln">1</span><span class="cl"><span class="w">    </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="w">      </span>- <span class="l">/etc/timezone:/etc/timezone:ro</span><span class="w">
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="w">      </span>- <span class="l">/etc/localtime:/etc/localtime:ro</span><span class="w">
</span></span></span></code></pre></div>
<h2 id="pull-und-restart" data-numberify>Pull und Restart<a class="anchor ms-1" href="#pull-und-restart"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker compose up -d --pull always
</span></span></code></pre></div><p>bzw.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker compose up -d --build --pull always
</span></span></code></pre></div>
<h2 id="erstellungsdatum-created-eines-images-abfragen" data-numberify>Erstellungsdatum (Created) eines Images abfragen<a class="anchor ms-1" href="#erstellungsdatum-created-eines-images-abfragen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker inspect docker.io/photoprism/photoprism:latest -f <span class="s2">&#34;{{ .Created}}&#34;</span>
</span></span></code></pre></div>
<h2 id="changelog" data-numberify>Changelog<a class="anchor ms-1" href="#changelog"></a></h2>
<table>
  <thead>
      <tr>
          <th>Datum</th>
          <th>Änderung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>08.11.2023</td>
          <td>Backup via Volume weitere Variante sowie Recover-Möglichkeit.</td>
      </tr>
      <tr>
          <td>01.06.2024</td>
          <td>docker ENTRYPOINT</td>
      </tr>
      <tr>
          <td>25.11.2024</td>
          <td>Zeitzonen-Volumes</td>
      </tr>
      <tr>
          <td>02.05.2025</td>
          <td>Pull und Restart</td>
      </tr>
      <tr>
          <td>24.03.2026</td>
          <td>Erstellungsdatum (Created) eines Images abfragen</td>
      </tr>
  </tbody>
</table>]]></content:encoded>
    </item>
    
    <item>
      <title>XFree</title>
      <link>https://www.rainerrose.de/docs/linux/xfree/</link>
      <pubDate>Sat, 01 Jun 2024 16:20:47 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/xfree/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zum Display-Server-Protokoll für X11.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zum Display-Server-Protokoll für X11.</p>

<h2 id="die-tasten--und--funktionieren-nicht" data-numberify>Die Tasten ~ und ^ funktionieren nicht.<a class="anchor ms-1" href="#die-tasten--und--funktionieren-nicht"></a></h2>
<p>Es gibt zwei Möglichkeiten das Problem zu beheben:</p>
<p>Gefolgt vom <code>~</code> oder <code>^</code> einfach die
Leertaste (Space) drücken.</p>
<p>Man editiere als <code>root</code> die Datei <code>/etc/X11/XF86Config</code></p>
<p>In der Rubrik:</p>
<div class="highlight" title="/etc/X11/XF86Config"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="ln">1</span><span class="cl"><span class="na">Section     &#34;InputDevice&#34;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="na">Driver  &#34;keyboard&#34;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="na">Identifier  &#34;Keyboard[0]&#34;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="na">Option  &#34;Protocol&#34; &#34;Standard&#34;</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="na">Option  &#34;XkbLayout&#34; &#34;de&#34;</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="na">Option  &#34;XkbModel&#34; &#34;pc102&#34;</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="na">Option  &#34;XkbRules&#34; &#34;xfree86&#34;</span>
</span></span></code></pre></div><p>folgende Zeile hinzufügen:</p>
<div class="highlight" title="/etc/X11/XF86Config"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="ln">1</span><span class="cl"><span class="na">Option &#34;XkbVariant&#34; &#34;nodeadkeys&#34;</span>
</span></span></code></pre></div><p>Und nach einem Restart des <code>XFree</code> sollten die Tasten funktionieren.</p>

<h2 id="x11-oder-wayland" data-numberify>X11 oder Wayland?<a class="anchor ms-1" href="#x11-oder-wayland"></a></h2>
<p>Um herauszufinden ob man noch unter X11 oder schon unter Wayland unterwegs ist, gibt es eine schöne Umgebungsvariable:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="nv">$XDG_SESSION_TYPE</span>
</span></span></code></pre></div><p>Sofern</p>
<pre><code>x11
</code></pre>
<p>ausgeben wird, befindet man sich unter gleichnamigen.</p>

<h2 id="changelog" data-numberify>Changelog<a class="anchor ms-1" href="#changelog"></a></h2>
<table>
  <thead>
      <tr>
          <th>Datum</th>
          <th>Änderung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>01.06.2024</td>
          <td>X11 oder Wayland</td>
      </tr>
  </tbody>
</table>]]></content:encoded>
    </item>
    
    <item>
      <title>v4l2 / Webcams</title>
      <link>https://www.rainerrose.de/docs/linux/v4l2/</link>
      <pubDate>Wed, 08 Nov 2023 22:42:04 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/v4l2/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zu Video4Linux</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zu Video4Linux</p>

<h2 id="liste-alle-devices" data-numberify>Liste alle Devices<a class="anchor ms-1" href="#liste-alle-devices"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">v4l2-ctl --list-devices
</span></span></code></pre></div>
<h3 id="ausgabe" data-numberify>Ausgabe<a class="anchor ms-1" href="#ausgabe"></a></h3>
<pre><code>HD Pro Webcam C920 (usb-0000:00:14.0-3.3):
	/dev/video0
	/dev/video1
	/dev/media0
</code></pre>

<h2 id="aktuelle-einstellungen" data-numberify>Aktuelle Einstellungen<a class="anchor ms-1" href="#aktuelle-einstellungen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">v4l2-ctl --list-ctrls
</span></span></code></pre></div>
<h3 id="ausgabe-1" data-numberify>Ausgabe<a class="anchor ms-1" href="#ausgabe-1"></a></h3>
<pre><code>                         brightness 0x00980900 (int)    : min=0 max=255 step=1 default=128 value=128
                           contrast 0x00980901 (int)    : min=0 max=255 step=1 default=128 value=128
                         saturation 0x00980902 (int)    : min=0 max=255 step=1 default=128 value=128
     white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                               gain 0x00980913 (int)    : min=0 max=255 step=1 default=0 value=0
               power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=2 value=2 (60 Hz)
          white_balance_temperature 0x0098091a (int)    : min=2000 max=6500 step=1 default=4000 value=4000 flags=inactive
                          sharpness 0x0098091b (int)    : min=0 max=255 step=1 default=128 value=128
             backlight_compensation 0x0098091c (int)    : min=0 max=1 step=1 default=0 value=0
                      exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3 (Aperture Priority Mode)
                  exposure_absolute 0x009a0902 (int)    : min=3 max=2047 step=1 default=250 value=250 flags=inactive
             exposure_auto_priority 0x009a0903 (bool)   : default=0 value=1
                       pan_absolute 0x009a0908 (int)    : min=-36000 max=36000 step=3600 default=0 value=0
                      tilt_absolute 0x009a0909 (int)    : min=-36000 max=36000 step=3600 default=0 value=0
                     focus_absolute 0x009a090a (int)    : min=0 max=250 step=5 default=0 value=0
                         focus_auto 0x009a090c (bool)   : default=1 value=0
                      zoom_absolute 0x009a090d (int)    : min=100 max=500 step=1 default=100 value=100
</code></pre>

<h2 id="auto-fokus-status-abfragen" data-numberify>Auto-Fokus Status abfragen<a class="anchor ms-1" href="#auto-fokus-status-abfragen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">v4l2-ctl --get-ctrl focus_auto 
</span></span></code></pre></div>
<h3 id="ausgabe-2" data-numberify>Ausgabe<a class="anchor ms-1" href="#ausgabe-2"></a></h3>
<pre><code>focus_auto: 1
</code></pre>
<p>hier also an.</p>

<h2 id="auto-fokus-ausschalten" data-numberify>Auto-Fokus ausschalten<a class="anchor ms-1" href="#auto-fokus-ausschalten"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">v4l2-ctl --set-ctrl <span class="nv">focus_auto</span><span class="o">=</span><span class="m">0</span>
</span></span></code></pre></div>
<h2 id="parameter-änderungen" data-numberify>Parameter-Änderungen<a class="anchor ms-1" href="#parameter-änderungen"></a></h2>
<p>Aktuell (Stand irgendwann im Juni 2023) scheinen sich die o.g. Parameter etwas geändert zu haben. Den Parameter <code>focus_auto</code> gibt es nicht mehr.</p>
<p>Derzeit setze ich die Parameter folgendermaßen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">v4l2-ctl --set-ctrl <span class="nv">focus_absolute</span><span class="o">=</span>0,focus_automatic_continuous<span class="o">=</span><span class="m">0</span>
</span></span></code></pre></div>
<h2 id="changelog" data-numberify>Changelog<a class="anchor ms-1" href="#changelog"></a></h2>
<table>
  <thead>
      <tr>
          <th>Datum</th>
          <th>Änderung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>13.06.2023</td>
          <td>Parameter-Änderungen</td>
      </tr>
      <tr>
          <td>08.11.2023</td>
          <td>neuer Parameter &ndash;list-devices</td>
      </tr>
  </tbody>
</table>]]></content:encoded>
    </item>
    
    <item>
      <title>sed</title>
      <link>https://www.rainerrose.de/docs/linux/sed/</link>
      <pubDate>Sat, 02 Sep 2023 23:14:31 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/sed/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Textersetzungswerkzeug <code>sed</code> Anwendungsbeispiele</p>

<h2 id="hinzufügen-einer-zeile" data-numberify>Hinzufügen einer Zeile<a class="anchor ms-1" href="#hinzufügen-einer-zeile"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sed -i <span class="s1">&#39;8i Dies in Zeile 8 hinzufügen&#39;</span> FILE
</span></span></code></pre></div>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Textersetzungswerkzeug <code>sed</code> Anwendungsbeispiele</p>

<h2 id="hinzufügen-einer-zeile" data-numberify>Hinzufügen einer Zeile<a class="anchor ms-1" href="#hinzufügen-einer-zeile"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sed -i <span class="s1">&#39;8i Dies in Zeile 8 hinzufügen&#39;</span> FILE
</span></span></code></pre></div>
<h2 id="mehrere-leerzeichen--spaces-ersetzen" data-numberify>Mehrere Leerzeichen / Spaces ersetzen<a class="anchor ms-1" href="#mehrere-leerzeichen--spaces-ersetzen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;foo     bar baz&#34;</span> <span class="p">|</span> sed -e <span class="s1">&#39;s/  */ /g&#39;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">foo bar baz
</span></span></code></pre></div>
<h2 id="mehrere-leerzeichen--spaces-löschen" data-numberify>Mehrere Leerzeichen / Spaces löschen<a class="anchor ms-1" href="#mehrere-leerzeichen--spaces-löschen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;foo     bar baz&#34;</span> <span class="p">|</span> sed <span class="s1">&#39;s/[[:space:]]//g&#39;</span>
</span></span></code></pre></div>
<h2 id="löschen-der-dritten-zeile-in-einer-datei" data-numberify>Löschen der dritten Zeile in einer Datei<a class="anchor ms-1" href="#löschen-der-dritten-zeile-in-einer-datei"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sed <span class="s1">&#39;3d&#39;</span> &lt;datei&gt;
</span></span></code></pre></div>
<h2 id="löschen-einer-zeile-mit-pattern-matching" data-numberify>Löschen einer Zeile mit Pattern-Matching<a class="anchor ms-1" href="#löschen-einer-zeile-mit-pattern-matching"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sed -i <span class="s1">&#39;/textpattern/d&#39;</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">DATEI</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span></code></pre></div>
<h2 id="in-einer-datei-ersetzen" data-numberify>in einer Datei ersetzen<a class="anchor ms-1" href="#in-einer-datei-ersetzen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sed -i <span class="s1">&#39;s/foo/bar/&#39;</span> &lt;datei&gt;
</span></span></code></pre></div>
<h2 id="in-einer-datei-ersetzen-mit-backup" data-numberify>in einer Datei ersetzen, mit Backup<a class="anchor ms-1" href="#in-einer-datei-ersetzen-mit-backup"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sed -i.bak <span class="s1">&#39;s/foo/bar/&#39;</span> &lt;datei&gt;
</span></span></code></pre></div>
<h2 id="mit-umgebungsvariablen" data-numberify>mit Umgebungsvariablen<a class="anchor ms-1" href="#mit-umgebungsvariablen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sed <span class="s1">&#39;s/foo/&#39;</span><span class="s2">&#34;</span><span class="nv">$BAR</span><span class="s2">&#34;</span><span class="s1">&#39;/&#39;</span>
</span></span></code></pre></div>
<h2 id="changelog" data-numberify>Changelog<a class="anchor ms-1" href="#changelog"></a></h2>
<table>
  <thead>
      <tr>
          <th>Datum</th>
          <th>Änderung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>12.03.2026</td>
          <td><code>[[:space:]]</code> Trick</td>
      </tr>
  </tbody>
</table>]]></content:encoded>
    </item>
    
    <item>
      <title>vim</title>
      <link>https://www.rainerrose.de/docs/linux/vim/</link>
      <pubDate>Thu, 04 May 2023 17:39:42 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/vim/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zum Editor vim.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zum Editor vim.</p>
<ul>
<li><code>set ignorecase</code> Groß-/Kleinschreibung egal</li>
<li><code>set smartcase</code> wenn Pattern kleingeschrieben: Groß-/Kleinschreibung egal, sonst <em>case sensitive</em></li>
<li><code>:set relativenumber</code> relative Zeilennummern</li>
<li><code>:set number</code> Zeilennummern ein</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-vim" data-lang="vim"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="k">colorscheme</span> <span class="nx">darkblue</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="nx">nmap</span> <span class="p">&lt;</span><span class="nx">F8</span><span class="p">&gt;</span> :<span class="nx">TagbarToggle</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nx">nmap</span> <span class="p">&lt;</span><span class="nx">F9</span><span class="p">&gt;</span> :<span class="p">!</span><span class="nx">ctags</span> *
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="k">set</span> <span class="nx">backup</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="c">&#34; automatically indent lines (default)</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="c">&#34; set noautoindent</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="k">set</span> <span class="nx">autoindent</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="c">&#34; select case-insenitiv search (not default) set noignorecase</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="c">&#34; Suchergebnisse hervorheben</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="k">set</span> <span class="nx">hlsearch</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="c">&#34; show cursor line and column in the status line set ruler</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="c">&#34; show matching brackets</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="k">set</span> <span class="nx">showmatch</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="c">&#34; show existing tab with 4 spaces width</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="k">set</span> <span class="nx">tabstop</span><span class="p">=</span><span class="m">4</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="c">&#34; when indenting with &#39;&gt;&#39;, use 4 spaces width set shiftwidth=4 </span>
</span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="c">&#34; On pressing tab, insert 4 spaces set expandtab</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="ln">26</span><span class="cl"><span class="c">&#34; display mode INSERT/REPLACE/...</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="k">set</span> <span class="nx">showmode</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="c">&#34; changes special characters in search patterns (default)</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl"><span class="c">&#34; set magic</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="ln">32</span><span class="cl"><span class="c">&#34; Required to be able to use keypad keys and map missed escape sequences set esckeys</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">
</span></span><span class="line"><span class="ln">34</span><span class="cl">
</span></span><span class="line"><span class="ln">35</span><span class="cl"><span class="k">syntax</span> <span class="nx">on</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>AlmaLinux</title>
      <link>https://www.rainerrose.de/docs/linux/almalinux/</link>
      <pubDate>Mon, 17 Apr 2023 23:25:49 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/almalinux/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Ich sehe mir gerade eine weitere Linux-Distribution an: AlmaLinux.</p>
<p>Auf ein paar Stolpersteine bin ich schon gestoßen:</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Ich sehe mir gerade eine weitere Linux-Distribution an: AlmaLinux.</p>
<p>Auf ein paar Stolpersteine bin ich schon gestoßen:</p>

<h2 id="moreutils-package-broken" data-numberify>Moreutils package broken<a class="anchor ms-1" href="#moreutils-package-broken"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">dnf install -y moreutils
</span></span></code></pre></div><p>fällt auf die Nase.</p>

<h3 id="reparatur" data-numberify>Reparatur<a class="anchor ms-1" href="#reparatur"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">dnf install --enablerepo<span class="o">=</span>crb moreutils
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>Docker Registry</title>
      <link>https://www.rainerrose.de/docs/linux/docker-registry/</link>
      <pubDate>Sun, 05 Feb 2023 23:13:34 +0100</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/docker-registry/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Docker-Images lassen sich in verschiedene Registrys legen.</p>

<h2 id="beispiel-gitlab" data-numberify>Beispiel: GitLab<a class="anchor ms-1" href="#beispiel-gitlab"></a></h2>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Docker-Images lassen sich in verschiedene Registrys legen.</p>

<h2 id="beispiel-gitlab" data-numberify>Beispiel: GitLab<a class="anchor ms-1" href="#beispiel-gitlab"></a></h2>
<ol>
<li>Zuerst <a href="https://tools.rainerrose.de/redirect.php?id=16" target="_blank" rel="noopener noreferrer">Token erstellen<i class="fas fa-external-link-square-alt ms-1"></i></a> im Gitlab</li>
<li>Sinnvollen <em>token name</em> vergeben</li>
<li>Scopes ankreuzen
<ul>
<li><input checked="" disabled="" type="checkbox"> read_registry</li>
<li><input checked="" disabled="" type="checkbox"> write_registry</li>
</ul>
</li>
<li>Ablaufdatum wählen</li>
<li>Tocken erstellen</li>
<li>Eingabe-Box unterhalb <code>Your new personal access token</code> unbedingt kopieren und in einen Passwort-Manager ablegen</li>
</ol>

<h3 id="registry-login" data-numberify>Registry Login<a class="anchor ms-1" href="#registry-login"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker login registry.gitlab.com -u rainerrose
</span></span></code></pre></div><p>Das dann abgefrage Passwor entspricht dem generierte Tocken.</p>

<h2 id="image-bauen" data-numberify>Image bauen<a class="anchor ms-1" href="#image-bauen"></a></h2>

<h3 id="ohne-tag" data-numberify>Ohne Tag<a class="anchor ms-1" href="#ohne-tag"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker build -t registry.gitlab.com/rainerrose/&lt;projekt-name&gt; .
</span></span></code></pre></div>
<h3 id="mit-tag" data-numberify>Mit Tag<a class="anchor ms-1" href="#mit-tag"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker build -t registry.gitlab.com/rainerrose/&lt;projekt-name&gt;:1.1 .
</span></span></code></pre></div>
<h2 id="hochladen" data-numberify>Hochladen<a class="anchor ms-1" href="#hochladen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker push <span class="o">[</span>OPTIONS<span class="o">]</span> NAME<span class="o">[</span>:TAG<span class="o">]</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker push registry.gitlab.com/rainerrose/&lt;projekt-name&gt; --all-tags
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>LVM</title>
      <link>https://www.rainerrose.de/docs/linux/lvm/</link>
      <pubDate>Sun, 05 Feb 2023 23:39:46 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/lvm/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>HowTos zum Umgang des Logical Volume Manager (LVM)</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>HowTos zum Umgang des Logical Volume Manager (LVM)</p>

<h2 id="vorwissen-und-ausführliche-doku" data-numberify>Vorwissen und ausführliche Doku<a class="anchor ms-1" href="#vorwissen-und-ausführliche-doku"></a></h2>
<p>Mehr Doku in c&rsquo;t 2005 Heft 25 Seiten 232-236 &ldquo;Teile und herrsche&rdquo; oder online
im <a href="https://tools.rainerrose.de/redirect.php?id=18" target="_blank" rel="noopener noreferrer">wiki.ubuntuusers.de<i class="fas fa-external-link-square-alt ms-1"></i></a>.</p>

<h2 id="partitionen" data-numberify>Partitionen<a class="anchor ms-1" href="#partitionen"></a></h2>

<blockquote class="alert alert-warning" role="alert">
    <p class="alert-heading fw-bold">
      <i class="fas fa-exclamation-circle me-2"></i>Tipp
    </p>
    <p>Vorher Gedanken machen wie erweitert werden soll.</p>
</blockquote>

<h3 id="a-platz-ranhängen" data-numberify>a) Platz ranhängen<a class="anchor ms-1" href="#a-platz-ranhängen"></a></h3>
<p>Platten unter ESX können &quot;physikalisch&quot; <strong>nur</strong> größer gemacht werden.
Drangehängt ist dran, geht auch nicht mehr weg.</p>
<ol>
<li>Platte rescan (siehe unten)</li>
<li>Partition erstellen mittels <code>parted</code></li>
<li>Volume Gruppe und / oder Logical Volume vergrößern</li>
</ol>

<blockquote class="alert alert-success" role="alert">
    <p class="alert-heading fw-bold">
      <i class="fas fa-lightbulb me-2"></i>Tipp
    </p>
    <p>Sind alle 4 Partitionen erstellt und keine weitere mehr möglich ?
<a href="https://tools.rainerrose.de/redirect.php?id=19" target="_blank" rel="noopener noreferrer">GParted-Live-CD<i class="fas fa-external-link-square-alt ms-1"></i></a> einlegen, ggf.
Boot-Reihenfolge umstellen, Distribution booten und Partition
vergrößern.</p>
</blockquote>

<h3 id="b-neue-platte" data-numberify>b) neue Platte<a class="anchor ms-1" href="#b-neue-platte"></a></h3>
<p>Ggf. &quot;<em>echte</em>&quot; <strong>zusätzliche</strong> ranhängen, z.B. bei max. 4 Partitionen
bei DOS-MBR-Format unter BIOS statt UEFI. Diese können dann als Physical
Volume in die Volume-Gruppe aufgenommen werden.</p>
<p>Hierbei entsteht ein neues Device z.B. <code>/dev/sdb</code>, welches dann wieder
partitioniert werden kann. Es entsteht unter ESX dann eine neue
VMDK-Datei.</p>

<h2 id="festplatte-rescan" data-numberify>Festplatte rescan<a class="anchor ms-1" href="#festplatte-rescan"></a></h2>
<p>Lässt sich easy online / live machen</p>

<blockquote class="alert alert-warning" role="alert">
    <p class="alert-heading fw-bold">
      <i class="fas fa-exclamation-circle me-2"></i>Warnung
    </p>
    <p>Entsprechendes Device setzen <code>sda</code> !</p>
</blockquote>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="m">1</span> &gt; /sys/block/sda/device/rescan 
</span></span></code></pre></div><p>Alternativ (untested!)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="m">1</span> &gt; /sys/class/scsi_device/<span class="o">[</span>h:c:t:l<span class="o">]</span>/device/rescan
</span></span></code></pre></div><p>Dann sollte mit <code>parted -l</code></p>
<p>die neue Größe erkennbar sein</p>

<h2 id="physical-volume-initialisieren" data-numberify>Physical Volume initialisieren<a class="anchor ms-1" href="#physical-volume-initialisieren"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sudo pvcreate /dev/PARTITION
</span></span></code></pre></div>
<h2 id="volume-gruppe-vergrößern" data-numberify>Volume Gruppe vergrößern<a class="anchor ms-1" href="#volume-gruppe-vergrößern"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sudo vgextend GROUPNAME /dev/PARTITION
</span></span></code></pre></div>
<h2 id="logical-volume-vergrößern" data-numberify>Logical Volume vergrößern<a class="anchor ms-1" href="#logical-volume-vergrößern"></a></h2>

<h3 id="hinweis" data-numberify>Hinweis<a class="anchor ms-1" href="#hinweis"></a></h3>
<p>Bei <strong>Offline</strong>-Vergrößerungen vorher alle Prozesse beenden, die auf den
verwendeten Mountpoint (z.B. <code>/daten</code>) zugreifen (cronjobs nicht
vergessen).</p>

<blockquote class="alert alert-success" role="alert">
    <p class="alert-heading fw-bold">
      <i class="fas fa-lightbulb me-2"></i>Tipp
    </p>
    <p>Welche Dateisysteme kann ich wann vergrößern, siehe
<a href="https://tools.rainerrose.de/redirect.php?id=20" target="_blank" rel="noopener noreferrer">wiki.ubuntuusers.de<i class="fas fa-external-link-square-alt ms-1"></i></a></p>
</blockquote>

<h3 id="langer-weg" data-numberify>langer Weg<a class="anchor ms-1" href="#langer-weg"></a></h3>
<pre><code>$ lvs|grep daten
  daten   vg01 -wi-ao---- 600,00g
$ umount /daten
$ lvresize -v -L +200G /dev/vg01/daten
$ fsck.ext4 -f /dev/vg01/daten
$ lvs | grep daten
  daten   vg01 -wi-a----- 800,00g
$ resize2fs /dev/vg01/daten 800G
$ mount /daten
$ df -h /daten
Dateisystem            Größe Benutzt Verf. Verw% Eingehängt auf
/dev/mapper/vg01-daten  788G    540G  208G   73% /daten
</code></pre>

<h2 id="kurzer-weg" data-numberify>kurzer Weg<a class="anchor ms-1" href="#kurzer-weg"></a></h2>
<pre><code>$ lvs|grep daten
  daten   vg01 -wi-ao---- 600,00g
$ umount /daten
$ fsck.ext4 -f /dev/vg01/daten
$ lvextend --resizefs -v -L +200G /dev/vg01/daten
$ lvs | grep daten
  daten   vg01 -wi-a----- 800,00g
$ mount /daten
$ df -h /daten
Dateisystem            Größe Benutzt Verf. Verw% Eingehängt auf
/dev/mapper/vg01-daten  788G    540G  208G   73% /daten
</code></pre>

<h2 id="xfs-partition-mit-lvm-vergrößern" data-numberify>XFS-Partition mit LVM vergrößern<a class="anchor ms-1" href="#xfs-partition-mit-lvm-vergrößern"></a></h2>

<blockquote class="alert alert-success" role="alert">
    <p class="alert-heading fw-bold">
      <i class="fas fa-lightbulb me-2"></i>Tipp
    </p>
    <p>Geht online.</p>
</blockquote>
<pre><code># lvextend -L+40G /dev/vg0/var
# xfs_growfs /var
</code></pre>

<blockquote class="alert alert-warning" role="alert">
    <p class="alert-heading fw-bold">
      <i class="fas fa-question-circle me-2"></i>Achtung!
    </p>
    <p><code>XFS</code>-Filesysteme können nur <strong>vergrößert</strong>, nicht verkleinert werden.</p>
</blockquote>

<h2 id="logical-volume-erstellen" data-numberify>Logical Volume erstellen<a class="anchor ms-1" href="#logical-volume-erstellen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">lvcreate -L 2G -n VOLUMENAME GROUPNAME
</span></span></code></pre></div><p>Formatieren nicht vergesssen!</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">mkfs.ext4 -f /dev/vg01/musik
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>AWK</title>
      <link>https://www.rainerrose.de/docs/linux/awk/</link>
      <pubDate>Thu, 08 Dec 2022 22:50:57 +0100</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/awk/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zur Programmiersprache awk zur Bearbeitung oder Ausgabe von Textdateien</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zur Programmiersprache awk zur Bearbeitung oder Ausgabe von Textdateien</p>

<h2 id="beispieldatei" data-numberify>Beispieldatei<a class="anchor ms-1" href="#beispieldatei"></a></h2>
<p>Inhalt von der Datei <code>t.txt</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-t.txt" data-lang="t.txt"><span class="line"><span class="ln">1</span><span class="cl">1 2 3 4
</span></span><span class="line"><span class="ln">2</span><span class="cl">a1 b1 c1 d1
</span></span><span class="line"><span class="ln">3</span><span class="cl">a2 b2 c2 d2
</span></span></code></pre></div>
<h2 id="klassiker-erste-drei-spalten" data-numberify>Klassiker: erste drei Spalten<a class="anchor ms-1" href="#klassiker-erste-drei-spalten"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">awk <span class="s1">&#39;{print $1,$2,$3}&#39;</span> t.txt
</span></span></code></pre></div>
<h3 id="ausgabe" data-numberify>Ausgabe<a class="anchor ms-1" href="#ausgabe"></a></h3>
<pre><code>1 2 3
a1 b1 c1
a2 b2 c2
</code></pre>

<h2 id="alle-spalten-bis-auf-die-letzte" data-numberify>Alle Spalten bis auf die letzte<a class="anchor ms-1" href="#alle-spalten-bis-auf-die-letzte"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">awk <span class="s1">&#39;{for(i=1;i&lt;=NF-1;i++) printf $i&#34; &#34;; print &#34;&#34;}&#39;</span> t.txt
</span></span></code></pre></div>
<h3 id="ausgabe-1" data-numberify>Ausgabe<a class="anchor ms-1" href="#ausgabe-1"></a></h3>
<pre><code>1 2 3
a1 b1 c1
a2 b2 c2
</code></pre>]]></content:encoded>
    </item>
    
    <item>
      <title>grub</title>
      <link>https://www.rainerrose.de/docs/linux/grub/</link>
      <pubDate>Thu, 01 Dec 2022 22:48:01 +0100</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/grub/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zu Boot-Manager <code>grub2</code></p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zu Boot-Manager <code>grub2</code></p>

<h2 id="temporär-anderes-os-booten-beim-reboot" data-numberify>Temporär anderes OS booten beim Reboot<a class="anchor ms-1" href="#temporär-anderes-os-booten-beim-reboot"></a></h2>
<p>Ersten Eintrag beim nächsten Boot auswählen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">grub-reboot <span class="m">0</span>
</span></span></code></pre></div>
<h2 id="boote-beim-nächsten-mal-ins-bios--efi-setup" data-numberify>Boote beim Nächsten mal ins BIOS / EFI-Setup<a class="anchor ms-1" href="#boote-beim-nächsten-mal-ins-bios--efi-setup"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl reboot --firmware-setup
</span></span></code></pre></div>
<h3 id="alternativ" data-numberify>Alternativ<a class="anchor ms-1" href="#alternativ"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">efibootmgr -n &lt;int&gt;
</span></span></code></pre></div><p>Meist ist der Integer <code>0</code>.</p>

<h3 id="original-doku" data-numberify>Original-Doku<a class="anchor ms-1" href="#original-doku"></a></h3>
<p>Findet sich auf <a href="https://tools.rainerrose.de/redirect.php?id=44" target="_blank" rel="noopener noreferrer">www.freedesktop.org<i class="fas fa-external-link-square-alt ms-1"></i></a>.</p>

<h2 id="update-grub-config" data-numberify>Update Grub-Config<a class="anchor ms-1" href="#update-grub-config"></a></h2>
<p><code>update-grub</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">grub-mkconfig -o /boot/grub/grub.cfg
</span></span></code></pre></div>
<h2 id="changelog" data-numberify>Changelog<a class="anchor ms-1" href="#changelog"></a></h2>
<table>
  <thead>
      <tr>
          <th>Datum</th>
          <th>Änderung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>16.11.2024</td>
          <td>BIOS-EFI-Tipp und Doku-link hinzugefügt.</td>
      </tr>
      <tr>
          <td>23.12.2024</td>
          <td>Update Grub-Config</td>
      </tr>
  </tbody>
</table>]]></content:encoded>
    </item>
    
    <item>
      <title>XFCE</title>
      <link>https://www.rainerrose.de/docs/linux/xfce/</link>
      <pubDate>Thu, 01 Dec 2022 22:41:47 +0100</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/xfce/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zu XFCE</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Tipps und Tricks zu XFCE</p>

<h2 id="bildschirmlupe--zoom" data-numberify>Bildschirmlupe / Zoom<a class="anchor ms-1" href="#bildschirmlupe--zoom"></a></h2>
<p>Zum  Zoom rein und raus in XFCE</p>
<p><code>ALT</code>-Taste gedrückt halten und Mausrad drehen.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Vertical Mouse</title>
      <link>https://www.rainerrose.de/docs/linux/evoluent-verticalmouse-3/</link>
      <pubDate>Mon, 04 Apr 2022 23:12:30 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/evoluent-verticalmouse-3/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Es ist etwas fummelig, aber ich habe die <em>Evoluent VerticalMouse 3</em> unter Linux zum Laufen bekommen.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Es ist etwas fummelig, aber ich habe die <em>Evoluent VerticalMouse 3</em> unter Linux zum Laufen bekommen.</p>
<p>Für die ersten Konfigurationsschritte empfiehlt sich erstmal ein
Terminal, um die <code>Device-ID</code> herauszufinden.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">xinput list <span class="p">|</span> grep Evoluent
</span></span></code></pre></div><p>Beispiel-Ausgabe:</p>
<pre><code>Kingsis Peripherals Evoluent VerticalMouse 3 id=12 [slave pointer (2)]
</code></pre>
<p>Die ID <code>12</code> merken wir uns.</p>
<table>
  <thead>
      <tr>
          <th>Button</th>
          <th>ID</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Daumen</td>
          <td>9</td>
      </tr>
      <tr>
          <td>Zeigefinger</td>
          <td>1</td>
      </tr>
      <tr>
          <td>Mittelfinger</td>
          <td>8</td>
      </tr>
      <tr>
          <td>Ringfinger</td>
          <td>3</td>
      </tr>
      <tr>
          <td>Wheel Button</td>
          <td>2</td>
      </tr>
      <tr>
          <td>Wheel hoch</td>
          <td>4</td>
      </tr>
      <tr>
          <td>Wheel runter</td>
          <td>5</td>
      </tr>
      <tr>
          <td>Wheel links</td>
          <td>6</td>
      </tr>
      <tr>
          <td>Wheel rechts</td>
          <td>7</td>
      </tr>
  </tbody>
</table>
<table>
  <thead>
      <tr>
          <th>ID</th>
          <th>Button</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>Links-Klick</td>
      </tr>
      <tr>
          <td>2</td>
          <td>Mittel-Klick</td>
      </tr>
      <tr>
          <td>3</td>
          <td>Rechts-Klick</td>
      </tr>
      <tr>
          <td>4</td>
          <td>Rad hoch</td>
      </tr>
      <tr>
          <td>5</td>
          <td>Rad runter</td>
      </tr>
      <tr>
          <td>6</td>
          <td>Rad links</td>
      </tr>
      <tr>
          <td>7</td>
          <td>Rad rechts</td>
      </tr>
      <tr>
          <td>8</td>
          <td>Daumen 1</td>
      </tr>
      <tr>
          <td>9</td>
          <td>Daumen 2</td>
      </tr>
      <tr>
          <td>10</td>
          <td>Extra Button 7</td>
      </tr>
      <tr>
          <td>11</td>
          <td>Extra Button 8</td>
      </tr>
  </tbody>
</table>
<p>Im Grunde zählt man stumpf die Buttons auf der Maus von links nach
rechts.</p>
<p>Ich habe es jetzt so gesetzt, dass der schmale Button, wo der Daumen
sitzt, der &ldquo;Zurück&rdquo;-Button ist.</p>
<p>Der Linksklick liegt auf dem Zeigefinger, Rechtsklick auf dem
Mittelfinger, das &ldquo;Maus-Rad drücken&rdquo; sowie der Ringfinger ist ein
Mittel-Klick. Den Rest habe ich beim Standard belassen (also Maus-Rad
rauf und runter belassen).</p>
<p>Jetzt erst einmal ausprobieren.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1">#              input id: 1 2 3 4 5 6 7 8 9</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">xinput set-button-map <span class="m">12</span> <span class="m">1</span> <span class="m">2</span> <span class="m">3</span> <span class="m">4</span> <span class="m">5</span> <span class="m">6</span> <span class="m">7</span> <span class="m">2</span> <span class="m">8</span>
</span></span></code></pre></div><p>Damit es den nächsten Reboot überlebt noch in die X11-Konfig übernehmen.</p>
<p>Zuerst einmal die USB-ID herausfinden</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">lsusb <span class="p">|</span> grep Evoluent
</span></span></code></pre></div><p><code>Bus 003 Device 005: ID 1a7c:0068 Evoluent VerticalMouse 3</code></p>
<p>Dieses jetzt festhalten:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sudo touch /usr/share/X11/xorg.conf.d/90-evoluent.conf
</span></span><span class="line"><span class="ln">2</span><span class="cl">sudo vi /usr/share/X11/xorg.conf.d/90-evoluent.conf
</span></span></code></pre></div><p>Hierbei jeweils die ID <code>1a7c:0068</code> anpassen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="ln">1</span><span class="cl">Section &#34;InputClass&#34;
</span></span><span class="line"><span class="ln">2</span><span class="cl">Identifier &#34;Evoluent&#34;
</span></span><span class="line"><span class="ln">3</span><span class="cl">MatchUSBID &#34;1a7c:0068&#34;
</span></span><span class="line"><span class="ln">4</span><span class="cl">Option &#34;ButtonMapping&#34; &#34;1 2 3 4 5 6 7 2 8&#34;
</span></span><span class="line"><span class="ln">5</span><span class="cl">EndSection
</span></span></code></pre></div><p>Fertig. Das war&rsquo;s. :-D</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Ansible</title>
      <link>https://www.rainerrose.de/docs/linux/ansible/</link>
      <pubDate>Wed, 26 Jan 2022 17:22:53 +0100</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/ansible/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Ansible Notizen und Code-Stücke, die ich immer wieder brauche &amp; vergesse.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Ansible Notizen und Code-Stücke, die ich immer wieder brauche &amp; vergesse.</p>

<h2 id="ansible-vault" data-numberify>Ansible-Vault<a class="anchor ms-1" href="#ansible-vault"></a></h2>
<p>Mit dem Tool können Passwörter verschlüsselt im Verzeichnis-Baum des
Ansible-Playbooks bzw. des Ansible-Inventories liegen.</p>
<p>Allerdings hat die Ansible-Yaml-Loading-Engine hat einen Detector, dass
alles was nach Vault aussieht, on-the-lfy decrypted wird - falls es den
Key hat. Danach sieht das Ansible nur noch den Klar-Text-YAML-Content
(ohne irgendein Crypto)</p>
<p>Sofern man in seiner <code>ansible.cfg</code> die Option</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="ln">1</span><span class="cl"><span class="na">log_path</span><span class="o">=</span><span class="s">~/log/ansible.log</span>
</span></span></code></pre></div><p>gesetzt hat, landen diese Klartext-Informationen sogar im Logfile -
unschön.</p>
<p>Um das zu vermeiden, kann die Option no_log: true gesetzt werden.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln">1</span><span class="cl"><span class="w">    </span>- <span class="nt">debug</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="w">        </span><span class="nt">msg</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Geheim {{ansible_host}} &#34;</span><span class="w">
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="w">      </span><span class="nt">no_log</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span></code></pre></div><p>Danach sieht der Output nur noch folgendermaßen aus:</p>
<pre><code>PLAY RECAP *****************************************************************************************************************************************************
meinServerName              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
</code></pre>
<p>Alternativ kann das Passwort auch während des Playbook-Laufs interaktiv
angefragt werden.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln">1</span><span class="cl"><span class="w">  </span><span class="nt">vars_prompt</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">api_key</span><span class="w">
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="w">      </span><span class="nt">prompt</span><span class="p">:</span><span class="w"> </span><span class="l">Enter the API key</span><span class="w">
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="w">  </span><span class="nt">tasks</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Ensure API key is present in config file</span><span class="w">
</span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.lineinfile</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="w">        </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/app/configuration.ini</span><span class="w">
</span></span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="w">        </span><span class="nt">line</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;API_KEY={{ api_key }}&#34;</span><span class="w">
</span></span></span></code></pre></div><p>Überhaupt ist die interaktive Variante eine coole Sache, um z.B.
abzufragen, ob gewisse Dinge in Playbooks passieren sollen (z.B. Restart
j/n von $DINGEN nach Updates)</p>
<p>Mehr Doku wie z.B: die Einbindung von Passwort-Managern hier:
<a href="https://tools.rainerrose.de/redirect.php?id=17" target="_blank" rel="noopener noreferrer">https://www.redhat.com/sysadmin/ansible-playbooks-secrets<i class="fas fa-external-link-square-alt ms-1"></i></a></p>]]></content:encoded>
    </item>
    
    <item>
      <title>Screen</title>
      <link>https://www.rainerrose.de/docs/linux/screen/</link>
      <pubDate>Mon, 20 Dec 2021 23:03:55 +0100</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/screen/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Tipps zum Tool <code>screen</code>.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Tipps zum Tool <code>screen</code>.</p>

<h2 id="starten-einer-neuen-sitzung" data-numberify>Starten einer neuen Sitzung<a class="anchor ms-1" href="#starten-einer-neuen-sitzung"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">screen -DRS sessionName
</span></span></code></pre></div><p>Credits: Die Parameter <code>-D</code> und <code>-R</code> habe ich in <a href="https://tools.rainerrose.de/redirect.php?id=43" target="_blank" rel="noopener noreferrer">Mariannes Blog-Artikel<i class="fas fa-external-link-square-alt ms-1"></i></a>  kennen gelernt.</p>

<h2 id="trennen" data-numberify>Trennen<a class="anchor ms-1" href="#trennen"></a></h2>
<p><code>Strg</code> + <code>A</code> + <code>D</code></p>

<h2 id="nimmt-die-sitzung-wieder-auf" data-numberify>Nimmt die Sitzung wieder auf<a class="anchor ms-1" href="#nimmt-die-sitzung-wieder-auf"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">screen -r &lt;sessionName&gt;
</span></span></code></pre></div>
<h2 id="auflisten" data-numberify>Auflisten<a class="anchor ms-1" href="#auflisten"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">screen -ls 
</span></span></code></pre></div>
<h2 id="trennen-wenn-hängen-geblieben" data-numberify>Trennen, wenn hängen geblieben<a class="anchor ms-1" href="#trennen-wenn-hängen-geblieben"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">screen -d sessionName 
</span></span></code></pre></div>
<h2 id="an-mehreren-computern-gleichzeitig-anzeigen" data-numberify>An mehreren Computern gleichzeitig anzeigen<a class="anchor ms-1" href="#an-mehreren-computern-gleichzeitig-anzeigen"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">screen -rx sessionName 
</span></span></code></pre></div>
<h2 id="navigieren" data-numberify>Navigieren<a class="anchor ms-1" href="#navigieren"></a></h2>
<p><strong>Zuerst</strong> den <code>Copy</code>-Mode betreten mit <code>CTRL-A</code> gefolgt von <code>[</code>.</p>
<table>
  <thead>
      <tr>
          <th>Kürzel</th>
          <th>Bedeutung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>CTRL-u</code></td>
          <td>Bildschirmseite nach oben / <code>up</code> (Cursorposition beibehalten)</td>
      </tr>
      <tr>
          <td><code>CTRL-d</code></td>
          <td>Bildschirmseite nach unten / <code>down</code> (Cursorposition beibehalten)</td>
      </tr>
      <tr>
          <td><code>CTRL-b</code></td>
          <td>Bildschirmseite nach oben</td>
      </tr>
      <tr>
          <td><code>CTRL-f</code></td>
          <td>Bildschirmseite nach unten</td>
      </tr>
  </tbody>
</table>
<p>Ansonsten viel wie in <code>vi</code>:</p>
<table>
  <thead>
      <tr>
          <th>Kürzel</th>
          <th>Bedeutung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>&lt;zahl&gt;%</code></td>
          <td>Springt zu <code>&lt;zahl&gt;</code> prozentual zum Buffer</td>
      </tr>
      <tr>
          <td><code>/&lt;pattern&gt;</code></td>
          <td>Sucht nach <code>&lt;Pattern&gt;</code></td>
      </tr>
      <tr>
          <td><code>/&lt;pattern&gt;</code></td>
          <td>Rückwärtssuche</td>
      </tr>
      <tr>
          <td><code>w</code></td>
          <td>Ein Wort <strong>w</strong>eiterspringen</td>
      </tr>
      <tr>
          <td><code>b</code></td>
          <td>Ein Wort zurück aka <code>back</code></td>
      </tr>
      <tr>
          <td><code>g</code></td>
          <td>Zum Be<strong>g</strong>inn des Buffers springen</td>
      </tr>
      <tr>
          <td><code>$</code></td>
          <td>Zum Zeilenende springen</td>
      </tr>
      <tr>
          <td><code>^</code></td>
          <td>Zum Zeilenanfang springen</td>
      </tr>
  </tbody>
</table>
<p>Gibt noch mehr, Rest kann sich eh keiner merken ;-)</p>

<h2 id="changelog" data-numberify>Changelog<a class="anchor ms-1" href="#changelog"></a></h2>
<table>
  <thead>
      <tr>
          <th>Datum</th>
          <th>Änderung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>31.10.2024</td>
          <td>Parameter <code>-D</code> und <code>-R</code> hinzugefügt beim Abschnitt &ldquo;Starten einer neuen Sitzung&rdquo;</td>
      </tr>
      <tr>
          <td>27.03.2025</td>
          <td>Neuer Abschnitt: Navigation im Screen Copy-Mode</td>
      </tr>
  </tbody>
</table>]]></content:encoded>
    </item>
    
    <item>
      <title>jq</title>
      <link>https://www.rainerrose.de/docs/linux/jq/</link>
      <pubDate>Tue, 19 Oct 2021 21:22:30 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/jq/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p><code>jq</code> ist ein kleiner und flexibler command-line JSON processor.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p><code>jq</code> ist ein kleiner und flexibler command-line JSON processor.</p>

<h2 id="beispiel" data-numberify>Beispiel<a class="anchor ms-1" href="#beispiel"></a></h2>

<h3 id="config-file-auslesen" data-numberify>Config-File auslesen<a class="anchor ms-1" href="#config-file-auslesen"></a></h3>
<p>Pro System ein Pfad. Unterschied zwischen Prod und Dev inkl.
Umgebungsvariablen auslesen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="cp">#!/usr/bin/bash
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="cp"></span><span class="nv">CONFIGFILE</span><span class="o">=</span><span class="s2">&#34;config.rc.json&#34;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nv">ZIELSYTEM</span><span class="o">=</span><span class="s2">&#34;prodsysteme&#34;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nv">ZIELSYTEM</span><span class="o">=</span><span class="s2">&#34;devsysteme&#34;</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="k">for</span> SystemArt in <span class="k">$(</span>jq -r <span class="s2">&#34;.</span><span class="nv">$ZIELSYTEM</span><span class="s2">[] | .name&#34;</span> <span class="si">${</span><span class="nv">CONFIGFILE</span><span class="si">}</span> <span class="k">)</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="k">do</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl">    <span class="nv">PFAD</span><span class="o">=</span><span class="k">$(</span>jq -r --arg SystemArt <span class="s2">&#34;</span><span class="si">${</span><span class="nv">SystemArt</span><span class="si">}</span><span class="s2">&#34;</span> <span class="s2">&#34;.</span><span class="nv">$ZIELSYTEM</span><span class="s2">[] | select (.name==\&#34;</span><span class="nv">$SystemArt</span><span class="s2">\&#34;)| .pfad &#34;</span> <span class="nv">$CONFIGFILE</span> <span class="k">)</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;system </span><span class="nv">$SystemArt</span><span class="s2"> auf </span><span class="nv">$PFAD</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="ln">9</span><span class="cl"><span class="k">done</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">    <span class="nt">&#34;devsysteme&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">            <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;local&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">            <span class="nt">&#34;pfad&#34;</span><span class="p">:</span> <span class="s2">&#34;/mnt&#34;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">            <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;test1&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">            <span class="nt">&#34;pfad&#34;</span><span class="p">:</span> <span class="s2">&#34;/mnt_gibt_es_nicht&#34;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">    <span class="nt">&#34;prodsysteme&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">            <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;prod&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">            <span class="nt">&#34;pfad&#34;</span><span class="p">:</span> <span class="s2">&#34;/mnt&#34;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>RasPi/Kodi/LibreELEC</title>
      <link>https://www.rainerrose.de/docs/linux/kodi-raspi-libreelec/</link>
      <pubDate>Thu, 24 Sep 2020 23:20:43 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/kodi-raspi-libreelec/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Anleitungen, Kochrezepte und HowTos für RasPi / Kodi / LibreELEC</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Anleitungen, Kochrezepte und HowTos für RasPi / Kodi / LibreELEC</p>

<h2 id="permanenter-mount-vom-kodi-auf-das-nas" data-numberify>Permanenter Mount vom Kodi auf das NAS<a class="anchor ms-1" href="#permanenter-mount-vom-kodi-auf-das-nas"></a></h2>

<h3 id="hinzufügen" data-numberify>Hinzufügen<a class="anchor ms-1" href="#hinzufügen"></a></h3>
<p>Mount-point erstellen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">mkdir /storage/mnt
</span></span></code></pre></div><p>Vorlagen liegen unter: <code>/storage/.config/system.d</code></p>
<p>Vorlage kopieren, wobei der verwendet Pfad sich im Namen der Start-Unit
wiederfinden muss. <code>/</code> sind durch <code>.</code> im Dateinamen zu ersetzen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">cd</span> /storage/.config/system.d/
</span></span><span class="line"><span class="ln">2</span><span class="cl">cp cifs.mount.sample storage-mnt.mount
</span></span></code></pre></div><p>Anpassen mittels Texteditor:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="ln">1</span><span class="cl"><span class="na">Description</span><span class="o">=</span><span class="s">Hier noch eine kurze Beschreibung rein</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="na">What</span><span class="o">=</span><span class="s">//192.0.2.10/samba/backups</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="na">Where</span><span class="o">=</span><span class="s">/storage/mnt</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="na">Options</span><span class="o">=</span><span class="s">username=benutzer,password=passwort</span>
</span></span></code></pre></div><p>Start-Unit ggf. permanent beim Booten mitstarten lassen</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl <span class="nb">enable</span> storage-mnt.mount
</span></span></code></pre></div><p>Unit starten und Verzeichnis mounten:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl start storage-mnt.mount
</span></span></code></pre></div><p>Fertig.</p>

<h3 id="entfernen" data-numberify>Entfernen<a class="anchor ms-1" href="#entfernen"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">systemctl stop storage-mnt.mount
</span></span><span class="line"><span class="ln">2</span><span class="cl">systemctl disable storage-mnt.mount
</span></span></code></pre></div><p>ggf. noch Datei löschen.</p>

<h2 id="backup-des-raspberry-pi--kodi--im-laufenden-betrieb" data-numberify>Backup des Raspberry Pi / Kodi / im laufenden Betrieb<a class="anchor ms-1" href="#backup-des-raspberry-pi--kodi--im-laufenden-betrieb"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">dd <span class="k">if</span><span class="o">=</span>/dev/mmcblk0 <span class="nv">bs</span><span class="o">=</span>1MB <span class="p">|</span> gzip &gt;  /storage/mnt/kodi-backup-<span class="k">$(</span>date +%Y%m%d-%H%M%S<span class="k">)</span>.img.gz
</span></span></code></pre></div><p><code>dd</code> Parameter <code>status=progress</code> wird von LibreELEC derzeit leider nicht
unterstützt.</p>

<h2 id="restore" data-numberify>Restore<a class="anchor ms-1" href="#restore"></a></h2>
<p>Zurückspielen kann man das mit:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">gunzip -c  /storage/mnt/kodi-backup-&lt;datum&gt;.img.gz <span class="p">|</span> dd <span class="nv">of</span><span class="o">=</span>/dev/mmcblk0
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>Zufallszahlen</title>
      <link>https://www.rainerrose.de/docs/linux/zufallszahlen/</link>
      <pubDate>Fri, 21 Aug 2020 18:54:20 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/zufallszahlen/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Bessere Zufallszahlen erzeugen.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Bessere Zufallszahlen erzeugen.</p>

<h2 id="problem" data-numberify>Problem<a class="anchor ms-1" href="#problem"></a></h2>
<p><code>/dev/random</code> erzeugt bekanntermaßen Zufallszahlen. Es bedient sich aus
den Block-Devices wie Tastatur, Maus, Festplatte. Bei einem Server ohne
diese Eingabegeräte oder auch bei virtuellen Server gibt's da wenig
Eingaben, mit der Folge, dass der Puffer recht schnell leer ist und dann
wieder gewartet werden muss (blockt).</p>
<p><code>/dev/urandom</code> liefert zwar schneller und kontinuierlicher
Zufallszahlen, ist aber nicht zu 100% sicher. Wenn dann Prozesse stehen,
weil auf Zufallszahlen gewartet wird, ist das blöd. Zudem saugt er erst
einmal den Pool von <code>/dev/random</code> leer - auch unschön.</p>

<h2 id="lösung" data-numberify>Lösung<a class="anchor ms-1" href="#lösung"></a></h2>
<p><code>Havege</code> (HArdware Volatile Entropy Gathering and Expansion) bedient
sich aus noch mehr Quellen (Caches, Pipelines, etc.) und damit konnte
ich für reichlich Zufallszahlen sorgen und der betroffene Prozess
wartete bisher nie wieder auf neue Zahlen - bisher habe ich gute
Erfahrungen damit gemacht.</p>
<p><code>Haveged</code> sollte sich in den Standard-Paket-Quellen der jeweiligen
Linux-Distribution finden lassen.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>ezmlm-idx</title>
      <link>https://www.rainerrose.de/docs/linux/ezmlm/</link>
      <pubDate>Sun, 12 Jul 2020 23:16:41 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/ezmlm/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Bevor es weg ist, hier nochmal als Archiv-Dokumentation</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Bevor es weg ist, hier nochmal als Archiv-Dokumentation</p>
<p>Die Mailingliste verwaltet sich komplett über speziell zusammengesetzte E-Mail-Adressen oder über shell-Befehle.</p>

<h2 id="mailinglisten-manager-ezmlm-idx" data-numberify>Mailinglisten-Manager ezmlm-idx<a class="anchor ms-1" href="#mailinglisten-manager-ezmlm-idx"></a></h2>
<p>Die Installation durchführen wie im
<a href="https://tools.rainerrose.de/redirect.php?id=14" target="_blank" rel="noopener noreferrer">uberlab<i class="fas fa-external-link-square-alt ms-1"></i></a> beschrieben.</p>
<p>Die Mailingliste verwaltet sich komplett über speziell zusammengesetzte
E-Mail-Adressen oder über shell-Befehle.</p>

<h2 id="mailingliste-anlegen" data-numberify>Mailingliste anlegen<a class="anchor ms-1" href="#mailingliste-anlegen"></a></h2>
<p>Erst mal ein Verzeichnis anlegen, wo die Verwaltungsverzeichnisse
gesammelt werden sollen</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">mkdir ~/mailinglisten
</span></span></code></pre></div>
<h2 id="optionen-für-die-liste" data-numberify>Optionen für die Liste<a class="anchor ms-1" href="#optionen-für-die-liste"></a></h2>

<blockquote class="alert alert-success" role="alert">
    <p class="alert-heading fw-bold">
      <i class="fas fa-lightbulb me-2"></i>Tipp
    </p>
    <p>Mehrere Schalter können <strong>zusammengefasst</strong> werden!</p>
</blockquote>
<p>statt <code>-s</code> <code>-u</code> <code>-r</code> <code>-A</code> geht auch <code>-surA</code></p>
<p><strong>Grob:</strong></p>
<ul>
<li>Großschreibung aktiviert</li>
<li>Kleinschreibung deaktiviert.</li>
</ul>

<h3 id="option" data-numberify>Option<a class="anchor ms-1" href="#option"></a></h3>
<table>
  <thead>
      <tr>
          <th>Schalter</th>
          <th>Erklärung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>-A</td>
          <td>kein Archiv.</td>
      </tr>
      <tr>
          <td>-a</td>
          <td>Archiv aufbauen (Default).</td>
      </tr>
      <tr>
          <td>-u</td>
          <td>private Liste; nur Listenteilnehmer dürfen an die Liste schreiben.</td>
      </tr>
  </tbody>
</table>

<h3 id="moderation" data-numberify>Moderation<a class="anchor ms-1" href="#moderation"></a></h3>
<table>
  <thead>
      <tr>
          <th>Schalter</th>
          <th>Erklärung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>-s</td>
          <td>Jede <strong>Anmeldung</strong> geht erst an eine*n Moderator*in. Siehe unten!</td>
      </tr>
      <tr>
          <td>-m</td>
          <td>Jede <strong>Nachricht</strong> geht erst an eine*n Moderator*in. Siehe unten!</td>
      </tr>
  </tbody>
</table>

<h3 id="nachrichtensammlungen" data-numberify>Nachrichtensammlungen<a class="anchor ms-1" href="#nachrichtensammlungen"></a></h3>
<table>
  <thead>
      <tr>
          <th>Schalter</th>
          <th>Erklärung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>-d</td>
          <td>Erstelle Sammlungen von Nachrichten für Digest-Abonnenten.</td>
      </tr>
  </tbody>
</table>

<h3 id="listeneigentümer" data-numberify>Listeneigentümer<a class="anchor ms-1" href="#listeneigentümer"></a></h3>
<table>
  <thead>
      <tr>
          <th>Schalter</th>
          <th>Erklärung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>-5 user@domain</td>
          <td>Erstelle Sammlungen von Nachrichten für Digest-Abonnenten.</td>
      </tr>
  </tbody>
</table>

<h3 id="mehrsprachigkeit" data-numberify>Mehrsprachigkeit<a class="anchor ms-1" href="#mehrsprachigkeit"></a></h3>
<table>
  <thead>
      <tr>
          <th>Schalter</th>
          <th>Erklärung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>-C ~/etc/ezmlm/de</td>
          <td>für die deutsche Spracheinstellung. Nur <strong>eine</strong> Sprache <strong>pro</strong> Mailingliste.</td>
      </tr>
  </tbody>
</table>

<h3 id="beispiel" data-numberify>Beispiel<a class="anchor ms-1" href="#beispiel"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ezmlm-make -s -u -5 owner@domain -C ~/etc/ezmlm/de ~/mailinglisten/mylist ~/.qmail-mylist mylist domain
</span></span></code></pre></div>
<blockquote class="alert alert-danger" role="alert">
    <p class="alert-heading fw-bold">
      <i class="fas fa-exclamation-triangle me-2"></i>Achtung
    </p>
    <p>Jetzt noch ein*e Moderator*in hinzufügen, sonst geht&rsquo;s nicht!</p>
</blockquote>

<h2 id="moderationen" data-numberify>Moderationen<a class="anchor ms-1" href="#moderationen"></a></h2>
<p>Ist nur notwendig, wenn Schalter <code>-m</code> oder <code>-s</code> gesetzt sind. Ist
technisch ein Abo was unterhalb vom Unterverzeichnis <code>mod</code> verwaltet
wird.</p>

<h3 id="moderatorin-hinzufügen" data-numberify>Moderator*in hinzufügen<a class="anchor ms-1" href="#moderatorin-hinzufügen"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ezmlm-sub ~/mailinglisten/mylist mod new_moderator@somedomain.tld
</span></span></code></pre></div>
<h3 id="moderatorin-löschen" data-numberify>Moderator*in löschen<a class="anchor ms-1" href="#moderatorin-löschen"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ezmlm-unsub ~/mailinglisten/mylist mod retired_moderator@someotherdomain.tld
</span></span></code></pre></div>
<h3 id="moderatorin-hinweis" data-numberify>Moderator*in Hinweis<a class="anchor ms-1" href="#moderatorin-hinweis"></a></h3>
<p>Moderator*innen können sich nicht selbst aus der Liste austragen. Die
Steuerung und Kommunikation erfolgt grundsätzlich per E-Mail. Es werden
kryptografischer Einmal-Codes versendet. Die Mail enthält zusätzliche
Infos und zwei Antwort-Adressen, eine zum Ablehnen, eine zum Genehmigen.</p>

<h2 id="abonnentenverwaltung" data-numberify>Abonnentenverwaltung<a class="anchor ms-1" href="#abonnentenverwaltung"></a></h2>

<h3 id="abonnenten-entfernen" data-numberify>Abonnenten entfernen<a class="anchor ms-1" href="#abonnenten-entfernen"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ezmlm-sub ~/mailinglisten/mylist user@otherdomain.org
</span></span></code></pre></div>
<h3 id="abonnenten-entfernen-1" data-numberify>Abonnenten entfernen<a class="anchor ms-1" href="#abonnenten-entfernen-1"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ezmlm-unsub ~/mailinglisten/mylist user@otherdomain.org
</span></span></code></pre></div>
<h3 id="abonnenten-anzeigen" data-numberify>Abonnenten anzeigen<a class="anchor ms-1" href="#abonnenten-anzeigen"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ezmlm-list ~/mailinglisten/mylist
</span></span></code></pre></div>
<h2 id="optionen-wieder-ändern" data-numberify>Optionen wieder ändern<a class="anchor ms-1" href="#optionen-wieder-ändern"></a></h2>
<p>Einstellungen können via <code>-+</code> hinzugefügt werden. Bestehende Optionen
bleiben erhalten! Soll die Moderation der Anmeldungen angeschaltet
werden:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ezmlm-make -+ -s ~/mailinglisten/mylist ~/.qmail-mylist mylist domain
</span></span></code></pre></div>
<h2 id="anpassungen-der-einzelnen-mailingliste" data-numberify>Anpassungen der einzelnen Mailingliste<a class="anchor ms-1" href="#anpassungen-der-einzelnen-mailingliste"></a></h2>

<h3 id="sprachdateien-anpassen" data-numberify>Sprachdateien anpassen<a class="anchor ms-1" href="#sprachdateien-anpassen"></a></h3>
<p>Einzelne Texte aus der aktuellen Sprache, lassen sich überschreiben.
Kopiert man die <code>~/etc/ezmlm/de/text/info</code> in das jeweilige
Unterverzeichnis der Mailingliste <code>~/mailinglisten/mylist/text/info</code> und
passt sie individuell an, so wird diese Version verwendet in der
Mailingliste verwendet.</p>

<h3 id="betreff-zeilen-präfix" data-numberify>Betreff-Zeilen Präfix<a class="anchor ms-1" href="#betreff-zeilen-präfix"></a></h3>
<p>Unabhängig vom <code>Mailing-List:</code>-Header, lässt sich ein Präfix in der
Betreff-Zeile der Mail setzen</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;[Meine erste Mailingliste]&#39;</span> &gt; ~/mailinglisten/mylist/prefix
</span></span></code></pre></div>
<h3 id="info-text" data-numberify>Info-Text<a class="anchor ms-1" href="#info-text"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">vi ~/mailinglisten/fbw1a/text/info
</span></span></code></pre></div>
<h2 id="bedienung-für-abonnenten" data-numberify>Bedienung für Abonnenten<a class="anchor ms-1" href="#bedienung-für-abonnenten"></a></h2>
<p>Grundsätzlich per E-Mail:</p>
<table>
  <thead>
      <tr>
          <th>Befehl</th>
          <th>Erläuterung</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>listenname@host</code></td>
          <td>Mail an die Mailingliste senden</td>
      </tr>
      <tr>
          <td><code>listenname-subscribe@host</code></td>
          <td>Mailingliste abonnieren</td>
      </tr>
      <tr>
          <td><code>listenname-unsubscribe@host</code></td>
          <td>Mailingliste abbestellen</td>
      </tr>
      <tr>
          <td><code>listenname-help@host</code></td>
          <td>Detaillierte Hilfe abrufen</td>
      </tr>
      <tr>
          <td><code>listenname-owner@host</code></td>
          <td>Listeneigentümer persönlich kontaktieren</td>
      </tr>
  </tbody>
</table>
<p>Der Hilfetext passt sich automatisch den vorgenommen
Konfigurationsoptionen an. Nur wenn es ein Archiv gibt, wird der
dazugehörige Hilfetext ausgegeben. Gibt es kein Archiv, werden die Infos
im Text der Hilfe-E-Mail weggelassen.</p>

<h2 id="liste-wieder-löschen" data-numberify>Liste wieder löschen<a class="anchor ms-1" href="#liste-wieder-löschen"></a></h2>
<p>Soll die Mailingliste <code>mylist</code> gelöscht werden, löscht man zunächst alle
<code>.qmail</code>-Dateien und danach das Datenverzeichnis</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">rm -f ~/.qmail-mylist ~/.qmail-mylist-*
</span></span><span class="line"><span class="ln">2</span><span class="cl">rm -rf ~/mailinglisten/mylist
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>qmail / netqmail</title>
      <link>https://www.rainerrose.de/docs/linux/qmail/</link>
      <pubDate>Thu, 28 May 2020 22:42:08 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/qmail/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Mails sortieren mit <code>qmail</code> auf Uberspace.de</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Mails sortieren mit <code>qmail</code> auf Uberspace.de</p>
<p>Ich nutze .qmail-Dateien auf meinem
<a href="https://tools.rainerrose.de/redirect.php?id=11" target="_blank" rel="noopener noreferrer">Uberspace<i class="fas fa-external-link-square-alt ms-1"></i></a>-Account.</p>
<p>Bei der Benutzung von <code>qmail</code> ist man nicht auf die einzelne Datei
festgelegt, sondern man kann weitere E-Mail-Adressen definieren. Trenner
ist hierbei das Minus <code>-</code> . Wird eine Datei mit Namen <code>.qmail-foo</code>
angelegt, so entspricht diese der E-Mail-Adresse
<code>foo@username.uberspace.de</code>.</p>
<p>Mail-Adressen sind so schnell angelegt: <code>.qmail-gewinnspiel</code> . Bei zu
viel Spam ist sie auch schnell wieder gelöscht.</p>
<p>Aufgeschaltete Domains bekommen dann dieselben Adressen verpasst;
allerdings gilt das für <strong>alle</strong> aufgeschalteten Domains:
<code>foo@&lt;aufgeschaltete-Domain-1&gt;</code> sowie
<code>foo@&lt;aufgeschaltete-Domain-Nummer-zwei&gt;</code></p>

<h2 id="stolperfallen" data-numberify>Stolperfallen<a class="anchor ms-1" href="#stolperfallen"></a></h2>
<div class="alert alert-warning" role="alert"><i class="alert-icon fas fa-fw fa-exclamation-triangle me-1"></i>

  Folgende Dinge sollten beachtet werden, um sich nicht das Leben schwer zu machen.
</div>

<ul>
<li><strong>Punkte</strong> als Trenner in E-Mail-Adressen sind aus
Sicherheitsgründen nicht erlaubt. Einfach im Dateinamen durch
Doppelpunkte ersetzen und es geht trotzdem. <code>.qmail-foo:bar</code> hört
also auf <code>foo.bar@username.uberspace.de</code></li>
<li>Dateinamen <strong>klein</strong> schreiben. <code>qmail-info</code> hört also nicht nur
<code>info@...</code>, sondern auch <code>INFO@...</code> ebenso wie <code>iNfO@...</code> usw.</li>
</ul>

<h2 id="lizenzhinweis" data-numberify>Lizenzhinweis<a class="anchor ms-1" href="#lizenzhinweis"></a></h2>
<p>Das Wissen hierzu ist schamlos aus dem
<a href="https://tools.rainerrose.de/redirect.php?id=12" target="_blank" rel="noopener noreferrer">Wiki<i class="fas fa-external-link-square-alt ms-1"></i></a> der
<a href="https://tools.rainerrose.de/redirect.php?id=11" target="_blank" rel="noopener noreferrer">Ubernauten<i class="fas fa-external-link-square-alt ms-1"></i></a> entnommen.
Aufgrund einer Produkteinstellung auf deren Seite, wird es dieses
vermutlich (Stand Mai 2020) nicht mehr lange geben und daher konserviere
ich hier Teile davon, die ich selbst öfters brauche, da qmail immer noch
auf U7 funktioniert, nur eben nicht dokumentiert ist.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Das /etc-Verzeichnis</title>
      <link>https://www.rainerrose.de/docs/linux/das-etc-verzeichnis/</link>
      <pubDate>Sat, 02 May 2020 15:26:59 +0100</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/das-etc-verzeichnis/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Notizen zum <code>/etc</code>-Verzeichnis.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Notizen zum <code>/etc</code>-Verzeichnis.</p>

<h2 id="issue" data-numberify>issue<a class="anchor ms-1" href="#issue"></a></h2>
<p>In diese Datei kann man einen Begrüßungstext schreiben, der bei jedem Konsolen-Login erscheint. Dort schreibt SuSE auch seinen Text:</p>
<p>Welcome to SuSE 6.1&hellip;</p>
<p>In der Datei <code>issue.net</code> steht hingegen der Text, der bei einem <code>telnet</code>, <code>ssh</code> etc. erscheinen soll.
inetd.conf</p>
<p>Dort kann man Dienste, die nicht nach außen angeboten werden einfach sperren. Wie z.B. <code>finger</code>, <code>ftp</code>, <code>telnet</code>, &hellip;</p>

<h2 id="mothd" data-numberify>mothd<a class="anchor ms-1" href="#mothd"></a></h2>
<p>Message of the Day</p>
<p>Dieser Text wird nach dem Login auf einer Konsole ausgegeben. Auch unter X gibt es so etwas: <code>xmessage</code>.</p>

<h2 id="syslogd-syslog-demon" data-numberify>syslogd (Syslog-Demon)<a class="anchor ms-1" href="#syslogd-syslog-demon"></a></h2>
<p>Der <code>syslogd</code> ist doch meist so nervtötend vorkonfiguriert, dass er andauernd ins Logfile schreibt, dass es nichts zu melden gibt!?</p>
<p>Mit der Option <code>-m 0</code> kann das abschalten werden.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Nostalgie-Script</title>
      <link>https://www.rainerrose.de/docs/linux/nostalgie-script/</link>
      <pubDate>Sat, 02 May 2020 15:25:17 +0100</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/nostalgie-script/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Nach diesem Script habe ich mich in den Anfängen meiner Linux-Zeit[^1) dumm und dämlich gesucht. Aus Nostalgie-Gründen (und vielleicht braucht man es ja doch noch mal, paste ich es hier nochmal rein. Alles andere kommt inzwischen ins git.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Nach diesem Script habe ich mich in den Anfängen meiner Linux-Zeit[^1) dumm und dämlich gesucht. Aus Nostalgie-Gründen (und vielleicht braucht man es ja doch noch mal, paste ich es hier nochmal rein. Alles andere kommt inzwischen ins git.</p>

<h2 id="aufgabe" data-numberify>Aufgabe<a class="anchor ms-1" href="#aufgabe"></a></h2>
<p>Es ersetzt in allen Dateien der angegebenen Verzeichnisse, das per
Parameter angegebene Suchmuster.</p>
<p>Gebraucht habe ich es mal für meinen HTML-Seiten wo ich &quot;EUR&quot; durch
&quot;€&quot; ersetzen wollte.</p>

<h2 id="anwendung" data-numberify>Anwendung<a class="anchor ms-1" href="#anwendung"></a></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">usage: gsed sed-command <span class="o">[</span>dir ...<span class="o">]</span>
</span></span></code></pre></div><p><code>sed-command</code> entspricht dabei den normalen <code>sed</code> Parameter. Siehe man-Page.</p>

<h3 id="einige-anwendungsbeispiele" data-numberify>Einige Anwendungsbeispiele:<a class="anchor ms-1" href="#einige-anwendungsbeispiele"></a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">gsub s/EUR/<span class="se">\\\&amp;</span>euro<span class="se">\;</span>/g <span class="c1"># ====&gt; EUR =&gt; &amp;euro;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">gsub s/<span class="se">\Ä</span>/<span class="se">\\\&amp;</span>Auml<span class="se">\;</span>/g <span class="c1"># ====&gt; Ä =&gt; &amp;Auml; (Groß- Kleinschreibung beachten !)</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">gsub s/<span class="se">\Ä</span>/<span class="se">\\\&amp;</span>Auml<span class="se">\;</span>/gi <span class="c1"># ====&gt; Ä =&gt; &amp;Auml; (Groß- Kleinschreibung egal !)</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">gsub s/<span class="se">\
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="se">\&lt;\\\/</span>td<span class="se">\&gt;</span>/<span class="se">\&lt;\\\/</span>td<span class="se">\&gt;</span>/g <span class="c1"># =====&gt; &lt;br&gt;&lt;/td&gt; =&gt; &lt;/td&gt;</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl">gsub s/http<span class="se">\:\\</span>/<span class="se">\\</span>/www./..<span class="se">\\</span>/img/g <span class="c1"># ====&gt; http://www. =&gt; /img</span>
</span></span></code></pre></div>
<h3 id="prinzip" data-numberify>Prinzip:<a class="anchor ms-1" href="#prinzip"></a></h3>
<p><code>s/raus/rein/g</code></p>

<h3 id="weiterer-tipp" data-numberify>Weiterer Tipp<a class="anchor ms-1" href="#weiterer-tipp"></a></h3>
<p>Und wenn das ersetzen nicht klappt ruhig mal öfters ein \ setzen, wie
bei:</p>
<ul>
<li><code>\\\&amp;</code></li>
<li><code>\\/</code></li>
</ul>

<h2 id="quell-code" data-numberify>Quell-Code<a class="anchor ms-1" href="#quell-code"></a></h2>
<div class="highlight" title="gsub.sh"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">    <span class="c1">#!/bin/sh</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">    <span class="c1">#</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="c1"># Global sed on all files contained in a list of directories.</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="c1"># The command</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="c1"># gsub cmd dir1 dir2 ...</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="c1"># will do</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">     
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="c1"># sed -e cmd</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">    <span class="c1"># on each file found in dir1, dir2, ...</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">    <span class="c1">#</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="c1"># If a file is changed, a backup copy is created.</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">    <span class="c1"># Files .*.swp and CVS directories are skipped.</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">     
</span></span><span class="line"><span class="ln">14</span><span class="cl">     
</span></span><span class="line"><span class="ln">15</span><span class="cl">    usage<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;usage: gsed sed-command [dir ...]&#34;</span> &gt;<span class="p">&amp;</span> <span class="m">2</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">    <span class="o">}</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">     
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="nv">tmp</span><span class="o">=</span>/var/tmp/gsub.<span class="nv">$$</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">     
</span></span><span class="line"><span class="ln">22</span><span class="cl">     
</span></span><span class="line"><span class="ln">23</span><span class="cl">    <span class="nb">trap</span> <span class="s2">&#34;rm -f </span><span class="nv">$tmp</span><span class="s2">&#34;</span> <span class="m">0</span> <span class="m">1</span> <span class="m">2</span> <span class="m">3</span> <span class="m">15</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">     
</span></span><span class="line"><span class="ln">25</span><span class="cl">    <span class="k">if</span> <span class="o">[</span> <span class="nv">$#</span> -lt <span class="m">1</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">    usage
</span></span><span class="line"><span class="ln">27</span><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">     
</span></span><span class="line"><span class="ln">29</span><span class="cl">     
</span></span><span class="line"><span class="ln">30</span><span class="cl">    <span class="nv">cmd</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">     
</span></span><span class="line"><span class="ln">32</span><span class="cl">    <span class="nb">shift</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">     
</span></span><span class="line"><span class="ln">34</span><span class="cl">    <span class="k">if</span> <span class="o">[</span> <span class="nv">$#</span> <span class="o">=</span> <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl">    <span class="nb">set</span> .
</span></span><span class="line"><span class="ln">36</span><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl">     
</span></span><span class="line"><span class="ln">38</span><span class="cl">     
</span></span><span class="line"><span class="ln">39</span><span class="cl">    find <span class="nv">$*</span> -name CVS -prune -o <span class="se">\(</span> -type f ! -name <span class="s1">&#39;*~&#39;</span> ! -name <span class="s1">&#39;.*.swp&#39;</span> -print <span class="se">\)</span> <span class="p">|</span>
</span></span><span class="line"><span class="ln">40</span><span class="cl">    <span class="k">while</span> <span class="nb">read</span> file<span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl">    sed -e <span class="s2">&#34;</span><span class="nv">$cmd</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$file</span><span class="s2">&#34;</span> &gt; <span class="s2">&#34;</span><span class="nv">$tmp</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="ln">42</span><span class="cl">    <span class="k">if</span> cmp -s <span class="s2">&#34;</span><span class="nv">$file</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$tmp</span><span class="s2">&#34;</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="ln">43</span><span class="cl">    :
</span></span><span class="line"><span class="ln">44</span><span class="cl">     
</span></span><span class="line"><span class="ln">45</span><span class="cl">    <span class="k">else</span>
</span></span><span class="line"><span class="ln">46</span><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;</span><span class="nv">$file</span><span class="s2">: patched&#34;</span> &gt;<span class="p">&amp;</span> <span class="m">2</span>
</span></span><span class="line"><span class="ln">47</span><span class="cl">    mv <span class="s2">&#34;</span><span class="nv">$file</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$file</span><span class="s2">~&#34;</span>
</span></span><span class="line"><span class="ln">48</span><span class="cl">    cp <span class="s2">&#34;</span><span class="nv">$tmp</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$file</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="ln">49</span><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="ln">50</span><span class="cl">     
</span></span><span class="line"><span class="ln">51</span><span class="cl">    <span class="k">done</span>
</span></span></code></pre></div>
<h2 id="dank" data-numberify>Dank<a class="anchor ms-1" href="#dank"></a></h2>
<p><strong>Dank an Matthias Kilian von der LUG-Braunschweig</strong> :!:</p>
<p>Original-Ton aus seiner Mail:</p>
<blockquote>
<p>Bitte nach Bedarf tunen. [Ja, ich weiß, dass es böse ist, das
temporäre Verzeichnis fest zu verdrahten. Wer das nicht mag, kann ja
zusätzliche TMPDIR auswerten.]</p>
<p>Das Script ist sogar so nett, nur Dateien, die sich wirklich geändert
haben, zu überschreiben, bei unmodifizierten Dateien bleibt also die
Modificationtime unverändert. Außerdem wird bei modifizierten Dateien
eine Backupdatei angelegt.</p>
<p>Würde ich es heute noch mal schreiben, dann würde ich aber wohl statt
sed(1) den ed(1) nehmen, um mir den ganzen Kram mit temporären Dateien
zu ersparen.</p>
</blockquote>]]></content:encoded>
    </item>
    
    <item>
      <title>Seriell und PCI</title>
      <link>https://www.rainerrose.de/docs/linux/seriell-und-pci/</link>
      <pubDate>Sat, 02 May 2020 15:25:05 +0200</pubDate>
      <guid>https://www.rainerrose.de/docs/linux/seriell-und-pci/</guid>
      <description><![CDATA[<!-- Anreißer -->
<p>Serielle Schnittstelle, es gibt sie immer noch.</p>]]></description>
      <content:encoded><![CDATA[<!-- Anreißer -->
<p>Serielle Schnittstelle, es gibt sie immer noch.</p>

<h2 id="kernel" data-numberify>Kernel<a class="anchor ms-1" href="#kernel"></a></h2>
<p>Ab dem <strong>2.2.5-Kernel</strong> wird die <strong>serielle Port-Unterstützung</strong>
automatisch als Modul geladen. Das macht bei einem selbstgebastelten
Kernel Probleme.</p>
<p>Die Lösung sah bei SuSE 6.1 so aus:</p>
<p>Die Datei <code>/lib/modules/2.2.5/misc/serial.o</code> muss gelöscht werden, dann
kann das Modul nicht mehr geladen werden.</p>
<p>In der Datei <code>/etc/conf.modules</code> die Zeile:</p>
<pre><code>  alias char-major-4 serial
</code></pre>
<p>nach:</p>
<pre><code>  alias char-major-4 off
</code></pre>
<p>ändern, um zu verhindern, dass der Kernel versucht das Modul
nachzuladen.</p>

<h2 id="pci-geräte" data-numberify>PCI-Geräte<a class="anchor ms-1" href="#pci-geräte"></a></h2>
<p>Beim Konfigurieren von PCI-Geräten wie z.B. ISDN-Karten dürfen keine
IRQ- und Adresse-Parameter angeben werden.</p>

<h2 id="ps2-maus" data-numberify>PS/2-Maus<a class="anchor ms-1" href="#ps2-maus"></a></h2>
<p>Besitzt man eine PS/2-Maus und man bekommt die Maus nicht konfiguriert,
sollte man als Protokoll <code>Mouseman</code> ausprobieren.</p>]]></content:encoded>
    </item>
    
  </channel>
</rss>

