<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Command Line on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/command-line/</link>
        <description>Recent content in Command Line on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Thu, 11 Sep 2025 15:31:10 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/command-line/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>tesseract</title>
        <link>https://producthunt.programnotes.cn/en/p/tesseract/</link>
        <pubDate>Thu, 11 Sep 2025 15:31:10 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/tesseract/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1636114673156-052a83459fc1?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTc1NzU3Mzd8&amp;ixlib=rb-4.1.0" alt="Featured image of post tesseract" /&gt;&lt;h1 id=&#34;tesseract-ocrtesseract&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tesseract-ocr/tesseract&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;tesseract-ocr&#34;&gt;Tesseract OCR
&lt;/h1&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://scan.coverity.com/projects/tesseract-ocr&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://scan.coverity.com/projects/tesseract-ocr/badge.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Coverity Scan Build Status&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/security/code-scanning&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://github.com/tesseract-ocr/tesseract/workflows/CodeQL/badge.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;CodeQL&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://issues.oss-fuzz.com/issues?q=is:open%20title:tesseract-ocr&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/oss--fuzz-fuzzing-brightgreen&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;OSS-Fuzz&#34;
	
	
&gt;&lt;/a&gt;
&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://raw.githubusercontent.com/tesseract-ocr/tesseract/main/LICENSE&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/license-Apache--2.0-blue.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;GitHub license&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/releases/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/download-all%20releases-brightgreen.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Downloads&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#tesseract-ocr&#34; &gt;Tesseract OCR&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#about&#34; &gt;About&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#brief-history&#34; &gt;Brief history&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#installing-tesseract&#34; &gt;Installing Tesseract&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#running-tesseract&#34; &gt;Running Tesseract&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#for-developers&#34; &gt;For developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#support&#34; &gt;Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#license&#34; &gt;License&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#dependencies&#34; &gt;Dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#latest-version-of-readme&#34; &gt;Latest Version of README&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;about&#34;&gt;About
&lt;/h2&gt;&lt;p&gt;This package contains an &lt;strong&gt;OCR engine&lt;/strong&gt; - &lt;code&gt;libtesseract&lt;/code&gt; and a &lt;strong&gt;command line program&lt;/strong&gt; - &lt;code&gt;tesseract&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tesseract 4 adds a new neural net (LSTM) based &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Optical_character_recognition&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OCR engine&lt;/a&gt; which is focused on line recognition, but also still supports the legacy Tesseract OCR engine of Tesseract 3 which works by recognizing character patterns. Compatibility with Tesseract 3 is enabled by using the Legacy OCR Engine mode (&amp;ndash;oem 0).
It also needs &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/Data-Files.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;traineddata&lt;/a&gt; files which support the legacy engine, for example those from the &lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tessdata&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tessdata&lt;/a&gt; repository.&lt;/p&gt;
&lt;p&gt;Stefan Weil is the current lead developer. Ray Smith was the lead developer until 2018. The maintainer is Zdenko Podobny. For a list of contributors see &lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/blob/main/AUTHORS&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AUTHORS&lt;/a&gt;
and GitHub&amp;rsquo;s log of &lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/graphs/contributors&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;contributors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tesseract has &lt;strong&gt;unicode (UTF-8) support&lt;/strong&gt;, and can &lt;strong&gt;recognize &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;more than 100 languages&lt;/a&gt;&lt;/strong&gt; &amp;ldquo;out of the box&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Tesseract supports &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/InputFormats&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;various image formats&lt;/a&gt;&lt;/strong&gt; including PNG, JPEG and TIFF.&lt;/p&gt;
&lt;p&gt;Tesseract supports &lt;strong&gt;various output formats&lt;/strong&gt;: plain text, hOCR (HTML), PDF, invisible-text-only PDF, TSV, ALTO and PAGE.&lt;/p&gt;
&lt;p&gt;You should note that in many cases, in order to get better OCR results, you&amp;rsquo;ll need to &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;improve the quality&lt;/a&gt; of the image&lt;/strong&gt; you are giving Tesseract.&lt;/p&gt;
&lt;p&gt;This project &lt;strong&gt;does not include a GUI application&lt;/strong&gt;. If you need one, please see the &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/User-Projects-%E2%80%93-3rdParty.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;3rdParty&lt;/a&gt; documentation.&lt;/p&gt;
&lt;p&gt;Tesseract &lt;strong&gt;can be trained to recognize other languages&lt;/strong&gt;.
See &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/Training-Tesseract.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tesseract Training&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id=&#34;brief-history&#34;&gt;Brief history
&lt;/h2&gt;&lt;p&gt;Tesseract was originally developed at Hewlett-Packard Laboratories Bristol UK and at Hewlett-Packard Co, Greeley Colorado USA between 1985 and 1994, with some more changes made in 1996 to port to Windows, and some C++izing in 1998. In 2005 Tesseract was open sourced by HP. From 2006 until November 2018 it was developed by Google.&lt;/p&gt;
&lt;p&gt;Major version 5 is the current stable version and started with release
&lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/releases/tag/5.0.0&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;5.0.0&lt;/a&gt; on November 30, 2021. Newer minor versions and bugfix versions are available from
&lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/releases/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Latest source code is available from &lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/tree/main&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;main branch on GitHub&lt;/a&gt;.
Open issues can be found in &lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/issues&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;issue tracker&lt;/a&gt;,
and &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/Planning.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;planning documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/ReleaseNotes.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Release Notes&lt;/a&gt;&lt;/strong&gt;
and &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/blob/main/ChangeLog&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Change Log&lt;/a&gt;&lt;/strong&gt; for more details of the releases.&lt;/p&gt;
&lt;h2 id=&#34;installing-tesseract&#34;&gt;Installing Tesseract
&lt;/h2&gt;&lt;p&gt;You can either &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/Installation.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Install Tesseract via pre-built binary package&lt;/a&gt;
or &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/Compiling.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;build it from source&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before building Tesseract from source, please check that your system has a compiler which is one of the &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/supported-compilers.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;supported compilers&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;running-tesseract&#34;&gt;Running Tesseract
&lt;/h2&gt;&lt;p&gt;Basic &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/Command-Line-Usage.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;command line usage&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tesseract imagename outputbase [-l lang] [--oem ocrenginemode] [--psm pagesegmode] [configfiles...]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For more information about the various command line options use &lt;code&gt;tesseract --help&lt;/code&gt; or &lt;code&gt;man tesseract&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Examples can be found in the &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/Command-Line-Usage.html#simplest-invocation-to-ocr-an-image&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;for-developers&#34;&gt;For developers
&lt;/h2&gt;&lt;p&gt;Developers can use &lt;code&gt;libtesseract&lt;/code&gt; &lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/blob/main/include/tesseract/capi.h&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;C&lt;/a&gt; or
&lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/blob/main/include/tesseract/baseapi.h&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;C++&lt;/a&gt; API to build their own application. If you need bindings to &lt;code&gt;libtesseract&lt;/code&gt; for other programming languages, please see the
&lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/AddOns.html#tesseract-wrappers&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;wrapper&lt;/a&gt; section in the AddOns documentation.&lt;/p&gt;
&lt;p&gt;Documentation of Tesseract generated from source code by doxygen can be found on &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tesseract-ocr.github.io&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;support&#34;&gt;Support
&lt;/h2&gt;&lt;p&gt;Before you submit an issue, please review &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/blob/main/CONTRIBUTING.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;the guidelines for this repository&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For support, first read the &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;documentation&lt;/a&gt;,
particularly the &lt;a class=&#34;link&#34; href=&#34;https://tesseract-ocr.github.io/tessdoc/FAQ.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;FAQ&lt;/a&gt; to see if your problem is addressed there.
If not, search the &lt;a class=&#34;link&#34; href=&#34;https://groups.google.com/g/tesseract-ocr&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tesseract user forum&lt;/a&gt;, the &lt;a class=&#34;link&#34; href=&#34;https://groups.google.com/g/tesseract-dev&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tesseract developer forum&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/issues&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;past issues&lt;/a&gt;, and if you still can&amp;rsquo;t find what you need, ask for support in the mailing-lists.&lt;/p&gt;
&lt;p&gt;Mailing-lists:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://groups.google.com/g/tesseract-ocr&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tesseract-ocr&lt;/a&gt; - For tesseract users.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://groups.google.com/g/tesseract-dev&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tesseract-dev&lt;/a&gt; - For tesseract developers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please report an issue only for a &lt;strong&gt;bug&lt;/strong&gt;, not for asking questions.&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;The code in this repository is licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: This software depends on other packages that may be licensed under different open source licenses.&lt;/p&gt;
&lt;p&gt;Tesseract uses &lt;a class=&#34;link&#34; href=&#34;http://leptonica.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Leptonica library&lt;/a&gt; which essentially
uses a &lt;a class=&#34;link&#34; href=&#34;http://leptonica.com/about-the-license.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;BSD 2-clause license&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;dependencies&#34;&gt;Dependencies
&lt;/h2&gt;&lt;p&gt;Tesseract uses &lt;a class=&#34;link&#34; href=&#34;https://github.com/DanBloomberg/leptonica&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Leptonica library&lt;/a&gt;
for opening input images (e.g. not documents like pdf).
It is suggested to use leptonica with built-in support for &lt;a class=&#34;link&#34; href=&#34;https://zlib.net&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;zlib&lt;/a&gt;,
&lt;a class=&#34;link&#34; href=&#34;https://sourceforge.net/projects/libpng&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;png&lt;/a&gt; and
&lt;a class=&#34;link&#34; href=&#34;http://www.simplesystems.org/libtiff&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tiff&lt;/a&gt; (for multipage tiff).&lt;/p&gt;
&lt;h2 id=&#34;latest-version-of-readme&#34;&gt;Latest Version of README
&lt;/h2&gt;&lt;p&gt;For the latest online version of the README.md see:&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract/blob/main/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/tesseract-ocr/tesseract/blob/main/README.md&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>coreutils</title>
        <link>https://producthunt.programnotes.cn/en/p/coreutils/</link>
        <pubDate>Tue, 09 Sep 2025 15:29:32 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/coreutils/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1688890239467-c43da335fe7e?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTc0MDI4NTR8&amp;ixlib=rb-4.1.0" alt="Featured image of post coreutils" /&gt;&lt;h1 id=&#34;uutilscoreutils&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/uutils/coreutils&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;uutils/coreutils&lt;/a&gt;
