<?xml version="1.0" encoding="utf-8" standalone="yes"?><feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://foundata.com/" xml:lang="de"><title>Toolbox auf foundata</title><id>https://foundata.com/de/tags/toolbox/feed-atom.xml</id><link rel="self" type="application/atom+xml" hreflang="de" href="https://foundata.com/de/tags/toolbox/feed-atom.xml" title="atom"/><link rel="alternate" type="text/html" hreflang="de" href="https://foundata.com/de/tags/toolbox/" title="html"/><link rel="alternate" type="application/rss+xml" hreflang="de" href="https://foundata.com/de/tags/toolbox/feed-rss.xml" title="rss"/><link rel="alternate" type="application/atom+xml" hreflang="en" href="https://foundata.com/en/tags/toolbox/feed-atom.xml" title="atom, English"/><link rel="alternate" type="text/html" hreflang="en" href="https://foundata.com/en/tags/toolbox/feed-atom.xml" title="html, English"/><link rel="alternate" type="application/rss+xml" hreflang="en" href="https://foundata.com/en/tags/toolbox/feed-atom.xml" title="rss, English"/><updated>2025-06-23T18:10:00Z</updated><author><name>foundata GmbH</name><email>webmaster@foundata.com</email><uri>https://foundata.com/</uri></author><rights>© 2023-2026, foundata GmbH (https://foundata.com)</rights><icon>https://foundata.com/images/feed-icon.67ff83c698af1511552374e80cf5f6ff26d497ef21f04186cf058859d535ca75.svg</icon><logo>https://foundata.com/images/feed-logo.9138f24a120dabc7e3d34003662131cc9c7f2ff153ec39d2f6dea3a48c35b4bf.svg</logo><entry><title type="html">Systemeinblicke mit Kommandozeilentools: free und vmstat</title><id>tag:foundata.com,2025-06-23:/de/blog/2025/systemeinblicke-kommandozeile-free-vmstat/</id><published>2025-06-23T18:10:00Z</published><updated>2025-06-23T18:10:00Z</updated><link href="https://foundata.com/de/blog/2025/systemeinblicke-kommandozeile-free-vmstat/?utm_source=feed-atom" rel="alternate" type="text/html"/><link href="https://foundata.com/en/blog/2025/system-insights-command-line-free-vmstat/?utm_source=feed-atom" rel="alternate" type="text/html" hreflang="en"/><link href="https://foundata.com/de/blog/2025/fsfe-reuse-lizenzverwaltung-open-source-tipps-spdx-sbom/?utm_source=feed-atom" rel="related" type="text/html" title="FSFE REUSE: Lizenz- und Quellenverwaltung für Software-Projekte. Eine Einführung für Open-Source-Entwickler, inklusive Tipps &amp; Tricks."/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lslogins-lsmod/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: lslogins und lsmod"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lsof-lsblk/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: lsof und lsblk"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-dmidecode-lspci/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: dmidecode und lspci"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: lscpu und lsusb"/><author><name>Andreas Haerter</name><uri>https://andreashaerter.com/</uri></author><summary type="html">Ein Artikel, der die Befehlszeilen-Werkzeuge `free` und `vmstat` vorstellt.</summary><content type="html" xml:base="https://foundata.com/"><![CDATA[<p><em>Hinweis: Dieser Artikel erschien vorab in <a href="https://fedoramagazine.org/system-insights-with-command-line-tools-free-and-vmstat/" target="_blank" rel="noreferrer noopener">in englischer Sprache im Fedora Magazin</a>.</em></p>
<p>Im fünften Artikel der Serie &ldquo;<a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/">Systemeinblicke</a> <a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-dmidecode-lspci/">mit</a> <a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lsof-lsblk/">Kommandozeilen</a>-<a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lslogins-lsmod/">Tools</a>&rdquo; erkunden wir <code>free</code> und <code>vmstat</code>, zwei kleine Hilfsprogramme, die überraschend viel über die Gesundheit eines Linux-Systems verraten. <code>free</code> gibt einen sofortigen Überblick darüber, wie RAM und <a href="https://de.wikipedia.org/wiki/Swapping" target="_blank" rel="noreferrer noopener">Swap</a> verwendet werden. <code>vmstat</code> (der Virtual Memory Statistics Reporter) liefert eine Echtzeitansicht von Speicher-, CPU- und I/O-Aktivitäten.</p>
<p>Am Ende dieses Artikels lassen sich Puffer und Cache in &ldquo;Bewegungsraum&rdquo; übersetzen, die geheimnisvolle <code>available</code>-Spalte sicher interpretieren und Speicherlecks oder I/O-Sättigung erkennen.</p>
<h2 id="ein-kurzer-überblick-free" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#ein-kurzer-%c3%bcberblick-free" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="ein-kurzer-überblick-free">Ein kurzer Überblick: <code>free</code></a></h2><h3 id="nutzung" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#nutzung" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="nutzung">Nutzung</a></h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ free -h
</span></span><span class="line"><span class="cl">       total    used    free   shared  buff/cache  available
</span></span><span class="line"><span class="cl">Mem:    23Gi    14Gi   575Mi    3,3Gi        12Gi      8,8Gi
</span></span><span class="line"><span class="cl">Swap:  8,0Gi   6,6Gi   1,4Gi
</span></span></code></pre></div><p><code>free</code> parst <code>/proc/meminfo</code> und zeigt Gesamtwerte für physischen Speicher und Swap sowie Kernel-Puffer und Cache an. Nützliche Optionen sind <code>-h</code> für menschenlesbare Einheiten, <code>-s 1</code> für eine sekündliche Aktualisierung und <code>-c N</code> zum automatischen Stoppen nach <code>N</code> Stichproben. Letzteres ist besonders praktisch, um einen Trend zu verfolgen, während parallel andere Programme ausgeführt werden. Beispielsweise liefert <code>free -s 60 -c 1440</code> einen 24-Stunden-CSV-freundlichen Datensatz ohne Installation zusätzlicher Monitoring-Daemons oder Tools.</p>
<p><strong>Freier Speicher (<code>free</code>)</strong> bezieht sich auf RAM, der völlig unbelegt ist. Er wird weder von einem Prozess verwendet noch zum Zwischenspeichern. Bei Serversystemen wird dies oft als Verschwendung betrachtet, da ungenutzter Speicher nicht zur Leistung beiträgt. Idealerweise sollte diese Zahl niedrig bleiben, nachdem ein System eine Weile gelaufen ist.</p>
<p><strong>Verfügbarer Speicher (<code>available</code>)</strong> hingegen stellt eine Schätzung dar, wie viel Speicher von neuen oder laufenden Prozessen verwendet werden kann, ohne auf Swap (also die Auslagerungsdatei oder -partition) zurückgreifen zu müssen. Dies umfasst freien Speicher plus Teile des Caches und der Puffer, die das System bei Bedarf schnell zurückgewinnen kann.</p>
<p>Im Wesentlichen liegt der Unterschied in Linux hier: <em>freier</em> Speicher ist untätig und ungenutzt, während <em>verfügbarer</em> Speicher sowohl wirklich freien Platz als auch Speicher umfasst, der leicht freigegeben werden kann, um das System reaktionsfähig zu halten, ohne zu swappen / auszulagern. <strong>Es ist kein Problem, wenig freien Speicher zu haben; verfügbarer Speicher ist normalerweise das, worüber man sich Sorgen machen sollte.</strong></p>
<p>Ein gesundes System könnte sogar <code>used</code> ≈ <code>total</code> zeigen und dennoch bleibt <code>available</code> groß; dies spiegelt hauptsächlich den Cache bei der Arbeit wider. Der Linux-Kernel wird automatisch saubere Cache-Seiten verwerfen, wann immer eine Anwendung den Platz benötigt, sodass zwischengespeicherter Speicher nicht verschwendet ist. Dies lässt sich als „working set“ betrachten, welches nur noch nicht neu zugewiesen wurde.</p>
<h3 id="probleme-mit-free-erkennen" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#probleme-mit-free-erkennen" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="probleme-mit-free-erkennen">Probleme mit <code>free</code> erkennen</a></h3><ul>
<li><strong>Schnell schrumpfendes <code>available</code> kombiniert mit steigendem <code>swap used</code></strong> deutet auf echten Speicherdruck hin.</li>
<li><strong>Große Swap-In/Out-Spitzen</strong> weisen auf thrashing-Arbeitslasten oder außer Kontrolle geratene Speicherverbraucher hin.</li>
</ul>
<h2 id="vmstat--virtual-memory-statistics-melden" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#vmstat--virtual-memory-statistics-melden" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="vmstat--virtual-memory-statistics-melden"><code>vmstat</code> – Virtual Memory Statistics melden</a></h2><p><code>vmstat</code> (Virtual Memory Statistics) zeigt Prozesse, Speicher, Paging, Block-I/O, Interrupts, Context-Switches und CPU-Auslastung in einer einzigen Zeile an. Mit einem Intervall und einer Anzahl ausgeführt lassen sich Trends beobachten (die unten gezeigte Ausgabe wurde zur besseren Lesbarkeit in drei Abschnitte aufgeteilt):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ vmstat <span class="m">1</span> <span class="m">3</span>
</span></span><span class="line"><span class="cl">procs -----------memory----------
</span></span><span class="line"><span class="cl"> r  b   swpd   free   buff  cache
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  <span class="m">0</span> <span class="m">7102404</span> <span class="m">1392528</span>     <span class="m">36</span> <span class="m">12335148</span>
</span></span><span class="line"><span class="cl"> <span class="m">0</span>  <span class="m">0</span> <span class="m">7102404</span> <span class="m">1392560</span>     <span class="m">36</span> <span class="m">12335188</span>
</span></span><span class="line"><span class="cl"> <span class="m">0</span>  <span class="m">0</span> <span class="m">7102404</span> <span class="m">1373640</span>     <span class="m">36</span> <span class="m">12349928</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> ---swap-- -----io----
</span></span><span class="line"><span class="cl">  si   so    bi    bo
</span></span><span class="line"><span class="cl">   <span class="m">8</span>   <span class="m">21</span>   <span class="m">130</span>   <span class="m">724</span>
</span></span><span class="line"><span class="cl">   <span class="m">0</span>    <span class="m">0</span>     <span class="m">0</span>     <span class="m">0</span>
</span></span><span class="line"><span class="cl">   <span class="m">0</span>    <span class="m">0</span>     <span class="m">8</span>    <span class="m">48</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -system-- -------cpu-------
</span></span><span class="line"><span class="cl"> in     cs us sy id wa st gu
</span></span><span class="line"><span class="cl"> <span class="m">2851</span>   <span class="m">19</span> <span class="m">15</span>  <span class="m">7</span> <span class="m">77</span>  <span class="m">0</span>  <span class="m">0</span>  <span class="m">0</span>
</span></span><span class="line"><span class="cl"> <span class="m">5779</span> <span class="m">7246</span> <span class="m">14</span> <span class="m">10</span> <span class="m">77</span>  <span class="m">0</span>  <span class="m">0</span>  <span class="m">0</span>
</span></span><span class="line"><span class="cl"> <span class="m">5141</span> <span class="m">6525</span> <span class="m">12</span>  <span class="m">9</span> <span class="m">79</span>  <span class="m">0</span>  <span class="m">0</span>  <span class="m">0</span>
</span></span></code></pre></div><h3 id="erklärung-der-ausgabe" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#erkl%c3%a4rung-der-ausgabe" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="erklärung-der-ausgabe">Erklärung der Ausgabe</a></h3><p>Aus der <code>vmstat(8)</code> Manpage:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Procs
</span></span><span class="line"><span class="cl">    r: The number of runnable processes (running or waiting
</span></span><span class="line"><span class="cl">       for run time).
</span></span><span class="line"><span class="cl">    b: The number of processes blocked waiting for I/O to
</span></span><span class="line"><span class="cl">       complete.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Memory
</span></span><span class="line"><span class="cl">    These are affected by the --unit option.
</span></span><span class="line"><span class="cl">    swpd: the amount of swap memory used.
</span></span><span class="line"><span class="cl">    free: the amount of idle memory.
</span></span><span class="line"><span class="cl">    buff: the amount of memory used as buffers.
</span></span><span class="line"><span class="cl">    cache: the amount of memory used as cache.
</span></span><span class="line"><span class="cl">    inact: the amount of inactive memory.  (-a option)
</span></span><span class="line"><span class="cl">    active: the amount of active memory.  (-a option)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Swap
</span></span><span class="line"><span class="cl">    These are affected by the --unit option.
</span></span><span class="line"><span class="cl">    si: Amount of memory swapped in from disk (/s).
</span></span><span class="line"><span class="cl">    so: Amount of memory swapped to disk (/s).
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">IO
</span></span><span class="line"><span class="cl">    bi: Kibibyte received from a block device (KiB/s).
</span></span><span class="line"><span class="cl">    bo: Kibibyte sent to a block device (KiB/s).
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">System
</span></span><span class="line"><span class="cl">    in: The number of interrupts per second, including
</span></span><span class="line"><span class="cl">        the clock.
</span></span><span class="line"><span class="cl">    cs: The number of context switches per second.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">CPU
</span></span><span class="line"><span class="cl">    These are percentages of total CPU time.
</span></span><span class="line"><span class="cl">    us: Time spent running non-kernel code.  (user time,
</span></span><span class="line"><span class="cl">        including nice time)
</span></span><span class="line"><span class="cl">    sy: Time spent running kernel code.  (system time)
</span></span><span class="line"><span class="cl">    id: Time spent idle.  Prior to Linux 2.5.41, this
</span></span><span class="line"><span class="cl">        includes IO-wait time.
</span></span><span class="line"><span class="cl">    wa: Time spent waiting for IO.  Prior to Linux 2.5.41,
</span></span><span class="line"><span class="cl">        included in idle.
</span></span><span class="line"><span class="cl">    st: Time stolen from a virtual machine.  Prior to
</span></span><span class="line"><span class="cl">        Linux 2.6.11, unknown.
</span></span><span class="line"><span class="cl">    gu: Time spent running KVM guest code (guest time,
</span></span><span class="line"><span class="cl">        including guest nice).
</span></span></code></pre></div><h3 id="praktische-diagnose" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#praktische-diagnose" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="praktische-diagnose">Praktische Diagnose</a></h3><table>
  <thead>
      <tr>
          <th>Bereich</th>
          <th>Wichtige Felder</th>
          <th>Worauf zu achten ist</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Procs</td>
          <td><code>r</code> (Run-Queue),<br><code>b</code> (blocked)</td>
          <td><code>r</code> &gt; CPU-Kerne = Konkurrenz um die gleichen Kerne</td>
      </tr>
      <tr>
          <td>Memory</td>
          <td><code>swpd</code>, <code>free</code>, <code>buff</code>, <code>cache</code></td>
          <td>Steigendes <code>swpd</code> mit fallendem <code>free</code> = Druck</td>
      </tr>
      <tr>
          <td>Swap</td>
          <td><code>si</code>, <code>so</code></td>
          <td><code>so</code> ungleich Null bedeutet, dass der Kernel auslagert (swapped)</td>
      </tr>
      <tr>
          <td>IO</td>
          <td><code>bi</code>, <code>bo</code></td>
          <td>Hohes <code>bo</code> + hohes <code>wa</code> deutet auf schreiblastige Arbeitslasten hin</td>
      </tr>
      <tr>
          <td>System</td>
          <td><code>in</code>, <code>cs</code></td>
          <td>Plötzliche Spitzen deuten auf Interrupt-Stürme hin</td>
      </tr>
      <tr>
          <td>CPU</td>
          <td><code>us</code>, <code>sy</code>, <code>id</code>, <code>wa</code>, <code>st</code></td>
          <td>Hohes <code>wa</code> (I/O-Wait) = Storage-Engpass</td>
      </tr>
  </tbody>
