{"id":8260,"date":"2021-12-29T22:43:08","date_gmt":"2021-12-29T20:43:08","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=8260"},"modified":"2022-12-12T16:57:17","modified_gmt":"2022-12-12T14:57:17","slug":"besser-auf-der-konsole-mit-fzf-suchen-suchverlauf-schnelle-ordnerwechsel-dateivorschau-mehr","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/besser-auf-der-konsole-mit-fzf-suchen-suchverlauf-schnelle-ordnerwechsel-dateivorschau-mehr\/","title":{"rendered":"Besser auf der Konsole mit FZF suchen: Suchverlauf, schnelle Ordnerwechsel, Dateivorschau &#038; mehr!"},"content":{"rendered":"<p>Die Bash-Shell legt uns einen Verlauf der eingegebenen Befehle an. Wenn man einen bereits ausgef\u00fchrten Befehl erneut ausf\u00fchren m\u00f6chte, gibt es standardm\u00e4\u00dfig zwei Wege: Einmal die Pfeiltasten. Wird die Pfeiltaste nach oben gedr\u00fcckt, erscheint der zuletzt ausgef\u00fchrte Befehl. Durch zweimaliges Dr\u00fccken der vorherige und so weiter. Um die letzte oder vorletzte Anweisung noch mal auszuf\u00fchren ist das praktisch, f\u00fcr \u00e4ltere dagegen m\u00fchsam.<\/p>\n<p>Hier kann STRG + R helfen: Damit l\u00e4sst sich der Verlauf durchsuchen. Doch das zeigt uns nur einen exakten Treffer an, keine \u00e4hnlichen Ergebnisse. Hier kommt FZF ins Spiel. Der <strong>Fuzzy Finder<\/strong> \u00f6ffnet sich mit <strong>STRG + R<\/strong>, wenn das Keybinding aktiviert wurde &#8211; dazu sp\u00e4ter mehr. Statt dem reinen Suchfeld sehen wir nun eine Liste der letzten Befehle:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-77.png\"><img loading=\"lazy\" decoding=\"async\" width=\"990\" height=\"432\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-77.png\" alt=\"\" class=\"wp-image-8261\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-77.png 990w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-77-300x131.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-77-768x335.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-77-70x31.png 70w\" sizes=\"auto, (max-width: 990px) 100vw, 990px\" \/><\/a><\/figure>\n<p>Daraus kann man mit den Pfeiltasten einen Befehl ausw\u00e4hlen und ihn mit der Enter-Taste in die Befehlszeile einf\u00fcgen. Falls ein anderer gesucht wird, einfach die gew\u00fcnschten Suchbegriffe eingeben. FZF sucht mit <strong>Fuzzy Matching<\/strong>. Das hei\u00dft: FZF sucht nicht nur nach exakten Treffern, sondern auch \u00e4hnliche. Im folgenden Beispiel haben wir lauter exakte Treffer, bis auf Zeile 71. Das kann manchmal n\u00fctzlich sein, wenn man sich nicht mehr an den exakten Befehl erinnert oder sich verschrieben hat.<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-78.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"211\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-78.png\" alt=\"\" class=\"wp-image-8262\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-78.png 936w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-78-300x68.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-78-768x173.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-78-70x16.png 70w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n<p>Es gibt ein paar Suchoperatoren, mit denen sich die Ergebnisse verfeinern lassen:<\/p>\n<ul class=\"wp-block-list\">\n<li>Ein Kochkomma <strong>&#8218;<\/strong> am Anfang sucht nur nach exakten Treffern, Fuzzy Matching wird deaktiviert.<\/li>\n<li>Ein <strong>^<\/strong> steht f\u00fcr den Zeilenanfang: <strong>^sud<\/strong>o findet z.B. nur Befehle, die mit <strong>sudo <\/strong>beginnen.<\/li>\n<li>Das Dollar-Zeichen <strong>$<\/strong> markiert das Zeilenende, um Zeilen zu finden, die mit einer bestimmten Zeichenkette enden: Etwa <strong>.sh$ <\/strong>f\u00fcr eine Suche nach Shell-Skripten<\/li>\n<li>Platzhalter wie der Stern * sind nicht m\u00f6glich. Allerdings kann man nach mehreren Begriffen suchen, in dem man diese mit einem Leerzeichen voneinander trennt<\/li>\n<li>Negieren ist mit einem Ausrufezeichen <strong>!<\/strong> m\u00f6glich: <strong>apt !php <\/strong>findet z.B. alle apt Befehle, in denen nicht PHP vorkommt.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Die Suche in anderen Programmen verwenden<\/h2>\n<p>Es ist auch m\u00f6glich, FZF in andere Programme einzubinden. Mit <strong>ALT + C<\/strong> wird nach einem Ordner im aktuellen Arbeitsverzeichnis gesucht und automatisch per cd in den Ordner gewechselt.<\/p>\n<p>In verschiedenen Befehlen lassen sich zwei Sterne<strong> **<\/strong> als Platzhalter verwenden. Dr\u00fcckt man anschlie\u00dfend die <strong>&lt;Tab&gt;<\/strong> Taste, wird FZF getriggert und zeigt passende Suchergebnisse. Im folgenden ein paar Beispiele:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>vim **<\/strong> <strong>&lt;Tab&gt;<\/strong> sucht im aktuellen Verzeichnis nach Dateien und \u00f6ffnet die ausgew\u00e4hlte Datei mit dem Texteditor vim. Man kann auch einen anderen Pfad als Basis angeben und <strong>**<\/strong> als Platzhalter einsetzen, etwa <strong>vim \/etc\/** &lt;Tab&gt;.<\/strong><\/li>\n<li><strong>ssh ** &lt;Tab&gt;<\/strong> \u00f6ffnet eine Liste aller IPs\/Hostnamen, mit denen man sich zuletzt per SSH verbunden hat<\/li>\n<li>Um einen Prozess sofort zu beenden, ermittelt man normal erst die Prozess-Id mit <strong>pgrep &lt;prozess&gt;<\/strong> und beendet diesen mit kill. Wir k\u00f6nnen nun auch<strong> kill -9 &lt;Tab&gt;<\/strong> verwenden und erhalten eine durchsuchbare Liste aller Prozesse<\/li>\n<li>Eine per <strong>export<\/strong> gesetzt Variable kann per <strong>unset ** &lt;Tab&gt;<\/strong> gesucht werden, damit man diese nicht exakt &amp; komplett eingeben muss:<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-79.png\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"325\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-79.png\" alt=\"\" class=\"wp-image-8263\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-79.png 558w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-79-300x175.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-79-70x41.png 70w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">Was kann FZF noch?<\/h2>\n<p>Das soeben gezeigte sind eher die Basis-Funktionen, FZF ist noch m\u00e4chtiger. Ein Beispiel: <\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nfzf --multi --color dark --preview &quot;cat {}&quot; &gt; ausgewaehlte-pfade.txt\n<\/pre>\n<\/div>\n<p>&#8211;multi erlaubt das Ausw\u00e4hlen mehrerer Dateien mit der &lt;Tab&gt; Taste. &#8211;color dark aktiviert ein dunkleres Design mit Rahmen und <strong>&#8211;preview &#8222;cat {}&#8220;<\/strong> verwendet cat als Programm, um rechts eine Vorschau zu erzeugen:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-80.png\"><img loading=\"lazy\" decoding=\"async\" width=\"665\" height=\"353\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-80.png\" alt=\"\" class=\"wp-image-8265\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-80.png 665w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-80-300x160.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-80-70x37.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-80-620x330.png 620w\" sizes=\"auto, (max-width: 665px) 100vw, 665px\" \/><\/a><\/figure>\n<p>Man kann darin mit der &lt;Tab&gt; Taste mehrere Dateien markieren. Wird mit Enter best\u00e4tigt, schreibt FZF alle ausgew\u00e4hlten Pfade in die Datei ausgewaehlte-pfade.txt<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ cat ausgewaehlte-pfade.txt\ndemo.php\ntest.txt\n<\/pre>\n<\/div>\n<p>Man kann FZF stark anpassen und auch in andere Programme wie z.B. den Texteditor <strong>vim <\/strong>integrieren. In diesem Beitrag m\u00f6chte ich es bei den Grundfunktionen belassen, die in meinen Augen f\u00fcr alle auf der Konsole empfehlenswert sind.<\/p>\n<h2 class=\"wp-block-heading\">Wie installiere ich FZF auf meinem Raspberry Pi oder Linux-System?<\/h2>\n<p>Zwar ist FZF in verschiedenen Paketquellen vorhanden. Doch diese Versionen sind meist \u00e4lter, au\u00dferdem kann es dort zu Problemen mit den Tastenkombinationen wie <strong>STRG + R<\/strong> kommen. Es empfiehlt sich daher, <a href=\"https:\/\/github.com\/junegunn\/fzf\" target=\"_blank\" rel=\"nofollow\">das GitHub-Repository<\/a> zu klonen und das enthaltene Installationsskript zu nutzen:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ngit clone --depth 1 https:\/\/github.com\/junegunn\/fzf.git ~\/.fzf\n~\/.fzf\/install\n<\/pre>\n<\/div>\n<p>Falls du git noch nicht installiert hast (das ist z.B. bei DietPi der Fall), musst du zuvor den Git-Client installieren:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo apt install git\n<\/pre>\n<\/div>\n<p>Das Installationsskript fragt ab, ob die Auto-Vervollst\u00e4ndigung (#1, z.B. f\u00fcr **) und Key-Bindings (2) aktiviert werden sollen. (1) dient f\u00fcr Platzhalter wie **, (2) f\u00fcr die gezeigten Tastenkombinationen (z.B. <strong>STRG + R<\/strong> und <strong>ALT + C<\/strong>). Ich empfehle beides mit <strong>y<\/strong> zu aktivieren.<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-81.png\"><img loading=\"lazy\" decoding=\"async\" width=\"654\" height=\"176\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-81.png\" alt=\"\" class=\"wp-image-8266\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-81.png 654w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-81-300x81.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/12\/grafik-81-70x19.png 70w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/a><\/figure>\n<p>Unter der Standard-Shell Bash m\u00fcssen wir die Konfiguration neu laden, um FZF nutzen zu k\u00f6nnen: <\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsource ~\/.bashrc\n<\/pre>\n<\/div>\n<p>Alternativ kann man sich auch abmelden und wieder anmelden. Danach sollte beispielsweise die FZF-Suche wie oben gezeigt mit <strong>STRG + R<\/strong> funktionieren.<\/p>\n<p>An dieser Stelle m\u00f6chte man eventuell die Gr\u00f6\u00dfe des Verlaufes erh\u00f6hen. Vor allem <strong>HISTFILESIZE <\/strong>umfasst beim Raspberry Pi standardm\u00e4\u00dfig nur 1.000, d.H. die letzten 1.000 Befehle werden gespeichert. Dies kann man durch Setzen der folgenden Variablen in der <strong>~\/.bashrc<\/strong> \u00e4ndern:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# Anzahl der Befehle, die in einer laufenden SSH-Sitzung im RAM gespeichert werden\n# Standard beim Rapsberry Pi OS: 2000\nHISTSIZE=5000\n\n# Anzahl der Befehle, die in der .bash_history Datei gespeichert werden\n# Standard beim Raspberry Pi OS: 1000\nHISTFILESIZE=20000\n<\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Die Bash-Shell legt uns einen Verlauf der eingegebenen Befehle an. Wenn man einen bereits ausgef\u00fchrten Befehl erneut ausf\u00fchren m\u00f6chte, gibt es standardm\u00e4\u00dfig zwei Wege: Einmal die Pfeiltasten. Wird die Pfeiltaste nach oben gedr\u00fcckt, erscheint der zuletzt ausgef\u00fchrte Befehl. Durch zweimaliges Dr\u00fccken der vorherige und so weiter. Um die letzte oder vorletzte Anweisung noch mal auszuf\u00fchren &#8230;<\/p>\n","protected":false},"author":5,"featured_media":8274,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[74,671],"tags":[1008,1004,752],"class_list":["post-8260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-raspberry-pi","tag-fzf","tag-konsole","tag-suche"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=8260"}],"version-history":[{"count":8,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8260\/revisions"}],"predecessor-version":[{"id":9791,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8260\/revisions\/9791"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/8274"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=8260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=8260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=8260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}