&lt;/h1&gt;&lt;!-- markdownlint-disable MD033 MD041 MD002 --&gt;
&lt;!-- markdownlint-disable commands-show-output no-duplicate-heading --&gt;
&lt;!-- spell-checker:ignore markdownlint ; (options) DESTDIR UTILNAME manpages reimplementation oranda --&gt;
&lt;div class=&#34;oranda-hide&#34;&gt;
&lt;div align=&#34;center&#34;&gt;
&lt;p&gt;&lt;img src=&#34;https://producthunt.programnotes.cn/docs/src/logo.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;uutils logo&#34;
	
	
&gt;&lt;/p&gt;
&lt;h1 id=&#34;uutils-coreutils&#34;&gt;uutils coreutils
&lt;/h1&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://crates.io/crates/coreutils&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/crates/v/coreutils.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Crates.io&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://discord.gg/wQVJbvJ&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&amp;amp;longCache=true&amp;amp;style=flat&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Discord&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/uutils/coreutils/blob/main/LICENSE&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;http://img.shields.io/badge/license-MIT-blue.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;License&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://deps.rs/repo/github/uutils/coreutils&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://deps.rs/repo/github/uutils/coreutils/status.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;dependency status&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://codecov.io/gh/uutils/coreutils&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://codecov.io/gh/uutils/coreutils/branch/master/graph/badge.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;CodeCov&#34;
	
	
&gt;&lt;/a&gt;
&lt;img src=&#34;https://img.shields.io/badge/MSRV-1.85.0-brightgreen&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;MSRV&#34;
	
	
&gt;
&lt;a class=&#34;link&#34; href=&#34;https://hosted.weblate.org/projects/rust-coreutils/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://hosted.weblate.org/widget/rust-coreutils/svg-badge.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Weblate&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;p&gt;uutils coreutils is a cross-platform reimplementation of the GNU coreutils in
&lt;a class=&#34;link&#34; href=&#34;http://www.rust-lang.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Rust&lt;/a&gt;. While all programs have been implemented, some
options might be missing or different behavior might be experienced.&lt;/p&gt;
&lt;div class=&#34;oranda-hide&#34;&gt;
&lt;p&gt;To install it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install coreutils
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.cargo/bin/coreutils
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;!-- markdownlint-disable-next-line MD026 --&gt;
&lt;h2 id=&#34;goals&#34;&gt;Goals
&lt;/h2&gt;&lt;p&gt;uutils coreutils aims to be a drop-in replacement for the GNU utils. Differences with GNU
are treated as bugs.&lt;/p&gt;
&lt;p&gt;Our key objectives include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Matching GNU&amp;rsquo;s output (stdout and error code) exactly&lt;/li&gt;
&lt;li&gt;Better error messages&lt;/li&gt;
&lt;li&gt;Providing comprehensive internationalization support (UTF-8)&lt;/li&gt;
&lt;li&gt;Improved performances&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;docs/src/extensions.md&#34; &gt;Extensions&lt;/a&gt; when relevant (example: &amp;ndash;progress)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;uutils aims to work on as many platforms as possible, to be able to use the same
utils on Linux, macOS, Windows and other platforms. This ensures, for example,
that scripts can be easily transferred between platforms.&lt;/p&gt;
&lt;div class=&#34;oranda-hide&#34;&gt;
&lt;h2 id=&#34;documentation&#34;&gt;Documentation
&lt;/h2&gt;&lt;p&gt;uutils has both user and developer documentation available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://uutils.github.io/coreutils/docs/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;User Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.rs/crate/coreutils/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Developer Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both can also be generated locally, the instructions for that can be found in
the &lt;a class=&#34;link&#34; href=&#34;https://github.com/uutils/uutils.github.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;coreutils docs&lt;/a&gt; repository.&lt;/p&gt;
&lt;p&gt;Use &lt;a class=&#34;link&#34; href=&#34;https://hosted.weblate.org/projects/rust-coreutils/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;weblate/rust-coreutils&lt;/a&gt; to translate the Rust coreutils into your language.&lt;/p&gt;
&lt;!-- ANCHOR: build (this mark is needed for mdbook) --&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Rust (&lt;code&gt;cargo&lt;/code&gt;, &lt;code&gt;rustc&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;GNU Make (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;rust-version&#34;&gt;Rust Version
&lt;/h3&gt;&lt;p&gt;uutils follows Rust&amp;rsquo;s release channels and is tested against stable, beta and
nightly. The current Minimum Supported Rust Version (MSRV) is &lt;code&gt;1.85.0&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;building&#34;&gt;Building
&lt;/h2&gt;&lt;p&gt;There are currently two methods to build the uutils binaries: either Cargo or
GNU Make.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Building the full package, including all documentation, requires both Cargo
and GNU Make on a Unix platform.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For either method, we first need to fetch the repository:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/uutils/coreutils
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; coreutils
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;cargo&#34;&gt;Cargo
&lt;/h3&gt;&lt;p&gt;Building uutils using Cargo is easy because the process is the same as for every
other Rust program:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo build --release
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This command builds the most portable common core set of uutils into a multicall
(BusyBox-type) binary, named &amp;lsquo;coreutils&amp;rsquo;, on most Rust-supported platforms.&lt;/p&gt;
&lt;p&gt;Additional platform-specific uutils are often available. Building these expanded
sets of uutils for a platform (on that platform) is as simple as specifying it
as a feature:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo build --release --features macos
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo build --release --features windows
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo build --release --features unix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you don&amp;rsquo;t want to build every utility available on your platform into the
final binary, you can also specify which ones you want to build manually. For
example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo build --features &lt;span class=&#34;s2&#34;&gt;&amp;#34;base32 cat echo rm&amp;#34;&lt;/span&gt; --no-default-features
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you don&amp;rsquo;t want to build the multicall binary and would prefer to build the
utilities as individual binaries, that is also possible. Each utility is
contained in its own package within the main repository, named &amp;ldquo;uu_UTILNAME&amp;rdquo;. To
build individual utilities, use cargo to build just the specific packages (using
the &lt;code&gt;--package&lt;/code&gt; [aka &lt;code&gt;-p&lt;/code&gt;] option). For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;gnu-make&#34;&gt;GNU Make
&lt;/h3&gt;&lt;p&gt;Building using &lt;code&gt;make&lt;/code&gt; is a simple process as well.&lt;/p&gt;
&lt;p&gt;To simply build all available utilities:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;In release mode:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;PROFILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;release
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To build all but a few of the available utilities:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;SKIP_UTILS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;UTILITY_1 UTILITY_2&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To build only a few of the available utilities:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;UTILS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;UTILITY_1 UTILITY_2&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;installation&#34;&gt;Installation
&lt;/h2&gt;&lt;h3 id=&#34;install-with-cargo&#34;&gt;Install with Cargo
&lt;/h3&gt;&lt;p&gt;Likewise, installing can simply be done using:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install --path . --locked
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This command will install uutils into Cargo&amp;rsquo;s &lt;em&gt;bin&lt;/em&gt; folder (&lt;em&gt;e.g.&lt;/em&gt;
&lt;code&gt;$HOME/.cargo/bin&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;This does not install files necessary for shell completion or manpages. For
manpages or shell completion to work, use &lt;code&gt;GNU Make&lt;/code&gt; or see
&lt;code&gt;Manually install shell completions&lt;/code&gt;/&lt;code&gt;Manually install manpages&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;install-with-gnu-make&#34;&gt;Install with GNU Make
&lt;/h3&gt;&lt;p&gt;To install all available utilities:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To install using &lt;code&gt;sudo&lt;/code&gt; switch &lt;code&gt;-E&lt;/code&gt; must be used:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -E make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To install all but a few of the available utilities:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;SKIP_UTILS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;UTILITY_1 UTILITY_2&amp;#39;&lt;/span&gt; install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To install only a few of the available utilities:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;UTILS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;UTILITY_1 UTILITY_2&amp;#39;&lt;/span&gt; install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To install every program with a prefix (e.g. uu-echo uu-cat):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;PROG_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;PREFIX_GOES_HERE install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To install the multicall binary:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;MULTICALL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;y install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Set install parent directory (default value is /usr/local):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# DESTDIR is also supported&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/my/path install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Installing with &lt;code&gt;make&lt;/code&gt; installs shell completions for all installed utilities
for &lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;fish&lt;/code&gt; and &lt;code&gt;zsh&lt;/code&gt;. Completions for &lt;code&gt;elvish&lt;/code&gt; and &lt;code&gt;powershell&lt;/code&gt; can also
be generated; See &lt;code&gt;Manually install shell completions&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To skip installation of completions and manpages:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;COMPLETIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;n &lt;span class=&#34;nv&#34;&gt;MANPAGES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;n install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;manually-install-shell-completions&#34;&gt;Manually install shell completions
&lt;/h3&gt;&lt;p&gt;The &lt;code&gt;coreutils&lt;/code&gt; binary can generate completions for the &lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;elvish&lt;/code&gt;,
&lt;code&gt;fish&lt;/code&gt;, &lt;code&gt;powershell&lt;/code&gt; and &lt;code&gt;zsh&lt;/code&gt; shells. It prints the result to stdout.&lt;/p&gt;
&lt;p&gt;The syntax is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo run completion &amp;lt;utility&amp;gt; &amp;lt;shell&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;So, to install completions for &lt;code&gt;ls&lt;/code&gt; on &lt;code&gt;bash&lt;/code&gt; to
&lt;code&gt;/usr/local/share/bash-completion/completions/ls&lt;/code&gt;, run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo run completion ls bash &amp;gt; /usr/local/share/bash-completion/completions/ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;manually-install-manpages&#34;&gt;Manually install manpages
&lt;/h3&gt;&lt;p&gt;To generate manpages, the syntax is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo run manpage &amp;lt;utility&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;So, to install the manpage for &lt;code&gt;ls&lt;/code&gt; to &lt;code&gt;/usr/local/share/man/man1/ls.1&lt;/code&gt; run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo run manpage ls &amp;gt; /usr/local/share/man/man1/ls.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;un-installation&#34;&gt;Un-installation
&lt;/h2&gt;&lt;p&gt;Un-installation differs depending on how you have installed uutils. If you used
Cargo to install, use Cargo to uninstall. If you used GNU Make to install, use
Make to uninstall.&lt;/p&gt;
&lt;h3 id=&#34;uninstall-with-cargo&#34;&gt;Uninstall with Cargo
&lt;/h3&gt;&lt;p&gt;To uninstall uutils:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo uninstall coreutils
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;uninstall-with-gnu-make&#34;&gt;Uninstall with GNU Make
&lt;/h3&gt;&lt;p&gt;To uninstall all utilities:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make uninstall
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To uninstall every program with a set prefix:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;PROG_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;PREFIX_GOES_HERE uninstall
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To uninstall the multicall binary:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;MULTICALL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;y uninstall
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To uninstall from a custom parent directory:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# DESTDIR is also supported&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/my/path uninstall
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- ANCHOR_END: build (this mark is needed for mdbook) --&gt;
&lt;h2 id=&#34;gnu-test-suite-compatibility&#34;&gt;GNU test suite compatibility
&lt;/h2&gt;&lt;p&gt;Below is the evolution of how many GNU tests uutils passes. A more detailed
breakdown of the GNU test results of the main branch can be found
&lt;a class=&#34;link&#34; href=&#34;https://uutils.github.io/coreutils/docs/test_coverage.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;in the user manual&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;https://github.com/orgs/uutils/projects/1&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/orgs/uutils/projects/1&lt;/a&gt; for the main meta bugs
(many are missing).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://github.com/uutils/coreutils-tracking/blob/main/gnu-results.svg?raw=true&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Evolution over time&#34;
	
	
&gt;&lt;/p&gt;
&lt;/div&gt; &lt;!-- close oranda-hide div --&gt;
&lt;h2 id=&#34;contributing&#34;&gt;Contributing
&lt;/h2&gt;&lt;p&gt;To contribute to uutils, please see &lt;a class=&#34;link&#34; href=&#34;CONTRIBUTING.md&#34; &gt;CONTRIBUTING&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;uutils is licensed under the MIT License - see the &lt;code&gt;LICENSE&lt;/code&gt; file for details&lt;/p&gt;
&lt;p&gt;GNU Coreutils is licensed under the GPL 3.0 or later.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>spotify-downloader</title>
        <link>https://producthunt.programnotes.cn/en/p/spotify-downloader/</link>
        <pubDate>Tue, 26 Aug 2025 15:29:12 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/spotify-downloader/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1739987017543-c79061509bc9?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTYxOTMyOTR8&amp;ixlib=rb-4.1.0" alt="Featured image of post spotify-downloader" /&gt;&lt;h1 id=&#34;spotdlspotify-downloader&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/spotDL/spotify-downloader&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;spotDL/spotify-downloader&lt;/a&gt;
&lt;/h1&gt;&lt;!--- mdformat-toc start --slug=github ---&gt;
&lt;!---
!!! IF EDITING THE README, ENSURE TO COPY THE WHOLE FILE TO index.md in `/docs/` AND REMOVE THE REFERENCES TO ReadTheDocs THERE.
---&gt;
&lt;div align=&#34;center&#34;&gt;
&lt;h1 id=&#34;spotdl-v4&#34;&gt;spotDL v4
&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;spotDL&lt;/strong&gt; finds songs from Spotify playlists on YouTube and downloads them - along with album art, lyrics and metadata.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/spotDL/spotify-downloader/blob/master/LICENSE&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/license/spotdl/spotify-downloader?color=44CC11&amp;amp;style=flat-square&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;MIT License&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://pypi.org/project/spotdl/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/pypi/pyversions/spotDL?color=%2344CC11&amp;amp;style=flat-square&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;PyPI version&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://pypi.org/project/spotdl/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/pypi/dw/spotDL?label=downloads@pypi&amp;amp;color=344CC11&amp;amp;style=flat-square&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;PyPi downloads&#34;
	
	
&gt;&lt;/a&gt;
&lt;img src=&#34;https://img.shields.io/github/contributors/spotDL/spotify-downloader?style=flat-square&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Contributors&#34;
	
	
&gt;
&lt;a class=&#34;link&#34; href=&#34;https://discord.gg/xCa23pwJWY&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/discord/771628785447337985?label=discord&amp;amp;logo=discord&amp;amp;style=flat-square&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Discord&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;spotDL: The fastest, easiest and most accurate command-line music downloader.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://spotdl.readthedocs.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Read the documentation on ReadTheDocs!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation
&lt;/h2&gt;&lt;p&gt;Refer to our &lt;a class=&#34;link&#34; href=&#34;docs/installation.md&#34; &gt;Installation Guide&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h3 id=&#34;python-recommended-method&#34;&gt;Python (Recommended Method)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;spotDL&lt;/em&gt; can be installed by running &lt;code&gt;pip install spotdl&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To update spotDL run &lt;code&gt;pip install --upgrade spotdl&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On some systems you might have to change &lt;code&gt;pip&lt;/code&gt; to &lt;code&gt;pip3&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
    &lt;summary style=&#34;font-size:1.25em&#34;&gt;&lt;strong&gt;Other options&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Prebuilt executable
&lt;ul&gt;
&lt;li&gt;You can download the latest version from the
&lt;a class=&#34;link&#34; href=&#34;https://github.com/spotDL/spotify-downloader/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Releases Tab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;On Termux
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;curl -L https://raw.githubusercontent.com/spotDL/spotify-downloader/master/scripts/termux.sh | sh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Arch
&lt;ul&gt;
&lt;li&gt;There is an &lt;a class=&#34;link&#34; href=&#34;https://aur.archlinux.org/packages/spotdl/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Arch User Repository (AUR) package&lt;/a&gt; for
spotDL.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Docker
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Build image:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker build -t spotdl .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Launch container with spotDL parameters (see section below). You need to create mapped
volume to access song files&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --rm -v &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;:/music spotdl download &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;trackUrl&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build from source&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/spotDL/spotify-downloader &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; spotify-downloader
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install uv
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv sync
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run scripts/build.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;An executable is created in &lt;code&gt;spotify-downloader/dist/&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h3 id=&#34;installing-ffmpeg&#34;&gt;Installing FFmpeg
&lt;/h3&gt;&lt;p&gt;FFmpeg is required for spotDL. If using FFmpeg only for spotDL, you can simply install FFmpeg to your spotDL installation directory:
&lt;code&gt;spotdl --download-ffmpeg&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We recommend the above option, but if you want to install FFmpeg system-wide,
follow these instructions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://windowsloop.com/install-ffmpeg-windows-10/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Windows Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OSX - &lt;code&gt;brew install ffmpeg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Linux - &lt;code&gt;sudo apt install ffmpeg&lt;/code&gt; or use your distro&amp;rsquo;s package manager&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;usage&#34;&gt;Usage
&lt;/h2&gt;&lt;p&gt;Using SpotDL without options:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;spotdl &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;urls&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You can run &lt;em&gt;spotDL&lt;/em&gt; as a package if running it as a script doesn&amp;rsquo;t work:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m spotdl &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;urls&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;General usage:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;spotdl &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;operation&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;options&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; QUERY
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;There are different &lt;strong&gt;operations&lt;/strong&gt; spotDL can perform. The &lt;em&gt;default&lt;/em&gt; is &lt;code&gt;download&lt;/code&gt;, which simply downloads the songs from YouTube and embeds metadata.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;query&lt;/strong&gt; for spotDL is usually a list of Spotify URLs, but for some operations like &lt;strong&gt;sync&lt;/strong&gt;, only a single link or file is required.
For a list of all &lt;strong&gt;options&lt;/strong&gt; use &lt;code&gt;spotdl -h&lt;/code&gt;&lt;/p&gt;
&lt;details&gt;
&lt;summary style=&#34;font-size:1em&#34;&gt;&lt;strong&gt;Supported operations&lt;/strong&gt;&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;save&lt;/code&gt;: Saves only the metadata from Spotify without downloading anything.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usage:
&lt;code&gt;spotdl save [query] --save-file {filename}.spotdl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;web&lt;/code&gt;: Starts a web interface instead of using the command line. However, it has limited features and only supports downloading single songs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;url&lt;/code&gt;: Get direct download link for each song from the query.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usage:
&lt;code&gt;spotdl url [query]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sync&lt;/code&gt;: Updates directories. Compares the directory with the current state of the playlist. Newly added songs will be downloaded and removed songs will be deleted. No other songs will be downloaded and no other files will be deleted.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Usage:
&lt;code&gt;spotdl sync [query] --save-file {filename}.spotdl&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This create a new &lt;strong&gt;sync&lt;/strong&gt; file, to update the directory in the future, use:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;spotdl sync {filename}.spotdl&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;meta&lt;/code&gt;: Updates metadata for the provided song files.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&#34;music-sourcing-and-audio-quality&#34;&gt;Music Sourcing and Audio Quality
&lt;/h2&gt;&lt;p&gt;spotDL uses YouTube as a source for music downloads. This method is used to avoid any issues related to downloading music from Spotify.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;
Users are responsible for their actions and potential legal consequences. We do not support unauthorized downloading of copyrighted material and take no responsibility for user actions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;audio-quality&#34;&gt;Audio Quality
&lt;/h3&gt;&lt;p&gt;spotDL downloads music from YouTube and is designed to always download the highest possible bitrate; which is 128 kbps for regular users and 256 kbps for YouTube Music premium users.&lt;/p&gt;
&lt;p&gt;Check the &lt;a class=&#34;link&#34; href=&#34;docs/usage.md#audio-formats-and-quality&#34; &gt;Audio Formats&lt;/a&gt; page for more info.&lt;/p&gt;
&lt;h2 id=&#34;contributing&#34;&gt;Contributing
&lt;/h2&gt;&lt;p&gt;Interested in contributing? Check out our &lt;a class=&#34;link&#34; href=&#34;docs/CONTRIBUTING.md&#34; &gt;CONTRIBUTING.md&lt;/a&gt; to find
resources around contributing along with a guide on how to set up a development environment.&lt;/p&gt;
&lt;h3 id=&#34;join-our-amazing-community-as-a-code-contributor&#34;&gt;Join our amazing community as a code contributor
&lt;/h3&gt;&lt;a href=&#34;https://github.com/spotDL/spotify-downloader/graphs/contributors&#34;&gt;
  &lt;img class=&#34;dark-light&#34; src=&#34;https://contrib.rocks/image?repo=spotDL/spotify-downloader&amp;anon=0&amp;columns=25&amp;max=100&amp;r=true&#34; /&gt;
&lt;/a&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;This project is Licensed under the &lt;a class=&#34;link&#34; href=&#34;https://producthunt.programnotes.cn/LICENSE&#34; &gt;MIT&lt;/a&gt; License.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>the-art-of-command-line</title>
        <link>https://producthunt.programnotes.cn/en/p/the-art-of-command-line/</link>
        <pubDate>Sun, 03 Aug 2025 15:29:56 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/the-art-of-command-line/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1450501719076-a6d5e3e780e5?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTQyMDYxMjV8&amp;ixlib=rb-4.1.0" alt="Featured image of post the-art-of-command-line" /&gt;&lt;h1 id=&#34;jlevythe-art-of-command-line&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/jlevy/the-art-of-command-line&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;jlevy/the-art-of-command-line&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;🌍
&lt;em&gt;&lt;a class=&#34;link&#34; href=&#34;README-cs.md&#34; &gt;Čeština&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-de.md&#34; &gt;Deutsch&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-el.md&#34; &gt;Ελληνικά&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README.md&#34; &gt;English&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-es.md&#34; &gt;Español&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-fr.md&#34; &gt;Français&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-id.md&#34; &gt;Indonesia&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-it.md&#34; &gt;Italiano&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-ja.md&#34; &gt;日本語&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-ko.md&#34; &gt;한국어&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-pl.md&#34; &gt;polski&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-pt.md&#34; &gt;Português&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-ro.md&#34; &gt;Română&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-ru.md&#34; &gt;Русский&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-sl.md&#34; &gt;Slovenščina&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-uk.md&#34; &gt;Українська&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-zh.md&#34; &gt;简体中文&lt;/a&gt; ∙ &lt;a class=&#34;link&#34; href=&#34;README-zh-Hant.md&#34; &gt;繁體中文&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;the-art-of-command-line&#34;&gt;The Art of Command Line
&lt;/h1&gt;&lt;p&gt;&lt;em&gt;Note: I&amp;rsquo;m planning to revise this and looking for a new co-author to help with expanding this into a more comprehensive guide. While it&amp;rsquo;s very popular, it could be broader and a bit deeper. If you like to write and are close to being an expert on this material and willing to consider helping, please drop me a note at josh (0x40) holloway.com. –&lt;a class=&#34;link&#34; href=&#34;https://github.com/jlevy&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;jlevy&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://www.holloway.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Holloway&lt;/a&gt;. Thank you!&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#meta&#34; &gt;Meta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#basics&#34; &gt;Basics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#everyday-use&#34; &gt;Everyday use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#processing-files-and-data&#34; &gt;Processing files and data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#system-debugging&#34; &gt;System debugging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#one-liners&#34; &gt;One-liners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#obscure-but-useful&#34; &gt;Obscure but useful&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#macos-only&#34; &gt;macOS only&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#windows-only&#34; &gt;Windows only&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#more-resources&#34; &gt;More resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#disclaimer&#34; &gt;Disclaimer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://producthunt.programnotes.cn/cowsay.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;curl -s ‘https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md’ | egrep -o ‘\w&amp;#43;’ | tr -d ‘`’ | cowsay -W50&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Fluency on the command line is a skill often neglected or considered arcane, but it improves your flexibility and productivity as an engineer in both obvious and subtle ways. This is a selection of notes and tips on using the command-line that we&amp;rsquo;ve found useful when working on Linux. Some tips are elementary, and some are fairly specific, sophisticated, or obscure. This page is not long, but if you can use and recall all the items here, you know a lot.&lt;/p&gt;
&lt;p&gt;This work is the result of &lt;a class=&#34;link&#34; href=&#34;AUTHORS.md&#34; &gt;many authors and translators&lt;/a&gt;.
Some of this
&lt;a class=&#34;link&#34; href=&#34;http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;originally&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;appeared&lt;/a&gt;
on &lt;a class=&#34;link&#34; href=&#34;http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Quora&lt;/a&gt;,
but it has since moved to GitHub, where people more talented than the original author have made numerous improvements.
&lt;a class=&#34;link&#34; href=&#34;https://airtable.com/shrzMhx00YiIVAWJg&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;strong&gt;Please submit a question&lt;/strong&gt;&lt;/a&gt; if you have a question related to the command line. &lt;a class=&#34;link&#34; href=&#34;https://producthunt.programnotes.cn/CONTRIBUTING.md&#34; &gt;&lt;strong&gt;Please contribute&lt;/strong&gt;&lt;/a&gt; if you see an error or something that could be better!&lt;/p&gt;
&lt;h2 id=&#34;meta&#34;&gt;Meta
&lt;/h2&gt;&lt;p&gt;Scope:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This guide is for both beginners and experienced users. The goals are &lt;em&gt;breadth&lt;/em&gt; (everything important), &lt;em&gt;specificity&lt;/em&gt; (give concrete examples of the most common case), and &lt;em&gt;brevity&lt;/em&gt; (avoid things that aren&amp;rsquo;t essential or digressions you can easily look up elsewhere). Every tip is essential in some situation or significantly saves time over alternatives.&lt;/li&gt;
&lt;li&gt;This is written for Linux, with the exception of the &amp;ldquo;&lt;a class=&#34;link&#34; href=&#34;#macos-only&#34; &gt;macOS only&lt;/a&gt;&amp;rdquo; and &amp;ldquo;&lt;a class=&#34;link&#34; href=&#34;#windows-only&#34; &gt;Windows only&lt;/a&gt;&amp;rdquo; sections. Many of the other items apply or can be installed on other Unices or macOS (or even Cygwin).&lt;/li&gt;
&lt;li&gt;The focus is on interactive Bash, though many tips apply to other shells and to general Bash scripting.&lt;/li&gt;
&lt;li&gt;It includes both &amp;ldquo;standard&amp;rdquo; Unix commands as well as ones that require special package installs &amp;ndash; so long as they are important enough to merit inclusion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To keep this to one page, content is implicitly included by reference. You&amp;rsquo;re smart enough to look up more detail elsewhere once you know the idea or command to Google. Use &lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;yum&lt;/code&gt;, &lt;code&gt;dnf&lt;/code&gt;, &lt;code&gt;pacman&lt;/code&gt;, &lt;code&gt;pip&lt;/code&gt; or &lt;code&gt;brew&lt;/code&gt; (as appropriate) to install new programs.&lt;/li&gt;
&lt;li&gt;Use &lt;a class=&#34;link&#34; href=&#34;http://explainshell.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Explainshell&lt;/a&gt; to get a helpful breakdown of what commands, options, pipes etc. do.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;basics&#34;&gt;Basics
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Learn basic Bash. Actually, type &lt;code&gt;man bash&lt;/code&gt; and at least skim the whole thing; it&amp;rsquo;s pretty easy to follow and not that long. Alternate shells can be nice, but Bash is powerful and always available (learning &lt;em&gt;only&lt;/em&gt; zsh, fish, etc., while tempting on your own laptop, restricts you in many situations, such as using existing servers).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Learn at least one text-based editor well. The &lt;code&gt;nano&lt;/code&gt; editor is one of the simplest for basic editing (opening, editing, saving, searching). However, for the power user in a text terminal, there is no substitute for Vim (&lt;code&gt;vi&lt;/code&gt;), the hard-to-learn but venerable, fast, and full-featured editor. Many people also use the classic Emacs, particularly for larger editing tasks. (Of course, any modern software developer working on an extensive project is unlikely to use only a pure text-based editor and should also be familiar with modern graphical IDEs and tools.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finding documentation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Know how to read official documentation with &lt;code&gt;man&lt;/code&gt; (for the inquisitive, &lt;code&gt;man man&lt;/code&gt; lists the section numbers, e.g. 1 is &amp;ldquo;regular&amp;rdquo; commands, 5 is files/conventions, and 8 are for administration). Find man pages with &lt;code&gt;apropos&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Know that some commands are not executables, but Bash builtins, and that you can get help on them with &lt;code&gt;help&lt;/code&gt; and &lt;code&gt;help -d&lt;/code&gt;. You can find out whether a command is an executable, shell builtin or an alias by using &lt;code&gt;type command&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;curl cheat.sh/command&lt;/code&gt; will give a brief &amp;ldquo;cheat sheet&amp;rdquo; with common examples of how to use a shell command.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Learn about redirection of output and input using &lt;code&gt;&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;&lt;/code&gt; and pipes using &lt;code&gt;|&lt;/code&gt;. Know &lt;code&gt;&amp;gt;&lt;/code&gt; overwrites the output file and &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; appends. Learn about stdout and stderr.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Learn about file glob expansion with &lt;code&gt;*&lt;/code&gt; (and perhaps &lt;code&gt;?&lt;/code&gt; and &lt;code&gt;[&lt;/code&gt;&amp;hellip;&lt;code&gt;]&lt;/code&gt;) and quoting and the difference between double &lt;code&gt;&amp;quot;&lt;/code&gt; and single &lt;code&gt;&#39;&lt;/code&gt; quotes. (See more on variable expansion below.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Be familiar with Bash job management: &lt;code&gt;&amp;amp;&lt;/code&gt;, &lt;strong&gt;ctrl-z&lt;/strong&gt;, &lt;strong&gt;ctrl-c&lt;/strong&gt;, &lt;code&gt;jobs&lt;/code&gt;, &lt;code&gt;fg&lt;/code&gt;, &lt;code&gt;bg&lt;/code&gt;, &lt;code&gt;kill&lt;/code&gt;, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know &lt;code&gt;ssh&lt;/code&gt;, and the basics of passwordless authentication, via &lt;code&gt;ssh-agent&lt;/code&gt;, &lt;code&gt;ssh-add&lt;/code&gt;, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Basic file management: &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;ls -l&lt;/code&gt; (in particular, learn what every column in &lt;code&gt;ls -l&lt;/code&gt; means), &lt;code&gt;less&lt;/code&gt;, &lt;code&gt;head&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt; and &lt;code&gt;tail -f&lt;/code&gt; (or even better, &lt;code&gt;less +F&lt;/code&gt;), &lt;code&gt;ln&lt;/code&gt; and &lt;code&gt;ln -s&lt;/code&gt; (learn the differences and advantages of hard versus soft links), &lt;code&gt;chown&lt;/code&gt;, &lt;code&gt;chmod&lt;/code&gt;, &lt;code&gt;du&lt;/code&gt; (for a quick summary of disk usage: &lt;code&gt;du -hs *&lt;/code&gt;). For filesystem management, &lt;code&gt;df&lt;/code&gt;, &lt;code&gt;mount&lt;/code&gt;, &lt;code&gt;fdisk&lt;/code&gt;, &lt;code&gt;mkfs&lt;/code&gt;, &lt;code&gt;lsblk&lt;/code&gt;. Learn what an inode is (&lt;code&gt;ls -i&lt;/code&gt; or &lt;code&gt;df -i&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Basic network management: &lt;code&gt;ip&lt;/code&gt; or &lt;code&gt;ifconfig&lt;/code&gt;, &lt;code&gt;dig&lt;/code&gt;, &lt;code&gt;traceroute&lt;/code&gt;, &lt;code&gt;route&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Learn and use a version control management system, such as &lt;code&gt;git&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know regular expressions well, and the various flags to &lt;code&gt;grep&lt;/code&gt;/&lt;code&gt;egrep&lt;/code&gt;. The &lt;code&gt;-i&lt;/code&gt;, &lt;code&gt;-o&lt;/code&gt;, &lt;code&gt;-v&lt;/code&gt;, &lt;code&gt;-A&lt;/code&gt;, &lt;code&gt;-B&lt;/code&gt;, and &lt;code&gt;-C&lt;/code&gt; options are worth knowing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Learn to use &lt;code&gt;apt-get&lt;/code&gt;, &lt;code&gt;yum&lt;/code&gt;, &lt;code&gt;dnf&lt;/code&gt; or &lt;code&gt;pacman&lt;/code&gt; (depending on distro) to find and install packages. And make sure you have &lt;code&gt;pip&lt;/code&gt; to install Python-based command-line tools (a few below are easiest to install via &lt;code&gt;pip&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;everyday-use&#34;&gt;Everyday use
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In Bash, use &lt;strong&gt;Tab&lt;/strong&gt; to complete arguments or list all available commands and &lt;strong&gt;ctrl-r&lt;/strong&gt; to search through command history (after pressing, type to search, press &lt;strong&gt;ctrl-r&lt;/strong&gt; repeatedly to cycle through more matches, press &lt;strong&gt;Enter&lt;/strong&gt; to execute the found command, or hit the right arrow to put the result in the current line to allow editing).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Bash, use &lt;strong&gt;ctrl-w&lt;/strong&gt; to delete the last word, and &lt;strong&gt;ctrl-u&lt;/strong&gt; to delete the content from current cursor back to the start of the line. Use &lt;strong&gt;alt-b&lt;/strong&gt; and &lt;strong&gt;alt-f&lt;/strong&gt; to move by word, &lt;strong&gt;ctrl-a&lt;/strong&gt; to move cursor to beginning of line,  &lt;strong&gt;ctrl-e&lt;/strong&gt; to move cursor to end of line, &lt;strong&gt;ctrl-k&lt;/strong&gt; to kill to the end of the line, &lt;strong&gt;ctrl-l&lt;/strong&gt; to clear the screen. See &lt;code&gt;man readline&lt;/code&gt; for all the default keybindings in Bash. There are a lot. For example &lt;strong&gt;alt-.&lt;/strong&gt; cycles through previous arguments, and &lt;strong&gt;alt-&lt;/strong&gt;* expands a glob.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alternatively, if you love vi-style key-bindings, use &lt;code&gt;set -o vi&lt;/code&gt; (and &lt;code&gt;set -o emacs&lt;/code&gt; to put it back).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For editing long commands, after setting your editor (for example &lt;code&gt;export EDITOR=vim&lt;/code&gt;), &lt;strong&gt;ctrl-x&lt;/strong&gt; &lt;strong&gt;ctrl-e&lt;/strong&gt; will open the current command in an editor for multi-line editing. Or in vi style, &lt;strong&gt;escape-v&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To see recent commands, use &lt;code&gt;history&lt;/code&gt;. Follow with &lt;code&gt;!n&lt;/code&gt; (where &lt;code&gt;n&lt;/code&gt; is the command number) to execute again. There are also many abbreviations you can use, the most useful probably being &lt;code&gt;!$&lt;/code&gt; for last argument and &lt;code&gt;!!&lt;/code&gt; for last command (see &amp;ldquo;HISTORY EXPANSION&amp;rdquo; in the man page). However, these are often easily replaced with &lt;strong&gt;ctrl-r&lt;/strong&gt; and &lt;strong&gt;alt-.&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to your home directory with &lt;code&gt;cd&lt;/code&gt;. Access files relative to your home directory with the &lt;code&gt;~&lt;/code&gt; prefix (e.g. &lt;code&gt;~/.bashrc&lt;/code&gt;). In &lt;code&gt;sh&lt;/code&gt; scripts refer to the home directory as &lt;code&gt;$HOME&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To go back to the previous working directory: &lt;code&gt;cd -&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you are halfway through typing a command but change your mind, hit &lt;strong&gt;alt-#&lt;/strong&gt; to add a &lt;code&gt;#&lt;/code&gt; at the beginning and enter it as a comment (or use &lt;strong&gt;ctrl-a&lt;/strong&gt;, &lt;strong&gt;#&lt;/strong&gt;, &lt;strong&gt;enter&lt;/strong&gt;). You can then return to it later via command history.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;xargs&lt;/code&gt; (or &lt;code&gt;parallel&lt;/code&gt;). It&amp;rsquo;s very powerful. Note you can control how many items execute per line (&lt;code&gt;-L&lt;/code&gt;) as well as parallelism (&lt;code&gt;-P&lt;/code&gt;). If you&amp;rsquo;re not sure if it&amp;rsquo;ll do the right thing, use &lt;code&gt;xargs echo&lt;/code&gt; first. Also, &lt;code&gt;-I{}&lt;/code&gt; is handy. Examples:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      find . -name &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.py&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs grep some_function
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      cat hosts &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; ssh root@&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; hostname
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pstree -p&lt;/code&gt; is a helpful display of the process tree.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;pgrep&lt;/code&gt; and &lt;code&gt;pkill&lt;/code&gt; to find or signal processes by name (&lt;code&gt;-f&lt;/code&gt; is helpful).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know the various signals you can send processes. For example, to suspend a process, use &lt;code&gt;kill -STOP [pid]&lt;/code&gt;. For the full list, see &lt;code&gt;man 7 signal&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;nohup&lt;/code&gt; or &lt;code&gt;disown&lt;/code&gt; if you want a background process to keep running forever.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check what processes are listening via &lt;code&gt;netstat -lntp&lt;/code&gt; or &lt;code&gt;ss -plat&lt;/code&gt; (for TCP; add &lt;code&gt;-u&lt;/code&gt; for UDP) or &lt;code&gt;lsof -iTCP -sTCP:LISTEN -P -n&lt;/code&gt; (which also works on macOS).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;See also &lt;code&gt;lsof&lt;/code&gt; and &lt;code&gt;fuser&lt;/code&gt; for open sockets and files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;See &lt;code&gt;uptime&lt;/code&gt; or &lt;code&gt;w&lt;/code&gt; to know how long the system has been running.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;alias&lt;/code&gt; to create shortcuts for commonly used commands. For example, &lt;code&gt;alias ll=&#39;ls -latr&#39;&lt;/code&gt; creates a new alias &lt;code&gt;ll&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save aliases, shell settings, and functions you commonly use in &lt;code&gt;~/.bashrc&lt;/code&gt;, and &lt;a class=&#34;link&#34; href=&#34;http://superuser.com/a/183980/7106&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;arrange for login shells to source it&lt;/a&gt;. This will make your setup available in all your shell sessions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Put the settings of environment variables as well as commands that should be executed when you login in &lt;code&gt;~/.bash_profile&lt;/code&gt;. Separate configuration will be needed for shells you launch from graphical environment logins and &lt;code&gt;cron&lt;/code&gt; jobs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Synchronize your configuration files (e.g. &lt;code&gt;.bashrc&lt;/code&gt; and &lt;code&gt;.bash_profile&lt;/code&gt;) among various computers with Git.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Understand that care is needed when variables and filenames include whitespace. Surround your Bash variables with quotes, e.g. &lt;code&gt;&amp;quot;$FOO&amp;quot;&lt;/code&gt;. Prefer the &lt;code&gt;-0&lt;/code&gt; or &lt;code&gt;-print0&lt;/code&gt; options to enable null characters to delimit filenames, e.g. &lt;code&gt;locate -0 pattern | xargs -0 ls -al&lt;/code&gt; or &lt;code&gt;find / -print0 -type d | xargs -0 ls -al&lt;/code&gt;. To iterate on filenames containing whitespace in a for loop, set your IFS to be a newline only using &lt;code&gt;IFS=$&#39;\n&#39;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Bash scripts, use &lt;code&gt;set -x&lt;/code&gt; (or the variant &lt;code&gt;set -v&lt;/code&gt;, which logs raw input, including unexpanded variables and comments) for debugging output. Use strict modes unless you have a good reason not to: Use &lt;code&gt;set -e&lt;/code&gt; to abort on errors (nonzero exit code). Use &lt;code&gt;set -u&lt;/code&gt; to detect unset variable usages. Consider &lt;code&gt;set -o pipefail&lt;/code&gt; too, to abort on errors within pipes (though read up on it more if you do, as this topic is a bit subtle). For more involved scripts, also use &lt;code&gt;trap&lt;/code&gt; on EXIT or ERR. A useful habit is to start a script like this, which will make it detect and abort on common errors and print a message:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -euo pipefail
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;trap&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;echo &amp;#39;error: Script failed: see failed command above&amp;#39;&amp;#34;&lt;/span&gt; ERR
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;In Bash scripts, subshells (written with parentheses) are convenient ways to group commands. A common example is to temporarily move to a different working directory, e.g.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# do something in current dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /some/other/dir &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; other-command&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# continue in original dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In Bash, note there are lots of kinds of variable expansion. Checking a variable exists: &lt;code&gt;${name:?error message}&lt;/code&gt;. For example, if a Bash script requires a single argument, just write &lt;code&gt;input_file=${1:?usage: $0 input_file}&lt;/code&gt;. Using a default value if a variable is empty: &lt;code&gt;${name:-default}&lt;/code&gt;. If you want to have an additional (optional) parameter added to the previous example, you can use something like &lt;code&gt;output_file=${2:-logfile}&lt;/code&gt;. If &lt;code&gt;$2&lt;/code&gt; is omitted and thus empty, &lt;code&gt;output_file&lt;/code&gt; will be set to &lt;code&gt;logfile&lt;/code&gt;. Arithmetic expansion: &lt;code&gt;i=$(( (i + 1) % 5 ))&lt;/code&gt;. Sequences: &lt;code&gt;{1..10}&lt;/code&gt;. Trimming of strings: &lt;code&gt;${var%suffix}&lt;/code&gt; and &lt;code&gt;${var#prefix}&lt;/code&gt;. For example if &lt;code&gt;var=foo.pdf&lt;/code&gt;, then &lt;code&gt;echo ${var%.pdf}.txt&lt;/code&gt; prints &lt;code&gt;foo.txt&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Brace expansion using &lt;code&gt;{&lt;/code&gt;&amp;hellip;&lt;code&gt;}&lt;/code&gt; can reduce having to re-type similar text and automate combinations of items.  This is helpful in examples like &lt;code&gt;mv foo.{txt,pdf} some-dir&lt;/code&gt; (which moves both files), &lt;code&gt;cp somefile{,.bak}&lt;/code&gt; (which expands to &lt;code&gt;cp somefile somefile.bak&lt;/code&gt;) or &lt;code&gt;mkdir -p test-{a,b,c}/subtest-{1,2,3}&lt;/code&gt; (which expands all possible combinations and creates a directory tree). Brace expansion is performed before any other expansion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and filename expansion. (For example, a range like &lt;code&gt;{1..20}&lt;/code&gt; cannot be expressed with variables using &lt;code&gt;{$a..$b}&lt;/code&gt;. Use &lt;code&gt;seq&lt;/code&gt; or a &lt;code&gt;for&lt;/code&gt; loop instead, e.g., &lt;code&gt;seq $a $b&lt;/code&gt; or &lt;code&gt;for((i=a; i&amp;lt;=b; i++)); do ... ; done&lt;/code&gt;.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The output of a command can be treated like a file via &lt;code&gt;&amp;lt;(some command)&lt;/code&gt; (known as process substitution). For example, compare local &lt;code&gt;/etc/hosts&lt;/code&gt; with a remote one:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      diff /etc/hosts &amp;lt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;ssh somehost cat /etc/hosts&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;When writing scripts you may want to put all of your code in curly braces. If the closing brace is missing, your script will be prevented from executing due to a syntax error. This makes sense when your script is going to be downloaded from the web, since it prevents partially downloaded scripts from executing:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# Your code here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;A &amp;ldquo;here document&amp;rdquo; allows &lt;a class=&#34;link&#34; href=&#34;https://www.tldp.org/LDP/abs/html/here-docs.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;redirection of multiple lines of input&lt;/a&gt; as if from a file:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;input
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;on multiple lines
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In Bash, redirect both standard output and standard error via: &lt;code&gt;some-command &amp;gt;logfile 2&amp;gt;&amp;amp;1&lt;/code&gt; or &lt;code&gt;some-command &amp;amp;&amp;gt;logfile&lt;/code&gt;. Often, to ensure a command does not leave an open file handle to standard input, tying it to the terminal you are in, it is also good practice to add &lt;code&gt;&amp;lt;/dev/null&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;man ascii&lt;/code&gt; for a good ASCII table, with hex and decimal values. For general encoding info, &lt;code&gt;man unicode&lt;/code&gt;, &lt;code&gt;man utf-8&lt;/code&gt;, and &lt;code&gt;man latin1&lt;/code&gt; are helpful.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;screen&lt;/code&gt; or &lt;a class=&#34;link&#34; href=&#34;https://tmux.github.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;tmux&lt;/code&gt;&lt;/a&gt; to multiplex the screen, especially useful on remote ssh sessions and to detach and re-attach to a session. &lt;code&gt;byobu&lt;/code&gt; can enhance screen or tmux by providing more information and easier management. A more minimal alternative for session persistence only is &lt;a class=&#34;link&#34; href=&#34;https://github.com/bogner/dtach&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;dtach&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In ssh, knowing how to port tunnel with &lt;code&gt;-L&lt;/code&gt; or &lt;code&gt;-D&lt;/code&gt; (and occasionally &lt;code&gt;-R&lt;/code&gt;) is useful, e.g. to access web sites from a remote server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It can be useful to make a few optimizations to your ssh configuration; for example, this &lt;code&gt;~/.ssh/config&lt;/code&gt; contains settings to avoid dropped connections in certain network environments, uses compression (which is helpful with scp over low-bandwidth connections), and multiplex channels to the same server with a local control file:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      TCPKeepAlive=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ServerAliveInterval=15
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ServerAliveCountMax=6
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      Compression=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ControlMaster auto
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ControlPath /tmp/%r@%h:%p
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ControlPersist yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A few other options relevant to ssh are security sensitive and should be enabled with care, e.g. per subnet or host or in trusted networks: &lt;code&gt;StrictHostKeyChecking=no&lt;/code&gt;, &lt;code&gt;ForwardAgent=yes&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Consider &lt;a class=&#34;link&#34; href=&#34;https://mosh.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;mosh&lt;/code&gt;&lt;/a&gt; an alternative to ssh that uses UDP, avoiding dropped connections and adding convenience on the road (requires server-side setup).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get the permissions on a file in octal form, which is useful for system configuration but not available in &lt;code&gt;ls&lt;/code&gt; and easy to bungle, use something like&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      stat -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;%A %a %n&amp;#39;&lt;/span&gt; /etc/timezone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For interactive selection of values from the output of another command, use &lt;a class=&#34;link&#34; href=&#34;https://github.com/mooz/percol&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;percol&lt;/code&gt;&lt;/a&gt; or &lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;fzf&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For interaction with files based on the output of another command (like &lt;code&gt;git&lt;/code&gt;), use &lt;code&gt;fpp&lt;/code&gt; (&lt;a class=&#34;link&#34; href=&#34;https://github.com/facebook/PathPicker&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PathPicker&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For a simple web server for all files in the current directory (and subdirs), available to anyone on your network, use:
&lt;code&gt;python -m SimpleHTTPServer 7777&lt;/code&gt; (for port 7777 and Python 2) and &lt;code&gt;python -m http.server 7777&lt;/code&gt; (for port 7777 and Python 3).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For running a command as another user, use &lt;code&gt;sudo&lt;/code&gt;. Defaults to running as root; use &lt;code&gt;-u&lt;/code&gt; to specify another user. Use &lt;code&gt;-i&lt;/code&gt; to login as that user (you will be asked for &lt;em&gt;your&lt;/em&gt; password).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For switching the shell to another user, use &lt;code&gt;su username&lt;/code&gt; or &lt;code&gt;su - username&lt;/code&gt;. The latter with &amp;ldquo;-&amp;rdquo; gets an environment as if another user just logged in. Omitting the username defaults to root. You will be asked for the password &lt;em&gt;of the user you are switching to&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know about the &lt;a class=&#34;link&#34; href=&#34;https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;128K limit&lt;/a&gt; on command lines. This &amp;ldquo;Argument list too long&amp;rdquo; error is common when wildcard matching large numbers of files. (When this happens alternatives like &lt;code&gt;find&lt;/code&gt; and &lt;code&gt;xargs&lt;/code&gt; may help.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For a basic calculator (and of course access to Python in general), use the &lt;code&gt;python&lt;/code&gt; interpreter. For example,&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;gt;&amp;gt; 2+3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;processing-files-and-data&#34;&gt;Processing files and data
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;To locate a file by name in the current directory, &lt;code&gt;find . -iname &#39;*something*&#39;&lt;/code&gt; (or similar). To find a file anywhere by name, use &lt;code&gt;locate something&lt;/code&gt; (but bear in mind &lt;code&gt;updatedb&lt;/code&gt; may not have indexed recently created files).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For general searching through source or data files, there are several options more advanced or faster than &lt;code&gt;grep -r&lt;/code&gt;, including (in rough order from older to newer) &lt;a class=&#34;link&#34; href=&#34;https://github.com/beyondgrep/ack2&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;ack&lt;/code&gt;&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://github.com/ggreer/the_silver_searcher&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;ag&lt;/code&gt;&lt;/a&gt; (&amp;ldquo;the silver searcher&amp;rdquo;), and &lt;a class=&#34;link&#34; href=&#34;https://github.com/BurntSushi/ripgrep&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;rg&lt;/code&gt;&lt;/a&gt; (ripgrep).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To convert HTML to text: &lt;code&gt;lynx -dump -stdin&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For Markdown, HTML, and all kinds of document conversion, try &lt;a class=&#34;link&#34; href=&#34;http://pandoc.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;pandoc&lt;/code&gt;&lt;/a&gt;. For example, to convert a Markdown document to Word format: &lt;code&gt;pandoc README.md --from markdown --to docx -o temp.docx&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you must handle XML, &lt;code&gt;xmlstarlet&lt;/code&gt; is old but good.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For JSON, use &lt;a class=&#34;link&#34; href=&#34;http://stedolan.github.io/jq/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;jq&lt;/code&gt;&lt;/a&gt;. For interactive use, also see &lt;a class=&#34;link&#34; href=&#34;https://github.com/simeji/jid&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;jid&lt;/code&gt;&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://github.com/fiatjaf/jiq&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;jiq&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For YAML, use &lt;a class=&#34;link&#34; href=&#34;https://github.com/0k/shyaml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;shyaml&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For Excel or CSV files, &lt;a class=&#34;link&#34; href=&#34;https://github.com/onyxfish/csvkit&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;csvkit&lt;/a&gt; provides &lt;code&gt;in2csv&lt;/code&gt;, &lt;code&gt;csvcut&lt;/code&gt;, &lt;code&gt;csvjoin&lt;/code&gt;, &lt;code&gt;csvgrep&lt;/code&gt;, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For Amazon S3, &lt;a class=&#34;link&#34; href=&#34;https://github.com/s3tools/s3cmd&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;s3cmd&lt;/code&gt;&lt;/a&gt; is convenient and &lt;a class=&#34;link&#34; href=&#34;https://github.com/bloomreach/s4cmd&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;s4cmd&lt;/code&gt;&lt;/a&gt; is faster. Amazon&amp;rsquo;s &lt;a class=&#34;link&#34; href=&#34;https://github.com/aws/aws-cli&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;aws&lt;/code&gt;&lt;/a&gt; and the improved &lt;a class=&#34;link&#34; href=&#34;https://github.com/donnemartin/saws&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;saws&lt;/code&gt;&lt;/a&gt; are essential for other AWS-related tasks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know about &lt;code&gt;sort&lt;/code&gt; and &lt;code&gt;uniq&lt;/code&gt;, including uniq&amp;rsquo;s &lt;code&gt;-u&lt;/code&gt; and &lt;code&gt;-d&lt;/code&gt; options &amp;ndash; see one-liners below. See also &lt;code&gt;comm&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know about &lt;code&gt;cut&lt;/code&gt;, &lt;code&gt;paste&lt;/code&gt;, and &lt;code&gt;join&lt;/code&gt; to manipulate text files. Many people use &lt;code&gt;cut&lt;/code&gt; but forget about &lt;code&gt;join&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know about &lt;code&gt;wc&lt;/code&gt; to count newlines (&lt;code&gt;-l&lt;/code&gt;), characters (&lt;code&gt;-m&lt;/code&gt;), words (&lt;code&gt;-w&lt;/code&gt;) and bytes (&lt;code&gt;-c&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know about &lt;code&gt;tee&lt;/code&gt; to copy from stdin to a file and also to stdout, as in &lt;code&gt;ls -al | tee file.txt&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For more complex calculations, including grouping, reversing fields, and statistical calculations, consider &lt;a class=&#34;link&#34; href=&#34;https://www.gnu.org/software/datamash/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;datamash&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know that locale affects a lot of command line tools in subtle ways, including sorting order (collation) and performance. Most Linux installations will set &lt;code&gt;LANG&lt;/code&gt; or other locale variables to a local setting like US English. But be aware sorting will change if you change locale. And know i18n routines can make sort or other commands run &lt;em&gt;many times&lt;/em&gt; slower. In some situations (such as the set operations or uniqueness operations below) you can safely ignore slow i18n routines entirely and use traditional byte-based sort order, using &lt;code&gt;export LC_ALL=C&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can set a specific command&amp;rsquo;s environment by prefixing its invocation with the environment variable settings, as in &lt;code&gt;TZ=Pacific/Fiji date&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know basic &lt;code&gt;awk&lt;/code&gt; and &lt;code&gt;sed&lt;/code&gt; for simple data munging. See &lt;a class=&#34;link&#34; href=&#34;#one-liners&#34; &gt;One-liners&lt;/a&gt; for examples.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To replace all occurrences of a string in place, in one or more files:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      perl -pi.bak -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/old-string/new-string/g&amp;#39;&lt;/span&gt; my-files-*.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;To rename multiple files and/or search and replace within files, try &lt;a class=&#34;link&#34; href=&#34;https://github.com/jlevy/repren&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;repren&lt;/code&gt;&lt;/a&gt;. (In some cases the &lt;code&gt;rename&lt;/code&gt; command also allows multiple renames, but be careful as its functionality is not the same on all Linux distributions.)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# Full rename of filenames, directories, and contents foo -&amp;gt; bar:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      repren --full --preserve-case --from foo --to bar .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# Recover backup files whatever.bak -&amp;gt; whatever:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      repren --renames --from &lt;span class=&#34;s1&#34;&gt;&amp;#39;(.*)\.bak&amp;#39;&lt;/span&gt; --to &lt;span class=&#34;s1&#34;&gt;&amp;#39;\1&amp;#39;&lt;/span&gt; *.bak
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# Same as above, using rename, if available:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      rename &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/\.bak$//&amp;#39;&lt;/span&gt; *.bak
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;As the man page says, &lt;code&gt;rsync&lt;/code&gt; really is a fast and extraordinarily versatile file copying tool. It&amp;rsquo;s known for synchronizing between machines but is equally useful locally. When security restrictions allow, using &lt;code&gt;rsync&lt;/code&gt; instead of &lt;code&gt;scp&lt;/code&gt; allows recovery of a transfer without restarting from scratch. It also is among the &lt;a class=&#34;link&#34; href=&#34;https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;fastest ways&lt;/a&gt; to delete large numbers of files:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir empty &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rsync -r --delete empty/ some-dir &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rmdir some-dir
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For monitoring progress when processing files, use &lt;a class=&#34;link&#34; href=&#34;http://www.ivarch.com/programs/pv.shtml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;pv&lt;/code&gt;&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://github.com/dmerejkowsky/pycp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;pycp&lt;/code&gt;&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://github.com/dspinellis/pmonitor&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;pmonitor&lt;/code&gt;&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://github.com/Xfennec/progress&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;progress&lt;/code&gt;&lt;/a&gt;, &lt;code&gt;rsync --progress&lt;/code&gt;, or, for block-level copying, &lt;code&gt;dd status=progress&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;shuf&lt;/code&gt; to shuffle or select random lines from a file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know &lt;code&gt;sort&lt;/code&gt;&amp;rsquo;s options. For numbers, use &lt;code&gt;-n&lt;/code&gt;, or &lt;code&gt;-h&lt;/code&gt; for handling human-readable numbers (e.g. from &lt;code&gt;du -h&lt;/code&gt;). Know how keys work (&lt;code&gt;-t&lt;/code&gt; and &lt;code&gt;-k&lt;/code&gt;). In particular, watch out that you need to write &lt;code&gt;-k1,1&lt;/code&gt; to sort by only the first field; &lt;code&gt;-k1&lt;/code&gt; means sort according to the whole line. Stable sort (&lt;code&gt;sort -s&lt;/code&gt;) can be useful. For example, to sort first by field 2, then secondarily by field 1, you can use &lt;code&gt;sort -k1,1 | sort -s -k2,2&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you ever need to write a tab literal in a command line in Bash (e.g. for the -t argument to sort), press &lt;strong&gt;ctrl-v&lt;/strong&gt; &lt;strong&gt;[Tab]&lt;/strong&gt; or write &lt;code&gt;$&#39;\t&#39;&lt;/code&gt; (the latter is better as you can copy/paste it).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The standard tools for patching source code are &lt;code&gt;diff&lt;/code&gt; and &lt;code&gt;patch&lt;/code&gt;. See also &lt;code&gt;diffstat&lt;/code&gt; for summary statistics of a diff and &lt;code&gt;sdiff&lt;/code&gt; for a side-by-side diff. Note &lt;code&gt;diff -r&lt;/code&gt; works for entire directories. Use &lt;code&gt;diff -r tree1 tree2 | diffstat&lt;/code&gt; for a summary of changes. Use &lt;code&gt;vimdiff&lt;/code&gt; to compare and edit files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For binary files, use &lt;code&gt;hd&lt;/code&gt;, &lt;code&gt;hexdump&lt;/code&gt; or &lt;code&gt;xxd&lt;/code&gt; for simple hex dumps and &lt;code&gt;bvi&lt;/code&gt;, &lt;code&gt;hexedit&lt;/code&gt; or &lt;code&gt;biew&lt;/code&gt; for binary editing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Also for binary files, &lt;code&gt;strings&lt;/code&gt; (plus &lt;code&gt;grep&lt;/code&gt;, etc.) lets you find bits of text.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For binary diffs (delta compression), use &lt;code&gt;xdelta3&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To convert text encodings, try &lt;code&gt;iconv&lt;/code&gt;. Or &lt;code&gt;uconv&lt;/code&gt; for more advanced use; it supports some advanced Unicode things. For example:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# Displays hex codes or actual names of characters (useful for debugging):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      uconv -f utf-8 -t utf-8 -x &lt;span class=&#34;s1&#34;&gt;&amp;#39;::Any-Hex;&amp;#39;&lt;/span&gt; &amp;lt; input.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      uconv -f utf-8 -t utf-8 -x &lt;span class=&#34;s1&#34;&gt;&amp;#39;::Any-Name;&amp;#39;&lt;/span&gt; &amp;lt; input.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# Lowercase and removes all accents (by expanding and dropping them):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      uconv -f utf-8 -t utf-8 -x &lt;span class=&#34;s1&#34;&gt;&amp;#39;::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] &amp;gt;; ::Any-NFC;&amp;#39;&lt;/span&gt; &amp;lt; input.txt &amp;gt; output.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;To split files into pieces, see &lt;code&gt;split&lt;/code&gt; (to split by size) and &lt;code&gt;csplit&lt;/code&gt; (to split by a pattern).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Date and time: To get the current date and time in the helpful &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/ISO_8601&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ISO 8601&lt;/a&gt; format, use &lt;code&gt;date -u +&amp;quot;%Y-%m-%dT%H:%M:%SZ&amp;quot;&lt;/code&gt; (other options &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/7216358/date-command-on-os-x-doesnt-have-iso-8601-i-option&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;are&lt;/a&gt; &lt;a class=&#34;link&#34; href=&#34;https://unix.stackexchange.com/questions/164826/date-command-iso-8601-option&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;problematic&lt;/a&gt;). To manipulate date and time expressions, use &lt;code&gt;dateadd&lt;/code&gt;, &lt;code&gt;datediff&lt;/code&gt;, &lt;code&gt;strptime&lt;/code&gt; etc. from &lt;a class=&#34;link&#34; href=&#34;http://www.fresse.org/dateutils/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;dateutils&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;zless&lt;/code&gt;, &lt;code&gt;zmore&lt;/code&gt;, &lt;code&gt;zcat&lt;/code&gt;, and &lt;code&gt;zgrep&lt;/code&gt; to operate on compressed files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;File attributes are settable via &lt;code&gt;chattr&lt;/code&gt; and offer a lower-level alternative to file permissions. For example, to protect against accidental file deletion the immutable flag:  &lt;code&gt;sudo chattr +i /critical/directory/or/file&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;getfacl&lt;/code&gt; and &lt;code&gt;setfacl&lt;/code&gt; to save and restore file permissions. For example:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   getfacl -R /some/path &amp;gt; permissions.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   setfacl --restore&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;permissions.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;To create empty files quickly, use &lt;code&gt;truncate&lt;/code&gt; (creates &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Sparse_file&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;sparse file&lt;/a&gt;), &lt;code&gt;fallocate&lt;/code&gt; (ext4, xfs, btrfs and ocfs2 filesystems), &lt;code&gt;xfs_mkfile&lt;/code&gt; (almost any filesystems, comes in xfsprogs package), &lt;code&gt;mkfile&lt;/code&gt; (for Unix-like systems like Solaris, Mac OS).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;system-debugging&#34;&gt;System debugging
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For web debugging, &lt;code&gt;curl&lt;/code&gt; and &lt;code&gt;curl -I&lt;/code&gt; are handy, or their &lt;code&gt;wget&lt;/code&gt; equivalents, or the more modern &lt;a class=&#34;link&#34; href=&#34;https://github.com/jkbrzt/httpie&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;httpie&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To know current cpu/disk status, the classic tools are &lt;code&gt;top&lt;/code&gt; (or the better &lt;code&gt;htop&lt;/code&gt;), &lt;code&gt;iostat&lt;/code&gt;, and &lt;code&gt;iotop&lt;/code&gt;. Use &lt;code&gt;iostat -mxz 15&lt;/code&gt; for basic CPU and detailed per-partition disk stats and performance insight.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For network connection details, use &lt;code&gt;netstat&lt;/code&gt; and &lt;code&gt;ss&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For a quick overview of what&amp;rsquo;s happening on a system, &lt;code&gt;dstat&lt;/code&gt; is especially useful. For broadest overview with details, use &lt;a class=&#34;link&#34; href=&#34;https://github.com/nicolargo/glances&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;glances&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To know memory status, run and understand the output of &lt;code&gt;free&lt;/code&gt; and &lt;code&gt;vmstat&lt;/code&gt;. In particular, be aware the &amp;ldquo;cached&amp;rdquo; value is memory held by the Linux kernel as file cache, so effectively counts toward the &amp;ldquo;free&amp;rdquo; value.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Java system debugging is a different kettle of fish, but a simple trick on Oracle&amp;rsquo;s and some other JVMs is that you can run &lt;code&gt;kill -3 &amp;lt;pid&amp;gt;&lt;/code&gt; and a full stack trace and heap summary (including generational garbage collection details, which can be highly informative) will be dumped to stderr/logs. The JDK&amp;rsquo;s &lt;code&gt;jps&lt;/code&gt;, &lt;code&gt;jstat&lt;/code&gt;, &lt;code&gt;jstack&lt;/code&gt;, &lt;code&gt;jmap&lt;/code&gt; are useful. &lt;a class=&#34;link&#34; href=&#34;https://github.com/aragozin/jvm-tools&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SJK tools&lt;/a&gt; are more advanced.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;a class=&#34;link&#34; href=&#34;http://www.bitwizard.nl/mtr/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;mtr&lt;/code&gt;&lt;/a&gt; as a better traceroute, to identify network issues.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For looking at why a disk is full, &lt;a class=&#34;link&#34; href=&#34;https://dev.yorhel.nl/ncdu&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;ncdu&lt;/code&gt;&lt;/a&gt; saves time over the usual commands like &lt;code&gt;du -sh *&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To find which socket or process is using bandwidth, try &lt;a class=&#34;link&#34; href=&#34;http://www.ex-parrot.com/~pdw/iftop/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;iftop&lt;/code&gt;&lt;/a&gt; or &lt;a class=&#34;link&#34; href=&#34;https://github.com/raboof/nethogs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;nethogs&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;ab&lt;/code&gt; tool (comes with Apache) is helpful for quick-and-dirty checking of web server performance. For more complex load testing, try &lt;code&gt;siege&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For more serious network debugging, &lt;a class=&#34;link&#34; href=&#34;https://wireshark.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;wireshark&lt;/code&gt;&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;tshark&lt;/code&gt;&lt;/a&gt;, or &lt;a class=&#34;link&#34; href=&#34;http://ngrep.sourceforge.net/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;ngrep&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know about &lt;code&gt;strace&lt;/code&gt; and &lt;code&gt;ltrace&lt;/code&gt;. These can be helpful if a program is failing, hanging, or crashing, and you don&amp;rsquo;t know why, or if you want to get a general idea of performance. Note the profiling option (&lt;code&gt;-c&lt;/code&gt;), and the ability to attach to a running process (&lt;code&gt;-p&lt;/code&gt;). Use trace child option (&lt;code&gt;-f&lt;/code&gt;) to avoid missing important calls.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know about &lt;code&gt;ldd&lt;/code&gt; to check shared libraries etc — but &lt;a class=&#34;link&#34; href=&#34;http://www.catonmat.net/blog/ldd-arbitrary-code-execution/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;never run it on untrusted files&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know how to connect to a running process with &lt;code&gt;gdb&lt;/code&gt; and get its stack traces.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;/proc&lt;/code&gt;. It&amp;rsquo;s amazingly helpful sometimes when debugging live problems. Examples: &lt;code&gt;/proc/cpuinfo&lt;/code&gt;, &lt;code&gt;/proc/meminfo&lt;/code&gt;, &lt;code&gt;/proc/cmdline&lt;/code&gt;, &lt;code&gt;/proc/xxx/cwd&lt;/code&gt;, &lt;code&gt;/proc/xxx/exe&lt;/code&gt;, &lt;code&gt;/proc/xxx/fd/&lt;/code&gt;, &lt;code&gt;/proc/xxx/smaps&lt;/code&gt; (where &lt;code&gt;xxx&lt;/code&gt; is the process id or pid).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When debugging why something went wrong in the past, &lt;a class=&#34;link&#34; href=&#34;http://sebastien.godard.pagesperso-orange.fr/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;sar&lt;/code&gt;&lt;/a&gt; can be very helpful. It shows historic statistics on CPU, memory, network, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For deeper systems and performance analyses, look at &lt;code&gt;stap&lt;/code&gt; (&lt;a class=&#34;link&#34; href=&#34;https://sourceware.org/systemtap/wiki&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SystemTap&lt;/a&gt;), &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Perf_%28Linux%29&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;perf&lt;/code&gt;&lt;/a&gt;, and &lt;a class=&#34;link&#34; href=&#34;https://github.com/draios/sysdig&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;sysdig&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check what OS you&amp;rsquo;re on with &lt;code&gt;uname&lt;/code&gt; or &lt;code&gt;uname -a&lt;/code&gt; (general Unix/kernel info) or &lt;code&gt;lsb_release -a&lt;/code&gt; (Linux distro info).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;dmesg&lt;/code&gt; whenever something&amp;rsquo;s acting really funny (it could be hardware or driver issues).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you delete a file and it doesn&amp;rsquo;t free up expected disk space as reported by &lt;code&gt;du&lt;/code&gt;, check whether the file is in use by a process:
&lt;code&gt;lsof | grep deleted | grep &amp;quot;filename-of-my-big-file&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;one-liners&#34;&gt;One-liners
&lt;/h2&gt;&lt;p&gt;A few examples of piecing together commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is remarkably helpful sometimes that you can do set intersection, union, and difference of text files via &lt;code&gt;sort&lt;/code&gt;/&lt;code&gt;uniq&lt;/code&gt;. Suppose &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; are text files that are already uniqued. This is fast, and works on files of arbitrary size, up to many gigabytes. (Sort is not limited by memory, though you may need to use the &lt;code&gt;-T&lt;/code&gt; option if &lt;code&gt;/tmp&lt;/code&gt; is on a small root partition.) See also the note about &lt;code&gt;LC_ALL&lt;/code&gt; above and &lt;code&gt;sort&lt;/code&gt;&amp;rsquo;s &lt;code&gt;-u&lt;/code&gt; option (left out for clarity below).&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sort a b &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq &amp;gt; c   &lt;span class=&#34;c1&#34;&gt;# c is a union b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sort a b &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq -d &amp;gt; c   &lt;span class=&#34;c1&#34;&gt;# c is a intersect b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sort a b b &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq -u &amp;gt; c   &lt;span class=&#34;c1&#34;&gt;# c is set difference a - b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Pretty-print two JSON files, normalizing their syntax, then coloring and paginating the result:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      diff &amp;lt;(jq --sort-keys . &amp;lt; file1.json) &amp;lt;(jq --sort-keys . &amp;lt; file2.json) | colordiff | less -R
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;grep . *&lt;/code&gt; to quickly examine the contents of all files in a directory (so each line is paired with the filename), or &lt;code&gt;head -100 *&lt;/code&gt; (so each file has a heading). This can be useful for directories filled with config settings like those in &lt;code&gt;/sys&lt;/code&gt;, &lt;code&gt;/proc&lt;/code&gt;, &lt;code&gt;/etc&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Summing all numbers in the third column of a text file (this is probably 3X faster and 3X less code than equivalent Python):&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{ x += $3 } END { print x }&amp;#39;&lt;/span&gt; myfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;To see sizes/dates on a tree of files, this is like a recursive &lt;code&gt;ls -l&lt;/code&gt; but is easier to read than &lt;code&gt;ls -lR&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      find . -type f -ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Say you have a text file, like a web server log, and a certain value that appears on some lines, such as an &lt;code&gt;acct_id&lt;/code&gt; parameter that is present in the URL. If you want a tally of how many requests for each &lt;code&gt;acct_id&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      egrep -o &lt;span class=&#34;s1&#34;&gt;&amp;#39;acct_id=[0-9]+&amp;#39;&lt;/span&gt; access.log &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -d&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; -f2 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq -c &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort -rn
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;To continuously monitor changes, use &lt;code&gt;watch&lt;/code&gt;, e.g. check changes to files in a directory with &lt;code&gt;watch -d -n 2 &#39;ls -rtlh | tail&#39;&lt;/code&gt; or to network settings while troubleshooting your wifi settings with &lt;code&gt;watch -d -n 2 ifconfig&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run this function to get a random tip from this document (parses Markdown and extracts an item):&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; taocl&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;/cowsay[.]png/d&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          pandoc -f markdown -t html &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          xmlstarlet fo --html --dropdtd &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          xmlstarlet sel -t -v &lt;span class=&#34;s2&#34;&gt;&amp;#34;(html/body/ul/li[count(p)&amp;gt;0])[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$RANDOM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; mod last()+1]&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          xmlstarlet unesc &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fmt -80 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; iconv -t US
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;obscure-but-useful&#34;&gt;Obscure but useful
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;expr&lt;/code&gt;: perform arithmetic or boolean operations or evaluate regular expressions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;m4&lt;/code&gt;: simple macro processor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;yes&lt;/code&gt;: print a string a lot&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cal&lt;/code&gt;: nice calendar&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;env&lt;/code&gt;: run a command (useful in scripts)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;printenv&lt;/code&gt;: print out environment variables (useful in debugging and scripts)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;look&lt;/code&gt;: find English words (or lines in a file) beginning with a string&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cut&lt;/code&gt;, &lt;code&gt;paste&lt;/code&gt; and &lt;code&gt;join&lt;/code&gt;: data manipulation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;fmt&lt;/code&gt;: format text paragraphs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pr&lt;/code&gt;: format text into pages/columns&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;fold&lt;/code&gt;: wrap lines of text&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;column&lt;/code&gt;: format text fields into aligned, fixed-width columns or tables&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;expand&lt;/code&gt; and &lt;code&gt;unexpand&lt;/code&gt;: convert between tabs and spaces&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;nl&lt;/code&gt;: add line numbers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;seq&lt;/code&gt;: print numbers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;bc&lt;/code&gt;: calculator&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;factor&lt;/code&gt;: factor integers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://gnupg.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;gpg&lt;/code&gt;&lt;/a&gt;: encrypt and sign files&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;toe&lt;/code&gt;: table of terminfo entries&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;nc&lt;/code&gt;: network debugging and data transfer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;socat&lt;/code&gt;: socket relay and tcp port forwarder (similar to &lt;code&gt;netcat&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/mattthias/slurm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;slurm&lt;/code&gt;&lt;/a&gt;: network traffic visualization&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;dd&lt;/code&gt;: moving data between files or devices&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;file&lt;/code&gt;: identify type of a file&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;tree&lt;/code&gt;: display directories and subdirectories as a nesting tree; like &lt;code&gt;ls&lt;/code&gt; but recursive&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;stat&lt;/code&gt;: file info&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;time&lt;/code&gt;: execute and time a command&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;timeout&lt;/code&gt;: execute a command for specified amount of time and stop the process when the specified amount of time completes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;lockfile&lt;/code&gt;: create semaphore file that can only be removed by &lt;code&gt;rm -f&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;logrotate&lt;/code&gt;: rotate, compress and mail logs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;watch&lt;/code&gt;: run a command repeatedly, showing results and/or highlighting changes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/joh/when-changed&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;when-changed&lt;/code&gt;&lt;/a&gt;: runs any command you specify whenever it sees file changed. See &lt;code&gt;inotifywait&lt;/code&gt; and &lt;code&gt;entr&lt;/code&gt; as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;tac&lt;/code&gt;: print files in reverse&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;comm&lt;/code&gt;: compare sorted files line by line&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;strings&lt;/code&gt;: extract text from binary files&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;tr&lt;/code&gt;: character translation or manipulation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;iconv&lt;/code&gt; or &lt;code&gt;uconv&lt;/code&gt;: conversion for text encodings&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;split&lt;/code&gt; and &lt;code&gt;csplit&lt;/code&gt;: splitting files&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sponge&lt;/code&gt;: read all input before writing it, useful for reading from then writing to the same file, e.g., &lt;code&gt;grep -v something some-file | sponge some-file&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;units&lt;/code&gt;: unit conversions and calculations; converts furlongs per fortnight to twips per blink (see also &lt;code&gt;/usr/share/units/definitions.units&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;apg&lt;/code&gt;: generates random passwords&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;xz&lt;/code&gt;: high-ratio file compression&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ldd&lt;/code&gt;: dynamic library info&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;nm&lt;/code&gt;: symbols from object files&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ab&lt;/code&gt; or &lt;a class=&#34;link&#34; href=&#34;https://github.com/wg/wrk&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;wrk&lt;/code&gt;&lt;/a&gt;: benchmarking web servers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;strace&lt;/code&gt;: system call debugging&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.bitwizard.nl/mtr/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;mtr&lt;/code&gt;&lt;/a&gt;: better traceroute for network debugging&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cssh&lt;/code&gt;: visual concurrent shell&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rsync&lt;/code&gt;: sync files and folders over SSH or in local file system&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://wireshark.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;wireshark&lt;/code&gt;&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;tshark&lt;/code&gt;&lt;/a&gt;: packet capture and network debugging&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://ngrep.sourceforge.net/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;ngrep&lt;/code&gt;&lt;/a&gt;: grep for the network layer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;host&lt;/code&gt; and &lt;code&gt;dig&lt;/code&gt;: DNS lookups&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;lsof&lt;/code&gt;: process file descriptor and socket info&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;dstat&lt;/code&gt;: useful system stats&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/nicolargo/glances&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;glances&lt;/code&gt;&lt;/a&gt;: high level, multi-subsystem overview&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;iostat&lt;/code&gt;: Disk usage stats&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mpstat&lt;/code&gt;: CPU usage stats&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;vmstat&lt;/code&gt;: Memory usage stats&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;htop&lt;/code&gt;: improved version of top&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;last&lt;/code&gt;: login history&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;w&lt;/code&gt;: who&amp;rsquo;s logged on&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;id&lt;/code&gt;: user/group identity info&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://sebastien.godard.pagesperso-orange.fr/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;sar&lt;/code&gt;&lt;/a&gt;: historic system stats&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.ex-parrot.com/~pdw/iftop/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;iftop&lt;/code&gt;&lt;/a&gt; or &lt;a class=&#34;link&#34; href=&#34;https://github.com/raboof/nethogs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;nethogs&lt;/code&gt;&lt;/a&gt;: network utilization by socket or process&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ss&lt;/code&gt;: socket statistics&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;dmesg&lt;/code&gt;: boot and system error messages&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sysctl&lt;/code&gt;: view and configure Linux kernel parameters at run time&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;hdparm&lt;/code&gt;: SATA/ATA disk manipulation/performance&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;lsblk&lt;/code&gt;: list block devices: a tree view of your disks and disk partitions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;lshw&lt;/code&gt;, &lt;code&gt;lscpu&lt;/code&gt;, &lt;code&gt;lspci&lt;/code&gt;, &lt;code&gt;lsusb&lt;/code&gt;, &lt;code&gt;dmidecode&lt;/code&gt;: hardware information, including CPU, BIOS, RAID, graphics, devices, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;lsmod&lt;/code&gt; and &lt;code&gt;modinfo&lt;/code&gt;: List and show details of kernel modules.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;fortune&lt;/code&gt;, &lt;code&gt;ddate&lt;/code&gt;, and &lt;code&gt;sl&lt;/code&gt;: um, well, it depends on whether you consider steam locomotives and Zippy quotations &amp;ldquo;useful&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;macos-only&#34;&gt;macOS only
&lt;/h2&gt;&lt;p&gt;These are items relevant &lt;em&gt;only&lt;/em&gt; on macOS.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Package management with &lt;code&gt;brew&lt;/code&gt; (Homebrew) and/or &lt;code&gt;port&lt;/code&gt; (MacPorts). These can be used to install on macOS many of the above commands.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy output of any command to a desktop app with &lt;code&gt;pbcopy&lt;/code&gt; and paste input from one with &lt;code&gt;pbpaste&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To enable the Option key in macOS Terminal as an alt key (such as used in the commands above like &lt;strong&gt;alt-b&lt;/strong&gt;, &lt;strong&gt;alt-f&lt;/strong&gt;, etc.), open Preferences -&amp;gt; Profiles -&amp;gt; Keyboard and select &amp;ldquo;Use Option as Meta key&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To open a file with a desktop app, use &lt;code&gt;open&lt;/code&gt; or &lt;code&gt;open -a /Applications/Whatever.app&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Spotlight: Search files with &lt;code&gt;mdfind&lt;/code&gt; and list metadata (such as photo EXIF info) with &lt;code&gt;mdls&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Be aware macOS is based on BSD Unix, and many commands (for example &lt;code&gt;ps&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt;, &lt;code&gt;awk&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt;) have many subtle variations from Linux, which is largely influenced by System V-style Unix and GNU tools. You can often tell the difference by noting a man page has the heading &amp;ldquo;BSD General Commands Manual.&amp;rdquo; In some cases GNU versions can be installed, too (such as &lt;code&gt;gawk&lt;/code&gt; and &lt;code&gt;gsed&lt;/code&gt; for GNU awk and sed). If writing cross-platform Bash scripts, avoid such commands (for example, consider Python or &lt;code&gt;perl&lt;/code&gt;) or test carefully.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get macOS release information, use &lt;code&gt;sw_vers&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;windows-only&#34;&gt;Windows only
&lt;/h2&gt;&lt;p&gt;These items are relevant &lt;em&gt;only&lt;/em&gt; on Windows.&lt;/p&gt;
&lt;h3 id=&#34;ways-to-obtain-unix-tools-under-windows&#34;&gt;Ways to obtain Unix tools under Windows
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Access the power of the Unix shell under Microsoft Windows by installing &lt;a class=&#34;link&#34; href=&#34;https://cygwin.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cygwin&lt;/a&gt;. Most of the things described in this document will work out of the box.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On Windows 10, you can use &lt;a class=&#34;link&#34; href=&#34;https://msdn.microsoft.com/commandline/wsl/about&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Windows Subsystem for Linux (WSL)&lt;/a&gt;, which provides a familiar Bash environment with Unix command line utilities.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you mainly want to use GNU developer tools (such as GCC) on Windows, consider &lt;a class=&#34;link&#34; href=&#34;http://www.mingw.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MinGW&lt;/a&gt; and its &lt;a class=&#34;link&#34; href=&#34;http://www.mingw.org/wiki/msys&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MSYS&lt;/a&gt; package, which provides utilities such as bash, gawk, make and grep. MSYS doesn&amp;rsquo;t have all the features compared to Cygwin. MinGW is particularly useful for creating native Windows ports of Unix tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Another option to get Unix look and feel under Windows is &lt;a class=&#34;link&#34; href=&#34;https://github.com/dthree/cash&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cash&lt;/a&gt;. Note that only very few Unix commands and command-line options are available in this environment.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;useful-windows-command-line-tools&#34;&gt;Useful Windows command-line tools
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You can perform and script most Windows system administration tasks from the command line by learning and using &lt;code&gt;wmic&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Native command-line Windows networking tools you may find useful include &lt;code&gt;ping&lt;/code&gt;, &lt;code&gt;ipconfig&lt;/code&gt;, &lt;code&gt;tracert&lt;/code&gt;, and &lt;code&gt;netstat&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can perform &lt;a class=&#34;link&#34; href=&#34;http://www.thewindowsclub.com/rundll32-shortcut-commands-windows&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;many useful Windows tasks&lt;/a&gt; by invoking the &lt;code&gt;Rundll32&lt;/code&gt; command.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;cygwin-tips-and-tricks&#34;&gt;Cygwin tips and tricks
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install additional Unix programs with the Cygwin&amp;rsquo;s package manager.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;mintty&lt;/code&gt; as your command-line window.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Access the Windows clipboard through &lt;code&gt;/dev/clipboard&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;cygstart&lt;/code&gt; to open an arbitrary file through its registered application.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Access the Windows registry with &lt;code&gt;regtool&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Note that a &lt;code&gt;C:\&lt;/code&gt; Windows drive path becomes &lt;code&gt;/cygdrive/c&lt;/code&gt; under Cygwin, and that Cygwin&amp;rsquo;s &lt;code&gt;/&lt;/code&gt; appears under &lt;code&gt;C:\cygwin&lt;/code&gt; on Windows. Convert between Cygwin and Windows-style file paths with &lt;code&gt;cygpath&lt;/code&gt;. This is most useful in scripts that invoke Windows programs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;more-resources&#34;&gt;More resources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/alebcay/awesome-shell&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;awesome-shell&lt;/a&gt;: A curated list of shell tools and resources.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/herrbischoff/awesome-osx-command-line&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;awesome-osx-command-line&lt;/a&gt;: A more in-depth guide for the macOS command line.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;http://redsymbol.net/articles/unofficial-bash-strict-mode/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Strict mode&lt;/a&gt; for writing better shell scripts.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/koalaman/shellcheck&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;shellcheck&lt;/a&gt;: A shell script static analysis tool. Essentially, lint for bash/sh/zsh.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.dwheeler.com/essays/filenames-in-shell.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Filenames and Pathnames in Shell&lt;/a&gt;: The sadly complex minutiae on how to handle filenames correctly in shell scripts.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;http://datascienceatthecommandline.com/#tools&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Data Science at the Command Line&lt;/a&gt;: More commands and tools helpful for doing data science, from the book of the same name&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;disclaimer&#34;&gt;Disclaimer
&lt;/h2&gt;&lt;p&gt;With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you &lt;em&gt;can&lt;/em&gt; do something in Bash doesn&amp;rsquo;t necessarily mean you should! ;)&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://creativecommons.org/licenses/by-sa/4.0/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://i.creativecommons.org/l/by-sa/4.0/88x31.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Creative Commons License&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This work is licensed under a &lt;a class=&#34;link&#34; href=&#34;http://creativecommons.org/licenses/by-sa/4.0/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Creative Commons Attribution-ShareAlike 4.0 International License&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>tldr</title>
        <link>https://producthunt.programnotes.cn/en/p/tldr/</link>
        <pubDate>Thu, 31 Jul 2025 15:34:46 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/tldr/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1596825644259-5bd73854413d?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTM5NDcyMTB8&amp;ixlib=rb-4.1.0" alt="Featured image of post tldr" /&gt;&lt;h1 id=&#34;tldr-pagestldr&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tldr-pages/tldr&lt;/a&gt;
&lt;/h1&gt;&lt;!-- markdownlint-disable MD041 --&gt;
&lt;div align=&#34;center&#34;&gt;
  &lt;h1&gt;&lt;a href=&#34;https://tldr.sh/&#34;&gt;&lt;img alt=&#34;tldr-pages&#34; src=&#34;images/banner.png&#34; width=600/&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr/actions&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/actions/workflow/status/tldr-pages/tldr/ci.yml?branch=main&amp;amp;label=Build&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Build status&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://matrix.to/#/#tldr-pages:matrix.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/matrix/tldr-pages:matrix.org?label=Chat&amp;#43;on&amp;#43;Matrix&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Matrix chat&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr/pulls?q=is:pr&amp;#43;is:merged&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/issues-pr-closed-raw/tldr-pages/tldr.svg?label=Merged&amp;#43;PRs&amp;amp;color=green&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Merged PRs&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr/graphs/contributors&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/contributors-anon/tldr-pages/tldr.svg?label=Contributors&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;GitHub contributors&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr/blob/main/LICENSE.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/license-CC_BY_4.0-blue.svg?label=License&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;license&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://fosstodon.org/@tldr_pages&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/Mastodon-6364FF?logo=mastodon&amp;amp;logoColor=fff&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Mastodon&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&#34;what-is-tldr-pages&#34;&gt;What is tldr-pages?
&lt;/h2&gt;&lt;p&gt;The &lt;strong&gt;tldr-pages&lt;/strong&gt; project is a collection of community-maintained help pages
for command-line tools, that aims to be a simpler, more approachable complement
to traditional &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Man_page&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;man pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Maybe you&amp;rsquo;re new to the command-line world. Perhaps you&amp;rsquo;re just a little rusty or can&amp;rsquo;t always recall the arguments for commands like &lt;code&gt;lsof&lt;/code&gt;, or &lt;code&gt;tar&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;It certainly doesn&amp;rsquo;t help that, in the past, the first option explained in &lt;code&gt;man tar&lt;/code&gt; was:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt; man tar
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;-b blocksize
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;   Specify the block size, in 512-byte records, for tape drive I/O.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;   As a rule, this argument is only needed when reading from or writing to tape drives,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;   and usually not even then as the default block size of 20 records (10240 bytes) is very common.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;There is room for simpler help pages focused on practical examples.
How about:&lt;/p&gt;
&lt;picture&gt;
    &lt;source media=&#34;(prefers-color-scheme: dark)&#34; srcset=&#34;https://github.com/tldr-pages/tldr/blob/main/images/tldr-dark.png&#34;&gt;
    &lt;source media=&#34;(prefers-color-scheme: light)&#34; srcset=&#34;https://github.com/tldr-pages/tldr/blob/main/images/tldr-light.png&#34;&gt;
    &lt;img alt=&#34;Screenshot of the tldr client displaying the tar command.&#34; src=&#34;https://github.com/tldr-pages/tldr/blob/main/images/tldr-dark.png&#34;&gt;
&lt;/picture&gt;
&lt;p&gt;This repository is just that: an ever-growing collection of examples
for the most common UNIX, Linux, macOS, FreeBSD, NetBSD, OpenBSD,
SunOS, Android, Windows, and Cisco IOS command-line tools.&lt;/p&gt;
&lt;h2 id=&#34;how-do-i-use-it&#34;&gt;How do I use it?
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;[!TIP]
For browsing without installing a client on your computer,
see the web client at &lt;a class=&#34;link&#34; href=&#34;https://tldr.inbrowser.app&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://tldr.inbrowser.app&lt;/a&gt; (with offline support using PWA).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A popular and convenient way to access these pages on your computer
is to install the official &lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr-python-client&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Python client&lt;/a&gt;, which can be installed via &lt;a class=&#34;link&#34; href=&#34;https://pypi.org/project/tldr/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pip3&lt;/a&gt; (or &lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr-python-client#installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;other package managers&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip3 install tldr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Linux and Mac users can also install the official &lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tlrc&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Rust Client&lt;/a&gt; using &lt;a class=&#34;link&#34; href=&#34;https://formulae.brew.sh/formula/tlrc&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Homebrew&lt;/a&gt;
(or &lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tlrc#installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;other package managers&lt;/a&gt; on other operating systems):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install tlrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Alternatively, you can also use the official &lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr-node-client&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Node.js client&lt;/a&gt;, although it has fallen behind in updates:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g tldr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then you have direct access to simplified, easy-to-read help for commands, such as &lt;code&gt;tar&lt;/code&gt;,
accessible through typing &lt;code&gt;tldr tar&lt;/code&gt; instead of the standard &lt;code&gt;man tar&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t want to install any software, check out the &lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr/releases/latest/download/tldr-book.pdf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PDF version&lt;/a&gt; instead.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
PDFs for translations are available for most languages. You can find them in the release assets of the &lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr/releases/latest&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;latest release&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There are also &lt;strong&gt;various other clients&lt;/strong&gt; provided by the community,
both for the command-line and for other platforms.
For a comprehensive list of clients, head over to our &lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr/wiki/Clients&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Wiki&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-do-i-contribute-to-tldr-pages&#34;&gt;How do I contribute to tldr-pages?
&lt;/h2&gt;&lt;p&gt;All contributions are welcome!&lt;/p&gt;
&lt;p&gt;Some ways to contribute include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adding your favorite command that isn&amp;rsquo;t covered.&lt;/li&gt;
&lt;li&gt;Adding examples or improving the content of an existing page.&lt;/li&gt;
&lt;li&gt;Adding requested pages from our issues with the &lt;a class=&#34;link&#34; href=&#34;https://github.com/tldr-pages/tldr/issues?q=is%3Aopen&amp;#43;is%3Aissue&amp;#43;label%3A%22help&amp;#43;wanted%22&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;help wanted&lt;/a&gt; label.&lt;/li&gt;
&lt;li&gt;Translating pages into different languages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All &lt;code&gt;tldr&lt;/code&gt; pages are written in Markdown so that they can be edited quite easily and changes can be submitted in
pull requests here using Git on the command-line or
using the GitHub web interface.&lt;/p&gt;
&lt;p&gt;We strive to maintain a &lt;a class=&#34;link&#34; href=&#34;GOVERNANCE.md&#34; &gt;welcoming and collaborative&lt;/a&gt; community.
If it&amp;rsquo;s your first time contributing, have a look at the &lt;a class=&#34;link&#34; href=&#34;CONTRIBUTING.md&#34; &gt;contributing guidelines&lt;/a&gt;, and go ahead!&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to contribute to translations, you can visit &lt;a class=&#34;link&#34; href=&#34;https://lukwebsforge.github.io/tldri18n/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://lukwebsforge.github.io/tldri18n/&lt;/a&gt;
to see the overall progress of all translations, and which translations are missing or outdated.&lt;/p&gt;
&lt;p&gt;You are also welcome to join us on the &lt;a class=&#34;link&#34; href=&#34;https://matrix.to/#/#tldr-pages:matrix.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;matrix chatroom&lt;/a&gt;!&lt;/p&gt;
&lt;h2 id=&#34;similar-projects&#34;&gt;Similar projects
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/command-line-interface-pages&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Command Line Interface Pages&lt;/a&gt;
allows you to write standardized help pages for CLI, directories, and configs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/cheat/cheat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cheat&lt;/a&gt;
allows you to create and view interactive cheatsheets on the command-line.
It was designed to help remind Unix system administrators of options
for commands that they use frequently, but not frequently enough to remember.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://cheat.sh/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;cheat.sh&lt;/a&gt;
Aggregates cheat sheets from multiple sources (including tldr-pages)
into 1 unified interface.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://devhints.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;devhints&lt;/a&gt;
Rico&amp;rsquo;s cheatsheets are not just focused on the command-line and
include a plethora of other cheatsheets related to programming.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/srsudar/eg&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;eg&lt;/a&gt;
provides detailed examples with explanations on the command-line.
Examples come from the repository, but &lt;code&gt;eg&lt;/code&gt; supports displaying
custom examples and commands alongside the defaults.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/gnebbia/kb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;kb&lt;/a&gt;
is a minimalist command-line knowledge base manager.
kb can be used to organize your notes and cheatsheets in a minimalist
and clean way. It also supports non-text files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/denisidoro/navi&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;navi&lt;/a&gt;
is an interactive cheatsheet tool, which allows you to browse through
specific examples or complete commands on the fly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://bropages.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;bropages (deprecated)&lt;/a&gt;
are a highly readable supplement to man pages.
It shows concise, common-case examples for Unix commands.
The examples are submitted by the user base, and can be voted up or down;
the best entries are what people see first when they look up a command.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-does-tldr-mean&#34;&gt;What does &amp;ldquo;tldr&amp;rdquo; mean?
&lt;/h2&gt;&lt;p&gt;TL;DR stands for &amp;ldquo;Too Long; Didn&amp;rsquo;t Read&amp;rdquo;.
It originated as Internet slang, where it is used to indicate that a long text
(or parts of it) has been skipped as too lengthy.
Read more in How-To Geek&amp;rsquo;s &lt;a class=&#34;link&#34; href=&#34;https://www.howtogeek.com/435266/what-does-tldr-mean-and-how-do-you-use-it/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;article&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>OCRmyPDF</title>
        <link>https://producthunt.programnotes.cn/en/p/ocrmypdf/</link>
        <pubDate>Sun, 13 Jul 2025 15:31:01 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/ocrmypdf/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1582575633518-b2b7d205a386?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTIzOTE3NDd8&amp;ixlib=rb-4.1.0" alt="Featured image of post OCRmyPDF" /&gt;&lt;h1 id=&#34;ocrmypdfocrmypdf&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ocrmypdf/OCRmyPDF&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ocrmypdf/OCRmyPDF&lt;/a&gt;
&lt;/h1&gt;&lt;!-- SPDX-FileCopyrightText: 2014 Julien Pfefferkorn --&gt;
&lt;!-- SPDX-FileCopyrightText: 2015 James R. Barlow --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;img src=&#34;docs/images/logo.svg&#34; width=&#34;240&#34; alt=&#34;OCRmyPDF&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ocrmypdf/OCRmyPDF/actions/workflows/build.yml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://github.com/ocrmypdf/OCRmyPDF/actions/workflows/build.yml/badge.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Build Status&#34;
	
	
&gt;&lt;/a&gt; &lt;a class=&#34;link&#34; href=&#34;https://pypi.org/project/ocrmypdf/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/pypi/v/ocrmypdf.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;PyPI version&#34;
	
	
&gt;&lt;/a&gt; &lt;img src=&#34;https://img.shields.io/homebrew/v/ocrmypdf.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Homebrew version&#34;
	
	
&gt; &lt;img src=&#34;https://readthedocs.org/projects/ocrmypdf/badge/?version=latest&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;ReadTheDocs&#34;
	
	
&gt; &lt;img src=&#34;https://img.shields.io/pypi/pyversions/ocrmypdf&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Python versions&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched or copy-pasted.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ocrmypdf                      &lt;span class=&#34;c1&#34;&gt;# it&amp;#39;s a scriptable command line program&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   -l eng+fra                 &lt;span class=&#34;c1&#34;&gt;# it supports multiple languages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --rotate-pages             &lt;span class=&#34;c1&#34;&gt;# it can fix pages that are misrotated&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --deskew                   &lt;span class=&#34;c1&#34;&gt;# it can deskew crooked PDFs!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --title &lt;span class=&#34;s2&#34;&gt;&amp;#34;My PDF&amp;#34;&lt;/span&gt;           &lt;span class=&#34;c1&#34;&gt;# it can change output metadata&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --jobs &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;                   &lt;span class=&#34;c1&#34;&gt;# it uses multiple cores by default&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --output-type pdfa         &lt;span class=&#34;c1&#34;&gt;# it produces PDF/A by default&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   input_scanned.pdf          &lt;span class=&#34;c1&#34;&gt;# takes PDF input (or images)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   output_searchable.pdf      &lt;span class=&#34;c1&#34;&gt;# produces validated PDF output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ocrmypdf.readthedocs.io/en/latest/release_notes.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;See the release notes for details on the latest changes&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;main-features&#34;&gt;Main features
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Generates a searchable &lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/?title=PDF/A&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PDF/A&lt;/a&gt; file from a regular PDF&lt;/li&gt;
&lt;li&gt;Places OCR text accurately below the image to ease copy / paste&lt;/li&gt;
&lt;li&gt;Keeps the exact resolution of the original embedded images&lt;/li&gt;
&lt;li&gt;When possible, inserts OCR information as a &amp;ldquo;lossless&amp;rdquo; operation without disrupting any other content&lt;/li&gt;
&lt;li&gt;Optimizes PDF images, often producing files smaller than the input file&lt;/li&gt;
&lt;li&gt;If requested, deskews and/or cleans the image before performing OCR&lt;/li&gt;
&lt;li&gt;Validates input and output files&lt;/li&gt;
&lt;li&gt;Distributes work across all available CPU cores&lt;/li&gt;
&lt;li&gt;Uses &lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tesseract&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tesseract OCR&lt;/a&gt; engine to recognize more than &lt;a class=&#34;link&#34; href=&#34;https://github.com/tesseract-ocr/tessdata&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;100 languages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Keeps your private data private.&lt;/li&gt;
&lt;li&gt;Scales properly to handle files with thousands of pages.&lt;/li&gt;
&lt;li&gt;Battle-tested on millions of PDFs.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&#34;misc/screencast/demo.svg&#34; alt=&#34;Demo of OCRmyPDF in a terminal session&#34;&gt;
&lt;p&gt;For details: please consult the &lt;a class=&#34;link&#34; href=&#34;https://ocrmypdf.readthedocs.io/en/latest/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;motivation&#34;&gt;Motivation
&lt;/h2&gt;&lt;p&gt;I searched the web for a free command line tool to OCR PDF files: I found many, but none of them were really satisfying:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Either they produced PDF files with misplaced text under the image (making copy/paste impossible)&lt;/li&gt;
&lt;li&gt;Or they did not handle accents and multilingual characters&lt;/li&gt;
&lt;li&gt;Or they changed the resolution of the embedded images&lt;/li&gt;
&lt;li&gt;Or they generated ridiculously large PDF files&lt;/li&gt;
&lt;li&gt;Or they crashed when trying to OCR&lt;/li&gt;
&lt;li&gt;Or they did not produce valid PDF files&lt;/li&gt;
&lt;li&gt;On top of that none of them produced PDF/A files (format dedicated for long time storage)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;hellip;so I decided to develop my own tool.&lt;/p&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation
&lt;/h2&gt;&lt;p&gt;Linux, Windows, macOS and FreeBSD are supported. Docker images are also available, for both x64 and ARM.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Operating system&lt;/th&gt;
          &lt;th&gt;Install command&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Debian, Ubuntu&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;apt install ocrmypdf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Windows Subsystem for Linux&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;apt install ocrmypdf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Fedora&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;dnf install ocrmypdf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;macOS (Homebrew)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;brew install ocrmypdf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;macOS (MacPorts)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;port install ocrmypdf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;macOS (nix)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;nix-env -i ocrmypdf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;LinuxBrew&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;brew install ocrmypdf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;FreeBSD&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;pkg install py-ocrmypdf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Ubuntu Snap&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;snap install ocrmypdf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For everyone else, &lt;a class=&#34;link&#34; href=&#34;https://ocrmypdf.readthedocs.io/en/latest/installation.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;see our documentation&lt;/a&gt; for installation steps.&lt;/p&gt;
&lt;h2 id=&#34;languages&#34;&gt;Languages
&lt;/h2&gt;&lt;p&gt;OCRmyPDF uses Tesseract for OCR, and relies on its language packs. For Linux users, you can often find packages that provide language packs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Display a list of all Tesseract language packs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-cache search tesseract-ocr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Debian/Ubuntu users&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install tesseract-ocr-chi-sim  &lt;span class=&#34;c1&#34;&gt;# Example: Install Chinese Simplified language pack&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Arch Linux users&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -S tesseract-data-eng tesseract-data-deu &lt;span class=&#34;c1&#34;&gt;# Example: Install the English and German language packs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# brew macOS users&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install tesseract-lang
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You can then pass the &lt;code&gt;-l LANG&lt;/code&gt; argument to OCRmyPDF to give a hint as to what languages it should search for. Multiple languages can be requested.&lt;/p&gt;
&lt;p&gt;OCRmyPDF supports Tesseract 4.1.1+. It will automatically use whichever version it finds first on the &lt;code&gt;PATH&lt;/code&gt; environment variable. On Windows, if &lt;code&gt;PATH&lt;/code&gt; does not provide a Tesseract binary, we use the highest version number that is installed according to the Windows Registry.&lt;/p&gt;
&lt;h2 id=&#34;documentation-and-support&#34;&gt;Documentation and support
&lt;/h2&gt;&lt;p&gt;Once OCRmyPDF is installed, the built-in help which explains the command syntax and options can be accessed via:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ocrmypdf --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Our &lt;a class=&#34;link&#34; href=&#34;https://ocrmypdf.readthedocs.io/en/latest/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;documentation is served on Read the Docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please report issues on our &lt;a class=&#34;link&#34; href=&#34;https://github.com/ocrmypdf/OCRmyPDF/issues&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub issues&lt;/a&gt; page, and follow the issue template for quick response.&lt;/p&gt;
&lt;h2 id=&#34;feature-demo&#34;&gt;Feature demo
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Add an OCR layer and convert to PDF/A&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ocrmypdf input.pdf output.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Convert an image to single page PDF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ocrmypdf input.jpg output.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Add OCR to a file in place (only modifies file on success)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ocrmypdf myfile.pdf myfile.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# OCR with non-English languages (look up your language&amp;#39;s ISO 639-3 code)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ocrmypdf -l fra LeParisien.pdf LeParisien.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# OCR multilingual documents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ocrmypdf -l eng+fra Bilingual-English-French.pdf Bilingual-English-French.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Deskew (straighten crooked pages)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ocrmypdf --deskew input.pdf output.pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For more features, see the &lt;a class=&#34;link&#34; href=&#34;https://ocrmypdf.readthedocs.io/en/latest/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements
&lt;/h2&gt;&lt;p&gt;In addition to the required Python version, OCRmyPDF requires external program installations of Ghostscript and Tesseract OCR. OCRmyPDF is pure Python, and runs on pretty much everything: Linux, macOS, Windows and FreeBSD.&lt;/p&gt;
&lt;h2 id=&#34;press--media&#34;&gt;Press &amp;amp; Media
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://medium.com/@ikirichenko/going-paperless-with-ocrmypdf-e2f36143f46a&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Going paperless with OCRmyPDF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://medium.com/@treyharris/converting-a-scanned-document-into-a-compressed-searchable-pdf-with-redactions-63f61c34fe4c&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Converting a scanned document into a compressed searchable PDF with redactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://heise.de/-2279695&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;c&amp;rsquo;t 1-2014, page 59&lt;/a&gt;: Detailed presentation of OCRmyPDF v1.0 in the leading German IT magazine c&amp;rsquo;t&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://heise.de/-2356670&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;heise Open Source, 09/2014: Texterkennung mit OCRmyPDF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.heise.de/ratgeber/Durchsuchbare-PDF-Dokumente-mit-OCRmyPDF-erstellen-4607592.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;heise Durchsuchbare PDF-Dokumente mit OCRmyPDF erstellen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.linuxlinks.com/excellent-utilities-ocrmypdf-add-ocr-text-layer-scanned-pdfs/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Excellent Utilities: OCRmyPDF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.linux-community.de/ausgaben/linuxuser/2021/06/texterkennung-mit-ocrmypdf-und-scanbd-automatisieren/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LinuxUser Texterkennung mit OCRmyPDF und Scanbd automatisieren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://news.ycombinator.com/item?id=32028752&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Y Combinator discussion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;business-enquiries&#34;&gt;Business enquiries
&lt;/h2&gt;&lt;p&gt;OCRmyPDF would not be the software that it is today without companies and users choosing to provide support for feature development and consulting enquiries. We are happy to discuss all enquiries, whether for extending the existing feature set, or integrating OCRmyPDF into a larger system.&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;The OCRmyPDF software is licensed under the Mozilla Public License 2.0 (MPL-2.0). This license permits integration of OCRmyPDF with other code, included commercial and closed source, but asks you to publish source-level modifications you make to OCRmyPDF.&lt;/p&gt;
&lt;p&gt;Some components of OCRmyPDF have other licenses, as indicated by standard SPDX license identifiers or the DEP5 copyright and licensing information file. Generally speaking, non-core code is licensed under MIT, and the documentation and test files are licensed under Creative Commons ShareAlike 4.0 (CC-BY-SA 4.0).&lt;/p&gt;
&lt;h2 id=&#34;disclaimer&#34;&gt;Disclaimer
&lt;/h2&gt;&lt;p&gt;The software is distributed on an &amp;ldquo;AS IS&amp;rdquo; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>fzf</title>
        <link>https://producthunt.programnotes.cn/en/p/fzf/</link>
        <pubDate>Thu, 10 Jul 2025 15:32:18 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/fzf/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1626976721236-7147c94a4216?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTIxMzI2MjF8&amp;ixlib=rb-4.1.0" alt="Featured image of post fzf" /&gt;&lt;h1 id=&#34;junegunnfzf&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;junegunn/fzf&lt;/a&gt;
&lt;/h1&gt;&lt;div align=&#34;center&#34; markdown=&#34;1&#34;&gt;
   &lt;sup&gt;Special thanks to:&lt;/sup&gt;
   &lt;br&gt;
   &lt;br&gt;
   &lt;a href=&#34;https://www.warp.dev/?utm_source=github&amp;utm_medium=referral&amp;utm_campaign=fzf&#34;&gt;
      &lt;img alt=&#34;Warp sponsorship&#34; width=&#34;400&#34; src=&#34;https://github.com/user-attachments/assets/ab8dd143-b0fd-4904-bdc5-dd7ecac94eae&#34;&gt;
   &lt;/a&gt;
&lt;h3 id=&#34;warp-the-intelligent-terminal-for-developers&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.warp.dev/?utm_source=github&amp;amp;utm_medium=referral&amp;amp;utm_campaign=fzf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Warp, the intelligent terminal for developers&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.warp.dev/?utm_source=github&amp;amp;utm_medium=referral&amp;amp;utm_campaign=fzf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Available for MacOS, Linux, &amp;amp; Windows&lt;/a&gt;&lt;br&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://raw.githubusercontent.com/junegunn/i/master/fzf-color.png&#34; alt=&#34;fzf - a command-line fuzzy finder&#34;&gt;
  &lt;a href=&#34;https://github.com/junegunn/fzf/actions&#34;&gt;&lt;img src=&#34;https://github.com/junegunn/fzf/actions/workflows/linux.yml/badge.svg?branch=master&#34; alt=&#34;Build Status&#34;&gt;&lt;/a&gt;
  &lt;a href=&#34;http://github.com/junegunn/fzf/releases&#34;&gt;&lt;img src=&#34;https://img.shields.io/github/v/tag/junegunn/fzf&#34; alt=&#34;Version&#34;&gt;&lt;/a&gt;
  &lt;a href=&#34;https://github.com/junegunn/fzf?tab=MIT-1-ov-file#readme&#34;&gt;&lt;img src=&#34;https://img.shields.io/github/license/junegunn/fzf&#34; alt=&#34;License&#34;&gt;&lt;/a&gt;
  &lt;a href=&#34;https://github.com/junegunn/fzf/graphs/contributors&#34;&gt;&lt;img src=&#34;https://img.shields.io/github/contributors/junegunn/fzf&#34; alt=&#34;Contributors&#34;&gt;&lt;/a&gt;
  &lt;a href=&#34;https://github.com/sponsors/junegunn&#34;&gt;&lt;img src=&#34;https://img.shields.io/github/sponsors/junegunn&#34; alt=&#34;Sponsors&#34;&gt;&lt;/a&gt;
  &lt;a href=&#34;https://github.com/junegunn/fzf/stargazers&#34;&gt;&lt;img src=&#34;https://img.shields.io/github/stars/junegunn/fzf?style=flat&#34; alt=&#34;Stars&#34;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;fzf is a general-purpose command-line fuzzy finder.&lt;/p&gt;
&lt;img src=&#34;https://raw.githubusercontent.com/junegunn/i/master/fzf-preview.png&#34; width=640&gt;
&lt;p&gt;It&amp;rsquo;s an interactive filter program for any kind of list; files, command
history, processes, hostnames, bookmarks, git commits, etc. It implements
a &amp;ldquo;fuzzy&amp;rdquo; matching algorithm, so you can quickly type in patterns with omitted
characters and still get the results you want.&lt;/p&gt;
&lt;h2 id=&#34;highlights&#34;&gt;Highlights
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;Portable&lt;/strong&gt; — Distributed as a single binary for easy installation&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Blazingly fast&lt;/strong&gt; — Highly optimized code instantly processes millions of items&lt;/li&gt;
&lt;li&gt;🛠️ &lt;strong&gt;Extremely versatile&lt;/strong&gt; — Fully customizable via an event-action binding mechanism&lt;/li&gt;
&lt;li&gt;🔋 &lt;strong&gt;Batteries included&lt;/strong&gt; — Includes integration with bash, zsh, fish, Vim, and Neovim&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents
&lt;/h2&gt;&lt;!-- vim-markdown-toc GFM --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#installation&#34; &gt;Installation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#using-homebrew&#34; &gt;Using Homebrew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#linux-packages&#34; &gt;Linux packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#windows-packages&#34; &gt;Windows packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#using-git&#34; &gt;Using git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#binary-releases&#34; &gt;Binary releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#setting-up-shell-integration&#34; &gt;Setting up shell integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#vimneovim-plugin&#34; &gt;Vim/Neovim plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#upgrading-fzf&#34; &gt;Upgrading fzf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#building-fzf&#34; &gt;Building fzf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#usage&#34; &gt;Usage&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#using-the-finder&#34; &gt;Using the finder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#display-modes&#34; &gt;Display modes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#--height-mode&#34; &gt;&lt;code&gt;--height&lt;/code&gt; mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#--tmux-mode&#34; &gt;&lt;code&gt;--tmux&lt;/code&gt; mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#search-syntax&#34; &gt;Search syntax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#environment-variables&#34; &gt;Environment variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#customizing-the-look&#34; &gt;Customizing the look&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#options&#34; &gt;Options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#demo&#34; &gt;Demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#examples&#34; &gt;Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#key-bindings-for-command-line&#34; &gt;Key bindings for command-line&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#fuzzy-completion-for-bash-and-zsh&#34; &gt;Fuzzy completion for bash and zsh&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#files-and-directories&#34; &gt;Files and directories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#process-ids&#34; &gt;Process IDs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#host-names&#34; &gt;Host names&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#environment-variables--aliases&#34; &gt;Environment variables / Aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#customizing-fzf-options-for-completion&#34; &gt;Customizing fzf options for completion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#customizing-completion-source-for-paths-and-directories&#34; &gt;Customizing completion source for paths and directories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#supported-commands&#34; &gt;Supported commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#custom-fuzzy-completion&#34; &gt;Custom fuzzy completion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#vim-plugin&#34; &gt;Vim plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#advanced-topics&#34; &gt;Advanced topics&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#customizing-for-different-types-of-input&#34; &gt;Customizing for different types of input&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#performance&#34; &gt;Performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#executing-external-programs&#34; &gt;Executing external programs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#turning-into-a-different-process&#34; &gt;Turning into a different process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#reloading-the-candidate-list&#34; &gt;Reloading the candidate list&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#1-update-the-list-of-processes-by-pressing-ctrl-r&#34; &gt;1. Update the list of processes by pressing CTRL-R&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#2-switch-between-sources-by-pressing-ctrl-d-or-ctrl-f&#34; &gt;2. Switch between sources by pressing CTRL-D or CTRL-F&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#3-interactive-ripgrep-integration&#34; &gt;3. Interactive ripgrep integration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#preview-window&#34; &gt;Preview window&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#previewing-an-image&#34; &gt;Previewing an image&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#tips&#34; &gt;Tips&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#respecting-gitignore&#34; &gt;Respecting &lt;code&gt;.gitignore&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#fish-shell&#34; &gt;Fish shell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#fzf-theme-playground&#34; &gt;fzf Theme Playground&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#related-projects&#34; &gt;Related projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#license&#34; &gt;License&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#sponsors-heart&#34; &gt;Sponsors :heart:&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- vim-markdown-toc --&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation
&lt;/h2&gt;&lt;h3 id=&#34;using-homebrew&#34;&gt;Using Homebrew
&lt;/h3&gt;&lt;p&gt;You can use &lt;a class=&#34;link&#34; href=&#34;https://brew.sh/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Homebrew&lt;/a&gt; (on macOS or Linux) to install fzf.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install fzf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
To set up shell integration (key bindings and fuzzy completion),
see &lt;a class=&#34;link&#34; href=&#34;#setting-up-shell-integration&#34; &gt;the instructions below&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;fzf is also available &lt;a class=&#34;link&#34; href=&#34;https://github.com/macports/macports-ports/blob/master/sysutils/fzf/Portfile&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;via MacPorts&lt;/a&gt;: &lt;code&gt;sudo port install fzf&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;linux-packages&#34;&gt;Linux packages
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Package Manager&lt;/th&gt;
          &lt;th&gt;Linux Distribution&lt;/th&gt;
          &lt;th&gt;Command&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;APK&lt;/td&gt;
          &lt;td&gt;Alpine Linux&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;sudo apk add fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;APT&lt;/td&gt;
          &lt;td&gt;Debian 9+/Ubuntu 19.10+&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;sudo apt install fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Conda&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;conda install -c conda-forge fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;DNF&lt;/td&gt;
          &lt;td&gt;Fedora&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;sudo dnf install fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Nix&lt;/td&gt;
          &lt;td&gt;NixOS, etc.&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;nix-env -iA nixpkgs.fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Pacman&lt;/td&gt;
          &lt;td&gt;Arch Linux&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;sudo pacman -S fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;pkg&lt;/td&gt;
          &lt;td&gt;FreeBSD&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;pkg install fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;pkgin&lt;/td&gt;
          &lt;td&gt;NetBSD&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;pkgin install fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;pkg_add&lt;/td&gt;
          &lt;td&gt;OpenBSD&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;pkg_add fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Portage&lt;/td&gt;
          &lt;td&gt;Gentoo&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;emerge --ask app-shells/fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Spack&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;spack install fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;XBPS&lt;/td&gt;
          &lt;td&gt;Void Linux&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;sudo xbps-install -S fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Zypper&lt;/td&gt;
          &lt;td&gt;openSUSE&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;sudo zypper install fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
To set up shell integration (key bindings and fuzzy completion),
see &lt;a class=&#34;link&#34; href=&#34;#setting-up-shell-integration&#34; &gt;the instructions below&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://repology.org/project/fzf/versions&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://repology.org/badge/vertical-allrepos/fzf.svg?columns=3&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Packaging status&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;windows-packages&#34;&gt;Windows packages
&lt;/h3&gt;&lt;p&gt;On Windows, fzf is available via &lt;a class=&#34;link&#34; href=&#34;https://chocolatey.org/packages/fzf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Chocolatey&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://github.com/ScoopInstaller/Main/blob/master/bucket/fzf.json&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Scoop&lt;/a&gt;,
&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/winget-pkgs/tree/master/manifests/j/junegunn/fzf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Winget&lt;/a&gt;, and &lt;a class=&#34;link&#34; href=&#34;https://packages.msys2.org/base/mingw-w64-fzf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MSYS2&lt;/a&gt;:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Package manager&lt;/th&gt;
          &lt;th&gt;Command&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Chocolatey&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;choco install fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Scoop&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;scoop install fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Winget&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;winget install fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;MSYS2 (pacman)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;pacman -S $MINGW_PACKAGE_PREFIX-fzf&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;using-git&#34;&gt;Using git
&lt;/h3&gt;&lt;p&gt;Alternatively, you can &amp;ldquo;git clone&amp;rdquo; this repository to any directory and run
&lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf/blob/master/install&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;install&lt;/a&gt; script.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --depth &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; https://github.com/junegunn/fzf.git ~/.fzf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.fzf/install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The install script will add lines to your shell configuration file to modify
&lt;code&gt;$PATH&lt;/code&gt; and set up shell integration.&lt;/p&gt;
&lt;h3 id=&#34;binary-releases&#34;&gt;Binary releases
&lt;/h3&gt;&lt;p&gt;You can download the official fzf binaries from the releases page.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/junegunn/fzf/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;setting-up-shell-integration&#34;&gt;Setting up shell integration
&lt;/h3&gt;&lt;p&gt;Add the following line to your shell configuration file.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bash
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Set up fzf key bindings and fuzzy completion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;fzf --bash&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;zsh
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Set up fzf key bindings and fuzzy completion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; &amp;lt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;fzf --zsh&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;fish
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fish&#34; data-lang=&#34;fish&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Set up fzf key bindings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;fzf&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;--fish&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
&lt;code&gt;--bash&lt;/code&gt;, &lt;code&gt;--zsh&lt;/code&gt;, and &lt;code&gt;--fish&lt;/code&gt; options are only available in fzf 0.48.0 or
later. If you have an older version of fzf, or want finer control, you can
source individual script files in the &lt;a class=&#34;link&#34; href=&#34;https://producthunt.programnotes.cn/shell&#34; &gt;/shell&lt;/a&gt; directory. The
location of the files may vary depending on the package manager you use.
Please refer to the package documentation for more information.
(e.g. &lt;code&gt;apt show fzf&lt;/code&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
You can disable CTRL-T or ALT-C binding by setting &lt;code&gt;FZF_CTRL_T_COMMAND&lt;/code&gt; or
&lt;code&gt;FZF_ALT_C_COMMAND&lt;/code&gt; to an empty string when sourcing the script.
For example, to disable ALT-C binding:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bash: &lt;code&gt;FZF_ALT_C_COMMAND= eval &amp;quot;$(fzf --bash)&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;zsh: &lt;code&gt;FZF_ALT_C_COMMAND= source &amp;lt;(fzf --zsh)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;fish: &lt;code&gt;fzf --fish | FZF_ALT_C_COMMAND= source&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Setting the variables after sourcing the script will have no effect.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;vimneovim-plugin&#34;&gt;Vim/Neovim plugin
&lt;/h3&gt;&lt;p&gt;If you use &lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/vim-plug&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;vim-plug&lt;/a&gt;, add this to
your Vim configuration file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;junegunn/fzf&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; { &lt;span class=&#34;s1&#34;&gt;&amp;#39;do&amp;#39;&lt;/span&gt;: { &lt;span class=&#34;p&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fzf&lt;/span&gt;#&lt;span class=&#34;nx&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; } }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;junegunn/fzf.vim&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;junegunn/fzf&lt;/code&gt; provides the basic library functions
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fzf#install()&lt;/code&gt; makes sure that you have the latest binary&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;junegunn/fzf.vim&lt;/code&gt; is &lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf.vim&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;a separate project&lt;/a&gt;
that provides a variety of useful commands&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To learn more about the Vim integration, see &lt;a class=&#34;link&#34; href=&#34;README-VIM.md&#34; &gt;README-VIM.md&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
If you use Neovim and prefer Lua-based plugins, check out
&lt;a class=&#34;link&#34; href=&#34;https://github.com/ibhagwan/fzf-lua&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;fzf-lua&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;upgrading-fzf&#34;&gt;Upgrading fzf
&lt;/h2&gt;&lt;p&gt;fzf is being actively developed, and you might want to upgrade it once in a
while. Please follow the instruction below depending on the installation
method used.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;git: &lt;code&gt;cd ~/.fzf &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; ./install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;brew: &lt;code&gt;brew update; brew upgrade fzf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;macports: &lt;code&gt;sudo port upgrade fzf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;chocolatey: &lt;code&gt;choco upgrade fzf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;vim-plug: &lt;code&gt;:PlugUpdate fzf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;building-fzf&#34;&gt;Building fzf
&lt;/h2&gt;&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;BUILD.md&#34; &gt;BUILD.md&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;usage&#34;&gt;Usage
&lt;/h2&gt;&lt;p&gt;fzf will launch interactive finder, read the list from STDIN, and write the
selected item to STDOUT.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find * -type f &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf &amp;gt; selected
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Without STDIN pipe, fzf will traverse the file system under the current
directory to get the list of files.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;fzf&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
You can override the default behavior&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Either by setting &lt;code&gt;$FZF_DEFAULT_COMMAND&lt;/code&gt; to a command that generates the desired list&lt;/li&gt;
&lt;li&gt;Or by setting &lt;code&gt;--walker&lt;/code&gt;, &lt;code&gt;--walker-root&lt;/code&gt;, and &lt;code&gt;--walker-skip&lt;/code&gt; options in &lt;code&gt;$FZF_DEFAULT_OPTS&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
A more robust solution would be to use &lt;code&gt;xargs&lt;/code&gt; but we&amp;rsquo;ve presented
the above as it&amp;rsquo;s easier to grasp&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --print0 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -0 -o vim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
fzf also has the ability to turn itself into a different process.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;enter:become(vim {})&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;em&gt;See &lt;a class=&#34;link&#34; href=&#34;#turning-into-a-different-process&#34; &gt;Turning into a different process&lt;/a&gt;
for more information.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;using-the-finder&#34;&gt;Using the finder
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CTRL-K&lt;/code&gt; / &lt;code&gt;CTRL-J&lt;/code&gt; (or &lt;code&gt;CTRL-P&lt;/code&gt; / &lt;code&gt;CTRL-N&lt;/code&gt;) to move cursor up and down&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Enter&lt;/code&gt; key to select the item, &lt;code&gt;CTRL-C&lt;/code&gt; / &lt;code&gt;CTRL-G&lt;/code&gt; / &lt;code&gt;ESC&lt;/code&gt; to exit&lt;/li&gt;
&lt;li&gt;On multi-select mode (&lt;code&gt;-m&lt;/code&gt;), &lt;code&gt;TAB&lt;/code&gt; and &lt;code&gt;Shift-TAB&lt;/code&gt; to mark multiple items&lt;/li&gt;
&lt;li&gt;Emacs style key bindings&lt;/li&gt;
&lt;li&gt;Mouse: scroll, click, double-click; shift-click and shift-scroll on
multi-select mode&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;display-modes&#34;&gt;Display modes
&lt;/h3&gt;&lt;p&gt;fzf by default runs in fullscreen mode, but there are other display modes.&lt;/p&gt;
&lt;h4 id=&#34;--height-mode&#34;&gt;&lt;code&gt;--height&lt;/code&gt; mode
&lt;/h4&gt;&lt;p&gt;With &lt;code&gt;--height HEIGHT[%]&lt;/code&gt;, fzf will start below the cursor with the given height.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --height 40%
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;reverse&lt;/code&gt; layout and &lt;code&gt;--border&lt;/code&gt; goes well with this option.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --height 40% --layout reverse --border
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;By prepending &lt;code&gt;~&lt;/code&gt; to the height, you&amp;rsquo;re setting the maximum height.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Will take as few lines as possible to display the list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seq &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf --height ~100%
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seq &lt;span class=&#34;m&#34;&gt;3000&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf --height ~100%
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Height value can be a negative number.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Screen height - 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --height -3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;--tmux-mode&#34;&gt;&lt;code&gt;--tmux&lt;/code&gt; mode
&lt;/h4&gt;&lt;p&gt;With &lt;code&gt;--tmux&lt;/code&gt; option, fzf will start in a tmux popup.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# --tmux [center|top|bottom|left|right][,SIZE[%]][,SIZE[%][,border-native]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --tmux center         &lt;span class=&#34;c1&#34;&gt;# Center, 50% width and height&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --tmux 80%            &lt;span class=&#34;c1&#34;&gt;# Center, 80% width and height&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --tmux 100%,50%       &lt;span class=&#34;c1&#34;&gt;# Center, 100% width and 50% height&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --tmux left,40%       &lt;span class=&#34;c1&#34;&gt;# Left, 40% width&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --tmux left,40%,90%   &lt;span class=&#34;c1&#34;&gt;# Left, 40% width, 90% height&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --tmux top,40%        &lt;span class=&#34;c1&#34;&gt;# Top, 40% height&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --tmux bottom,80%,40% &lt;span class=&#34;c1&#34;&gt;# Bottom, 80% height, 40% height&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;--tmux&lt;/code&gt; is silently ignored when you&amp;rsquo;re not on tmux.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
If you&amp;rsquo;re stuck with an old version of tmux that doesn&amp;rsquo;t support popup,
or if you want to open fzf in a regular tmux pane, check out
&lt;a class=&#34;link&#34; href=&#34;bin/fzf-tmux&#34; &gt;fzf-tmux&lt;/a&gt; script.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
You can add these options to &lt;code&gt;$FZF_DEFAULT_OPTS&lt;/code&gt; so that they&amp;rsquo;re applied by
default. For example,&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Open in tmux popup if on tmux, otherwise use --height mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_DEFAULT_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--height 40% --tmux bottom,40% --layout reverse --border top&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;search-syntax&#34;&gt;Search syntax
&lt;/h3&gt;&lt;p&gt;Unless otherwise specified, fzf starts in &amp;ldquo;extended-search mode&amp;rdquo; where you can
type in multiple search terms delimited by spaces. e.g. &lt;code&gt;^music .mp3$ sbtrkt !fire&lt;/code&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Token&lt;/th&gt;
          &lt;th&gt;Match type&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;sbtrkt&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;fuzzy-match&lt;/td&gt;
          &lt;td&gt;Items that match &lt;code&gt;sbtrkt&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;&#39;wild&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;exact-match (quoted)&lt;/td&gt;
          &lt;td&gt;Items that include &lt;code&gt;wild&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;&#39;wild&#39;&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;exact-boundary-match (quoted both ends)&lt;/td&gt;
          &lt;td&gt;Items that include &lt;code&gt;wild&lt;/code&gt; at word boundaries&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;^music&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;prefix-exact-match&lt;/td&gt;
          &lt;td&gt;Items that start with &lt;code&gt;music&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;.mp3$&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;suffix-exact-match&lt;/td&gt;
          &lt;td&gt;Items that end with &lt;code&gt;.mp3&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;!fire&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;inverse-exact-match&lt;/td&gt;
          &lt;td&gt;Items that do not include &lt;code&gt;fire&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;!^music&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;inverse-prefix-exact-match&lt;/td&gt;
          &lt;td&gt;Items that do not start with &lt;code&gt;music&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;!.mp3$&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;inverse-suffix-exact-match&lt;/td&gt;
          &lt;td&gt;Items that do not end with &lt;code&gt;.mp3&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you don&amp;rsquo;t prefer fuzzy matching and do not wish to &amp;ldquo;quote&amp;rdquo; every word,
start fzf with &lt;code&gt;-e&lt;/code&gt; or &lt;code&gt;--exact&lt;/code&gt; option. Note that when  &lt;code&gt;--exact&lt;/code&gt; is set,
&lt;code&gt;&#39;&lt;/code&gt;-prefix &amp;ldquo;unquotes&amp;rdquo; the term.&lt;/p&gt;
&lt;p&gt;A single bar character term acts as an OR operator. For example, the following
query matches entries that start with &lt;code&gt;core&lt;/code&gt; and end with either &lt;code&gt;go&lt;/code&gt;, &lt;code&gt;rb&lt;/code&gt;,
or &lt;code&gt;py&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;^core go$ | rb$ | py$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;environment-variables&#34;&gt;Environment variables
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FZF_DEFAULT_COMMAND&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Default command to use when input is tty&lt;/li&gt;
&lt;li&gt;e.g. &lt;code&gt;export FZF_DEFAULT_COMMAND=&#39;fd --type f&#39;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FZF_DEFAULT_OPTS&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Default options&lt;/li&gt;
&lt;li&gt;e.g. &lt;code&gt;export FZF_DEFAULT_OPTS=&amp;quot;--layout=reverse --inline-info&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FZF_DEFAULT_OPTS_FILE&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;If you prefer to manage default options in a file, set this variable to
point to the location of the file&lt;/li&gt;
&lt;li&gt;e.g. &lt;code&gt;export FZF_DEFAULT_OPTS_FILE=~/.fzfrc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
&lt;code&gt;FZF_DEFAULT_COMMAND&lt;/code&gt; is not used by shell integration due to the
slight difference in requirements.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CTRL-T&lt;/code&gt; runs &lt;code&gt;$FZF_CTRL_T_COMMAND&lt;/code&gt; to get a list of files and directories&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT-C&lt;/code&gt; runs &lt;code&gt;$FZF_ALT_C_COMMAND&lt;/code&gt; to get a list of directories&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vim ~/**&amp;lt;tab&amp;gt;&lt;/code&gt; runs &lt;code&gt;fzf_compgen_path()&lt;/code&gt; with the prefix (&lt;code&gt;~/&lt;/code&gt;) as the first argument&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd foo**&amp;lt;tab&amp;gt;&lt;/code&gt; runs &lt;code&gt;fzf_compgen_dir()&lt;/code&gt; with the prefix (&lt;code&gt;foo&lt;/code&gt;) as the first argument&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The available options are described later in this document.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;customizing-the-look&#34;&gt;Customizing the look
&lt;/h3&gt;&lt;p&gt;The user interface of fzf is fully customizable with a large number of
configuration options. For a quick setup, you can start with one of the style
presets — &lt;code&gt;default&lt;/code&gt;, &lt;code&gt;full&lt;/code&gt;, or &lt;code&gt;minimal&lt;/code&gt; — using the &lt;code&gt;--style&lt;/code&gt; option.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --style full &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --preview &lt;span class=&#34;s1&#34;&gt;&amp;#39;fzf-preview.sh {}&amp;#39;&lt;/span&gt; --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;focus:transform-header:file --brief {}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Preset&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Screenshot&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;default&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/junegunn/i/master/fzf-style-default.png&#34;/&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;full&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/junegunn/i/master/fzf-style-full.png&#34;/&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;minimal&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/junegunn/i/master/fzf-style-minimal.png&#34;/&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Here&amp;rsquo;s an example based on the &lt;code&gt;full&lt;/code&gt; preset:&lt;/p&gt;
&lt;img src=&#34;https://raw.githubusercontent.com/junegunn/i/master/fzf-4-borders.png&#34;/&gt;
&lt;details&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git ls-files &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf --style full &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --border --padding 1,2 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --border-label &lt;span class=&#34;s1&#34;&gt;&amp;#39; Demo &amp;#39;&lt;/span&gt; --input-label &lt;span class=&#34;s1&#34;&gt;&amp;#39; Input &amp;#39;&lt;/span&gt; --header-label &lt;span class=&#34;s1&#34;&gt;&amp;#39; File Type &amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --preview &lt;span class=&#34;s1&#34;&gt;&amp;#39;fzf-preview.sh {}&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;result:transform-list-label:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        if [[ -z $FZF_QUERY ]]; then
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;          echo &amp;#34; $FZF_MATCH_COUNT items &amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;          echo &amp;#34; $FZF_MATCH_COUNT matches for [$FZF_QUERY] &amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        fi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;focus:transform-preview-label:[[ -n {} ]] &amp;amp;&amp;amp; printf &amp;#34; Previewing [%s] &amp;#34; {}&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;focus:+transform-header:file --brief {} || echo &amp;#34;No file selected&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;ctrl-r:change-list-label( Reloading the list )+reload(sleep 2; git ls-files)&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --color &lt;span class=&#34;s1&#34;&gt;&amp;#39;border:#aaaaaa,label:#cccccc&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --color &lt;span class=&#34;s1&#34;&gt;&amp;#39;preview-border:#9999cc,preview-label:#ccccff&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --color &lt;span class=&#34;s1&#34;&gt;&amp;#39;list-border:#669966,list-label:#99cc99&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --color &lt;span class=&#34;s1&#34;&gt;&amp;#39;input-border:#996666,input-label:#ffcccc&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --color &lt;span class=&#34;s1&#34;&gt;&amp;#39;header-border:#6699cc,header-label:#99ccff&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;h3 id=&#34;options&#34;&gt;Options
&lt;/h3&gt;&lt;p&gt;See the man page (&lt;code&gt;fzf --man&lt;/code&gt; or &lt;code&gt;man fzf&lt;/code&gt;) for the full list of options.&lt;/p&gt;
&lt;h3 id=&#34;demo&#34;&gt;Demo
&lt;/h3&gt;&lt;p&gt;If you learn by watching videos, check out this screencast by &lt;a class=&#34;link&#34; href=&#34;https://github.com/samoshkin&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@samoshkin&lt;/a&gt; to explore &lt;code&gt;fzf&lt;/code&gt; features.&lt;/p&gt;
&lt;a title=&#34;fzf - command-line fuzzy finder&#34; href=&#34;https://www.youtube.com/watch?v=qgG5Jhi_Els&#34;&gt;
  &lt;img src=&#34;https://i.imgur.com/vtG8olE.png&#34; width=&#34;640&#34;&gt;
&lt;/a&gt;
&lt;h2 id=&#34;examples&#34;&gt;Examples
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf/wiki/examples&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Wiki page of examples&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Disclaimer: The examples on this page are maintained by the community
and are not thoroughly tested&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf/blob/master/ADVANCED.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Advanced fzf examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;key-bindings-for-command-line&#34;&gt;Key bindings for command-line
&lt;/h2&gt;&lt;p&gt;By &lt;a class=&#34;link&#34; href=&#34;#setting-up-shell-integration&#34; &gt;setting up shell integration&lt;/a&gt;, you can use
the following key bindings in bash, zsh, and fish.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CTRL-T&lt;/code&gt; - Paste the selected files and directories onto the command-line
&lt;ul&gt;
&lt;li&gt;The list is generated using &lt;code&gt;--walker file,dir,follow,hidden&lt;/code&gt; option
&lt;ul&gt;
&lt;li&gt;You can override the behavior by setting &lt;code&gt;FZF_CTRL_T_COMMAND&lt;/code&gt; to a custom command that generates the desired list&lt;/li&gt;
&lt;li&gt;Or you can set &lt;code&gt;--walker*&lt;/code&gt; options in &lt;code&gt;FZF_CTRL_T_OPTS&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;FZF_CTRL_T_OPTS&lt;/code&gt; to pass additional options to fzf
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Preview file content using bat (https://github.com/sharkdp/bat)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_CTRL_T_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --walker-skip .git,node_modules,target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --preview &amp;#39;bat -n --color=always {}&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --bind &amp;#39;ctrl-/:change-preview-window(down|hidden|)&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Can be disabled by setting &lt;code&gt;FZF_CTRL_T_COMMAND&lt;/code&gt; to an empty string when
sourcing the script&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CTRL-R&lt;/code&gt; - Paste the selected command from history onto the command-line
&lt;ul&gt;
&lt;li&gt;If you want to see the commands in chronological order, press &lt;code&gt;CTRL-R&lt;/code&gt;
again which toggles sorting by relevance&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;CTRL-/&lt;/code&gt; or &lt;code&gt;ALT-/&lt;/code&gt; to toggle line wrapping&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;FZF_CTRL_R_OPTS&lt;/code&gt; to pass additional options to fzf
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# CTRL-Y to copy the command into clipboard using pbcopy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_CTRL_R_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --bind &amp;#39;ctrl-y:execute-silent(echo -n {2..} | pbcopy)+abort&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --color header:italic
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --header &amp;#39;Press CTRL-Y to copy command into clipboard&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT-C&lt;/code&gt; - cd into the selected directory
&lt;ul&gt;
&lt;li&gt;The list is generated using &lt;code&gt;--walker dir,follow,hidden&lt;/code&gt; option&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;FZF_ALT_C_COMMAND&lt;/code&gt; to override the default command
&lt;ul&gt;
&lt;li&gt;Or you can set &lt;code&gt;--walker-*&lt;/code&gt; options in &lt;code&gt;FZF_ALT_C_OPTS&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;FZF_ALT_C_OPTS&lt;/code&gt; to pass additional options to fzf
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Print tree structure in the preview window&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_ALT_C_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --walker-skip .git,node_modules,target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --preview &amp;#39;tree -C {}&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Can be disabled by setting &lt;code&gt;FZF_ALT_C_COMMAND&lt;/code&gt; to an empty string when
sourcing the script&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Display modes for these bindings can be separately configured via
&lt;code&gt;FZF_{CTRL_T,CTRL_R,ALT_C}_OPTS&lt;/code&gt; or globally via &lt;code&gt;FZF_DEFAULT_OPTS&lt;/code&gt;.
(e.g. &lt;code&gt;FZF_CTRL_R_OPTS=&#39;--tmux bottom,60% --height 60% --border top&#39;&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;More tips can be found on &lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf/wiki/Configuring-shell-key-bindings&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;the wiki page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;fuzzy-completion-for-bash-and-zsh&#34;&gt;Fuzzy completion for bash and zsh
&lt;/h2&gt;&lt;h3 id=&#34;files-and-directories&#34;&gt;Files and directories
&lt;/h3&gt;&lt;p&gt;Fuzzy completion for files and directories can be triggered if the word before
the cursor ends with the trigger sequence, which is by default &lt;code&gt;**&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;COMMAND [DIRECTORY/][FUZZY_PATTERN]**&amp;lt;TAB&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Files under the current directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# - You can select multiple items with TAB key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim **&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Files under parent directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim ../**&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Files under parent directory that match `fzf`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim ../fzf**&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Files under your home directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim ~/**&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Directories under current directory (single-selection)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; **&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Directories under ~/github that match `fzf`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/github/fzf**&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;process-ids&#34;&gt;Process IDs
&lt;/h3&gt;&lt;p&gt;Fuzzy completion for PIDs is provided for kill command.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Can select multiple processes with &amp;lt;TAB&amp;gt; or &amp;lt;Shift-TAB&amp;gt; keys&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; -9 **&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;host-names&#34;&gt;Host names
&lt;/h3&gt;&lt;p&gt;For ssh and telnet commands, fuzzy completion for hostnames is provided. The
names are extracted from /etc/hosts and ~/.ssh/config.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh **&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;telnet **&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;environment-variables--aliases&#34;&gt;Environment variables / Aliases
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;unset&lt;/span&gt; **&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; **&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;unalias&lt;/span&gt; **&amp;lt;TAB&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;customizing-fzf-options-for-completion&#34;&gt;Customizing fzf options for completion
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use ~~ as the trigger sequence instead of the default **&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_COMPLETION_TRIGGER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;~~&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Options to fzf command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_COMPLETION_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--border --info=inline&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Options for path completion (e.g. vim **&amp;lt;TAB&amp;gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_COMPLETION_PATH_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--walker file,dir,follow,hidden&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Options for directory completion (e.g. cd **&amp;lt;TAB&amp;gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_COMPLETION_DIR_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--walker dir,follow&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Advanced customization of fzf options via _fzf_comprun function&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# - The first argument to the function is the name of the command.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# - You should make sure to pass the rest of the arguments ($@) to fzf.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_fzf_comprun&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$command&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;           fzf --preview &lt;span class=&#34;s1&#34;&gt;&amp;#39;tree -C {} | head -200&amp;#39;&lt;/span&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    export&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;unset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; fzf --preview &lt;span class=&#34;s2&#34;&gt;&amp;#34;eval &amp;#39;echo \$&amp;#39;{}&amp;#34;&lt;/span&gt;         &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ssh&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;          fzf --preview &lt;span class=&#34;s1&#34;&gt;&amp;#39;dig {}&amp;#39;&lt;/span&gt;                   &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    *&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;            fzf --preview &lt;span class=&#34;s1&#34;&gt;&amp;#39;bat -n --color=always {}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;customizing-completion-source-for-paths-and-directories&#34;&gt;Customizing completion source for paths and directories
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use fd (https://github.com/sharkdp/fd) for listing path candidates.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# - The first argument to the function ($1) is the base path to start traversal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# - See the source code (completion.{bash,zsh}) for the details.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_fzf_compgen_path&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  fd --hidden --follow --exclude &lt;span class=&#34;s2&#34;&gt;&amp;#34;.git&amp;#34;&lt;/span&gt; . &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use fd to generate the list for directory completion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_fzf_compgen_dir&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  fd --type d --hidden --follow --exclude &lt;span class=&#34;s2&#34;&gt;&amp;#34;.git&amp;#34;&lt;/span&gt; . &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;supported-commands&#34;&gt;Supported commands
&lt;/h3&gt;&lt;p&gt;On bash, fuzzy completion is enabled only for a predefined set of commands
(&lt;code&gt;complete | grep _fzf&lt;/code&gt; to see the list). But you can enable it for other
commands as well by using &lt;code&gt;_fzf_setup_completion&lt;/code&gt; helper function.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# usage: _fzf_setup_completion path|dir|var|alias|host COMMANDS...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_fzf_setup_completion path ag git kubectl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_fzf_setup_completion dir tree
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;custom-fuzzy-completion&#34;&gt;Custom fuzzy completion
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;(Custom completion API is experimental and subject to change)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For a command named &lt;em&gt;&amp;ldquo;COMMAND&amp;rdquo;&lt;/em&gt;, define &lt;code&gt;_fzf_complete_COMMAND&lt;/code&gt; function using
&lt;code&gt;_fzf_complete&lt;/code&gt; helper.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Custom fuzzy completion for &amp;#34;doge&amp;#34; command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   e.g. doge **&amp;lt;TAB&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_fzf_complete_doge&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  _fzf_complete --multi --reverse --prompt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;doge&amp;gt; &amp;#34;&lt;/span&gt; -- &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;lt; &amp;lt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; very
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; wow
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; such
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; doge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;The arguments before &lt;code&gt;--&lt;/code&gt; are the options to fzf.&lt;/li&gt;
&lt;li&gt;After &lt;code&gt;--&lt;/code&gt;, simply pass the original completion arguments unchanged (&lt;code&gt;&amp;quot;$@&amp;quot;&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Then, write a set of commands that generates the completion candidates and
feed its output to the function using process substitution (&lt;code&gt;&amp;lt; &amp;lt;(...)&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;zsh will automatically pick up the function using the naming convention but in
bash you have to manually associate the function with the command using the
&lt;code&gt;complete&lt;/code&gt; command.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$BASH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;complete&lt;/span&gt; -F _fzf_complete_doge -o default -o bashdefault doge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you need to post-process the output from fzf, define
&lt;code&gt;_fzf_complete_COMMAND_post&lt;/code&gt; as follows.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_fzf_complete_foo&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  _fzf_complete --multi --reverse --header-lines&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; -- &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;lt; &amp;lt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ls -al
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_fzf_complete_foo_post&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $NF}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$BASH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;complete&lt;/span&gt; -F _fzf_complete_foo -o default -o bashdefault foo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;vim-plugin&#34;&gt;Vim plugin
&lt;/h2&gt;&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;README-VIM.md&#34; &gt;README-VIM.md&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;advanced-topics&#34;&gt;Advanced topics
&lt;/h2&gt;&lt;h3 id=&#34;customizing-for-different-types-of-input&#34;&gt;Customizing for different types of input
&lt;/h3&gt;&lt;p&gt;Since fzf is a general-purpose text filter, its algorithm was designed to
&amp;ldquo;generally&amp;rdquo; work well with any kind of input. However, admittedly, there is no
true one-size-fits-all solution, and you may want to tweak the algorithm and
some of the settings depending on the type of the input. To make this process
easier, fzf provides a set of &amp;ldquo;scheme&amp;quot;s for some common input types.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Scheme&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--scheme=default&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Generic scheme designed to work well with any kind of input&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--scheme=path&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Suitable for file paths&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--scheme=history&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Suitable for command history or any input where chronological ordering is important&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;(See &lt;code&gt;fzf --man&lt;/code&gt; for the details)&lt;/p&gt;
&lt;h3 id=&#34;performance&#34;&gt;Performance
&lt;/h3&gt;&lt;p&gt;fzf is fast. Performance should not be a problem in most use cases. However,
you might want to be aware of the options that can affect performance.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--ansi&lt;/code&gt; tells fzf to extract and parse ANSI color codes in the input, and it
makes the initial scanning slower. So it&amp;rsquo;s not recommended that you add it
to your &lt;code&gt;$FZF_DEFAULT_OPTS&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--nth&lt;/code&gt; makes fzf slower because it has to tokenize each line.&lt;/li&gt;
&lt;li&gt;A plain string &lt;code&gt;--delimiter&lt;/code&gt; should be preferred over a regular expression
delimiter.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--with-nth&lt;/code&gt; makes fzf slower as fzf has to tokenize and reassemble each
line.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;executing-external-programs&#34;&gt;Executing external programs
&lt;/h3&gt;&lt;p&gt;You can set up key bindings for starting external processes without leaving
fzf (&lt;code&gt;execute&lt;/code&gt;, &lt;code&gt;execute-silent&lt;/code&gt;).&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Press F1 to open the file with less without leaving fzf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Press CTRL-Y to copy the line to clipboard and aborts fzf (requires pbcopy)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;f1:execute(less -f {}),ctrl-y:execute-silent(echo {} | pbcopy)+abort&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;See &lt;em&gt;KEY/EVENT BINDINGS&lt;/em&gt; section of the man page for details.&lt;/p&gt;
&lt;h3 id=&#34;turning-into-a-different-process&#34;&gt;Turning into a different process
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;become(...)&lt;/code&gt; is similar to &lt;code&gt;execute(...)&lt;/code&gt;/&lt;code&gt;execute-silent(...)&lt;/code&gt; described
above, but instead of executing the command and coming back to fzf on
complete, it turns fzf into a new process for the command.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;enter:become(vim {})&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Compared to the seemingly equivalent command substitution &lt;code&gt;vim &amp;quot;$(fzf)&amp;quot;&lt;/code&gt;, this
approach has several advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vim will not open an empty file when you terminate fzf with
&lt;kbd&gt;CTRL-C&lt;/kbd&gt;&lt;/li&gt;
&lt;li&gt;Vim will not open an empty file when you press &lt;kbd&gt;ENTER&lt;/kbd&gt; on an empty
result&lt;/li&gt;
&lt;li&gt;Can handle multiple selections even when they have whitespaces
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --multi --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;enter:become(vim {+})&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To be fair, running &lt;code&gt;fzf --print0 | xargs -0 -o vim&lt;/code&gt; instead of &lt;code&gt;vim &amp;quot;$(fzf)&amp;quot;&lt;/code&gt;
resolves all of the issues mentioned. Nonetheless, &lt;code&gt;become(...)&lt;/code&gt; still offers
additional benefits in different scenarios.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can set up multiple bindings to handle the result in different ways
without any wrapping script
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;enter:become(vim {}),ctrl-e:become(emacs {})&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Previously, you would have to use &lt;code&gt;--expect=ctrl-e&lt;/code&gt; and check the first
line of the output of fzf&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;You can easily build the subsequent command using the field index
expressions of fzf
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Open the file in Vim and go to the line&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git grep --line-number . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    fzf --delimiter : --nth 3.. --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;enter:become(vim {1} +{2})&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;reloading-the-candidate-list&#34;&gt;Reloading the candidate list
&lt;/h3&gt;&lt;p&gt;By binding &lt;code&gt;reload&lt;/code&gt; action to a key or an event, you can make fzf dynamically
reload the candidate list. See &lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf/issues/1750&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/junegunn/fzf/issues/1750&lt;/a&gt; for
more details.&lt;/p&gt;
&lt;h4 id=&#34;1-update-the-list-of-processes-by-pressing-ctrl-r&#34;&gt;1. Update the list of processes by pressing CTRL-R
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps -ef &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  fzf --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;ctrl-r:reload(ps -ef)&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      --header &lt;span class=&#34;s1&#34;&gt;&amp;#39;Press CTRL-R to reload&amp;#39;&lt;/span&gt; --header-lines&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      --height&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;50% --layout&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;reverse
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;2-switch-between-sources-by-pressing-ctrl-d-or-ctrl-f&#34;&gt;2. Switch between sources by pressing CTRL-D or CTRL-F
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FZF_DEFAULT_COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;find . -type f&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  fzf --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;ctrl-d:reload(find . -type d),ctrl-f:reload(eval &amp;#34;$FZF_DEFAULT_COMMAND&amp;#34;)&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      --height&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;50% --layout&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;reverse
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;3-interactive-ripgrep-integration&#34;&gt;3. Interactive ripgrep integration
&lt;/h4&gt;&lt;p&gt;The following example uses fzf as the selector interface for ripgrep. We bound
&lt;code&gt;reload&lt;/code&gt; action to &lt;code&gt;change&lt;/code&gt; event, so every time you type on fzf, the ripgrep
process will restart with the updated query string denoted by the placeholder
expression &lt;code&gt;{q}&lt;/code&gt;. Also, note that we used &lt;code&gt;--disabled&lt;/code&gt; option so that fzf
doesn&amp;rsquo;t perform any secondary filtering.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;: &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;rg_prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;rg --column --line-number --no-heading --color=always --smart-case&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    fzf --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;start:reload:$rg_prefix &amp;#34;&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;change:reload:$rg_prefix {q} || true&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;enter:become(vim {1} +{2})&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --ansi --disabled &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --height&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;50% --layout&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;reverse
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If ripgrep doesn&amp;rsquo;t find any matches, it will exit with a non-zero exit status,
and fzf will warn you about it. To suppress the warning message, we added
&lt;code&gt;|| true&lt;/code&gt; to the command, so that it always exits with 0.&lt;/p&gt;
&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf/blob/master/ADVANCED.md#using-fzf-as-interactive-ripgrep-launcher&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&amp;ldquo;Using fzf as interactive Ripgrep launcher&amp;rdquo;&lt;/a&gt;
for more sophisticated examples.&lt;/p&gt;
&lt;h3 id=&#34;preview-window&#34;&gt;Preview window
&lt;/h3&gt;&lt;p&gt;When the &lt;code&gt;--preview&lt;/code&gt; option is set, fzf automatically starts an external process
with the current line as the argument and shows the result in the split window.
Your &lt;code&gt;$SHELL&lt;/code&gt; is used to execute the command with &lt;code&gt;$SHELL -c COMMAND&lt;/code&gt;.
The window can be scrolled using the mouse or custom key bindings.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# {} is replaced with the single-quoted string of the focused line&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --preview &lt;span class=&#34;s1&#34;&gt;&amp;#39;cat {}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Preview window supports ANSI colors, so you can use any program that
syntax-highlights the content of a file, such as
&lt;a class=&#34;link&#34; href=&#34;https://github.com/sharkdp/bat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bat&lt;/a&gt; or
&lt;a class=&#34;link&#34; href=&#34;https://gitlab.com/saalen/highlight&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Highlight&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --preview &lt;span class=&#34;s1&#34;&gt;&amp;#39;bat --color=always {}&amp;#39;&lt;/span&gt; --preview-window &lt;span class=&#34;s1&#34;&gt;&amp;#39;~3&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You can customize the size, position, and border of the preview window using
&lt;code&gt;--preview-window&lt;/code&gt; option, and the foreground and background color of it with
&lt;code&gt;--color&lt;/code&gt; option. For example,&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --height 40% --layout reverse --info inline --border &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --preview &lt;span class=&#34;s1&#34;&gt;&amp;#39;file {}&amp;#39;&lt;/span&gt; --preview-window up,1,border-horizontal &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --bind &lt;span class=&#34;s1&#34;&gt;&amp;#39;ctrl-/:change-preview-window(50%|hidden|)&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --color &lt;span class=&#34;s1&#34;&gt;&amp;#39;fg:#bbccdd,fg+:#ddeeff,bg:#334455,preview-bg:#223344,border:#778899&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;See the man page (&lt;code&gt;man fzf&lt;/code&gt;) for the full list of options.&lt;/p&gt;
&lt;p&gt;More advanced examples can be found &lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf/blob/master/ADVANCED.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
Since fzf is a general-purpose text filter rather than a file finder, &lt;strong&gt;it is
not a good idea to add &lt;code&gt;--preview&lt;/code&gt; option to your &lt;code&gt;$FZF_DEFAULT_OPTS&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# *********************&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ** DO NOT DO THIS! **&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# *********************&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_DEFAULT_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--preview &amp;#34;bat --style=numbers --color=always --line-range :500 {}&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bat doesn&amp;#39;t work with any input other than the list of files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps -ef &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seq &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;history&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;previewing-an-image&#34;&gt;Previewing an image
&lt;/h3&gt;&lt;p&gt;fzf can display images in the preview window using one of the following protocols:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://sw.kovidgoyal.net/kitty/graphics-protocol/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Kitty graphics protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://iterm2.com/documentation-images.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;iTerm2 inline images protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Sixel&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Sixel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;bin/fzf-preview.sh&#34; &gt;bin/fzf-preview.sh&lt;/a&gt; script for more information.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf --preview &lt;span class=&#34;s1&#34;&gt;&amp;#39;fzf-preview.sh {}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;tips&#34;&gt;Tips
&lt;/h2&gt;&lt;h3 id=&#34;respecting-gitignore&#34;&gt;Respecting &lt;code&gt;.gitignore&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;You can use &lt;a class=&#34;link&#34; href=&#34;https://github.com/sharkdp/fd&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;fd&lt;/a&gt;,
&lt;a class=&#34;link&#34; href=&#34;https://github.com/BurntSushi/ripgrep&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ripgrep&lt;/a&gt;, or &lt;a class=&#34;link&#34; href=&#34;https://github.com/ggreer/the_silver_searcher&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;the silver
searcher&lt;/a&gt; to traverse the file
system while respecting &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Feed the output of fd into fzf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fd --type f --strip-cwd-prefix &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Setting fd as the default source for fzf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_DEFAULT_COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fd --type f --strip-cwd-prefix&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Now fzf (w/o pipe) will use the fd command to generate the list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fzf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# To apply the command to CTRL-T as well&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_CTRL_T_COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$FZF_DEFAULT_COMMAND&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you want the command to follow symbolic links and don&amp;rsquo;t want it to exclude
hidden files, use the following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;FZF_DEFAULT_COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fd --type f --strip-cwd-prefix --hidden --follow --exclude .git&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;fish-shell&#34;&gt;Fish shell
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;CTRL-T&lt;/code&gt; key binding of fish, unlike those of bash and zsh, will use the last
token on the command-line as the root directory for the recursive search. For
instance, hitting &lt;code&gt;CTRL-T&lt;/code&gt; at the end of the following command-line&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls /var/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;will list all files and directories under &lt;code&gt;/var/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When using a custom &lt;code&gt;FZF_CTRL_T_COMMAND&lt;/code&gt;, use the unexpanded &lt;code&gt;$dir&lt;/code&gt; variable to
make use of this feature. &lt;code&gt;$dir&lt;/code&gt; defaults to &lt;code&gt;.&lt;/code&gt; when the last token is not a
valid directory. Example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g FZF_CTRL_T_COMMAND &lt;span class=&#34;s2&#34;&gt;&amp;#34;command find -L \$dir -type f 2&amp;gt; /dev/null | sed &amp;#39;1d; s#^\./##&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;fzf-theme-playground&#34;&gt;fzf Theme Playground
&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://vitormv.github.io/fzf-themes/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;fzf Theme Playground&lt;/a&gt; created by
&lt;a class=&#34;link&#34; href=&#34;https://github.com/vitormv&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Vitor Mello&lt;/a&gt; is a webpage where you can
interactively create fzf themes.&lt;/p&gt;
&lt;h2 id=&#34;related-projects&#34;&gt;Related projects
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf/wiki/Related-projects&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/junegunn/fzf/wiki/Related-projects&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;LICENSE&#34; &gt;License&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;The MIT License (MIT)&lt;/p&gt;
&lt;p&gt;Copyright (c) 2013-2025 Junegunn Choi&lt;/p&gt;
&lt;h2 id=&#34;sponsors-heart&#34;&gt;Sponsors :heart:
&lt;/h2&gt;&lt;p&gt;I would like to thank all the sponsors of this project who make it possible for me to continue to improve fzf.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to sponsor this project, please visit &lt;a class=&#34;link&#34; href=&#34;https://github.com/sponsors/junegunn&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/sponsors/junegunn&lt;/a&gt;.&lt;/p&gt;
&lt;!-- sponsors --&gt;&lt;a href=&#34;https://github.com/miyanokomiya&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;miyanokomiya.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: miyanokomiya&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/jonhoo&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jonhoo.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Jon Gjengset&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/AceofSpades5757&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;AceofSpades5757.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Kyle L. Davis&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/Frederick888&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;Frederick888.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Frederick Zhang&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/moritzdietz&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;moritzdietz.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Moritz Dietz&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/pldubouilh&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;pldubouilh.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Pierre Dubouilh&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/trantor&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;trantor.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Fulvio Scapin&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/rcorre&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rcorre.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Ryan Roden-Corrent&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/blissdev&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;blissdev.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Jordan Arentsen&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/aexvir&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;aexvir.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Alex Viscreanu&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/dbalatero&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;dbalatero.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: David Balatero&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/moobar&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;moobar.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: &#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/benelan&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;benelan.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Ben Elan&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/pawelduda&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;pawelduda.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Paweł Duda&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/pyrho&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;pyrho.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Damien Rajon&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/ArtBIT&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;ArtBIT.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: ArtBIT&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/da-moon&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;da-moon.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: &#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/hovissimo&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;hovissimo.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Hovis&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/dariusjonda&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;dariusjonda.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Darius Jonda&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/cristiand391&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;cristiand391.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Cristian Dominguez&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/eliangcs&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;eliangcs.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Chang-Hung Liang&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/asphaltbuffet&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;asphaltbuffet.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Ben Lechlitner&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/kg8m&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;kg8m.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Takumi KAGIYAMA&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/polm&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;polm.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Paul OLeary McCann&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/rbeeger&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rbeeger.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Robert Beeger&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/scalisi&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;scalisi.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Josh Scalisi&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/alecbcs&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;alecbcs.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Alec Scott&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/artursapek&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;artursapek.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Artur Sapek&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/ramnes&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;ramnes.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Guillaume Gelin&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/jyc&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jyc.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: &#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/roblevy&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;roblevy.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Rob Levy&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/glozow&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;glozow.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Gloria Zhao&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/toupeira&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;toupeira.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Markus Koller&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/rkpatel33&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rkpatel33.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: &#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/jamesob&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jamesob.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: jamesob&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/jlebray&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jlebray.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Johan Le Bray&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/panosl1&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;panosl1.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Panos Lampropoulos&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/bespinian&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;bespinian.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: bespinian&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/scosu&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;scosu.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Markus Schneider-Pargmann&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/smithbm2316&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;smithbm2316.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Ben Smith&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/charlieegan3&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;charlieegan3.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Charlie Egan&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/thobbs&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;thobbs.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Tyler Hobbs&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/neilparikh&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;neilparikh.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Neil Parikh&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/shkm&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;shkm.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Jamie Schembri&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/BasedScience&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;BasedScience.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: dockien&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/RussellGilmore&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;RussellGilmore.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Russell Gilmore&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/meribold&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;meribold.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Lukas Waymann&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/terminaldweller&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;terminaldweller.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Farzad Sadeghi&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/jaydee-coder&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jaydee-coder.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: &#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/brpaz&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;brpaz.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Bruno Paz&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/timobenn&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;timobenn.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Timothy Bennett&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/danhorner&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;danhorner.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Daniel Horner&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/syeo66&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;syeo66.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Red Ochsenbein&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/nekhaevskiy&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;nekhaevskiy.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Yury&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/lajarre&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;lajarre.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: &#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/vidhatre&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;vidhatre.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Vidhatre Gathey&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/NightsPaladin&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;NightsPaladin.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Chris G.&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/lzell&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;lzell.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Lou Zell&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/3ximus&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;3ximus.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Fabio&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/bladeacer&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;bladeacer.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: &#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/tylerdak&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;tylerdak.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Tyler Dakin&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/justinlubin&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;justinlubin.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Justin Lubin&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://github.com/gpoma&#34;&gt;&lt;img src=&#34;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;gpoma.png&#34; width=&#34;60px&#34; alt=&#34;User avatar: Gabriel&#34; /&gt;&lt;/a&gt;&lt;!-- sponsors --&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://jb.gg/OpenSourceSupport&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;JetBrains logo.&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;JetBrains supports this project with an Open Source Development License.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>nexus-cli</title>
        <link>https://producthunt.programnotes.cn/en/p/nexus-cli/</link>
        <pubDate>Fri, 27 Jun 2025 15:30:32 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/nexus-cli/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1679365132923-8880aebede7b?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTEwMDkzNTV8&amp;ixlib=rb-4.1.0" alt="Featured image of post nexus-cli" /&gt;&lt;h1 id=&#34;nexus-xyznexus-cli&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/nexus-xyz/nexus-cli&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;nexus-xyz/nexus-cli&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/nexus-xyz/nexus-cli/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/github/v/release/nexus-xyz/nexus-cli.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Release&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/nexus-xyz/nexus-cli/actions&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://github.com/nexus-xyz/nexus-cli/actions/workflows/ci.yml/badge.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;CI&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/nexus-xyz/nexus-cli/blob/main/LICENSE-APACHE&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/License-Apache_2.0-green.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;License&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/nexus-xyz/nexus-cli/blob/main/LICENSE-MIT&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/License-MIT-green.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;License&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;nexus-cli&#34;&gt;Nexus CLI
&lt;/h1&gt;&lt;p&gt;A high-performance command-line interface for contributing proofs to the Nexus network.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&#34;https://beta.nexus.xyz/&#34;&gt;
        &lt;img src=&#34;assets/images/nexus-network-image.png&#34; alt=&#34;Nexus Network visualization showing a distributed network of interconnected nodes with a &#39;Launch Network&#39; button in the center&#34;&gt;
    &lt;/a&gt;
    &lt;figcaption&gt;
        &lt;strong&gt;Verifiable Computation on a Global Scale&lt;/strong&gt;&lt;br&gt;
        We&#39;re building a global distributed prover network to unite the world&#39;s computers and power a new and better Internet: the Verifiable Internet. Connect to the beta and give it a try today.
    &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&#34;nexus-network&#34;&gt;Nexus Network
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://nexus.xyz/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Nexus&lt;/a&gt; is a global distributed prover network that unites the world&amp;rsquo;s computers to power a new and
better Internet: the Verifiable Internet.&lt;/p&gt;
&lt;p&gt;There have been several testnets so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Testnet 0: &lt;a class=&#34;link&#34; href=&#34;https://blog.nexus.xyz/nexus-launches-worlds-first-open-prover-network/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;October 8 – 28, 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Testnet I: &lt;a class=&#34;link&#34; href=&#34;https://blog.nexus.xyz/the-new-nexus-testnet-is-live/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;December 9 – 13, 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Testnet II: &lt;a class=&#34;link&#34; href=&#34;https://blog.nexus.xyz/testnet-ii-is-open/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;February 18 – 22, 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Devnet: February 22 - June 20 2025&lt;/li&gt;
&lt;li&gt;Testnet III: &lt;a class=&#34;link&#34; href=&#34;https://blog.nexus.xyz/live-everywhere/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ongoing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start
&lt;/h2&gt;&lt;h3 id=&#34;installation&#34;&gt;Installation
&lt;/h3&gt;&lt;h4 id=&#34;precompiled-binary-recommended&#34;&gt;Precompiled Binary (Recommended)
&lt;/h4&gt;&lt;p&gt;For the simplest and most reliable installation:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://cli.nexus.xyz/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This will:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download and install the latest precompiled binary for your platform.&lt;/li&gt;
&lt;li&gt;Prompt you to accept the Terms of Use.&lt;/li&gt;
&lt;li&gt;Start the CLI in interactive mode.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The exact installation script is viewable &lt;a class=&#34;link&#34; href=&#34;./public/install.sh&#34; &gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;non-interactive-installation&#34;&gt;Non-Interactive Installation
&lt;/h4&gt;&lt;p&gt;For automated installations (e.g., in CI):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -sSf https://cli.nexus.xyz/ -o install.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x install.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NONINTERACTIVE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; ./install.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;proving&#34;&gt;Proving
&lt;/h3&gt;&lt;p&gt;Proving with the CLI is documented &lt;a class=&#34;link&#34; href=&#34;https://docs.nexus.xyz/layer-1/testnet/cli-node&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To start with an existing node ID, run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nexus-cli start --node-id &amp;lt;your-node-id&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Alternatively, you can register your wallet address and create a node ID with the CLI, or at at &lt;a class=&#34;link&#34; href=&#34;https://app.nexus.xyz&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;app.nexus.xyz&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nexus-cli register-user --wallet-address &amp;lt;your-wallet-address&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nexus-cli register-node
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nexus-cli start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The &lt;code&gt;register-user&lt;/code&gt; and &lt;code&gt;register-node&lt;/code&gt; commands will save your credentials to &lt;code&gt;~/.nexus/config.json&lt;/code&gt;. To clear credentials, run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nexus-cli &lt;span class=&#34;nb&#34;&gt;logout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For troubleshooting or to see available command line options, run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nexus-cli --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;terms-of-use&#34;&gt;Terms of Use
&lt;/h2&gt;&lt;p&gt;Use of the CLI is subject to the &lt;a class=&#34;link&#34; href=&#34;https://nexus.xyz/terms-of-use&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Terms of Use&lt;/a&gt;.
First-time users running interactively will be prompted to accept these terms.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;node-id&#34;&gt;Node ID
&lt;/h2&gt;&lt;p&gt;During the CLI&amp;rsquo;s startup, you&amp;rsquo;ll be asked for your node ID. To skip prompts in a
non-interactive environment, manually create a &lt;code&gt;~/.nexus/config.json&lt;/code&gt; in the
following format:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;#34;node_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;YOUR NODE ID&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;current-limitations&#34;&gt;Current Limitations
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;To submit programs to the network for proving, contact
&lt;a class=&#34;link&#34; href=&#34;mailto:growth@nexus.xyz&#34; &gt;growth@nexus.xyz&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;get-help&#34;&gt;Get Help
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.nexus.xyz/layer-1/network-devnet/faq&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Network FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://discord.gg/nexus-xyz&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Discord Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Technical issues? &lt;a class=&#34;link&#34; href=&#34;https://github.com/nexus-xyz/nexus-cli/issues&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Open an issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;contributing&#34;&gt;Contributing
&lt;/h2&gt;&lt;p&gt;Interested in contributing to the Nexus Network CLI? Check out our
&lt;a class=&#34;link&#34; href=&#34;./CONTRIBUTING.md&#34; &gt;Contributor Guide&lt;/a&gt; for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Development setup instructions&lt;/li&gt;
&lt;li&gt;How to report issues and submit pull requests&lt;/li&gt;
&lt;li&gt;Our code of conduct and community guidelines&lt;/li&gt;
&lt;li&gt;Tips for working with the codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For most users, we recommend using the precompiled binaries as described above.
The contributor guide is intended for those who want to modify or improve the CLI
itself.&lt;/p&gt;
&lt;h3 id=&#34;--developer-guide&#34;&gt;🛠  Developer Guide
&lt;/h3&gt;&lt;p&gt;The following steps may be required in order to setup a development environment for contributing to the project:&lt;/p&gt;
&lt;h4 id=&#34;linux&#34;&gt;Linux
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install build-essential pkg-config libssl-dev git-all
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install protobuf-compiler
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;macos&#34;&gt;macOS
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install using Homebrew&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install protobuf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Verify installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;protoc --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;windows&#34;&gt;Windows
&lt;/h4&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/windows/wsl/install&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Install WSL&lt;/a&gt;,
then see Linux instructions above.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install using Chocolatey&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;choco install protobuf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;building-protobuf-files&#34;&gt;Building ProtoBuf files
&lt;/h3&gt;&lt;p&gt;To build the ProtoBuf files, run the following command in the &lt;code&gt;clients/cli&lt;/code&gt; directory:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo build --features build_proto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;creating-a-release&#34;&gt;Creating a Release
&lt;/h3&gt;&lt;p&gt;To create a release, update the package version in &lt;code&gt;Cargo.toml&lt;/code&gt;, then create and push a new (annotated) tag, e.g.:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git tag -a v0.1.2 -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;Release v0.1.2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin v0.1.2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This will trigger the GitHub Actions release workflow that compiles binaries and pushes the Docker image, in
addition to creating release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;: Creating a release through the GitHub UI creates a new release but does &lt;strong&gt;NOT&lt;/strong&gt; trigger
the workflow. This leads to a release without a Docker image or binaries, which breaks the installation script.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>WSL</title>
        <link>https://producthunt.programnotes.cn/en/p/wsl/</link>
        <pubDate>Fri, 23 May 2025 15:28:31 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/wsl/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1557380664-dd666ff4e559?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NDc5ODUyNzh8&amp;ixlib=rb-4.1.0" alt="Featured image of post WSL" /&gt;&lt;h1 id=&#34;microsoftwsl&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/WSL&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;microsoft/WSL&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;welcome-to-the-windows-subsystem-for-linux-wsl-repository&#34;&gt;Welcome to the Windows Subsystem for Linux (WSL) repository
&lt;/h1&gt;&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;./Images/Square44x44Logo.targetsize-256.png&#34; alt=&#34;WSL logo&#34;/&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://aka.ms/wsldocs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Learn more about WSL&lt;/a&gt; | &lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/WSL/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Downloads &amp;amp; Release notes&lt;/a&gt; | &lt;a class=&#34;link&#34; href=&#34;./CONTRIBUTING.md&#34; &gt;Contributing to WSL&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;about&#34;&gt;About
&lt;/h2&gt;&lt;p&gt;Windows Subsystem for Linux (WSL) is a powerful way for you to run your Linux command-line tools, utilities and applications, all unmodified and directly on Windows without the overhead of a traditional virtual machine or dual boot setup.&lt;/p&gt;
&lt;p&gt;You can install WSL right away by running this command inside of your Windows command line:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;wsl&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;-install&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You can learn more about &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/windows/wsl/setup/environment&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;best practices for setup&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/windows/wsl/about&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;overviews of WSL&lt;/a&gt; and more at our &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/windows/wsl/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;WSL documentation page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;related-repositories&#34;&gt;Related repositories
&lt;/h2&gt;&lt;p&gt;WSL also has related open source repositories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/WSL2-Linux-Kernel&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;microsoft/WSL2-Linux-Kernel&lt;/a&gt; - The Linux kernel shipped with WSL&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/wslg&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;microsoft/WSLg&lt;/a&gt; - Support for Linux GUI apps in WSL&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoftdocs/wsl&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;microsoftdocs/wsl&lt;/a&gt; - WSL documentation at aka.ms/wsldocs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;contributing&#34;&gt;Contributing
&lt;/h2&gt;&lt;p&gt;This project welcomes contributions of all types, including coding features / bug fixes, documentation fixes, design proposals and more.&lt;/p&gt;
&lt;p&gt;We ask that before you start working on a contribution, please read our &lt;a class=&#34;link&#34; href=&#34;./CONTRIBUTING.md&#34; &gt;Contributor&amp;rsquo;s Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For guidance on developing for WSL, please read the &lt;a class=&#34;link&#34; href=&#34;./doc/docs/dev-loop.md&#34; &gt;developer docs&lt;/a&gt; for instructions on how to build WSL from source and details on its architecture.&lt;/p&gt;
&lt;h2 id=&#34;code-of-conduct&#34;&gt;Code of Conduct
&lt;/h2&gt;&lt;p&gt;This project has adopted the &lt;a class=&#34;link&#34; href=&#34;./CODE_OF_CONDUCT.md&#34; &gt;Microsoft Open Source Code of Conduct&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;trademarks&#34;&gt;Trademarks
&lt;/h2&gt;&lt;p&gt;This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow &lt;a class=&#34;link&#34; href=&#34;https://www.microsoft.com/legal/intellectualproperty/trademarks&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Microsoft’s Trademark &amp;amp; Brand Guidelines&lt;/a&gt;. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party’s policies.&lt;/p&gt;
&lt;h2 id=&#34;privacy-and-telemetry&#34;&gt;Privacy and telemetry
&lt;/h2&gt;&lt;p&gt;The application logs basic diagnostic data (telemetry). For more information on privacy and what we collect, see our &lt;a class=&#34;link&#34; href=&#34;DATA_AND_PRIVACY.md&#34; &gt;data and privacy documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The software may collect information about you and your use of the software and send it to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may turn off the telemetry as described in the repository. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with a copy of Microsoft’s privacy statement. Our privacy statement is located at &lt;a class=&#34;link&#34; href=&#34;https://go.microsoft.com/fwlink/?LinkID=824704&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://go.microsoft.com/fwlink/?LinkID=824704&lt;/a&gt;. You can learn more about data collection and use in the help documentation and our privacy statement. Your use of the software operates as your consent to these practices.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>douyin-downloader</title>
        <link>https://producthunt.programnotes.cn/en/p/douyin-downloader/</link>
        <pubDate>Sat, 12 Apr 2025 15:24:42 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/douyin-downloader/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1727452166441-d1d8de08f041?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NDQ0NDI2NzR8&amp;ixlib=rb-4.0.3" alt="Featured image of post douyin-downloader" /&gt;&lt;h1 id=&#34;jiji262douyin-downloader&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/jiji262/douyin-downloader&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;jiji262/douyin-downloader&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;douyin-downloader&#34;&gt;DouYin Downloader
&lt;/h1&gt;&lt;p&gt;DouYin Downloader 是一个用于批量下载抖音内容的工具。基于抖音 API 实现，支持命令行参数或 YAML 配置文件方式运行，可满足大部分抖音内容的下载需求。&lt;/p&gt;
&lt;h2 id=&#34;-特性&#34;&gt;✨ 特性
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多种内容支持&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;视频、图集、音乐、直播信息下载&lt;/li&gt;
&lt;li&gt;支持个人主页、作品分享、直播、合集、音乐集合等多种链接&lt;/li&gt;
&lt;li&gt;支持去水印下载&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;批量下载能力&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多线程并发下载&lt;/li&gt;
&lt;li&gt;支持多链接批量下载&lt;/li&gt;
&lt;li&gt;自动跳过已下载内容&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;灵活配置&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持命令行参数和配置文件两种方式&lt;/li&gt;
&lt;li&gt;可自定义下载路径、线程数等&lt;/li&gt;
&lt;li&gt;支持下载数量限制&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;增量更新&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持主页作品增量更新&lt;/li&gt;
&lt;li&gt;支持数据持久化到数据库&lt;/li&gt;
&lt;li&gt;可根据时间范围过滤&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-快速开始&#34;&gt;🚀 快速开始
&lt;/h2&gt;&lt;h3 id=&#34;安装&#34;&gt;安装
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;安装 Python 依赖：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;复制配置文件：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp config.example.yml config.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;配置&#34;&gt;配置
&lt;/h3&gt;&lt;p&gt;编辑 &lt;code&gt;config.yml&lt;/code&gt; 文件，设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;下载链接&lt;/li&gt;
&lt;li&gt;保存路径&lt;/li&gt;
&lt;li&gt;Cookie 信息（从浏览器开发者工具获取）&lt;/li&gt;
&lt;li&gt;其他下载选项&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;运行&#34;&gt;运行
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;方式一：使用配置文件（推荐）&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python DouYinCommand.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;方式二：使用命令行&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python DouYinCommand.py -C True -l &lt;span class=&#34;s2&#34;&gt;&amp;#34;抖音分享链接&amp;#34;&lt;/span&gt; -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;下载路径&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;使用交流群&#34;&gt;使用交流群
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://producthunt.programnotes.cn/img/fuye.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;fuye&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;使用截图&#34;&gt;使用截图
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://producthunt.programnotes.cn/img/DouYinCommand1.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;DouYinCommand1&#34;
	
	
&gt;
&lt;img src=&#34;https://producthunt.programnotes.cn/img/DouYinCommand2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;DouYinCommand2&#34;
	
	
&gt;
&lt;img src=&#34;https://producthunt.programnotes.cn/img/DouYinCommanddownload.jpg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;DouYinCommand download&#34;
	
	
&gt;
&lt;img src=&#34;https://producthunt.programnotes.cn/img/DouYinCommanddownloaddetail.jpg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;DouYinCommand download detail&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;-支持的链接类型&#34;&gt;📝 支持的链接类型
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;作品分享链接：&lt;code&gt;https://v.douyin.com/xxx/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;个人主页：&lt;code&gt;https://www.douyin.com/user/xxx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;单个视频：&lt;code&gt;https://www.douyin.com/video/xxx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;图集：&lt;code&gt;https://www.douyin.com/note/xxx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;合集：&lt;code&gt;https://www.douyin.com/collection/xxx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;音乐原声：&lt;code&gt;https://www.douyin.com/music/xxx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;直播：&lt;code&gt;https://live.douyin.com/xxx&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-高级用法&#34;&gt;🛠️ 高级用法
&lt;/h2&gt;&lt;h3 id=&#34;命令行参数&#34;&gt;命令行参数
&lt;/h3&gt;&lt;p&gt;基础参数：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-C, --cmd            使用命令行模式
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-l, --link          下载链接
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p, --path          保存路径
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-t, --thread        线程数（默认5）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;下载选项：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-m, --music         下载音乐（默认True）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-c, --cover         下载封面（默认True）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-a, --avatar        下载头像（默认True）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-j, --json          保存JSON数据（默认True）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;更多参数说明请使用 &lt;code&gt;-h&lt;/code&gt; 查看帮助信息。&lt;/p&gt;
&lt;h3 id=&#34;示例命令&#34;&gt;示例命令
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;下载单个视频：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python DouYinCommand.py -C True -l &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://v.douyin.com/xxx/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;下载主页作品：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python DouYinCommand.py -C True -l &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://v.douyin.com/xxx/&amp;#34;&lt;/span&gt; -M post
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;批量下载：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python DouYinCommand.py -C True -l &lt;span class=&#34;s2&#34;&gt;&amp;#34;链接1&amp;#34;&lt;/span&gt; -l &lt;span class=&#34;s2&#34;&gt;&amp;#34;链接2&amp;#34;&lt;/span&gt; -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;./downloads&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;更多示例请参考&lt;a class=&#34;link&#34; href=&#34;docs/examples.md&#34; &gt;使用示例文档&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;-注意事项&#34;&gt;📋 注意事项
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;本项目仅供学习交流使用&lt;/li&gt;
&lt;li&gt;使用前请确保已安装所需依赖&lt;/li&gt;
&lt;li&gt;Cookie 信息需要自行获取&lt;/li&gt;
&lt;li&gt;建议适当调整线程数，避免请求过于频繁&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;-贡献&#34;&gt;🤝 贡献
&lt;/h2&gt;&lt;p&gt;欢迎提交 Issue 和 Pull Request。&lt;/p&gt;
&lt;h2 id=&#34;-许可证&#34;&gt;📜 许可证
&lt;/h2&gt;&lt;p&gt;本项目采用 &lt;a class=&#34;link&#34; href=&#34;LICENSE&#34; &gt;MIT&lt;/a&gt; 许可证。&lt;/p&gt;
&lt;h2 id=&#34;-鸣谢&#34;&gt;🙏 鸣谢
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Johnserf-Seed/TikTokDownload&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;TikTokDownload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;本项目使用了 ChatGPT 辅助开发，如有问题请提 Issue&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-star-history&#34;&gt;📊 Star History
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://star-history.com/#jiji262/douyin-downloader&amp;amp;Date&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://api.star-history.com/svg?repos=jiji262/douyin-downloader&amp;amp;type=Date&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Star History Chart&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;license&#34;&gt;License
&lt;/h1&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://opensource.org/licenses/MIT&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MIT&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
