Eza: ein moderner und gepflegter ls-Ersatz
(github.com/eza-community)- eza ist ein modernes CLI-Tool als Ersatz für den Unix/Linux-Befehl
lszum Auflisten von Dateien und soll mehr Funktionen sowie bessere Standardeinstellungen bieten - Es unterscheidet Dateitypen und Metadaten per Farbe, erkennt symbolische Links, erweiterte Attribute und Git-Informationen und wird als kleine, schnelle Einzel-Binary bereitgestellt
- Gegenüber dem bisherigen
exawurden Korrekturen für den Grid Bug, Hyperlinks, Details zu Mount Points, SELinux-Kontexte, Git-Repository-Status, menschenlesbare relative Datumsangaben, Sicherheitskorrekturen,bright-Terminalfarben und die Konfiguration übertheme.ymlhinzugefügt - Es lässt sich unter Windows, macOS und Linux installieren; in Nix-flake-Umgebungen kann es mit
nix run github:eza-community/ezagebaut und ausgeführt werden - Das Optionsschema ist nicht vollständig identisch mit
ls; über Anzeige-, Filter-, Long-Listing- und Theme-Einstellungen lässt sich die Ausgabe von Dateilisten fein anpassen
Die ls-Ersatz-Erfahrung, die eza bietet
- eza ist eine moderne Alternative zum alten Dateilisten-Befehl
ls, der in Unix- und Linux-Betriebssystemen enthalten ist - Das grundlegende Ziel ist, eine funktionsreichere und benutzerfreundlichere Version als
lsbereitzustellen - Dateitypen und Metadaten werden farblich unterschieden
- Symbolische Links, erweiterte Attribute und Git-Informationen werden erkannt
- Es ist klein, schnell und wird als Einzel-Binary bereitgestellt
Zusätzliche Funktionen gegenüber exa
- eza enthält zahlreiche Funktionen, die es in
exanicht gab- Korrektur von „The Grid Bug“, der in
exa2021 eingeführt wurde - Unterstützung für Hyperlinks
- Ausgabe von Details zu Mount Points
- Ausgabe von SELinux-Kontexten
- Ausgabe des Git-Repository-Status
- Menschenlesbare relative Datumsangaben
- Mehrere Sicherheitskorrekturen
- Unterstützung für
bright-Terminalfarben - Kleinere Bugfixes und Änderungen
- Konfigurationsdatei
theme.ymlzum Anpassen von Farben und Icons
- Korrektur von „The Grid Bug“, der in
Ausführung und Installation
- In Umgebungen mit Nix-flake-Unterstützung kann eza mit folgendem Befehl ausprobiert werden
nix run github:eza-community/eza
- Nix baut eza und führt es anschließend aus
- Um Argumente zu übergeben, werden die Optionen wie folgt nach
--angehängtnix run github:eza-community/eza -- -ol
- eza ist für Windows, macOS und Linux verfügbar
- Installationsanleitungen nach Plattform und Distribution finden sich in INSTALL.md
Aufbau der Kommandozeilenoptionen
- Die Optionen von eza sind denen von
lssehr ähnlich, aber nicht vollständig identisch -
Anzeigeoptionen
-1,--oneline: ein Eintrag pro Zeile-G,--grid: Einträge als Grid anzeigen; dies ist der Standard-l,--long: erweiterte Details und Attribute anzeigen-R,--recurse: Verzeichnisse rekursiv durchsuchen-T,--tree: Verzeichnisse rekursiv als Baum anzeigen-F,--classify=(when): Typindikator neben Dateinamen ausgeben--colour=(when),--color=(when): festlegen, wann Terminalfarben verwendet werden--icons=(when): festlegen, wann Icons angezeigt werden--hyperlink=(when): festlegen, wann Einträge als Hyperlinks angezeigt werden--absolute=(mode): festlegen, wie absolute Pfade von Einträgen angezeigt werden
-
Filteroptionen
-a,--all: versteckte Dateien und Dotfiles anzeigen-d,--treat-dirs-as-files: Verzeichnisse wie normale Dateien auflisten-L,--level=(depth): Rekursionstiefe begrenzen-s,--sort=(field): Sortierfeld festlegen--group-directories-first: Verzeichnisse zuerst anzeigen--group-directories-last: Verzeichnisse zuletzt anzeigen-D,--only-dirs: nur Verzeichnisse anzeigen-f,--only-files: nur Dateien anzeigen--git-ignore: Dateien aus.gitignoreignorieren-I,--ignore-glob=(globs): Dateien ignorieren, die zu durch Pipes getrennten Glob-Mustern passen- Wenn
--allzweimal übergeben wird, werden auch die Verzeichnisse.und..angezeigt
Lange Listen und Git-bezogene Informationen
- Bei Verwendung von
--longoder-lstehen Long-Listing-Optionen zur Verfügung - Es werden Optionen für Dateigröße und Berechtigungen bereitgestellt
-b,--binary: Dateigröße mit binären Präfixen anzeigen-B,--bytes: Dateigröße ohne Präfix in Byte anzeigen-o,--octal-permissions: Berechtigungen im Oktalformat anzeigen--no-permissions,--no-filesize,--no-user,--no-time: Ausgabe des jeweiligen Felds unterdrücken
- Es werden Optionen für Dateisystem und Metadaten bereitgestellt
-H,--links: Anzahl der Hardlinks anzeigen-i,--inode: inode-Nummer anzeigen-M,--mounts: Mount-Details anzeigen, nur unter Linux und macOS verfügbar-Z,--context: Sicherheitskontext anzeigen-@,--extended: erweiterte Attribute und Größe anzeigen--total-size: Größe rekursiver Verzeichnisse anzeigen
- Auch Git-bezogene Ausgaben werden unterstützt
--git: Git-Status jeder getrackten oder ignorierten Datei anzeigen--git-repos: Git-Status jedes getrackten Verzeichnisses anzeigen--git-repos-no-status: nur anzeigen, ob ein Verzeichnis ein Git-Repository ist; schneller--no-git:--git,--git-reposund--git-repos-no-statusimmer ignorieren und die Ausgabe des Git-Status unterdrücken
- Als Zeitformat werden
default,iso,long-iso,full-iso,relativeoder benutzerdefinierte Formate in der Form+<FORMAT>unterstützt- Beispiel:
+%Y-%m-%d %H:%Mgibt im Format2023-09-30 13:00aus - Details zu Format-Strings stehen in der Manual Page
eza(1)und in der chrono documentation
- Beispiel:
- Die Manual Pages sind im man-Verzeichnis des Repositorys einsehbar und seit Version
[0.18.13] - 2024-04-25auch im Terminal überman ezaverfügbar
Theme-Anpassung
- eza hat kürzlich Unterstützung für die Datei
theme.ymlhinzugefügt - In
theme.ymlkönnen die bestehenden Theme-Optionen festgelegt werden, die bislang über die UmgebungsvariablenLS_COLORSundEXA_COLORSverfügbar waren - Außerdem gibt es Optionen, um je nach Dateityp und Erweiterung unterschiedliche Icons festzulegen
- Wenn die bestehenden Umgebungsvariablen gesetzt sind, funktionieren sie aus Gründen der Abwärtskompatibilität weiterhin und haben Vorrang
- Vorgefertigte Themes können im offiziellen Repository eza-themes angesehen oder dort beigetragen werden
- Eine Beispiel-Theme-Datei befindet sich in
docs/theme.yml - Die Theme-Datei wird in dem Verzeichnis abgelegt, das über die Umgebungsvariable
EZA_CONFIG_DIRangegeben ist, oder standardmäßig unter$XDG_CONFIG_HOME/ezagesucht - Weitere Details stehen in eza_colors-explanation.5.md und docs/theme.yml
Mitwirken
- Wer zu eza beitragen möchte, muss den code of conduct befolgen
- Informationen zur praktischen Beteiligung an der Entwicklung stehen in CONTRIBUTING.md
1 Kommentare
Hacker-News-Kommentare
In Verzeichnislisten sind menschenlesbare Datumsangaben besonders störend.
Wenn ich etwas suche, das ich gestern gegen 11 Uhr morgens in einen Ordner kopiert habe, hilft es nicht, wenn überall nur „1 day ago“ steht. Ich brauche Datum und Uhrzeit, und bei Foren wie HN genauso: erst das genaue Datum/die genaue Uhrzeit anzeigen und bei Bedarf zusätzlich „7 hours ago“ anhängen.
Ich verstehe nicht, warum man absichtlich Informationen weglässt, und frage mich, ob das ein Ergebnis von endlosem Scrollen und ähnlichen Mustern ist.
Ich versuche immer, das beim Schreiben von HTML zu verwenden.
(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...)
Selbst wenn man sich ein bestimmtes Datum als den Tag nach dem Geburtstag eines Freundes merkt und etwas sucht, muss man bei einer Anzeige wie nur „three months ago“ Material aus einem ganzen Monat durchforsten.
Man sollte zuerst die genaue Zeit angeben und auf Wunsch zusätzlich „vor ein paar Tagen“ anzeigen.
Es gibt auch
lsd, aber ich bevorzuge immer noch eza.Für Interessierte: Es gibt heute moderne Kommandozeilen-Tools, die ältere Werkzeuge ersetzen.
batistcatmit Syntax-Highlighting,difftasticein besseresdiff,gduistncdufür SSDs,zoxideein modernescd,fdeine Alternative zufind,rgistripgrep,fzfein Fuzzy-Finder,jlessein JSON-Viewer mit einklappbaren Bereichen per Maus,dralädt Release-Assets herunter und installiert sie,lazygitist ein Git-TUI,lazydockerein Docker-TUI,yaziein Dateimanager mit Bildvorschau,zellijein besserestmux/screen, undstarshipist ein Tool zur Prompt-Konfiguration für mehrere Shells.taskist eine Alternative zu Makefiles,hyperfineein Benchmark-Tool,vegetaein Lasttest-Tool undsdein besseres und intuitiveressed.Außerdem gibt es ein JSON-Trio:
jqist der bekannte JSON-Prozessor,jcwandelt die Ausgabe vieler CLI-Tools in JSON um undgronmacht JSON leichter mitgrepdurchsuchbar.fdundrgstandardmäßig Einträge in.gitignoreignorieren. Wenn man sie für bloßefind-Ersatztools hält, kann das überraschend sein. Eine entsprechende Diskussion steht in [0].Wenn man solche Tools empfiehlt, sollte man das deutlich dazusagen. Ohne die Dokumentation zu lesen, übersieht man das leicht. Ich persönlich wünschte, diese alternativen Coreutils-artigen Tools würden ihre Standardwerte näher an den Originalwerkzeugen halten. Wenn man sie als „einfache, schnelle und benutzerfreundliche Alternative zu find“ bewirbt, sollte man die Original-Defaults respektieren, um neue Nutzer nicht zu überraschen. Aliasse gibt es schließlich; ich halte
alias fd='fd --ignore'in~/.${SHELL##*/}rcfür besser alsalias fd='fd --no-ignore'.Als Tipp: Wenn man die Version ohne angewendeten Alias nutzen will, kann man
\commandverwenden. Ich nutze zum Beispielalias grep='grep --color=always --no-messages --binary-files=without-match, aber die Farboption verändert die Zeichendarstellung, was bei Pipes zucurlFehler verursachen kann. Das passiert nicht in jeder Pipe, ist beim ersten Mal aber ziemlich irritierend. Mitecho "Hello world" | \grep --color=always "Hello" | hexdumpund danach!!:s^always^neverkann man das prüfen.[0] https://github.com/sharkdp/fd/issues/612
https://github.com/ibraheemdev/modern-unix
zellijbesser alsscreenist. Tabs/Fenster werden nicht ordentlich nummeriert, sodass man zum direkten Wechseln selbst zählen muss, und das ist für mich schwer hinnehmbar.GNU ls wird gepflegt. Es gab Commits, die die Datei
ls.cbetreffen, auch am 2024-06-24 und 2024-06-27, also vor weniger als einem Monat.Die Mailingliste von GNU Coreutils ist ebenfalls ziemlich aktiv. Das Projekt scheint „maintained“ im Sinn von „aktiv weiterentwickelt“ zu verwenden.
ezaein Fork ist.exawurde ungefähr ein Jahr lang nicht gepflegt, bis die einzige Person mit Schreibrechten auf das Repository es offiziell als deprecated markiert hat.Inzwischen ist seit dem Fork einige Zeit vergangen, sodass nicht mehr jeder
exakennt, und die Absicht dieser Formulierung ist dadurch viel unklarer geworden. Da es ähnliche Reaktionen gibt, ist es vielleicht Zeit, den Wortlaut zu aktualisieren.lsnicht gepflegt werde, sondern dass es sich um einen gepflegten Ersatz handelt, nämlich einen Fork des nicht mehr gepflegtenls-Ersatzesexa.Nachdem ich auf die fish-Shell umgestiegen bin, ist meine
ls-Nutzung um 100 % gesunken. Der eingebaute Befehl Alt + l zeigt den Verzeichnisinhalt an, was sehr nützlich ist, und auch der Shell-Verlauf wird dadurch saubererlszur UmgebungsvariableHISTIGNOREhinzufügen, um die History sauberer zu halten: https://superuser.com/questions/232885/can-you-share-wisdom-...ls-Nutzung eliminiert habe, lag an einer Konfiguration, die beim Verzeichniswechsel automatischlsausführtfunction ls_on_cd --on-variable PWDlsend__bash_ctrl_n()gebunden und es so eingerichtet, dass verschiedene Tools in meinen Dotfiles diese Funktionen überschreiben. Wenn zum Beispiel Git installiert ist, ist__bash_ctrl_e()so konfiguriert, dassgit statusundgit logausgeführt werdenezaauszuführen, vermutlich weil ichlsals Alias aufezagesetzt habe. Am Ende wird also einfachlsausgeführtls-Aufrufe direkt nachcdkommen. Jetzt führen fast allecd-Befehle automatischlsausIn Bash ruft die Funktion
cd()builtin cd "$@" && ls -lauf, und in fish lasse ich nachbuiltin cd $argvbei ausbleibendem Fehler und wenn nicht ins Home-Verzeichnis gewechselt wurdedirausführenTerminal-Tools, die generell Farben erzwingen, um Dateitypen oder Attribute zu unterscheiden, finde ich unangenehm. Auch das
lsvieler Distributionen ist oft so konfiguriert, aber solche Einstellungen entferne ich und verwende die StandardwerteIch nutze einen terminalfreundlichen Hintergrund, aber solche Farbschemata kollidieren immer mit dem Hintergrund oder enthalten schwer lesbare Farben. Für die Ausgabe von
lsoder seinen Alternativen brauche ich keine Farben; das, wasls -AFCliefert, reicht völlig aus[0] https://github.com/chriskempson/base16
[1] https://tinted-theming.github.io/base16-gallery/
Trotzdem sollte es eine Lösung geben, und dazu reicht es, irgendeinen Wert für
$NO_COLORzu setzen. https://no-color.orgBei Tools, die diese Umgebungsvariable nicht prüfen und respektieren, ist ein Bugreport absolut gerechtfertigt
vivid[1] verwenden, ein zum Terminalhintergrund passendes Theme auswählen und die erzeugte Variable LS_COLORS in die Shell laden[1]: https://github.com/sharkdp/vivid/
Es ist seltsam, dass im README nicht steht, dass
ezaein Fork vonexaistIch frage mich, warum so viele neue Versionen von GNU-Utilities unter der MIT-Lizenz erscheinen. Davon scheint es ziemlich viele zu geben
lsnicht erfunden. GNU coreutils einschließlichlswaren ursprünglich ebenfalls neue Versionen ehemals proprietärer AT&T-Utilities oder BSD-lizenzierter UtilitiesWarum braucht ein
ls-Ersatz Kerberos und SSH?ldd /usr/bin/ezazeigt, dass es gegen ziemlich viele Bibliotheken gelinkt ist, darunterlibgit2,libgssapi_krb5,libmbedtls,libssh2,libkrb5,libcrypto,libzstdlsersetzen soll, wirklich zu viele AbhängigkeitenAuf einer QWERTY-Tastatur ist
ezaals Dreierkombination ziemlich furchtbar. Einer der Vorteile vonlsist, dass es sich extrem schnell tippen lässtMan kann zwar einen Alias anlegen, aber das fühlt sich aus Gründen wie Kompatibilität irgendwie seltsam an
eza, davorexa, per Alias aufls,llundlll, und hatte nie KompatibilitätsproblemeIch habe auch
slinstalliert, um mich selbst darauf zu trainieren, es nicht falsch zu tippenezawie eine Verbesserung. In Dvorak istlsnach QWERTY-Mappingp-, also beides Tasten für den rechten kleinen FingerWer benutzt denn überhaupt
ls? Man drückt einfach Tab-Autovervollständigung, bis die gewünschte Datei erscheintSpaß beiseite, ich frage mich, warum behauptet wird, dass
lsnicht mehr gepflegt wirdls, sondern exa[0], das nicht mehr gepflegt wird[0]https://github.com/ogham/exa
lsweiterhin als Teil der Shell oder von coreutils gepflegtezaist allerdings ein Fork vonexa, und soweit ich weiß, wirdexanicht mehr gepflegt