</table>
<h4 id="ein-speicherleck-memory-leak-entdecken" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#ein-speicherleck-memory-leak-entdecken" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="ein-speicherleck-memory-leak-entdecken">Ein Speicherleck (Memory Leak) entdecken</a></h4><p>Man führt <code>vmstat 500</code> in einem Terminal aus, während die verdächtige Anwendung in einem weiteren Terminal läuft. Wenn <code>free</code> kontinuierlich fällt und <code>si</code>/<code>so</code> in aufeinanderfolgende Stichproben steigen, geht der physisches RAM zur Neige und der Kernel beginnt zu auszulagern (swappen). Dies ist ein klassisches Memory-Leak-Verhalten.</p>
<h4 id="io-sättigung-feststellen" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#io-s%c3%a4ttigung-feststellen" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="io-sättigung-feststellen">I/O-Sättigung feststellen</a></h4><p>Wenn <code>wa</code> (CPU-Wait) und <code>bo</code> (Blocks Out) in die Höhe schießen, während <code>r</code> auf niedrigen Werten verbleibt, ist die CPU untätig, wartet jedoch auf den Storage. Schnellerer Speicher (z.B. SDD statt Festplatte) oder das Tuning der I/O-Scheduler-Parameter sollten in Betracht gezogen werden.</p>
<h4 id="cpu-überbuchung-over-commit-erkennen" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#cpu-%c3%bcberbuchung-over-commit-erkennen" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="cpu-überbuchung-over-commit-erkennen">CPU-Überbuchung (over-commit) erkennen</a></h4><p>Ein anhaltendes <code>r</code>, das doppelt so hoch wie die Anzahl der logischen Kerne ist, in Kombination mit niedrigem <code>wa</code> und viel <code>free</code> bedeutet, dass die CPU der Engpass ist, nicht Arbeitsspeicher oder I/O. <code>top</code> oder <code>htop</code> helfen dabei, Prozesse zu lokalisieren die für die hohe Last sorgen. So kann man die Arbeitslasten entsprechend verlagern oder anderweitig skalieren.</p>
<h2 id="fazit" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#fazit" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="fazit">Fazit</a></h2><p>Die Beherrschung von <code>free</code> und <code>vmstat</code> bietet einen Einblick in Speicherverwendung, Swap-Aktivität, I/O-Latenz und CPU-Last. Für alltägliches Debugging empfiehlt sich: Zunächst mit <code>free</code> prüfen, ob dem System wirklich der Speicher ausgeht, dann <code>vmstat</code> verwenden, um den Grund zu enthüllen, seien es Speicherlecks, Storage-Engpässe oder CPU-Sättigung.</p>
<p>Der nächste Teil unserer Serie &ldquo;System-Einblicke mit Kommandozeilen-Tools&rdquo; folgt bald – frohes Linux-Troubleshooting!</p>
]]></content><category scheme="taxonomy:tags" term="toolbox" label="toolbox"/><category scheme="taxonomy:tags" term="free" label="free"/><category scheme="taxonomy:tags" term="vmstat" label="vmstat"/></entry><entry><title type="html">FSFE REUSE: Lizenz- und Quellenverwaltung für Software-Projekte. Eine Einführung für Open-Source-Entwickler, inklusive Tipps &amp; Tricks.</title><id>tag:foundata.com,2025-06-18:/de/blog/2025/fsfe-reuse-lizenzverwaltung-open-source-tipps-spdx-sbom/</id><published>2025-06-18T10:10:00Z</published><updated>2025-06-18T10:10:00Z</updated><link href="https://foundata.com/de/blog/2025/fsfe-reuse-lizenzverwaltung-open-source-tipps-spdx-sbom/?utm_source=feed-atom" rel="alternate" type="text/html"/><link href="https://foundata.com/en/blog/2025/fsfe-reuse-open-source-licensing-tips-tricks-spdx-sbom/?utm_source=feed-atom" rel="alternate" type="text/html" hreflang="en"/><link href="https://foundata.com/de/blog/2024/verwende-gpl-or-later/?utm_source=feed-atom" rel="related" type="text/html" title='Bitte verwende GPLv3 "or-later" statt "only"'/><link href="https://foundata.com/de/blog/2024/copyleft-open-source-lizenzen/?utm_source=feed-atom" rel="related" type="text/html" title="Nutze Copyleft-Lizenzen für Open Source oder Lebe mit den Konsequenzen"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lslogins-lsmod/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: lslogins und lsmod"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lsof-lsblk/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: lsof und lsblk"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-dmidecode-lspci/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: dmidecode und lspci"/><author><name>Andreas Haerter</name><uri>https://andreashaerter.com/</uri></author><summary type="html">Erfahre, wie die FSFE REUSE-Spezifikation dabei hilft, Lizenzen klar und präzise zu verwalten.</summary><content type="html" xml:base="https://foundata.com/"><![CDATA[<p><em>Hinweis: Dieser Artikel erschien vorab in <a href="https://fedoramagazine.org/beginners-guide-for-open-source-developers-for-software-licensing-with-fsfe-reuse/" target="_blank" rel="noreferrer noopener">in englischer Sprache im Fedora Magazin</a>.</em></p>
<p>Zwischen all den Aufgaben, mit denen Entwickler täglich zu tun haben, wird das Thema Software-Lizenzierung oft nur am Rande behandelt. Klar ist: Lizenzierung muss sein. Doch wenn es darum geht, die passende Lizenz auszuwählen, übernommenen Code korrekt zu kennzeichnen und alles konsistent zu halten, wird Lizenz-Management schnell zu einer bürokratischen Last.</p>
<p>Genau hier setzt das <a href="https://reuse.software/" target="_blank" rel="noreferrer noopener">REUSE-Projekt</a> an, welches von der <a href="https://fsfe.org/" target="_blank" rel="noreferrer noopener">Free Software Foundation Europe (FSFE)</a> betreut wird. Es versucht daheo nicht, die rechtliche Arbeit bei der Wahl einer Lizenz oder der Entschlüsselung von Verpflichtungen zu ersetzen. Stattdessen <strong>konzentriert sich REUSE auf die praktische Umsetzung von Lizenzierung</strong> – also darauf, <strong>wie sich Lizenzinformationen klar, eindeutig und verlässlich direkt im Code selbst kommunizieren lassen</strong>. Zahlreiche Projekte setzen bereits auf REUSE, darunter <a href="https://github.com/SAP/openui5/blob/master/REUSE.toml" target="_blank" rel="noreferrer noopener">SAP</a>, <a href="https://github.com/nextcloud/server/blob/cf1eed2769d928f4a7fe4543d51994331701f2d9/.reuse/dep5" target="_blank" rel="noreferrer noopener">Nextcloud</a> und viele Rollen und Collections aus der Ansible-Community.</p>
<p>Vor Kurzem bin ich selbst tief in das Thema Lizenzierung und Supply Chain eingetaucht. Ich musste herausfinden, wie sich REUSE auf <a href="https://github.com/foundata/" target="_blank" rel="noreferrer noopener">unsere Open-Source-Projekte</a> anwenden lässt und gleichzeitig anderen in unserem Team und bei Kunden erklären, wie es funktioniert. Das war eine spannende Doppelrolle: lernen und lehren zugleich. Daraus entstanden viele Erkenntnisse darüber, was an REUSE praktisch ist, wo es hakt, und wie es im Alltag hilft. Dieser Artikel möchte genau diese Erfahrungen weitergeben – als Ergänzung zu reinen Schnellstart-Anleitungen.</p>
<p>Wer Video lieber mag: Ich habe hierzu auch einen <a href="https://media.ccc.de/v/gpn23-268-fsfe-reuse-einfache-lizenz-und-quellenverwaltung-fr-software-projekte" target="_blank" rel="noreferrer noopener">REUSE-Vortrag auf der GPN23</a> gehalten (er enthält im wesentlichen den gleichen Inhalt wie der Text):</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
<iframe src="https://media.ccc.de/v/gpn23-268-fsfe-reuse-einfache-lizenz-und-quellenverwaltung-fr-software-projekte/oembed" frameborder="0" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="Media CCC Video"></iframe>
</div>
<h2 id="warum-lizenzierung-sich-noch-immer-kaputt-anfühlt" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#warum-lizenzierung-sich-noch-immer-kaputt-anf%c3%bchlt" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="warum-lizenzierung-sich-noch-immer-kaputt-anfühlt">Warum Lizenzierung sich noch immer „kaputt“ anfühlt</a></h2><p>Wer schon einmal versucht hat, die Lizenzierung in einem Code-Repository mit Beiträgen aus verschiedensten Quellen nachzuvollziehen, oder Software zu paketieren und dabei auf widersprüchliche oder unklare Lizenzangaben gestoßen ist, kennt das Problem aus erster Hand. Es ist ein häufiger Schmerzpunkt.</p>
<p>Das Projekt beginnt. Eine <code>LICENSE</code>-Datei kommt ins Wurzelverzeichnis. Vielleicht ist es <a href="https://choosealicense.com/licenses/mit/" target="_blank" rel="noreferrer noopener">MIT</a>, vielleicht <a href="https://choosealicense.com/licenses/apache-2.0/" target="_blank" rel="noreferrer noopener">Apache 2.0</a>, vielleicht <a href="https://foundata.com/de/blog/2024/verwende-gpl-or-later/">GPLv3-or-later</a> lizensiert. Man denkt: Das reicht schon. Und tatsächlich erkennen Tools wie <a href="https://github.com/licensee/licensee" target="_blank" rel="noreferrer noopener">Licensee</a>, das auch GitHub verwendet, diese Datei und melden das Projekt als einheitlich lizenziert – basierend auf dem, was dort steht.</p>
<p>Aber das ist nur ein Teil des Ganzen.</p>
<p>Echte Projekte werden mit der Zeit chaotischer. Dateien stammen aus Pull Requests, Upstream-Forks, alten Backups oder fremden Repositories. Manchmal wird ein Skript von Stack Overflow eingefügt. Oder jemand kopiert die Ausgabe eines Codegenerators. Nach und nach wird das Repository zu einem Sammelsurium aus Dateien mit unklarer Herkunft. Die <code>LICENSE</code>-Datei im Root-Verzeichnis kann all das nicht mehr zuverlässig abdecken. Tools wie Licensee merken das nicht – und oft geht es dem Entwicklungsteam genauso.</p>
<p><strong>Fehlen klare Lizenzinformationen im Quellcode, wird es für andere schwierig, die Software weiterzuverwenden oder daran mitzuwirken.</strong> Leider können Tools zur <strong>automatischen Lizenz­erkennung keine rechtlich belastbare Sicherheit bieten</strong>. Sie arbeiten mit unscharfem Abgleich, Heuristiken und Annahmen wie: „ein Projekt, eine Lizenz“. Das reicht nicht, wenn es auf rechtliche Klarheit ankommt. Automatische Lizenzheuristiken sind kompliziert und werden niemals zuverlässige Ergebnisse für alle möglichen Anwendungsfälle liefern.</p>
<h2 id="fsfe-reuse-zur-rettung" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#fsfe-reuse-zur-rettung" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="fsfe-reuse-zur-rettung">FSFE REUSE zur Rettung</a></h2><p>Anstatt zu versuchen, Lizenzinformationen zu erraten oder herzuleiten, fordert REUSE Entwickler dazu auf, diese <strong>explizit</strong>, <strong>maschinenlesbar</strong> und <strong>überprüfbar</strong> bereitzustellen:</p>
<ol>
<li><strong><a href="https://reuse.software/spec-3.3/#license-files" target="_blank" rel="noreferrer noopener">Jede verwendete Lizenz muss als Textkopie im Verzeichnis <code>LICENSES/</code></a></strong><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> im Wurzelverzeichnis des Projekts abgelegt werden.</li>
<li><strong>Jede Datei im Projekt muss <a href="https://reuse.software/spec-3.3/#licensing-information" target="_blank" rel="noreferrer noopener">mit maschinenlesbaren Copyright- und Lizenzangaben versehen</a> sein.</strong></li>
</ol>
<p>Nochmals: Das ist wichtig. So lässt sich jede einzelne Datei im Repository sofort rechtlich einordnen – sei es durch ein Audit, beim Paketieren, durch Mitwirkende oder Compliance-Teams. Es braucht keine Vermutungen, keine Querverweise, kein „vielleicht ist das MIT, weil der Rest der Projekts ja auch MIT ist“. Alles ist <strong>klar</strong>, <strong>standardisiert</strong> und mit <a href="https://reuse.readthedocs.io/en/stable/man/reuse-lint.html" target="_blank" rel="noreferrer noopener"><code>reuse lint</code></a> auch <strong>automatisiert prüfbar</strong> – ideal für Projekte mit <a href="https://en.wikipedia.org/wiki/Continuous_integration" target="_blank" rel="noreferrer noopener">Continuous Integration</a>.</p>
<p>Nach dem REUSE-Standard können Lizenz- und Copyright-Informationen auf verschiedene Weise hinterlegt werden:</p>
<ul>
<li><strong><a href="https://reuse.software/spec-3.3/#comment-headers" target="_blank" rel="noreferrer noopener">Kommentarzeilen im Quellcode</a></strong> oder alternativ <strong><code>&lt;dateiname&gt;.license</code></strong> für Dateien, die keine Kommentare unterstützen.</li>
<li><strong><a href="https://reuse.software/spec-3.3/#reusetoml" target="_blank" rel="noreferrer noopener"><code>REUSE.toml</code></a></strong> – eine zentrale, maschinenlesbare Datei zur Beschreibung ganzer Dateien oder Verzeichnisse. Besonders hilfreich ist sie, um:
<ul>
<li>eine Standardlizenz für das gesamte Projekt festzulegen.</li>
<li>abweichende Lizenzen für Drittanbieter-Komponenten in Unterverzeichnissen zu definieren.</li>
</ul>
</li>
</ul>
<p>Die klar definierte <a href="https://reuse.software/spec/" target="_blank" rel="noreferrer noopener">REUSE-Spezifikation</a> wird dabei durch und ein schlankes <a href="https://github.com/fsfe/reuse-tool" target="_blank" rel="noreferrer noopener"><code>reuse</code>-Kommandozeilentool</a> unterstützt. Damit lässt sich der Standard mit weniger Aufwand einführen, auch wenn alles notfalls von Hand machbar ist. <a href="https://reuse.software/comparison/" target="_blank" rel="noreferrer noopener">REUSE fügt sich dabei gut ins bestehende Open-Source-Ökosystem ein</a>, unter anderem durch die Verwendung von <a href="https://spdx.dev/" target="_blank" rel="noreferrer noopener">Software Package Data Exchange (SPDX)</a> und <a href="https://github.com/david-a-wheeler/spdx-tutorial/blob/master/README.md#spdx-license-identifiers" target="_blank" rel="noreferrer noopener">SPDX-Lizenzkennungen</a>.</p>
<h2 id="verwendung" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#verwendung" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="verwendung">Verwendung</a></h2><p>Das <a href="https://reuse.software/tutorial/" target="_blank" rel="noreferrer noopener">offizielle REUSE-Tutorial</a> und der <a href="https://github.com/fsfe/reuse-tool#usage" target="_blank" rel="noreferrer noopener">Abschnitt zur Tool-Nutzung</a> sind wirklich gut gemacht – daher folgt hier nur ein kompakter Schnellstart:</p>
<ol>
<li>Die verwendeten Lizenzen ins Verzeichnis <code>LICENSES/</code> legen.</li>
<li>Einen Kommentar-Header in jede Datei einfügen, z. B.:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">SPDX-License-Identifier: GPL-3.0-or-later
</span></span><span class="line"><span class="cl">SPDX-FileCopyrightText: $YEAR $NAME
</span></span></code></pre></div>Das Format ist dabei recht flexibel, solange die Zeilen mit <code>SPDX-License-Identifier:</code> und/oder <code>SPDX-FileCopyrightText:</code> beginnen. Es muss nicht an erster Stelle stehen und auch Leerzeilen sind möglich. Wichtig ist dennoch, dass es weit oben in einer Datei / in einem Header-Kommentar steht. Technisch ist es nicht notwendig, aber nur so kann ein Mensch diese wichtige Information direkt nach dem Öffnen einer Datei sehen.</li>
</ol>
<h3 id="kommentar-header" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#kommentar-header" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="kommentar-header">Kommentar-Header</a></h3><p><a href="https://github.com/fsfe/reuse-docs/issues/117#issuecomment-1306963966" target="_blank" rel="noreferrer noopener">REUSE</a> und viele Organisationen wie etwa <a href="https://www.gnu.org/licenses/gpl-howto.html.en#why-license-notices" target="_blank" rel="noreferrer noopener">GNU</a> empfehlen, Lizenz-Header direkt in den Quellcode zu schreiben. Das hilft, Missverständnisse und Fehler zu vermeiden. Auch wenn eine zentrale <code>REUSE.toml</code>-Datei vorhanden ist, kommt es vor, dass einzelne Dateien in andere Projekte kopiert oder geforkt werden – und dort fehlt dann womöglich der Kontext oder die Lizenzdokumentation.</p>
<p>Ohne einen Lizenzhinweisdirekt in der Datei kann beim Weiterverwenden daher schnell die rechtliche Zuordnung verloren gehen. Ein klarer Kommentar schützt davor, selbst in Projekten ohne perfektes Lizenzmanagement.</p>
<p>Beispiel für einen einfachen Lizenz-Header:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># SPDX-FileCopyrightText: Andreas Haerter, ACME Corp (https://example.com)
</span></span><span class="line"><span class="cl"># SPDX-License-Identifier: CC-BY-SA-4.0
</span></span></code></pre></div><p>Beispiel mit <a href="https://reuse.software/faq/#multi-licensing" target="_blank" rel="noreferrer noopener">Dual-Lizenzierung</a>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">/*
</span></span><span class="line"><span class="cl">  SPDX-FileCopyrightText: Jane Doe &lt;j.doe@example.com&gt;
</span></span><span class="line"><span class="cl">  SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
</span></span><span class="line"><span class="cl">*/
</span></span></code></pre></div><h3 id="reusetoml" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#reusetoml" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="reusetoml"><code>REUSE.toml</code></a></h3><p>Man könnte auch versucht sein, auf das Einfügen von Kommentar-Headern in jeder einzelnen Datei zu verzichten und stattdessen nur eine zentrale <code>REUSE.toml</code> zu verwenden – das ist legitim und <strong>bleibt REUSE-konform</strong>. Besonders bei vielen Dateien oder bei Drittanbieter-Code kann das deutlich praktischer sein, da man diese eventuell nicht verändern und stets als Kopie der originalen Quelle im Projekt haben will.</p>
<p>Mit einer <code>REUSE.toml</code> lassen sich auch <a href="https://reuse.software/faq/#bulk-license" target="_blank" rel="noreferrer noopener">ganze Verzeichnisse in einem Schritt lizenzieren</a>. Das Format der Datei ist <a href="https://reuse.software/spec-3.3/#reusetoml" target="_blank" rel="noreferrer noopener">klar definiert</a>, aber ein einfaches Beispiel zeigt am besten, wie es funktioniert:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="nx">version</span> <span class="p">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-PackageName</span> <span class="p">=</span> <span class="s2">&#34;Foo bar project&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-PackageDownloadLocation</span> <span class="p">=</span> <span class="s2">&#34;https://git.example.com/foobar&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-PackageSupplier</span> <span class="p">=</span> <span class="s2">&#34;ACME Inc. (https://example.com)&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">annotations</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">path</span> <span class="p">=</span> <span class="s2">&#34;**&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">precedence</span> <span class="p">=</span> <span class="s2">&#34;closest&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-FileCopyrightText</span> <span class="p">=</span> <span class="s2">&#34;ACME Inc.&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-License-Identifier</span> <span class="p">=</span> <span class="s2">&#34;LGPL-2.1-or-later&#34;</span>
</span></span></code></pre></div><p>Damit wird das gesamte Projekt unter die angegebene Lizenz gestellt. Ausnahmen oder spezielle Regeln für bestimmte Dateien können natürlich ebenfalls über einzelne annotations ergänzt werden.</p>
<h3 id="überprüfung" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#%c3%bcberpr%c3%bcfung" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="überprüfung">Überprüfung</a></h3><p>Sobald alle Lizenzinformationen ergänzt wurden, lässt sich das Projekt ganz einfach mit <a href="https://reuse.readthedocs.io/en/stable/man/reuse-lint.html" target="_blank" rel="noreferrer noopener"><code>reuse lint</code></a> überprüfen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ reuse lint
</span></span><span class="line"><span class="cl"><span class="o">[</span>...<span class="o">]</span>
</span></span><span class="line"><span class="cl">Congratulations! Your project is compliant with version 3.4 of the REUSE Specification :-<span class="o">)</span>
</span></span></code></pre></div><p>So bekommt man schnell Feedback, ob alles korrekt eingebunden wurde, ideal für automatisierte Tests oder <a href="https://en.wikipedia.org/wiki/Continuous_integration" target="_blank" rel="noreferrer noopener">Continuous Integration</a>-Workflows.</p>
<h2 id="demo" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#demo" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="demo">Demo</a></h2><p>Die FSFE erstellte einen kleinen Screencast<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, der dem <a href="https://reuse.software/tutorial" target="_blank" rel="noreferrer noopener">Tutorial</a> folgt und das <a href="https://github.com/fsfe/reuse-example/" target="_blank" rel="noreferrer noopener">REUSE-Beispiel-Repository</a> konform macht:</p>
<figure><img class="mx-auto my-0 rounded-xs" alt="REUSE-Tutorial: Screencast" src="./reuse-tool.gif" loading="lazy"></figure><h2 id="tipps-und-tricks" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#tipps-und-tricks" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="tipps-und-tricks">Tipps und Tricks</a></h2><h3 id="benötigtes-vokabular-beim-lernen-oder-lehren" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#ben%c3%b6tigtes-vokabular-beim-lernen-oder-lehren" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="benötigtes-vokabular-beim-lernen-oder-lehren">Benötigtes Vokabular beim Lernen oder Lehren</a></h3><p>Wer sich mit Lizenzierung und REUSE beschäftigt, egal ob beim Einstieg oder beim Erklären, stößt schnell auf Begriffe, die hilfreich (oder sogar notwendig) für das Verständnis sind:</p>
<ul>
<li><strong><a href="https://spdx.dev/" target="_blank" rel="noreferrer noopener">Software Package Data Exchange (SPDX)</a> und <a href="https://github.com/david-a-wheeler/spdx-tutorial/blob/master/README.md#spdx-license-identifiers" target="_blank" rel="noreferrer noopener">SPDX-Lizenz-Identifikatoren</a>:</strong> Ein Standard zur einheitlichen Bezeichnung von Lizenzen mit kurzen, konsistenten Kürzeln (wie <code>MIT</code> oder <code>GPL-3.0-only</code>). Das vereinfacht die automatische Auswertung und Dokumentation von Lizenzinformationen.</li>
<li><strong><a href="https://about.gitlab.com/blog/2022/10/25/the-ultimate-guide-to-sboms/#what-is-an-sbom%3F" target="_blank" rel="noreferrer noopener">Software Bill of Materials (SBOM)</a>:</strong> Eine strukturierte Auflistung aller Software-Komponenten und deren Lizenzen in einem Projekt. Hilft bei Transparenz, Sicherheit und rechtlicher Nachvollziehbarkeit.</li>
<li><strong><a href="https://en.wikipedia.org/wiki/Copyleft" target="_blank" rel="noreferrer noopener">Copyleft</a> (Lizenztyp):</strong> Ein Ansatz, der sicherstellt, dass abgeleitete Werke unter derselben Lizenz weitergegeben werden müssen. So bleiben Nutzungsfreiheiten erhalten. Ein bekanntes Beispiel ist die GPL.</li>
<li><strong>Permissive (Lizenztyp):</strong> Eine eher freizügige Lizenz, die eine Wiederverwendung des Codes mit nur wenigen Bedingungen erlaubt – auch in proprietären Projekten. Typische Beispiele sind MIT, BSD und Apache 2.0.</li>
<li><strong>TOML:</strong> Ein <a href="https://toml.io/en/v1.0.0" target="_blank" rel="noreferrer noopener">Dateiformat für Konfigurationen</a>. Die Datei <code>REUSE.toml</code> verwendet dieses Format, um Lizenzinformationen anhand von Pfadmustern zu beschreiben.</li>
<li><strong>DEP5:</strong> Eine ältere, maschinenlesbare <a href="https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/" target="_blank" rel="noreferrer noopener">Debian-Formatvorlage</a> zur Lizenzdokumentation. <a href="https://reuse.software/faq/#dep5-history" target="_blank" rel="noreferrer noopener">Früher genutzt, bevor <code>REUSE.toml</code> eingeführt wurde</a>. DEP5 wird noch unterstützt, gilt aber als veraltet – wichtig zu wissen, falls man auf ältere Tutorials oder Tools trifft.</li>
</ul>
<h3 id="mein-persönliches-killer-feature-zusätzliche-kommentare-in-reusetoml" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#mein-pers%c3%b6nliches-killer-feature-zus%c3%a4tzliche-kommentare-in-reusetoml" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="mein-persönliches-killer-feature-zusätzliche-kommentare-in-reusetoml">Mein persönliches Killer-Feature: Zusätzliche Kommentare in <code>REUSE.toml</code></a></h3><p>Es mag nach einer Kleinigkeit klingen, aber für mich war es immer umständlich, die ursprünglichen Download-URLs und andere typische Informationen zu Drittanbieter-Dateien im Blick zu behalten (etwa „dieses kleine Icon, das ich mir da kopiert habe“). Aus meiner Sicht ist die <code>REUSE.toml</code>-Datei der ideale Ort, um solche Zusatzinformationen mit Hilfe von <code>SPDX-FileComment</code> abzulegen. So bleibt das Repository übersichtlich, und auch die Endbenutzer-Dokumentation wird nicht mit für den End-User unnötige Detauls überladen.</p>
<p>Gibt es einmal ein Beispiel dafür, wird das Pflegen solcher Quellvermerke und Hinweise meiner Erfahrung nach schnell zur guten Praxis – selbst in Teams, die ansonsten wenig formale Prozesse haben:</p>
<p><strong>Beispiel 1: <a href="https://github.com/foundata/chocolatey-usewindow.extension/blob/78f22260526a319e83e62456922bb482564f1e41/REUSE.toml#L22-L34" target="_blank" rel="noreferrer noopener"><code>REUSE.toml</code> mit Abschnitten, die die ursprünglichen Download-URLs tracken oder Notizen hinzufügen</a></strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[...]</span>
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">annotations</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">path</span> <span class="p">=</span> <span class="s2">&#34;assets/images/window.svg&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">precedence</span> <span class="p">=</span> <span class="s2">&#34;closest&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-FileCopyrightText</span> <span class="p">=</span> <span class="s2">&#34;2022 Refactoring UI Inc.&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-License-Identifier</span> <span class="p">=</span> <span class="s2">&#34;MIT&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-FileComment</span> <span class="p">=</span> <span class="s2">&#34;https://github.com/tailwindlabs/heroicons/blob/master/optimized/24/outline/window.svg&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">annotations</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">path</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;extensions/Find-WindowHandle.ps1&#34;</span><span class="p">,</span> <span class="s2">&#34;extensions/Helper.ps1&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">precedence</span> <span class="p">=</span> <span class="s2">&#34;closest&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-FileCopyrightText</span> <span class="p">=</span> <span class="s2">&#34;2018 Grégoire Geis (https://github.com/71/Focus-Window/)&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-License-Identifier</span> <span class="p">=</span> <span class="s2">&#34;MIT&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-FileComment</span> <span class="p">=</span> <span class="s2">&#34;Slightly adapted for this project by foundata GmbH (https://foundata.com)&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">[...]</span>
</span></span></code></pre></div><p><strong>Beispiel 2:</strong> Die <a href="https://github.com/SAP/openui5/blob/7ff18ab1ded47570228b5fc6c3da1ad135d6bc3e/REUSE.toml#L539-L561" target="_blank" rel="noreferrer noopener">REUSE.toml von SAP/openui5</a>, die Dateimuster und Kommentare verwendet, um einzelne Komponenten und Dateien zu tracken, die von anderen Projekten kopiert wurden:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[...]</span>
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">annotations</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">path</span> <span class="p">=</span> <span class="s2">&#34;src/sap.ui.integration/test/sap/ui/integration/demokit/cardExplorer/webapp/thirdparty/CfWorkerJsonSchemaValidator.js&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">precedence</span> <span class="p">=</span> <span class="s2">&#34;aggregate&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-FileCopyrightText</span> <span class="p">=</span> <span class="s2">&#34;2020 Jeremy Danyow&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-License-Identifier</span> <span class="p">=</span> <span class="s2">&#34;MIT&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-FileComment</span> <span class="p">=</span> <span class="s2">&#34;these files belong to: @cfworker/json-schema&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Library: sap.ui.webc.common:</span>
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">annotations</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">path</span> <span class="p">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/base/**&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/theming/**&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/localization/**&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/icons/**&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/icons-tnt/**&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/icons-business-suite/**&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">precedence</span> <span class="p">=</span> <span class="s2">&#34;aggregate&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-FileCopyrightText</span> <span class="p">=</span> <span class="s2">&#34;SAP&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-License-Identifier</span> <span class="p">=</span> <span class="s2">&#34;Apache-2.0&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">SPDX-FileComment</span> <span class="p">=</span> <span class="s2">&#34;these files belong to: UI5 Web Components&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">[...]</span>
</span></span></code></pre></div><h3 id="readme-abschnitts-template-über-lizenzierung-und-copyright-für-menschen" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#readme-abschnitts-template-%c3%bcber-lizenzierung-und-copyright-f%c3%bcr-menschen" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="readme-abschnitts-template-über-lizenzierung-und-copyright-für-menschen"><code>README</code>-Abschnitts-Template über Lizenzierung und Copyright für Menschen</a></h3><p>Aus meiner Sicht ist es hilfreich, einen generischen, leicht anpassbaren Textbaustein für die <code>README.md</code> oder eine vergleichbare zentrale Datei zu haben. Also dem Ort, den Menschen in der Regel leicht finden und verstehen können. Ich habe dafür eine Textvorlage vorbereitet und im Einsatz, die die bereits vorhandenen REUSE-Informationen in einem Repository nutzt und auf dieser verweist. So bleibt der Abschnitt im Wesentlichen wartungsfrei und ist trotzdem nützlich:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">## Licensing, copyright
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;!--REUSE-IgnoreStart--&gt;
</span></span><span class="line"><span class="cl">Copyright (c) YYYY, ACME Inc.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This project is licensed under the GNU General Public License v3.0 or later (SPDX-License-Identifier: `GPL-3.0-or-later`), see [`LICENSES/GPL-3.0-or-later.txt`](LICENSES/GPL-3.0-or-later.txt) for the full text.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The [`REUSE.toml`](REUSE.toml) file provides detailed licensing and copyright information in a human- and machine-readable format. This includes parts that may be subject to different licensing or usage terms, such as third-party components. The repository conforms to the [REUSE specification](https://reuse.software/spec/). You can use [`reuse spdx`](https://reuse.readthedocs.io/en/latest/readme.html#cli) to create a [SPDX software bill of materials (SBOM)](https://en.wikipedia.org/wiki/Software_Package_Data_Exchange).
</span></span><span class="line"><span class="cl">&lt;!--REUSE-IgnoreEnd--&gt;
</span></span></code></pre></div><p><code>YYYY</code> sollte durch das Jahr der ersten Veröffentlichung oder des <a href="https://reuse.readthedocs.io/en/latest/scripts.html#starting-point-of-the-codebase" target="_blank" rel="noreferrer noopener">Code-Beitrags</a> ersetzt werden. Auch Lizenzname, Dateinamen und Links lassen sich je nach Projektbedarf anpassen. Die eingefügten HTML-Kommentare verhindern dabei REUSE-Linting-Fehler – etwa dann, wenn mehrere Lizenzen im Text genannt werden.</p>
<p>Die Formulierung verweist bereits auf die zentrale Lizenzdatei (<code>REUSE.toml</code>) und macht deutlich, dass einzelne Teile des Projekts unter anderen Lizenzbedingungen stehen können als der Hauptteil. Falls das nicht ausreicht, lässt sich der Satz zur Hauptlizenz natürlich gezielt anpassen – um die grundlegenden Lizenzierungsregeln hervorzuheben, ohne jedes Detail an mehreren Stellen pflegen zu müssen. Beispiele (nach Bedarf anpassen):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">The project is dual-licensed under the
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">* GNU General Public License v3.0 or later (SPDX-License-Identifier: `GPL-3.0-or-later`), see [`LICENSES/GPL-3.0-or-later.txt`](./LICENSES/GPL-3.0-or-later.txt) for the full text.
</span></span><span class="line"><span class="cl">* Apache License 2.0 (SPDX-License-Identifier: `Apache-2.0`), see [`LICENSES/Apache-2.0.txt`](./LICENSES/Apache-2.0.txt) for the full text.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[... das übliche Template folgt ...]
</span></span></code></pre></div><h3 id="lizenzerkennung-auf-github-oder-gitlab" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#lizenzerkennung-auf-github-oder-gitlab" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="lizenzerkennung-auf-github-oder-gitlab">Lizenzerkennung auf Github oder Gitlab</a></h3><p>Beim Einsatz von REUSE fällt auf, dass Plattformen wie GitHub und GitLab nicht mehr in der Lage sind, die Lizenz eines Projekts automatisch korrekt zu erkennen.</p>
<p>Auch wenn automatische Lizenzdetektion (wie weiter oben beschrieben) grundsätzlich fehleranfällig und konzeptionell problematisch ist, bleibt nachvollziehbar, warum man trotzdem ein maschinenlesbares Ergebnis möchte. Schließlich wird bei Suchen oder in Projektübersichten oft nach Lizenzen gefiltert und fehlerhafte oder fehlende Metadaten können hier zu Nachteilen in der Auffinbarkeit führen, vor allem wenn suchende Benutzer wenig Erfahrung mit Lizenzierung haben.</p>
<p>Wenn solche automatischen Erkennungsmechanismen daher dennoch bedient werden sollen, kann man einfach die „freiheitsfreundlichste“ Lizenz (bzw. die Hauptlizenz des Projekts) <em>zusätzlich</em> in einer <code>LICENSE</code>- oder <code>COPYING</code>-Datei im Wurzelverzeichnis ablegen. Also <strong>ausschließlich zur Nutzung via Suchindizes und GitHub</strong>, unabhängig von der eigentlichen REUSE-Struktur:</p>
<ol>
<li><a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository#detecting-a-license" target="_blank" rel="noreferrer noopener">GitHub verwendet Licensee</a>, um die Projektlizenz zu erkennen. <a href="https://github.com/licensee/licensee/issues/490" target="_blank" rel="noreferrer noopener">Licensee unterstützt die REUSE-Spezifikation jedoch nicht</a>.</li>
<li>Ein möglicher Workaround besteht darin, eine zusätzliche <code>LICENSE</code>- oder <code>COPYING</code>-Datei im Projekt-Root zu platzieren. Das ist laut <a href="https://reuse.software/faq/#tradition" target="_blank" rel="noreferrer noopener">REUSE-FAQ</a> auch vollkommen zulässig. Diese Dateien werden vom <a href="https://github.com/fsfe/reuse-tool/blob/0e111c423ccf927f73a9ae7b39d3f88268b015b9/src/reuse/__init__.py#L66-L77" target="_blank" rel="noreferrer noopener"><code>reuse</code>-Tool explizit ignoriert</a> und benötigen daher weder Kommentar-Header noch <code>.license</code>-Begleitdateien.</li>
<li>Wer eine Duplizierung des Lizenztextes vermeiden möchte, sollte beachten: <code>reuse lint</code> folgt Symlinks, ein symbolischer Link von <code>LICENSES/&lt;lizenz&gt;.txt</code> zur Root-Datei funktioniert also. Umgekehrt bringt ein deutlich sinnigerer Link von <code>LICENSE</code> auf <code>LICENSES/&lt;lizenz&gt;.txt</code> nichts, da <a href="https://github.com/licensee/licensee/pull/42" target="_blank" rel="noreferrer noopener">Licensee leider auch keine Symlinks unterstützt</a>. Daher empfehle ich eine echte <em>Kopie</em> der Lizenzdatei im Wurzelverzeichnis als aktuell zuverlässigsten Weg, um GitHubs Probleme bei der Lizenzanzeige zu umgehen.</li>
</ol>
<p>Aus meiner Sicht sollte dieser Workaround <em>nur</em> dann verwendet werden, wenn das gesamte Projekt unter einer einzigen Lizenz steht. Das vermeidet Missverständnisse und Konflikte – und in allen anderen Fällen lohnt es sich, GitHubs Einschränkungen einfach zu ignorieren.</p>
<h3 id="jahreszahlen-und--angaben-in-copyright-texten" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#jahreszahlen-und--angaben-in-copyright-texten" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="jahreszahlen-und--angaben-in-copyright-texten">Jahreszahlen und -angaben in Copyright-Texten</a></h3><p>Das ist zwar kein zentrales REUSE-Thema, aber mir ist aufgefallen, dass Jahreszahlen in Copyright-Angaben sehr oft Diskussionsthema werden, wenn REUSE in einem Projekt eingeführt wird. <a href="https://en.wikipedia.org/wiki/IANAL" target="_blank" rel="noreferrer noopener">IANAL</a>, aber rechtlich gesehen ist es in der Regel nicht <em>erforderlich</em>, das Copyright-Jahr regelmäßig zu aktualisieren oder überhaupt anzugehen (<a href="https://www.copyright.gov/circs/circ03.pdf" target="_blank" rel="noreferrer noopener">auch nicht aus US-Sicht</a>). Entscheidend ist eher die leichte Nachvollziehbarkeit des Jahrs der ersten Veröffentlichung oder des ersten Code-Beitrags.</p>
<p>Trotzdem ist es gängige Praxis, die Jahresangabe zu aktualisieren. Ich finde dies auch persönlich sinnvoll, da es gegenüber Dritten signalisiert, dass das Projekt aktiv gepflegt wird und auch die Kontaktdaten wahrscheinlich noch aktuell sind. Ich empfehle zur Aktualisierung die folgende pragmatische Vorgehensweise, die sich auch für andere Projekte gut eignet:</p>
<ul>
<li>Die Jahresangabe zwar stets aktuell halten, aber <strong>nur an zentraler Stelle</strong> wie in der <code>README.md</code>. So bleibt der Aufwand überschaubar.</li>
<li>Mehrere Jahre einfach durch Kommas getrennt auflisten oder bei aufeinanderfolgenden Jahren eine Zeitspanne angeben (<code>JahrX–JahrY</code>).</li>
<li>Beispiel:
<ul>
<li>Die erste Veröffentlichung und Copyright-Erklärung war <code>Copyright (c) 2013</code>.</li>
<li>Es gab Veröffentlichungen oder Updates in mehreren, aber nicht allen Jahren danach:
<ul>
<li>2023 → <code>Copyright (c) 2013, 2015, 2018-2021, 2023</code>.</li>
<li>2015 → <code>Copyright (c) 2013, 2015</code>.</li>
<li>2018 → <code>Copyright (c) 2013, 2015, 2018</code>.</li>
<li>2019 → <code>Copyright (c) 2013, 2015, 2018, 2019</code>.</li>
<li>2020 → <code>Copyright (c) 2013, 2015, 2018-2020</code>.</li>
<li>2021 → <code>Copyright (c) 2013, 2015, 2018-2021</code>.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="fazit" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#fazit" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="fazit">Fazit</a></h2><p>Lizenzklarheit ist eine grundlegende Voraussetzung für nachhaltige Zusammenarbeit im Open-Source-Bereich. Die REUSE-Spezifikation ersetzt dabei weder rechtliche Rahmenbedingungen noch die Entscheidung für eine bestimmte Lizenz. Sie sorgt aber dafür, dass das oft chaotische Lizenzmanagement <strong>vorhersehbar</strong>, <strong>klar</strong> und <strong>automatisierbar</strong> wird.</p>
<p>Gerade bei bestehenden Codebases kann sich die Einführung von REUSE zunächst nach zusätzlichem Aufwand anfühlen. Doch sobald alles eingerichtet ist, zahlt sich dieser Schritt aus: Das Projekt wird leichter verständlich, einfacher wartbar, besser paketierbar und tatsächlich besser &hellip; <strong>wiederverwendbar</strong> (REUSE it  🙂). REUSE hilft dabei, die rechtliche Struktur eines Projekts so zu beschreiben, dass Menschen und Maschinen gleichermaßen damit arbeiten können. Und genau das ist enorm viel wert.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Die Nutzung des <code>LICENSES/</code>-Verzeichnisses wird auch von den <a href="https://github.com/coreinfrastructure/best-practices-badge/blob/main/docs/criteria.md#license_location" target="_blank" rel="noreferrer noopener">CII Best Practices</a> empfohlen und ist z. B. im <a href="https://github.com/torvalds/linux/tree/master/LICENSES" target="_blank" rel="noreferrer noopener">Linux-Kernel</a> umgesetzt.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Quelle: <a href="https://download.fsfe.org/videos/reuse/screencasts/reuse-tool.gif" target="_blank" rel="noreferrer noopener">https://download.fsfe.org/videos/reuse/screencasts/reuse-tool.gif</a>, Copyright © 2001-2025 <a href="https://fsfe.org/" target="_blank" rel="noreferrer noopener">Free Software Foundation Europe</a>, Verbatim copying and distribution is permitted in any medium, provided this notice is preserved.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><category scheme="taxonomy:tags" term="open-source" label="open-source"/><category scheme="taxonomy:tags" term="license" label="license"/><category scheme="taxonomy:tags" term="toolbox" label="toolbox"/><category scheme="taxonomy:tags" term="fsfe" label="fsfe"/><category scheme="taxonomy:tags" term="reuse" label="reuse"/><category scheme="taxonomy:tags" term="compliance" label="compliance"/><category scheme="taxonomy:tags" term="spdx" label="spdx"/></entry><entry><title type="html">Systemeinblicke mit Kommandozeilentools: lslogins und lsmod</title><id>tag:foundata.com,2024-12-30:/de/blog/2024/systemeinblicke-kommandozeile-lslogins-lsmod/</id><published>2024-12-30T19:57:00Z</published><updated>2024-12-30T19:57:00Z</updated><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lslogins-lsmod/?utm_source=feed-atom" rel="alternate" type="text/html"/><link href="https://foundata.com/en/blog/2024/system-insights-command-line-lslogins-lsmod/?utm_source=feed-atom" rel="alternate" type="text/html" hreflang="en"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lsof-lsblk/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: lsof und lsblk"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-dmidecode-lspci/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: dmidecode und lspci"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: lscpu und lsusb"/><link href="https://foundata.com/de/blog/2024/cve-2024-6387-regresshion-openssh-rce-sicherheitsluecke/?utm_source=feed-atom" rel="related" type="text/html" title="OpenSSH-Sicherheitslücke: regreSSHion (CVE-2024-6387), Remote Code Execution (RCE)"/><link href="https://foundata.com/de/blog/2024/quectel-em05-g-thinkpad-t14-gen4-fedora-linux/?utm_source=feed-atom" rel="related" type="text/html" title="Quectel EM05-G (LTE-Modul) in einem ThinkPad T14 Gen4 unter Fedora 39 und 40"/><author><name>Andreas Haerter</name><uri>https://andreashaerter.com/</uri></author><summary type="html">Ein Artikel, der die Befehlszeilen-Werkzeuge `lslogins` und `lsmod` vorstellt.</summary><content type="html" xml:base="https://foundata.com/"><![CDATA[<p><em>Hinweis: Dieser Artikel erschien vorab in <a href="https://fedoramagazine.org/system-insights-command-line-lslogins-lsmod/" target="_blank" rel="noreferrer noopener">in englischer Sprache im Fedora Magazin</a>.</em></p>
<p>In Fortsetzung unserer <a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/">Serie</a> <a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-dmidecode-lspci/">von</a> <a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lsof-lsblk/">Befehlen</a>, die Einblicke in die inneren Abläufe eines Linux-Systems bieten, wenden wir uns nun einfacheren Befehlen wie <code>lslogins</code> und <code>lsmod</code> zu. Diese Tools liefern Informationen über Benutzerkonten bzw. <a href="https://en.wikipedia.org/wiki/Monolithic_kernel#Loadable_modules" target="_blank" rel="noreferrer noopener">Kernel-Module</a>.</p>
<h2 id="lslogins-benutzerkonten-untersuchen" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#lslogins-benutzerkonten-untersuchen" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="lslogins-benutzerkonten-untersuchen"><code>lslogins</code>: Benutzerkonten untersuchen</a></h2><p><code>lslogins</code> ist ein Befehl, der detaillierte Informationen über Benutzerkonten auf dem System extrahiert und anzeigt. Das Programm bezieht Daten aus den Dateien <code>/etc/passwd</code> und <code>/etc/shadow</code> sowie aus Systemprotokollen und ist besonders nützlich, um nach fehlgeschlagenen Anmeldeversuchen zu suchen und Gruppenmitgliedschaften aufzulisten.</p>
<h3 id="nutzung" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#nutzung" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="nutzung">Nutzung</a></h3><p>Ohne Argumente ausgeführt zeigt der Befehl eine Zusammenfassung aller Benutzerkonten an:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">lslogins
</span></span></code></pre></div><p>Dies bietet einen Überblick einschließlich UID (Benutzer-ID), GID (Gruppen-ID), Benutzername und Details zur letzten Anmeldung.</p>
<h3 id="häufige-optionen-und-verwendungsbeispiele" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#h%c3%a4ufige-optionen-und-verwendungsbeispiele" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="häufige-optionen-und-verwendungsbeispiele">Häufige Optionen und Verwendungsbeispiele</a></h3><ul>
<li><code>-u</code>: Zeigt nur Benutzerkonten und <code>root</code> an (filtert Systemkonten mit UIDs unter 1000 heraus).</li>
<li><code>-G</code>: Zeigt Informationen über bestehende Gruppen an.</li>
<li><code>-g &lt;gruppe&gt;</code>: Zeigt Benutzer einer bestimmten Gruppe an (z.B. <code>wheel</code>, die normalerweise <code>sudo</code>-Berechtigungen auf einem Red Hat-System hat).</li>
<li><code>-e</code>: Zeigt in einem exportierbaren Key-Value-Ausgabeformat an, getrennt durch Leerzeichen.</li>
<li><code>-L</code>: Listet letzte Anmeldungen und Passwort-Informationen auf (leer, angemeldet, nologin).</li>
</ul>
<p>Beispiele, die die letzten Anmeldungen und Passwort-Informationen (leer, angemeldet, nologin) von Nicht-System-Benutzerkonten auf meinem Laptop sowie Gruppenmitgliedschaften auflisten:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lslogins -L -p -u
</span></span><span class="line"><span class="cl"> UID USER      LAST-TTY LAST-HOSTNAME LAST-LOGIN PWD-EMPTY PWD-LOCK PWD-DENY NOLOGIN HUSHED PWD-METHOD
</span></span><span class="line"><span class="cl">   <span class="m">0</span> root                                                                          <span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="m">1000</span> ahaerter  tty2     tty2               01:16                                   <span class="m">0</span>      <span class="m">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ lslogins -G -u
</span></span><span class="line"><span class="cl"> UID USER       GID GROUP     SUPP-GIDS  SUPP-GROUPS
</span></span><span class="line"><span class="cl">   <span class="m">0</span> root         <span class="m">0</span> root
</span></span><span class="line"><span class="cl"><span class="m">1000</span> ahaerter  <span class="m">1000</span> user      971,10,977 docker,wheel
</span></span></code></pre></div><h2 id="lsmod-kernel-module-zur-weiteren-inspektion-auflisten" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#lsmod-kernel-module-zur-weiteren-inspektion-auflisten" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="lsmod-kernel-module-zur-weiteren-inspektion-auflisten"><code>lsmod</code>: Kernel-Module zur weiteren Inspektion auflisten</a></h2><p>Der Linux-Kernel ist <a href="https://en.wikipedia.org/wiki/Tanenbaum%E2%80%93Torvalds_debate" target="_blank" rel="noreferrer noopener">grundsätzlich monolithisch</a> im Design, bietet aber auch die Möglichkeit, Module zur Laufzeit zu laden und zu entladen. Ein Kernel-Modul wird allgemein als Komponente oder Erweiterung des Kernels verstanden. Zum Beispiel werden Hardware-Treiber (z.B. WLAN-Karten, Soundkarten usw.) normalerweise als Module implementiert. Der Befehl <code>lsmod</code> bietet eine Übersicht über alle aktuell geladenen Kernel-Module.</p>
<h3 id="nutzung-1" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#nutzung-1" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="nutzung-1">Nutzung</a></h3><p>Um die Übersicht aufzurufen führen wir zunächst den Befehl einfach aus:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">lsmod
</span></span></code></pre></div><p>Dies zeigt eine Tabelle mit drei Spalten an:</p>
<ol>
<li>Module (Modul): Der Name des Kernel-Moduls.</li>
<li>Size (Größe): Die Speichergröße (in Bytes), die das Modul belegt.</li>
<li>Used by (Verwendet von): Listet die abhängigen Module oder Kernel-Funktionen auf.</li>
</ol>
<p>Beispielausgabe:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsmod
</span></span><span class="line"><span class="cl">Module                  Size  Used by
</span></span><span class="line"><span class="cl">overlay               <span class="m">241664</span>  <span class="m">0</span>
</span></span><span class="line"><span class="cl">tun                    <span class="m">73728</span>  <span class="m">2</span>
</span></span><span class="line"><span class="cl">snd_usb_audio         <span class="m">614400</span>  <span class="m">0</span>
</span></span><span class="line"><span class="cl">snd_usbmidi_lib        <span class="m">57344</span>  <span class="m">1</span> snd_usb_audio
</span></span><span class="line"><span class="cl">snd_ump                <span class="m">49152</span>  <span class="m">1</span> snd_usb_audio
</span></span><span class="line"><span class="cl">snd_rawmidi            <span class="m">57344</span>  <span class="m">2</span> snd_usbmidi_lib,snd_ump
</span></span><span class="line"><span class="cl">hid_jabra              <span class="m">16384</span>  <span class="m">0</span>
</span></span><span class="line"><span class="cl">uinput                 <span class="m">20480</span>  <span class="m">0</span>
</span></span><span class="line"><span class="cl">rfcomm                <span class="m">102400</span>  <span class="m">16</span>
</span></span><span class="line"><span class="cl">snd_seq_dummy          <span class="m">12288</span>  <span class="m">0</span>
</span></span><span class="line"><span class="cl">snd_hrtimer            <span class="m">12288</span>  <span class="m">1</span>
</span></span><span class="line"><span class="cl">wireguard             <span class="m">122880</span>  <span class="m">0</span>
</span></span><span class="line"><span class="cl">curve25519_x86_64      <span class="m">36864</span>  <span class="m">1</span> wireguard
</span></span><span class="line"><span class="cl">libcurve25519_generic    <span class="m">45056</span>  <span class="m">2</span> curve25519_x86_64,wireguard
</span></span><span class="line"><span class="cl">ip6_udp_tunnel         <span class="m">16384</span>  <span class="m">1</span> wireguard
</span></span><span class="line"><span class="cl">udp_tunnel             <span class="m">36864</span>  <span class="m">1</span> wireguard
</span></span><span class="line"><span class="cl">nf_conntrack_netbios_ns    <span class="m">12288</span>  <span class="m">1</span>
</span></span><span class="line"><span class="cl">nf_conntrack_broadcast    <span class="m">12288</span>  <span class="m">1</span> nf_conntrack_netbios_ns
</span></span><span class="line"><span class="cl">nft_fib_inet           <span class="m">12288</span>  <span class="m">1</span>
</span></span><span class="line"><span class="cl">nft_fib_ipv4           <span class="m">12288</span>  <span class="m">1</span> nft_fib_inet
</span></span><span class="line"><span class="cl">nft_fib_ipv6           <span class="m">12288</span>  <span class="m">1</span> nft_fib_inet
</span></span><span class="line"><span class="cl">nft_fib                <span class="m">12288</span>  <span class="m">3</span> nft_fib_ipv6,nft_fib_ipv4,nft_fib_inet
</span></span><span class="line"><span class="cl"><span class="o">[</span>...<span class="o">]</span>
</span></span></code></pre></div><h3 id="verwendungsbeispiele" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#verwendungsbeispiele" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="verwendungsbeispiele">Verwendungsbeispiele</a></h3><p>Obwohl <code>lsmod</code> keine Optionen hat, bietet einfache Kombination mit anderen Befehlen weiteren Nutzen:</p>
<ul>
<li>Kombination mit <code>modinfo</code>: Liefert detaillierte Informationen über ein bestimmtes Modul, einschließlich Autor, Lizenz und Beschreibung.</li>
<li>Debugging mit <code>dmesg</code>: Hierbei werden Kernel-Protokollmeldungen mit geladenen Modulen korreliert, um Boot-Zeit-Probleme zu diagnostizieren.</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">modinfo &lt;modulname&gt;
</span></span><span class="line"><span class="cl">sudo dmesg <span class="p">|</span> grep &lt;modulname&gt;
</span></span></code></pre></div><h2 id="fazit" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#fazit" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="fazit">Fazit</a></h2><p>Befehle wie <code>lslogins</code> und <code>lsmod</code> können einfache Einblicke in die Benutzerverwaltung und das Kernel-Verhalten geben. Sie sind ohne große Vorarbeiten auszuprobieren und die Ausgabe mit anderen Tools leicht kombinierbar.</p>
]]></content><category scheme="taxonomy:tags" term="toolbox" label="toolbox"/><category scheme="taxonomy:tags" term="lslogins" label="lslogins"/><category scheme="taxonomy:tags" term="lsmod" label="lsmod"/></entry><entry><title type="html">Systemeinblicke mit Kommandozeilentools: lsof und lsblk</title><id>tag:foundata.com,2024-09-11:/de/blog/2024/systemeinblicke-kommandozeile-lsof-lsblk/</id><published>2024-09-11T20:21:00Z</published><updated>2024-09-11T20:21:00Z</updated><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lsof-lsblk/?utm_source=feed-atom" rel="alternate" type="text/html"/><link href="https://foundata.com/en/blog/2024/system-insights-command-line-lsof-lsblk/?utm_source=feed-atom" rel="alternate" type="text/html" hreflang="en"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-dmidecode-lspci/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: dmidecode und lspci"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: lscpu und lsusb"/><link href="https://foundata.com/de/blog/2024/cve-2024-6387-regresshion-openssh-rce-sicherheitsluecke/?utm_source=feed-atom" rel="related" type="text/html" title="OpenSSH-Sicherheitslücke: regreSSHion (CVE-2024-6387), Remote Code Execution (RCE)"/><link href="https://foundata.com/de/blog/2024/quectel-em05-g-thinkpad-t14-gen4-fedora-linux/?utm_source=feed-atom" rel="related" type="text/html" title="Quectel EM05-G (LTE-Modul) in einem ThinkPad T14 Gen4 unter Fedora 39 und 40"/><link href="https://foundata.com/de/blog/2024/verwende-gpl-or-later/?utm_source=feed-atom" rel="related" type="text/html" title='Bitte verwende GPLv3 "or-later" statt "only"'/><author><name>Andreas Haerter</name><uri>https://andreashaerter.com/</uri></author><summary type="html">Ein Artikel, der die Befehlszeilen-Werkzeuge `lsof` und `lsblk` vorstellt.</summary><content type="html" xml:base="https://foundata.com/"><![CDATA[<p><em>Hinweis: Dieser Artikel erschien vorab in <a href="https://fedoramagazine.org/system-insights-with-command-line-tools-lsof-and-lsblk/" target="_blank" rel="noreferrer noopener">in englischer Sprache im Fedora Magazin</a>.</em></p>
<p>In unserer fortlaufenden Serie über Linux-Systemwerkzeuge und -einblicke werfen wir einen Blick auf grundlegende Kommandozeilen-Dienstprogramme, die Informationen über die Hardware und den Status des Systems liefern. Nach unseren vorherigen Artikeln über <a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/"><code>lscpu</code>, <code>lsusb</code></a>, <a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-dmidecode-lspci/"><code>dmidecode</code> und <code>lspci</code></a>, wenden wir uns nun <code>lsof</code> und <code>lsblk</code> zu. Diese Tools sind besonders nützlich für die Untersuchung offener Dateien, aktiver Netzwerkverbindungen und gemounteter Block-Devices auf unserem Linux-System.</p>
<h2 id="übersicht-geöffneter-dateien-mit-lsof" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#%c3%bcbersicht-ge%c3%b6ffneter-dateien-mit-lsof" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="übersicht-geöffneter-dateien-mit-lsof">Übersicht geöffneter Dateien mit <code>lsof</code></a></h2><p><code>lsof</code> (list open files) ist ein mächtiges Kommandozeilen-Tool. Da <a href="https://de.wikipedia.org/wiki/Everything_is_a_file" target="_blank" rel="noreferrer noopener">fast alles in Linux als Datei behandelt wird</a>, bietet <code>lsof</code> detaillierte Einblicke in viele Teile des Systems, indem es auflistet, welche Dateien verwendet werden, welche Prozesse auf sie zugreifen und sogar welche Netzwerkports offen sind (siehe z.B. Wikipedia zu <a href="https://en.wikipedia.org/wiki/Network_socket" target="_blank" rel="noreferrer noopener">Network socket</a> für weitere Informationen).</p>
<h3 id="nutzung" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#nutzung" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="nutzung">Nutzung</a></h3><p>Wir führen zunächst den grundlegenden <code>lsof</code>-Befehl aus, um einen Überblick über die offenen Dateien des Systems zu erhalten:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo lsof
</span></span></code></pre></div><p><code>sudo</code> wurde zum erlangen erweiterter Rechte verwendet. Dies ist erforderlich, um Informationen über Dateien zu erhalten, die von Prozessen geöffnet wurden, welche nicht über das eigene Benutzerkonto gestartet wurden. Der Befehl gibt viele Informationen aus, wir werden die Ausgabe in den folgenden Beispielen auf spezifische Informationen zu einigen häufigen Anwendungsfällen eingrenzen.</p>
<h3 id="beispiel-1-finden-offener-dateien-nach-benutzer-oder-prozess" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#beispiel-1-finden-offener-dateien-nach-benutzer-oder-prozess" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="beispiel-1-finden-offener-dateien-nach-benutzer-oder-prozess">Beispiel 1: Finden offener Dateien nach Benutzer oder Prozess</a></h3><p>Um zu identifizieren, welche Dateien ein bestimmter Benutzer oder Prozess geöffnet hat, kann <code>lsof</code> sehr hilfreich sein.</p>
<p>Um alle von einem bestimmten Benutzer geöffneten Dateien aufzulisten:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo lsof -u &lt;benutzername&gt;
</span></span></code></pre></div><p>Dies gibt eine Liste der offenen Dateien zurück, die dem angegebenen Benutzer gehören. Zum Beispiel:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo lsof -u johndoe
</span></span></code></pre></div><p>Man sieht Details wie die Prozess-ID (PID), den Datei-Deskriptor, -typ und -pfad.</p>
<p>Der <code>-p</code>-Flag kann genutzt werden um nach Prozess-ID (PID) zu filtern:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsof -p &lt;PID&gt;
</span></span></code></pre></div><p>Dies ist besonders nützlich für die Fehlersuche bei Problemen mit bestimmten Prozessen, beispielsweise um zu überprüfen will, welche Dateien von einem bestimmten Dienst offen gehalten werden. <code>sudo</code> wird verwendet, wenn der Zielprozess nicht dem eigenen Benutzer gehört.</p>
<p>Beispielausgabe:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsof -p <span class="m">873648</span>
</span></span><span class="line"><span class="cl">COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  cwd    DIR   0,39     <span class="m">8666</span>      <span class="m">257</span> /home/user
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  rtd    DIR   0,35      <span class="m">158</span>      <span class="m">256</span> /
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  txt    REG   0,35  <span class="m">1443376</span> <span class="m">12841259</span> /usr/bin/bash
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  mem    REG   0,33          <span class="m">12841259</span> /usr/bin/bash <span class="o">(</span>path <span class="nv">dev</span><span class="o">=</span>0,35<span class="o">)</span>
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  mem    REG   0,33          <span class="m">14055145</span> /usr/lib/locale/locale-archive <span class="o">(</span>path <span class="nv">dev</span><span class="o">=</span>0,35<span class="o">)</span>
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  mem    REG   0,33          <span class="m">14055914</span> /usr/lib64/libc.so.6 <span class="o">(</span>path <span class="nv">dev</span><span class="o">=</span>0,35<span class="o">)</span>
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  mem    REG   0,33          <span class="m">13309071</span> /usr/lib64/libtinfo.so.6.4 <span class="o">(</span>path <span class="nv">dev</span><span class="o">=</span>0,35<span class="o">)</span>
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  mem    REG   0,33          <span class="m">14059926</span> /usr/lib64/gconv/gconv-modules.cache <span class="o">(</span>path <span class="nv">dev</span><span class="o">=</span>0,35<span class="o">)</span>
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  mem    REG   0,33          <span class="m">14055911</span> /usr/lib64/ld-linux-x86-64.so.2 <span class="o">(</span>path <span class="nv">dev</span><span class="o">=</span>0,35<span class="o">)</span>
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user    0u   CHR  136,3      0t0        <span class="m">6</span> /dev/pts/3
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user    1u   CHR  136,3      0t0        <span class="m">6</span> /dev/pts/3
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user    2u   CHR  136,3      0t0        <span class="m">6</span> /dev/pts/3
</span></span><span class="line"><span class="cl">bash    <span class="m">873648</span> user  255u   CHR  136,3      0t0        <span class="m">6</span> /dev/pts/3
</span></span></code></pre></div><h3 id="beispiel-2-identifizierung-offener-netzwerkverbindungen-über-sockets" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#beispiel-2-identifizierung-offener-netzwerkverbindungen-%c3%bcber-sockets" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="beispiel-2-identifizierung-offener-netzwerkverbindungen-über-sockets">Beispiel 2: Identifizierung offener Netzwerkverbindungen über Sockets</a></h3><p>Dank der Fähigkeit, Netzwerkverbindungen aufzulisten, ist <code>lsof</code> auch ein praktischer Helfer für die Diagnose netzwerkbezogener Probleme. Dies ist insbesondere praktisch, da es normalerweise auch auf besonders gehärteten, minimal-Systeminstallation verfügbar ist.</p>
<p>Um alle offenen Netzwerkverbindungen (TCP/UDP <a href="https://en.wikipedia.org/wiki/Network_socket" target="_blank" rel="noreferrer noopener">Sockets</a>) anzuzeigen, nutzt man den <code>-i</code>-Flag:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo lsof -i
</span></span></code></pre></div><p>Dies listet die aktiven Neztwerkverbindungen zusammen mit dem zugehörigen Protokoll, Port und Prozessdetails auf.</p>
<p>Man kann dabei auch nach bestimmten Protokollen (wie TCP oder UDP) filtern, IPv4 und v6 ein- oder ausschließen und mehrere Werte kombinieren (der „Beispiel“-Abschnitt von <code>man lsof</code> bietet viele nützliche Informationen, einschließlich der Möglichkeit zur Negation von Kriterien):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo lsof -i tcp
</span></span><span class="line"><span class="cl">$ sudo lsof -i udp
</span></span><span class="line"><span class="cl">$ sudo lsof -i 4tcp
</span></span><span class="line"><span class="cl">$ sudo lsof -i 6tcp
</span></span><span class="line"><span class="cl">$ sudo lsof -i 4tcp@example.com
</span></span></code></pre></div><p>Verbindungen zu einem bestimmten Port können wie folge gelistet werden:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo lsof -i :&lt;portnummer&gt;
</span></span></code></pre></div><p>Beispielsweise Verbindungen zu Port 22 (SSH):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo lsof -i :22
</span></span><span class="line"><span class="cl">COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
</span></span><span class="line"><span class="cl">sshd    <span class="m">904379</span> root    3u  IPv4 <span class="m">5622530</span>      0t0  TCP *:ssh <span class="o">(</span>LISTEN<span class="o">)</span>
</span></span><span class="line"><span class="cl">sshd    <span class="m">904379</span> root    4u  IPv6 <span class="m">5622532</span>      0t0  TCP *:ssh <span class="o">(</span>LISTEN<span class="o">)</span>
</span></span></code></pre></div><p>Diese Übersichten können sehr hilfreich dabei sein, um unbefugte Verbindungen zu identifizieren oder einfach die Netzwerkaktivität auf einem System für Debugging-Zwecke zu überwachen.</p>
<h2 id="untersuchung-von-block-devices-mit-lsblk" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#untersuchung-von-block-devices-mit-lsblk" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="untersuchung-von-block-devices-mit-lsblk">Untersuchung von Block-Devices mit <code>lsblk</code></a></h2><p>Ein weiteres nützliches Tool ist <code>lsblk</code>, da es Informationen über alle verfügbaren <a href="https://en.wikipedia.org/wiki/Device_file#Block_devices" target="_blank" rel="noreferrer noopener">Block-Devices</a> des Systems liefert. Block-Devices sind unter anderem Festplatten, SSDs und USB-Speicher. Das Kommandobietet eine baumähnliche Ansicht und hilft dabei, die Beziehungen zwischen Partitionen, Geräten und ihren Mount-Points (Einhängepunkte im Verzeichnisbaum) zu verstehen.</p>
<h3 id="nutzung-1" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#nutzung-1" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="nutzung-1">Nutzung</a></h3><p>Das Ausführen von <code>lsblk</code> ohne Optionen erzeugt eine übersichtliche, hierarchische Struktur der Block-Devices:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsblk
</span></span></code></pre></div><p>Sie zeigt alle Block-Devices in einer Baumstruktur, einschließlich ihrer Größe, ihres Typs (Festplatte, Partition) und ihres Mount-Punkts (falls zutreffend).</p>
<h3 id="beispiele" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#beispiele" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="beispiele">Beispiele</a></h3><p>Für eine Übersicht über die Dateisysteme und deren Eigenschaften wird das <code>-f</code>-Flag verwendet:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsblk -f
</span></span></code></pre></div><p>Dies zeigt nicht nur die Devices se;bst, sondern auch Details über die Dateisysteme auf jeder Partition, einschließlich des Typs (z.B. <code>ext4</code>, <code>vfat</code>, <code>swap</code>), der <code>UUID</code> und der aktuellen Mount-Points.</p>
<p>Wenn man weniger Informationen über die Geräte selbst wünscht (ohne Partitionen oder Mount-Punkte anzuzeigen), ist die <code>-d</code> Option nützlich:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsblk -d
</span></span></code></pre></div><p>Es gibt auch eine <code>-J</code> oder <code>--json</code> Option. Bei Verwendung gibt der Befehl die Informationen im JSON-Format aus. Dies bietet eine strukturierte Ansicht, die besonders nützlich für Scripting und Automatisierung ist.</p>
<p>Beispielausgaben von meinem Laptop (einige lange Informationen wie UUIDs wurden zur besseren Lesbarkeit gekürzt):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsblk
</span></span><span class="line"><span class="cl">NAME                     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
</span></span><span class="line"><span class="cl">sda                        8:0    <span class="m">1</span>     0B  <span class="m">0</span> disk
</span></span><span class="line"><span class="cl">sdb                        8:16   <span class="m">1</span>     0B  <span class="m">0</span> disk
</span></span><span class="line"><span class="cl">sdc                        8:32   <span class="m">1</span>     0B  <span class="m">0</span> disk
</span></span><span class="line"><span class="cl">zram0                    252:0    <span class="m">0</span>     8G  <span class="m">0</span> disk  <span class="o">[</span>SWAP<span class="o">]</span>
</span></span><span class="line"><span class="cl">nvme0n1                  259:0    <span class="m">0</span> 931,5G  <span class="m">0</span> disk
</span></span><span class="line"><span class="cl">├─nvme0n1p1              259:1    <span class="m">0</span>   600M  <span class="m">0</span> part  /boot/efi
</span></span><span class="line"><span class="cl">├─nvme0n1p2              259:2    <span class="m">0</span>     1G  <span class="m">0</span> part  /boot
</span></span><span class="line"><span class="cl">└─nvme0n1p3              259:3    <span class="m">0</span> 929,9G  <span class="m">0</span> part
</span></span><span class="line"><span class="cl">  └─luks-84257c20<span class="o">[</span>...<span class="o">]</span>   253:0    <span class="m">0</span> 929,9G  <span class="m">0</span> crypt /home
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ lsblk -d
</span></span><span class="line"><span class="cl">NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
</span></span><span class="line"><span class="cl">sda       8:0    <span class="m">1</span>     0B  <span class="m">0</span> disk
</span></span><span class="line"><span class="cl">sdb       8:16   <span class="m">1</span>     0B  <span class="m">0</span> disk
</span></span><span class="line"><span class="cl">sdc       8:32   <span class="m">1</span>     0B  <span class="m">0</span> disk
</span></span><span class="line"><span class="cl">zram0   252:0    <span class="m">0</span>     8G  <span class="m">0</span> disk <span class="o">[</span>SWAP<span class="o">]</span>
</span></span><span class="line"><span class="cl">nvme0n1 259:0    <span class="m">0</span> 931,5G  <span class="m">0</span> disk
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ lsblk -f
</span></span><span class="line"><span class="cl">NAME                FSTYPE <span class="o">[</span>...<span class="o">]</span>LABEL    UUID           FSAVAIL FSUSE% MOUNTPOINTS
</span></span><span class="line"><span class="cl">sda
</span></span><span class="line"><span class="cl">sdb
</span></span><span class="line"><span class="cl">sdc
</span></span><span class="line"><span class="cl">zram0                                                                  <span class="o">[</span>SWAP<span class="o">]</span>
</span></span><span class="line"><span class="cl">nvme0n1
</span></span><span class="line"><span class="cl">├─nvme0n1p1         vfat                 4C5B-4355      579,7M  3%     /boot/efi
</span></span><span class="line"><span class="cl">├─nvme0n1p2         ext4                 30eff827<span class="o">[</span>...<span class="o">]</span>  605M    31%    /boot
</span></span><span class="line"><span class="cl">└─nvme0n1p3         crypto_LUKS          84257c20<span class="o">[</span>...<span class="o">]</span>
</span></span><span class="line"><span class="cl">  └─luks-84257<span class="o">[</span>...<span class="o">]</span> btrfs       fe<span class="o">[</span>...<span class="o">]</span>  666f9d6f<span class="o">[</span>...<span class="o">]</span>  303,1G  67%    /home
</span></span><span class="line"><span class="cl">                                                                       /
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ lsblk -f -J
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">   <span class="s2">&#34;blockdevices&#34;</span>: <span class="o">[</span>
</span></span><span class="line"><span class="cl">   <span class="o">[</span>...<span class="o">]</span>,<span class="o">{</span>
</span></span><span class="line"><span class="cl">         <span class="s2">&#34;name&#34;</span>: <span class="s2">&#34;nvme0n1&#34;</span>,
</span></span><span class="line"><span class="cl">         <span class="s2">&#34;fstype&#34;</span>: null,
</span></span><span class="line"><span class="cl">         <span class="s2">&#34;fsver&#34;</span>: null,
</span></span><span class="line"><span class="cl">         <span class="s2">&#34;label&#34;</span>: null,
</span></span><span class="line"><span class="cl">         <span class="s2">&#34;uuid&#34;</span>: null,
</span></span><span class="line"><span class="cl">         <span class="s2">&#34;fsavail&#34;</span>: null,
</span></span><span class="line"><span class="cl">         <span class="s2">&#34;fsuse%&#34;</span>: null,
</span></span><span class="line"><span class="cl">         <span class="s2">&#34;mountpoints&#34;</span>: <span class="o">[</span>
</span></span><span class="line"><span class="cl">             null
</span></span><span class="line"><span class="cl">         <span class="o">]</span>,
</span></span><span class="line"><span class="cl">         <span class="s2">&#34;children&#34;</span>: <span class="o">[</span>
</span></span><span class="line"><span class="cl">            <span class="o">{</span>
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;name&#34;</span>: <span class="s2">&#34;nvme0n1p1&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fstype&#34;</span>: <span class="s2">&#34;vfat&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fsver&#34;</span>: <span class="s2">&#34;FAT32&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;label&#34;</span>: null,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;uuid&#34;</span>: <span class="s2">&#34;4C5B-4355&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fsavail&#34;</span>: <span class="s2">&#34;579,7M&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fsuse%&#34;</span>: <span class="s2">&#34;3%&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;mountpoints&#34;</span>: <span class="o">[</span>
</span></span><span class="line"><span class="cl">                   <span class="s2">&#34;/boot/efi&#34;</span>
</span></span><span class="line"><span class="cl">               <span class="o">]</span>
</span></span><span class="line"><span class="cl">            <span class="o">}</span>,<span class="o">{</span>
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;name&#34;</span>: <span class="s2">&#34;nvme0n1p2&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fstype&#34;</span>: <span class="s2">&#34;ext4&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fsver&#34;</span>: <span class="s2">&#34;1.0&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;label&#34;</span>: null,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;uuid&#34;</span>: <span class="s2">&#34;30eff827-[...]&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fsavail&#34;</span>: <span class="s2">&#34;605M&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fsuse%&#34;</span>: <span class="s2">&#34;31%&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;mountpoints&#34;</span>: <span class="o">[</span>
</span></span><span class="line"><span class="cl">                   <span class="s2">&#34;/boot&#34;</span>
</span></span><span class="line"><span class="cl">               <span class="o">]</span>
</span></span><span class="line"><span class="cl">            <span class="o">}</span>,<span class="o">{</span>
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;name&#34;</span>: <span class="s2">&#34;nvme0n1p3&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fstype&#34;</span>: <span class="s2">&#34;crypto_LUKS&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fsver&#34;</span>: <span class="s2">&#34;2&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;label&#34;</span>: null,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;uuid&#34;</span>: <span class="s2">&#34;84257c20-[...]&#34;</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fsavail&#34;</span>: null,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;fsuse%&#34;</span>: null,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;mountpoints&#34;</span>: <span class="o">[</span>
</span></span><span class="line"><span class="cl">                   null
</span></span><span class="line"><span class="cl">               <span class="o">]</span>,
</span></span><span class="line"><span class="cl">               <span class="s2">&#34;children&#34;</span>: <span class="o">[</span>
</span></span><span class="line"><span class="cl">                  <span class="o">{</span>
</span></span><span class="line"><span class="cl">                     <span class="s2">&#34;name&#34;</span>: <span class="s2">&#34;luks-[...]&#34;</span>,
</span></span><span class="line"><span class="cl">                     <span class="s2">&#34;fstype&#34;</span>: <span class="s2">&#34;btrfs&#34;</span>,
</span></span><span class="line"><span class="cl">                     <span class="s2">&#34;fsver&#34;</span>: null,
</span></span><span class="line"><span class="cl">                     <span class="s2">&#34;label&#34;</span>: <span class="s2">&#34;fedora_localhost-live&#34;</span>,
</span></span><span class="line"><span class="cl">                     <span class="s2">&#34;uuid&#34;</span>: <span class="s2">&#34;666f9d6f-[...]&#34;</span>,
</span></span><span class="line"><span class="cl">                     <span class="s2">&#34;fsavail&#34;</span>: <span class="s2">&#34;303,1G&#34;</span>,
</span></span><span class="line"><span class="cl">                     <span class="s2">&#34;fsuse%&#34;</span>: <span class="s2">&#34;67%&#34;</span>,
</span></span><span class="line"><span class="cl">                     <span class="s2">&#34;mountpoints&#34;</span>: <span class="o">[</span>
</span></span><span class="line"><span class="cl">                         <span class="s2">&#34;/home&#34;</span>, <span class="s2">&#34;/&#34;</span>
</span></span><span class="line"><span class="cl">                     <span class="o">]</span>
</span></span><span class="line"><span class="cl">                  <span class="o">}</span>
</span></span><span class="line"><span class="cl">               <span class="o">]</span>
</span></span><span class="line"><span class="cl">            <span class="o">}</span>
</span></span><span class="line"><span class="cl">         <span class="o">]</span>
</span></span><span class="line"><span class="cl">      <span class="o">}</span>
</span></span><span class="line"><span class="cl">   <span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span></code></pre></div><h3 id="fazit" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#fazit" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="fazit">Fazit</a></h3><p>Die Befehle <code>lsof</code> und <code>lsblk</code> bieten Einblicke in die Dateiverwendung, Netzwerkaktivität und Block-Devicee-Strukturen. Ob Sie offene Datei-Handles verfolgen, Netzwerkverbindungen diagnostizieren oder Speichergeräte überprüfen; ob Sie Fehler beheben, optimieren oder einfach nur neugierig sind; diese Tools liefern wertvolle Daten, die Ihnen helfen können, Ihre Fedora Linux-Umgebung besser zu verstehen und zu verwalten. Bis zum nächsten Mal, wenn wir weitere nützliche Auflistungs- und Informations-Kommandozeilen-Tools und ihre Verwendung betrachten werden.</p>
]]></content><category scheme="taxonomy:tags" term="toolbox" label="toolbox"/><category scheme="taxonomy:tags" term="lsof" label="lsof"/><category scheme="taxonomy:tags" term="lsblk" label="lsblk"/></entry><entry><title type="html">Systemeinblicke mit Kommandozeilentools: dmidecode und lspci</title><id>tag:foundata.com,2024-07-10:/de/blog/2024/systemeinblicke-kommandozeile-dmidecode-lspci/</id><published>2024-07-10T22:25:00Z</published><updated>2024-07-10T22:25:00Z</updated><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-dmidecode-lspci/?utm_source=feed-atom" rel="alternate" type="text/html"/><link href="https://foundata.com/en/blog/2024/system-insights-command-line-dmidecode-lspci/?utm_source=feed-atom" rel="alternate" type="text/html" hreflang="en"/><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/?utm_source=feed-atom" rel="related" type="text/html" title="Systemeinblicke mit Kommandozeilentools: lscpu und lsusb"/><link href="https://foundata.com/de/blog/2024/cve-2024-6387-regresshion-openssh-rce-sicherheitsluecke/?utm_source=feed-atom" rel="related" type="text/html" title="OpenSSH-Sicherheitslücke: regreSSHion (CVE-2024-6387), Remote Code Execution (RCE)"/><link href="https://foundata.com/de/blog/2024/quectel-em05-g-thinkpad-t14-gen4-fedora-linux/?utm_source=feed-atom" rel="related" type="text/html" title="Quectel EM05-G (LTE-Modul) in einem ThinkPad T14 Gen4 unter Fedora 39 und 40"/><link href="https://foundata.com/de/blog/2024/verwende-gpl-or-later/?utm_source=feed-atom" rel="related" type="text/html" title='Bitte verwende GPLv3 "or-later" statt "only"'/><link href="https://foundata.com/de/blog/2024/aten-cv211-kvm-linux/?utm_source=feed-atom" rel="related" type="text/html" title="ATEN CV211 (all-in-one KVM-Adapter) unter Fedora Linux nutzen"/><author><name>Andreas Haerter</name><uri>https://andreashaerter.com/</uri></author><summary type="html">Ein Artikel, der die Befehlszeilen-Werkzeuge `dmidecode` und `lspci` vorstellt.</summary><content type="html" xml:base="https://foundata.com/"><![CDATA[<p><em>Hinweis: Dieser Artikel erschien vorab in <a href="https://fedoramagazine.org/system-insights-command-line-dmidecode-lspci/" target="_blank" rel="noreferrer noopener">in englischer Sprache im Fedora Magazin</a>.</em></p>
<p>In unserer Serie über Linux-Systemwerkzeuge werfen wir einen Blick auf wichtige Befehlszeilenprogramme, die Informationen über die Hardware und den Status des Systems zur Verfügung stellen. Nach dem vorherigen <a href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/">Artikel über über <code>lscpu</code> und <code>lsusb</code></a> wenden wir uns nun <code>dmidecode</code> und <code>lspci</code> zu.</p>
<h2 id="dmidecode--dekodieren-der-dmi-tabelle-des-systems" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#dmidecode--dekodieren-der-dmi-tabelle-des-systems" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="dmidecode--dekodieren-der-dmi-tabelle-des-systems"><code>dmidecode</code> – Dekodieren der DMI-Tabelle des Systems</a></h2><p><code>dmidecode</code> ist ein Befehlszeilenprogramm zum Abrufen detaillierter Informationen über die System-Hardware. Es liest dafür die <a href="https://de.wikipedia.org/wiki/Desktop_Management_Interface" target="_blank" rel="noreferrer noopener">DMI (Desktop Management Interface)</a>-Tabelle aus, welche Daten enthält, die von der Firmware des Systems bereitgestellt werden. Dies umfasst Details zum BIOS, Prozessor, Speicher und anderen Hardware-Komponenten des Systems. Mit <code>dmidecode</code> kann man Einblicke in die Hardware-Ausstattung gewinnen, ohne vor Ort zu sein oder das Systemgehäuse öffnen zu müssen. Das Programm wird in Red Hat-Umgebungen wie Fedora Linux vom <code>util-linux</code>-Paket bereitgestellt.</p>
<h3 id="nutzung" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#nutzung" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="nutzung">Nutzung</a></h3><p>Führen wir den <code>dmidecode</code>-Befehl aus, um einen Überblick über die DMI-Tabelle des Systems zu erhalten:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo dmidecode
</span></span></code></pre></div><p>Man erhält eine <em>umfassende</em> Liste von DMI-Tabelleneinträgen.</p>
<p>Um die Ausgabe auf spezifische Informationen zu beschränken, können verschiedene Optionen verwenden werden. Insbesondere die Angabe eines Typs mittel <code>-t number</code> ist zielführend:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo dmidecode -t number
</span></span></code></pre></div><p>wobei <code>number</code> eine Ganzzahl ist. Ein Auszug aus <code>man dmidecode</code> beschreibt diese weiter:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="o">[</span> Weitere Ausgabe zur besseren Lesbarkeit ausgelassen <span class="o">]</span>
</span></span><span class="line"><span class="cl">The SMBIOS specification defines the following DMI types:
</span></span><span class="line"><span class="cl">Type   Information
</span></span><span class="line"><span class="cl">────────────────────────────────────────────
</span></span><span class="line"><span class="cl">  <span class="m">0</span>   BIOS
</span></span><span class="line"><span class="cl">  <span class="m">1</span>   System
</span></span><span class="line"><span class="cl">  <span class="m">2</span>   Baseboard
</span></span><span class="line"><span class="cl">  <span class="m">3</span>   Chassis
</span></span><span class="line"><span class="cl">  <span class="m">4</span>   Processor
</span></span><span class="line"><span class="cl">  <span class="m">5</span>   Memory Controller
</span></span><span class="line"><span class="cl">  <span class="m">6</span>   Memory Module
</span></span><span class="line"><span class="cl">  <span class="m">7</span>   Cache
</span></span><span class="line"><span class="cl">  <span class="m">8</span>   Port Connector
</span></span><span class="line"><span class="cl">  <span class="m">9</span>   System Slots
</span></span><span class="line"><span class="cl">  <span class="m">10</span>   On Board Devices
</span></span><span class="line"><span class="cl">  <span class="m">11</span>   OEM Strings
</span></span><span class="line"><span class="cl">  <span class="m">12</span>   System Configuration Options
</span></span><span class="line"><span class="cl">  <span class="m">13</span>   BIOS Language
</span></span><span class="line"><span class="cl">  <span class="m">14</span>   Group Associations
</span></span><span class="line"><span class="cl">  <span class="m">15</span>   System Event Log
</span></span><span class="line"><span class="cl">  <span class="m">16</span>   Physical Memory Array
</span></span><span class="line"><span class="cl">  <span class="m">17</span>   Memory Device
</span></span><span class="line"><span class="cl">  <span class="m">18</span>   32-bit Memory Error
</span></span><span class="line"><span class="cl">  <span class="m">19</span>   Memory Array Mapped Address
</span></span><span class="line"><span class="cl">  <span class="m">20</span>   Memory Device Mapped Address
</span></span><span class="line"><span class="cl">  <span class="m">21</span>   Built-in Pointing Device
</span></span><span class="line"><span class="cl">  <span class="m">22</span>   Portable Battery
</span></span><span class="line"><span class="cl">  <span class="m">23</span>   System Reset
</span></span><span class="line"><span class="cl">  <span class="m">24</span>   Hardware Security
</span></span><span class="line"><span class="cl">  <span class="m">25</span>   System Power Controls
</span></span><span class="line"><span class="cl">  <span class="m">26</span>   Voltage Probe
</span></span><span class="line"><span class="cl">  <span class="m">27</span>   Cooling Device
</span></span><span class="line"><span class="cl">  <span class="m">28</span>   Temperature Probe
</span></span><span class="line"><span class="cl">  <span class="m">29</span>   Electrical Current Probe
</span></span><span class="line"><span class="cl">  <span class="m">30</span>   Out-of-band Remote Access
</span></span><span class="line"><span class="cl">  <span class="m">31</span>   Boot Integrity Services
</span></span><span class="line"><span class="cl">  <span class="m">32</span>   System Boot
</span></span><span class="line"><span class="cl">  <span class="m">33</span>   64-bit Memory Error
</span></span><span class="line"><span class="cl">  <span class="m">34</span>   Management Device
</span></span><span class="line"><span class="cl">  <span class="m">35</span>   Management Device Component
</span></span><span class="line"><span class="cl">  <span class="m">36</span>   Management Device Threshold Data
</span></span><span class="line"><span class="cl">  <span class="m">37</span>   Memory Channel
</span></span><span class="line"><span class="cl">  <span class="m">38</span>   IPMI Device
</span></span><span class="line"><span class="cl">  <span class="m">39</span>   Power Supply
</span></span><span class="line"><span class="cl">  <span class="m">40</span>   Additional Information
</span></span><span class="line"><span class="cl">  <span class="m">41</span>   Onboard Devices Extended Information
</span></span><span class="line"><span class="cl">  <span class="m">42</span>   Management Controller Host Interface
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Additionally, <span class="nb">type</span> <span class="m">126</span> is used <span class="k">for</span> disabled entries and <span class="nb">type</span> <span class="m">127</span> is an end-of-table marker. Types <span class="m">128</span> to <span class="m">255</span> are <span class="k">for</span> OEM-specific data.  dmidecode will display these entries by default, but it can only decode them when the vendors have contributed documentation or code <span class="k">for</span> them.
</span></span><span class="line"><span class="cl"><span class="o">[</span> Weitere Ausgabe zur besseren Lesbarkeit ausgelassen <span class="o">]</span>
</span></span></code></pre></div><h3 id="beispiel-1-abrufen-von-bios-informationen" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#beispiel-1-abrufen-von-bios-informationen" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="beispiel-1-abrufen-von-bios-informationen">Beispiel 1: Abrufen von BIOS-Informationen</a></h3><p>Um Details über das BIOS abzurufen kann man die die Option <code>-t</code> verwenden, gefolgt von der Typnummer für BIOS-Informationen (Typ <code>0</code>):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo dmidecode -t <span class="m">0</span>
</span></span></code></pre></div><p>Der Befehl gibt in der Regel Information über die BIOS-Version, das Veröffentlichungsdatum und den Anbieter aus. Beispielausgabe (hier von einem ThinkPad T480S):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo dmidecode -t <span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="c1"># dmidecode 3.6</span>
</span></span><span class="line"><span class="cl">Getting SMBIOS data from sysfs.
</span></span><span class="line"><span class="cl">SMBIOS 3.0.0 present.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Handle 0x000B, DMI <span class="nb">type</span> 0, <span class="m">24</span> bytes
</span></span><span class="line"><span class="cl">BIOS Information
</span></span><span class="line"><span class="cl">    Vendor: LENOVO
</span></span><span class="line"><span class="cl">    Version: N22ET80W <span class="o">(</span>1.57 <span class="o">)</span>
</span></span><span class="line"><span class="cl">    Release Date: 02/27/2024
</span></span><span class="line"><span class="cl">    Address: 0xE0000
</span></span><span class="line"><span class="cl">    Runtime Size: <span class="m">128</span> kB
</span></span><span class="line"><span class="cl">    ROM Size: <span class="m">16</span> MB
</span></span><span class="line"><span class="cl">    Characteristics:
</span></span><span class="line"><span class="cl">        PCI is supported
</span></span><span class="line"><span class="cl">        PNP is supported
</span></span><span class="line"><span class="cl">        BIOS is upgradeable
</span></span><span class="line"><span class="cl">        BIOS shadowing is allowed
</span></span><span class="line"><span class="cl">        Boot from CD is supported
</span></span><span class="line"><span class="cl">        Selectable boot is supported
</span></span><span class="line"><span class="cl">        EDD is supported
</span></span><span class="line"><span class="cl">        3.5<span class="s2">&#34;/720 kB floppy services are supported (int 13h)
</span></span></span><span class="line"><span class="cl"><span class="s2">        Print screen service is supported (int 5h)
</span></span></span><span class="line"><span class="cl"><span class="s2">        8042 keyboard services are supported (int 9h)
</span></span></span><span class="line"><span class="cl"><span class="s2">        Serial services are supported (int 14h)
</span></span></span><span class="line"><span class="cl"><span class="s2">        Printer services are supported (int 17h)
</span></span></span><span class="line"><span class="cl"><span class="s2">        CGA/mono video services are supported (int 10h)
</span></span></span><span class="line"><span class="cl"><span class="s2">        ACPI is supported
</span></span></span><span class="line"><span class="cl"><span class="s2">        USB legacy is supported
</span></span></span><span class="line"><span class="cl"><span class="s2">        BIOS boot specification is supported
</span></span></span><span class="line"><span class="cl"><span class="s2">        Targeted content distribution is supported
</span></span></span><span class="line"><span class="cl"><span class="s2">        UEFI is supported
</span></span></span><span class="line"><span class="cl"><span class="s2">    BIOS Revision: 1.57
</span></span></span><span class="line"><span class="cl"><span class="s2">    Firmware Revision: 1.23
</span></span></span></code></pre></div><h3 id="beispiel-2-abrufen-von-informationen-zum-motherboard-baseboard-und-arbeitsspeicher" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#beispiel-2-abrufen-von-informationen-zum-motherboard-baseboard-und-arbeitsspeicher" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="beispiel-2-abrufen-von-informationen-zum-motherboard-baseboard-und-arbeitsspeicher">Beispiel 2: Abrufen von Informationen zum Motherboard (Baseboard) und Arbeitsspeicher</a></h3><p>Für spezifische Details zum Arbeitsspeicher können die Typen <code>2</code> für das Motherboard<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> und <code>17</code> für den Arbeitsspeicher abgefragt werde. Dies liefert Informationen zu den Speichermodulen des Systems, einschließlich Größe, Geschwindigkeit und Hersteller.</p>
<p>Diese Informationen sind besonders nützlich beim Aufrüsten der Hardware oder zur Fehlerbehebung, beispielsweise wenn man zusätzlichen, kompatiblen RAM für einen Server beschaffen muss, der von anderen Administratoren bereitgestellt wurde.</p>
<p>Ein reales Beispiel eines kleinen Laborservers mit vier Speichersticks:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo dmidecode -t 2,17
</span></span><span class="line"><span class="cl"><span class="o">[</span> Weitere Ausgabe zur besseren Lesbarkeit ausgelassen <span class="o">]</span>
</span></span><span class="line"><span class="cl">    Manufacturer: Supermicro
</span></span><span class="line"><span class="cl">    Product Name: X11SPL-F
</span></span><span class="line"><span class="cl">    Version: 1.02
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span> Weitere Ausgabe zur besseren Lesbarkeit ausgelassen <span class="o">]</span>
</span></span><span class="line"><span class="cl">Handle 0x0029, DMI <span class="nb">type</span> 17, <span class="m">84</span> bytes
</span></span><span class="line"><span class="cl">Memory Device
</span></span><span class="line"><span class="cl">    Array Handle: 0x0025
</span></span><span class="line"><span class="cl">    Error Information Handle: Not Provided
</span></span><span class="line"><span class="cl">    Total Width: <span class="m">72</span> bits
</span></span><span class="line"><span class="cl">    Data Width: <span class="m">64</span> bits
</span></span><span class="line"><span class="cl">    Size: <span class="m">64</span> GB
</span></span><span class="line"><span class="cl">    Form Factor: DIMM
</span></span><span class="line"><span class="cl">    Set: None
</span></span><span class="line"><span class="cl">    Locator: DIMMB1
</span></span><span class="line"><span class="cl">    Bank Locator: P0_Node0_Channel1_Dimm0
</span></span><span class="line"><span class="cl">    Type: DDR4
</span></span><span class="line"><span class="cl">    Type Detail: Synchronous Registered <span class="o">(</span>Buffered<span class="o">)</span>
</span></span><span class="line"><span class="cl">    Speed: <span class="m">2933</span> MT/s
</span></span><span class="line"><span class="cl">    Manufacturer: Samsung
</span></span><span class="line"><span class="cl">    Serial Number: 167D51E1
</span></span><span class="line"><span class="cl">    Asset Tag: DIMMB1_AssetTag <span class="o">(</span>date:22/38<span class="o">)</span>
</span></span><span class="line"><span class="cl">    Part Number: M393A8G40MB2-CVF
</span></span><span class="line"><span class="cl">    Rank: <span class="m">2</span>
</span></span><span class="line"><span class="cl">    Configured Memory Speed: <span class="m">2400</span> MT/s
</span></span><span class="line"><span class="cl">    Minimum Voltage: 1.2 V
</span></span><span class="line"><span class="cl">    Maximum Voltage: 1.2 V
</span></span><span class="line"><span class="cl">    Configured Voltage: 1.2 V
</span></span><span class="line"><span class="cl">    Memory Technology: DRAM
</span></span><span class="line"><span class="cl">    Memory Operating Mode Capability: Volatile memory
</span></span><span class="line"><span class="cl">    Firmware Version: <span class="m">0000</span>
</span></span><span class="line"><span class="cl">    Module Manufacturer ID: Bank 1, Hex 0xCE
</span></span><span class="line"><span class="cl">    Module Product ID: Unknown
</span></span><span class="line"><span class="cl">    Memory Subsystem Controller Manufacturer ID: Unknown
</span></span><span class="line"><span class="cl">    Memory Subsystem Controller Product ID: Unknown
</span></span><span class="line"><span class="cl">    Non-Volatile Size: None
</span></span><span class="line"><span class="cl">    Volatile Size: <span class="m">64</span> GB
</span></span><span class="line"><span class="cl">    Cache Size: None
</span></span><span class="line"><span class="cl">    Logical Size: None
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ sudo dmidecode -t <span class="m">17</span> <span class="p">|</span> grep -E <span class="s2">&#34;(Manufacturer|Part Number):&#34;</span>
</span></span><span class="line"><span class="cl">    Manufacturer: Samsung
</span></span><span class="line"><span class="cl">    Part Number: M393A8G40MB2-CVF
</span></span><span class="line"><span class="cl">    Manufacturer: Samsung
</span></span><span class="line"><span class="cl">    Part Number: M393A8G40MB2-CVF
</span></span><span class="line"><span class="cl">    Manufacturer: Samsung
</span></span><span class="line"><span class="cl">    Part Number: M393A8G40MB2-CVF
</span></span><span class="line"><span class="cl">    Manufacturer: Samsung
</span></span><span class="line"><span class="cl">    Part Number: M393A8G40MB2-CVF
</span></span></code></pre></div><p>Mit diesem einfachen Befehl ist es also recht einfach möglich zu ermitteln, welche Hardware in einem System verwendet wird. Diese Informationen sind besonders nützlich, wenn Hardware aufgerüstet oder ersetzt werden muss.</p>
<h2 id="lspci-auflisten-von-pci-geräten" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#lspci-auflisten-von-pci-ger%c3%a4ten" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="lspci-auflisten-von-pci-geräten"><code>lspci</code>: Auflisten von PCI-Geräten</a></h2><p>Der Befehl <code>lspci</code> findet Anwendung, wird verwendet, um alle <a href="https://de.wikipedia.org/wiki/Peripheral_Component_Interconnect" target="_blank" rel="noreferrer noopener">PCI (Peripheral Component Interconnect)</a>-Geräte eines Systems aufzulisten. PCI-Geräte umfassen Netzwerkkarten, Grafikkarten, USB-Controller und mehr. Das Kommando bietet einen Überblick über die an den PCI-Bus des Systems angeschlossenen Geräte und liefert detaillierte Informationen zu deren Konfiguration und Status.</p>
<p>Im Gegensatz zu <code>dmidecode</code> benötigt <code>lspci</code> dabei keine erweiterten Berechtigungen; ein normaler Benutzer reicht aus, um nützliche Informationen zu erhalten.</p>
<h3 id="nutzung-1" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#nutzung-1" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="nutzung-1">Nutzung</a></h3><p>Eine einfache Ausführung des Befehls <code>lspci</code> listet alle PCI-Geräte auf:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lspci
</span></span></code></pre></div><p>Für detailliertere Informationen über die Geräte kann die Option <code>-v</code> (verbose) verwenden werden:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lspci -v
</span></span></code></pre></div><h3 id="beispiel-1-informationen-zur-grafikkarte-ermitteln" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#beispiel-1-informationen-zur-grafikkarte-ermitteln" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="beispiel-1-informationen-zur-grafikkarte-ermitteln">Beispiel 1: Informationen zur Grafikkarte ermitteln</a></h3><p>Um mehr Informationen über die Grafikkarte des Systems zu ermitteln, kann die Ausgabe von <code>lspci</code> einfach mittels <code>grep</code> gfiltert werden. Beispielausgabe (hier mit einem ThinkPad T480S):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lspci <span class="p">|</span> grep -i vga
</span></span><span class="line"><span class="cl">00:02.0 VGA compatible controller: Intel Corporation UHD Graphics <span class="m">620</span> <span class="o">(</span>rev 07<span class="o">)</span>
</span></span></code></pre></div><h3 id="beispiel-2-welchen-kernel-treiber-verwendet-eine-hardware-komponente" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#beispiel-2-welchen-kernel-treiber-verwendet-eine-hardware-komponente" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="beispiel-2-welchen-kernel-treiber-verwendet-eine-hardware-komponente">Beispiel 2: Welchen Kernel-Treiber verwendet eine Hardware-Komponente</a></h3><p>Um nachzuvollziehen, welcher Kernel-Treiber und welches Modul von einem bestimmten Gerät verwendet wird, kann die Option <code>-k</code> verwendet werden. Dies listet in der Ausgabe den Kernel-Treiber auf, der für jedes PCI-Gerät verwendet wird &ndash; eine Information, die besonders nützlich bei der Fehlersuche im Falle Treiber-bezogener Problemen ist. Mittels Treibernamen und dem spezifischen, eigenem Hardware-Modell können deutlich ergiebigere Web-Suchen durchgeführt werden.</p>
<p>Beispielausgabe (hier mit einem ThinkPad T480S):</p>
<pre tabindex="0"><code class="language-bashtext" data-lang="bashtext">$ lspci -k

[ Weitere Ausgabe zur besseren Lesbarkeit ausgelassen ]
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
    Subsystem: Lenovo Device 2258
    Kernel driver in use: i915
    Kernel modules: i915

[ Weitere Ausgabe zur besseren Lesbarkeit ausgelassen ]
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (4) I219-V (rev 21)
    Subsystem: Lenovo Device 2258
    Kernel driver in use: e1000e
    Kernel modules: e1000e
[ Weitere Ausgabe zur besseren Lesbarkeit ausgelassen ]
</code></pre><p>Wie man sehen kann, verwendet die Grafikkarte den<a href="https://www.kernel.org/doc/html/latest/gpu/i915.html" target="_blank" rel="noreferrer noopener">drm/i915 Intel GFX-Treiber</a>, die Netzwerkkarte nutzt <a href="https://www.kernel.org/doc/Documentation/networking/e1000e.txt" target="_blank" rel="noreferrer noopener">e1000e</a>.</p>
<h2 id="fazit" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#fazit" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="fazit">Fazit</a></h2><p>Die Befehle <code>dmidecode</code> und <code>lspci</code> sind leistungsstarke Werkzeuge zum Abrufen detaillierter Hardware-Informationen eines Linux-Systems. Obwohl sie in der Bedienung simpel sind, bieten beide Befehle nützliche Einblicke in die Konfiguration und den Status des Systems Egal, ob man Fehler beheben will, etwas optimiert oder einfach nur neugierig ist: die vorgestellten Anwendungen liefern wertvolle Daten, die dabei helfen können, die eigene Linux-Umgebung besser zu verstehen und zu verwalten. Bis zum nächsten Mal, wenn wir uns weitere nützliche Befehlszeilentools mit Auflistung und Informationen und deren Verwendung ansehen.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>in den Beschreibungen des Befehls „baseboard“ genannt.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><category scheme="taxonomy:tags" term="toolbox" label="toolbox"/><category scheme="taxonomy:tags" term="dmidecode" label="dmidecode"/><category scheme="taxonomy:tags" term="lspci" label="lspci"/></entry><entry><title type="html">Systemeinblicke mit Kommandozeilentools: lscpu und lsusb</title><id>tag:foundata.com,2024-05-29:/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/</id><published>2024-05-29T00:02:00Z</published><updated>2024-05-29T00:02:00Z</updated><link href="https://foundata.com/de/blog/2024/systemeinblicke-kommandozeile-lscpu-lsusb/?utm_source=feed-atom" rel="alternate" type="text/html"/><link href="https://foundata.com/en/blog/2024/system-insights-command-line-lscpu-lsusb/?utm_source=feed-atom" rel="alternate" type="text/html" hreflang="en"/><link href="https://foundata.com/de/blog/2024/quectel-em05-g-thinkpad-t14-gen4-fedora-linux/?utm_source=feed-atom" rel="related" type="text/html" title="Quectel EM05-G (LTE-Modul) in einem ThinkPad T14 Gen4 unter Fedora 39 und 40"/><link href="https://foundata.com/de/blog/2024/verwende-gpl-or-later/?utm_source=feed-atom" rel="related" type="text/html" title='Bitte verwende GPLv3 "or-later" statt "only"'/><link href="https://foundata.com/de/blog/2024/aten-cv211-kvm-linux/?utm_source=feed-atom" rel="related" type="text/html" title="ATEN CV211 (all-in-one KVM-Adapter) unter Fedora Linux nutzen"/><link href="https://foundata.com/de/blog/2024/copyleft-open-source-lizenzen/?utm_source=feed-atom" rel="related" type="text/html" title="Nutze Copyleft-Lizenzen für Open Source oder Lebe mit den Konsequenzen"/><author><name>Andreas Haerter</name><uri>https://andreashaerter.com/</uri></author><summary type="html">Ein Artikel, der die Befehlszeilen-Werkzeuge `lscpu` und `lsusb` vorstellt.</summary><content type="html" xml:base="https://foundata.com/"><![CDATA[<p><em>Hinweis: Dieser Artikel erschien vorab in <a href="https://fedoramagazine.org/system-insights-with-command-line-tools-lscpu-and-lsusb/" target="_blank" rel="noreferrer noopener">in englischer Sprache im Fedora Magazin</a>.</em></p>
<p>Fedora (und andere gängige Linux-Distributionen) bieten eine Reihe von Tools zur Verwaltung, Überwachung und zum Verständnis des Systems. Zu diesen Tools gehören eine Reihe von Befehlen, die mit <code>ls</code> (für &ldquo;list&rdquo;, auflisten) beginnen.</p>
<p>Diese bieten einfache Einblicke in verschiedene Aspekte der Hardware und Ressourcen des Systems. Diese Artikelserie gibt eine kurze Einführung und Übersicht über einige dieser Kommandos, beginnend mit den einfacheren Befehlen. Der Beitrag behandelt <code>lscpu</code> und <code>lsusb</code>.</p>
<h2 id="lscpu--cpu-informationen-anzeigen" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#lscpu--cpu-informationen-anzeigen" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="lscpu--cpu-informationen-anzeigen"><code>lscpu</code> – CPU-Informationen anzeigen</a></h2><p>Der Befehl <code>lscpu</code> sammelt und zeigt Informationen zur CPU-Architektur an. Er wird unter Fedora vom Paket <code>util-linux</code> bereitgestellt. Das Programm sammelt CPU-Informationen aus mehreren Quellen wie <code>/proc/cpuinfo</code> sowie architekturspezifischen Bibliotheken (z. B. <code>librtas</code> auf PowerPC):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lscpu
</span></span></code></pre></div><p>Diese Eingabe gibt Informationen wie die Anzahl der CPUs, Threads pro Kern, Kerne pro Sockel sowie die CPU-Familie und das Modell aus.</p>
<p>Auf Anfrage gibt er detaillierte CPU-Informationen im JSON-Format aus. Dies bietet eine strukturierte Ansicht, die besonders für Skripting und Automatisierung nützlich ist:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lscpu --extended --json
</span></span></code></pre></div><h3 id="erweitertes-anwendungsbeispiel" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#erweitertes-anwendungsbeispiel" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="erweitertes-anwendungsbeispiel">Erweitertes Anwendungsbeispiel</a></h3><p>Mit der maschinenlesbaren JSON-Ausgabe können Informationen mit <a href="https://jqlang.github.io/jq/" target="_blank" rel="noreferrer noopener"><code>jq</code></a> extrahieren (ein leistungsstarkes Befehlszeilentool, mit dem JSON-Daten effizient analysiert, gefiltert und bearbeitet werden können und das einen eigenen Artikel wert ist). Beispielsweise extrahiert die folgende Eingabe die aktuelle <a href="https://de.wikipedia.org/wiki/Hertz_%28Einheit%29" target="_blank" rel="noreferrer noopener">MHz</a>-Taktung für jede CPU:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">LANG</span><span class="o">=</span>en_US.UTF-8
</span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">LC_ALL</span><span class="o">=</span><span class="s2">&#34;en_US.UTF-8&#34;</span>
</span></span><span class="line"><span class="cl">lscpu --json --extended <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> jq <span class="s1">&#39;.cpus[] | {cpu: .cpu, mhz: .mhz}&#39;</span>
</span></span></code></pre></div><p>Schauen wir uns die einzelnen Teile des Befehls an:</p>
<ul>
<li><code>export LANG=en_US.UTF-8</code> und <code>export LC_ALL=&quot;en_US.UTF-8&quot;</code> stellen sicher, dass die Ausgabe keine lokalisierten Zahlen verwendet. So kann beispielsweise <strong>eine deutsche Spracheinstellung kann zu einer fehlerhaften JSON-Ausgabe führen</strong>, da Kommas anstelle von Punkten als Trennzeichen für Gleitkommazahlen verwendet werden.</li>
<li><code>lscpu --json --extended</code> generiert die detaillierten CPU-Informationen im JSON-Format.</li>
<li><code>jq '.cpus[] |</code> durchläuft jeden Eintrag im CPU-Array. Der Teil <code>{cpu: .cpu, mhz: .mhz}</code> erstellt für jeden CPU-Eintrag ein neues JSON-Objekt, das die CPU-Nummer (<code>cpu</code>) und ihre aktuelle Frequenz in MHz (<code>mhz</code>) anzeigt.</li>
</ul>
<p>Beispielausgabe von einem Laptop, der im Leistungsmodus läuft:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lscpu --json --extended <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> jq <span class="s1">&#39;.cpus[] | {cpu: .cpu, mhz: .mhz}&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cpu&#34;</span>: 0,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mhz&#34;</span>: 3700.0171
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cpu&#34;</span>: 1,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mhz&#34;</span>: 3700.2241
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cpu&#34;</span>: 2,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mhz&#34;</span>: 3700.1121
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cpu&#34;</span>: 3,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mhz&#34;</span>: 3884.2539
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span></code></pre></div><p>und später im Energiesparmodus:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lscpu --json --extended <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> jq <span class="s1">&#39;.cpus[] | {cpu: .cpu, mhz: .mhz}&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cpu&#34;</span>: 0,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mhz&#34;</span>: 1200.0580
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cpu&#34;</span>: 1,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mhz&#34;</span>: 1200.0070
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cpu&#34;</span>: 2,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mhz&#34;</span>: 1200.5450
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cpu&#34;</span>: 3,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mhz&#34;</span>: 1200.0010
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span></code></pre></div><h2 id="lsusb--informationen-zu-usb-geräten-anzeigen" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#lsusb--informationen-zu-usb-ger%c3%a4ten-anzeigen" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="lsusb--informationen-zu-usb-geräten-anzeigen"><code>lsusb</code> – Informationen zu USB-Geräten anzeigen</a></h2><p>Der Befehl <code>lsusb</code> zeigt detaillierte Informationen zu den USB-Bussen im System und den daran angeschlossenen Geräten an. Er wird unter Fedora vom Paket <code>usbutils</code> bereitgestellt und hilft dabei, die Konfiguration und die an ihre USB-Schnittstellen angeschlossenen Geräte einfach anzuzeigen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsusb
</span></span></code></pre></div><p>Diese Eingabe gibt eine Liste aller USB-Busse aus, inklusive der daran angeschlossenen Geräte und kurzer Informationen zu jedem Gerät (beispielsweise ID und Hersteller). Dies ist insbesondere dann nützlich, wenn man schnell überprüfen möchte, welche Geräte am System angeschlossen sind und für eine USB-Geräte-ID für <a href="https://de.wikipedia.org/wiki/Udev" target="_blank" rel="noreferrer noopener">udev</a>-Regeln oder ähnliches erstellt werden sollen.</p>
<h3 id="anwendungsbeispiel-und-exemplarische-ausgabe" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#anwendungsbeispiel-und-exemplarische-ausgabe" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="anwendungsbeispiel-und-exemplarische-ausgabe">Anwendungsbeispiel und exemplarische Ausgabe</a></h3><p>Für diejenigen, die detailliertere Informationen zu den USB-Geräten benötigen, ermöglicht <code>lsusb</code> die Auflistung detaillierterer Informationen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsusb <span class="p">|</span> grep Fibocom
</span></span><span class="line"><span class="cl">Bus <span class="m">001</span> Device 013: ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ sudo lsusb -d 2cb7:0210 -v
</span></span><span class="line"><span class="cl">Bus <span class="m">001</span> Device 013: ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
</span></span><span class="line"><span class="cl">Device Descriptor:
</span></span><span class="line"><span class="cl">  bLength                <span class="m">18</span>
</span></span><span class="line"><span class="cl">  bDescriptorType         <span class="m">1</span>
</span></span><span class="line"><span class="cl">  bcdUSB               2.00
</span></span><span class="line"><span class="cl">  bDeviceClass          <span class="m">239</span> Miscellaneous Device
</span></span><span class="line"><span class="cl">  bDeviceSubClass         <span class="m">2</span> <span class="o">[</span>unknown<span class="o">]</span>
</span></span><span class="line"><span class="cl">  bDeviceProtocol         <span class="m">1</span> Interface Association
</span></span><span class="line"><span class="cl">  bMaxPacketSize0        <span class="m">64</span>
</span></span><span class="line"><span class="cl">  idVendor           0x2cb7 Fibocom
</span></span><span class="line"><span class="cl">  idProduct          0x0210 L830-EB-00 LTE WWAN Modem
</span></span><span class="line"><span class="cl">  bcdDevice            3.33
</span></span><span class="line"><span class="cl">  iManufacturer           <span class="m">1</span> FIBOCOM
</span></span><span class="line"><span class="cl">  iProduct                <span class="m">2</span> L830-EB-00
</span></span><span class="line"><span class="cl">  iSerial                 <span class="m">3</span> <span class="m">004999010640000</span>
</span></span><span class="line"><span class="cl">  bNumConfigurations      <span class="m">1</span>
</span></span><span class="line"><span class="cl">  Configuration Descriptor:
</span></span><span class="line"><span class="cl">    bLength                 <span class="m">9</span>
</span></span><span class="line"><span class="cl">    bDescriptorType         <span class="m">2</span>
</span></span><span class="line"><span class="cl">    wTotalLength       0x00a1
</span></span><span class="line"><span class="cl">    bNumInterfaces          <span class="m">4</span>
</span></span><span class="line"><span class="cl">    bConfigurationValue     <span class="m">1</span>
</span></span><span class="line"><span class="cl">    iConfiguration          <span class="m">0</span>
</span></span><span class="line"><span class="cl">    bmAttributes         0xe0
</span></span><span class="line"><span class="cl">      Self Powered
</span></span><span class="line"><span class="cl">      Remote Wakeup
</span></span><span class="line"><span class="cl">    MaxPower              100mA
</span></span><span class="line"><span class="cl"><span class="o">[</span> Weitere Ausgabe zur besseren Lesbarkeit ausgelassen <span class="o">]</span>
</span></span></code></pre></div><p>Mit den Optionen <code>-v</code> und <code>-t</code> wird <code>lsusb</code> angewiesen, die physische USB-Gerätehierarchie als Baumstruktur inklusive IDs auszugeben. Im Folgenden wird eine detaillierte Baumstruktur aller USB-Geräte mit ihren Typen, Geschwindigkeiten und Geräteklassen angezeigt (hier von einem <a href="https://thinkwiki.de/T480s" target="_blank" rel="noreferrer noopener">ThinkPad T480S</a>). Dies ist besonders nützlich für die Behebung von Problemen mit USB-Geräten:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ lsusb -t -v
</span></span><span class="line"><span class="cl">/:  Bus 001.Port 001: Dev 001, <span class="nv">Class</span><span class="o">=</span>root_hub, <span class="nv">Driver</span><span class="o">=</span>xhci_hcd/12p, 480M
</span></span><span class="line"><span class="cl">    ID 1d6b:0002 Linux Foundation 2.0 root hub
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 001: Dev 002, If 0, <span class="nv">Class</span><span class="o">=</span>Human Interface Device, <span class="nv">Driver</span><span class="o">=</span>usbhid, 1.5M
</span></span><span class="line"><span class="cl">        ID 046d:c069 Logitech, Inc. M-U0007 <span class="o">[</span>Corded Mouse M500<span class="o">]</span>
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 002: Dev 003, If 0, <span class="nv">Class</span><span class="o">=</span>Human Interface Device, <span class="nv">Driver</span><span class="o">=</span>usbhid, 1.5M
</span></span><span class="line"><span class="cl">        ID 046a:c098 CHERRY
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 002: Dev 003, If 1, <span class="nv">Class</span><span class="o">=</span>Human Interface Device, <span class="nv">Driver</span><span class="o">=</span>usbhid, 1.5M
</span></span><span class="line"><span class="cl">        ID 046a:c098 CHERRY
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 003: Dev 004, If 0, <span class="nv">Class</span><span class="o">=</span>Chip/SmartCard, <span class="nv">Driver</span><span class="o">=</span>usbfs, 12M
</span></span><span class="line"><span class="cl">        ID 058f:9540 Alcor Micro Corp. AU9540 Smartcard Reader
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 005: Dev 005, If 0, <span class="nv">Class</span><span class="o">=</span>Video, <span class="nv">Driver</span><span class="o">=</span>uvcvideo, 480M
</span></span><span class="line"><span class="cl">        ID 5986:2123 Bison Electronics Inc.
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 005: Dev 005, If 1, <span class="nv">Class</span><span class="o">=</span>Video, <span class="nv">Driver</span><span class="o">=</span>uvcvideo, 480M
</span></span><span class="line"><span class="cl">        ID 5986:2123 Bison Electronics Inc.
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 006: Dev 013, If 0, <span class="nv">Class</span><span class="o">=</span>Communications, <span class="nv">Driver</span><span class="o">=</span>cdc_mbim, 480M
</span></span><span class="line"><span class="cl">        ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 006: Dev 013, If 1, <span class="nv">Class</span><span class="o">=</span>CDC Data, <span class="nv">Driver</span><span class="o">=</span>cdc_mbim, 480M
</span></span><span class="line"><span class="cl">        ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 006: Dev 013, If 2, <span class="nv">Class</span><span class="o">=</span>Communications, <span class="nv">Driver</span><span class="o">=</span>cdc_acm, 480M
</span></span><span class="line"><span class="cl">        ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 006: Dev 013, If 3, <span class="nv">Class</span><span class="o">=</span>CDC Data, <span class="nv">Driver</span><span class="o">=</span>cdc_acm, 480M
</span></span><span class="line"><span class="cl">        ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 007: Dev 007, If 0, <span class="nv">Class</span><span class="o">=</span>Wireless, <span class="nv">Driver</span><span class="o">=</span>btusb, 12M
</span></span><span class="line"><span class="cl">        ID 8087:0a2b Intel Corp. Bluetooth wireless interface
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 007: Dev 007, If 1, <span class="nv">Class</span><span class="o">=</span>Wireless, <span class="nv">Driver</span><span class="o">=</span>btusb, 12M
</span></span><span class="line"><span class="cl">        ID 8087:0a2b Intel Corp. Bluetooth wireless interface
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 008: Dev 008, If 0, <span class="nv">Class</span><span class="o">=</span>Video, <span class="nv">Driver</span><span class="o">=</span>uvcvideo, 480M
</span></span><span class="line"><span class="cl">        ID 5986:2115 Bison Electronics Inc.
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 008: Dev 008, If 1, <span class="nv">Class</span><span class="o">=</span>Video, <span class="nv">Driver</span><span class="o">=</span>uvcvideo, 480M
</span></span><span class="line"><span class="cl">        ID 5986:2115 Bison Electronics Inc.
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 009: Dev 009, If 0, <span class="nv">Class</span><span class="o">=</span>Vendor Specific Class, <span class="nv">Driver</span><span class="o">=[</span>none<span class="o">]</span>, 12M
</span></span><span class="line"><span class="cl">        ID 06cb:009a Synaptics, Inc. Metallica MIS Touch Fingerprint Reader
</span></span><span class="line"><span class="cl">/:  Bus 002.Port 001: Dev 001, <span class="nv">Class</span><span class="o">=</span>root_hub, <span class="nv">Driver</span><span class="o">=</span>xhci_hcd/6p, 5000M
</span></span><span class="line"><span class="cl">    ID 1d6b:0003 Linux Foundation 3.0 root hub
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 003: Dev 002, If 0, <span class="nv">Class</span><span class="o">=</span>Mass Storage, <span class="nv">Driver</span><span class="o">=</span>usb-storage, 5000M
</span></span><span class="line"><span class="cl">        ID 0bda:0316 Realtek Semiconductor Corp. Card Reader
</span></span><span class="line"><span class="cl">/:  Bus 003.Port 001: Dev 001, <span class="nv">Class</span><span class="o">=</span>root_hub, <span class="nv">Driver</span><span class="o">=</span>xhci_hcd/2p, 480M
</span></span><span class="line"><span class="cl">    ID 1d6b:0002 Linux Foundation 2.0 root hub
</span></span><span class="line"><span class="cl">    <span class="p">|</span>__ Port 001: Dev 002, If 0, <span class="nv">Class</span><span class="o">=</span>Hub, <span class="nv">Driver</span><span class="o">=</span>hub/5p, 480M
</span></span><span class="line"><span class="cl">        ID 0451:8442 Texas Instruments, Inc.
</span></span><span class="line"><span class="cl">        <span class="p">|</span>__ Port 001: Dev 003, If 0, <span class="nv">Class</span><span class="o">=</span>Hub, <span class="nv">Driver</span><span class="o">=</span>hub/7p, 480M
</span></span><span class="line"><span class="cl">            ID 0424:2137 Microchip Technology, Inc. <span class="o">(</span>formerly SMSC<span class="o">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">|</span>__ Port 003: Dev 005, If 0, <span class="nv">Class</span><span class="o">=</span>Hub, <span class="nv">Driver</span><span class="o">=</span>hub/3p, 480M
</span></span><span class="line"><span class="cl">            ID 0bda:5411 Realtek Semiconductor Corp. RTS5411 Hub
</span></span><span class="line"><span class="cl">            <span class="p">|</span>__ Port 001: Dev 006, If 0, <span class="nv">Class</span><span class="o">=</span>Vendor Specific Class, <span class="nv">Driver</span><span class="o">=</span>r8152, 480M
</span></span><span class="line"><span class="cl">                ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter
</span></span><span class="line"><span class="cl">        <span class="p">|</span>__ Port 004: Dev 004, If 0, <span class="nv">Class</span><span class="o">=</span>Human Interface Device, <span class="nv">Driver</span><span class="o">=</span>usbhid, 480M
</span></span><span class="line"><span class="cl">            ID 0451:82ff Texas Instruments, Inc.
</span></span><span class="line"><span class="cl">/:  Bus 004.Port 001: Dev 001, <span class="nv">Class</span><span class="o">=</span>root_hub, <span class="nv">Driver</span><span class="o">=</span>xhci_hcd/2p, 10000M
</span></span><span class="line"><span class="cl">    ID 1d6b:0003 Linux Foundation 3.0 root hub
</span></span></code></pre></div><h2 id="fazit" class="scroll-mt-20 md:scroll-mt-24 wrap-break-word group/heading "><a href="#fazit" class="group-hover/heading:after:content-['#'] group-hover/heading:after:ml-1.5 group-hover/heading:after:text-content-400" id="fazit">Fazit</a></h2><p>Beide Befehle bieten trotz ihrer Einfachheit Einblicke in die Konfiguration und den Status des Systems. Egal, ob man Fehler beheben will, etwas optimiert oder einfach nur neugierig ist: die vorgestellten Anwendungen liefern wertvolle Daten, die dabei helfen können, die eigene Linux-Umgebung besser zu verstehen und zu verwalten. Bis zum nächsten Mal, wenn wir uns weitere nützliche Befehlszeilentools mit Auflistung und Informationen und deren Verwendung ansehen.</p>
]]></content><category scheme="taxonomy:tags" term="toolbox" label="toolbox"/><category scheme="taxonomy:tags" term="lscpu" label="lscpu"/><category scheme="taxonomy:tags" term="lsusb" label="lsusb"/></entry></feed>