Die ls Der Befehl listet Dateien auf einem POSIX-System auf. Es ist ein einfacher Befehl, der oft unterschätzt wird, nicht was er kann (weil er wirklich nur eine Sache tut), sondern wie Sie ihn optimieren können.
Von den 10 wichtigsten Terminalbefehlen, die man kennen sollte, sind die bescheidenen ls command ist unter den ersten drei, weil ls nicht nur listet Dateien auf, es gibt Ihnen wichtige Informationen über sie. Es sagt Ihnen Dinge wie wem eine Datei oder ein Verzeichnis gehört, wann jede Datei verloren gegangen ist oder geändert wurde und sogar um welche Art von Datei es sich handelt. Und dann ist da noch die Nebenfunktion, Ihnen ein Gefühl dafür zu geben, wo Sie sich befinden, welche Objekte in der Nähe herumliegen und was Sie damit machen können.
Wenn Ihre Erfahrung mit ls ist auf den Alias Ihrer Distribution in .bashrc beschränkt , dann verpasst du wahrscheinlich etwas.
GNU oder BSD?
Bevor wir uns die verborgenen Kräfte von ls ansehen , müssen Sie bestimmen, welche ls Befehl, den Sie ausführen. Die beiden beliebtesten Versionen sind die GNU-Version, die in den GNU coreutils enthalten ist Paket und die BSD-Version. Wenn Sie Linux verwenden, haben Sie wahrscheinlich ls Eingerichtet. Wenn Sie BSD oder MacOS ausführen, haben Sie die BSD-Version. Es gibt Unterschiede, denen dieser Artikel Rechnung trägt.
Welche Version sich auf Ihrem Rechner befindet, können Sie mit --version herausfinden Möglichkeit:
$ ls --version
Wenn dies Informationen über GNU-Coreutils zurückgibt, haben Sie die GNU-Version. Wenn es einen Fehler zurückgibt, verwenden Sie wahrscheinlich die BSD-Version (führen Sie man ls | head aus sicher).
Sie sollten auch untersuchen, welche Voreinstellungen Ihre Distribution möglicherweise hat. Anpassungen an Terminalbefehlen werden häufig in $HOME/.bashrc platziert oder $HOME/.bash_aliases oder $HOME/.profile , und sie werden durch Aliasing von ls erreicht zu einem komplexeren ls Befehl. Zum Beispiel:
alias ls='ls --color'
Die von Distributionen bereitgestellten Voreinstellungen sind sehr hilfreich, aber sie machen es schwierig zu erkennen, was ls ist allein tut und was seine zusätzlichen Optionen bieten. Sollten Sie jemals ls ausführen wollen und nicht den Alias, können Sie den Befehl mit einem Backslash "escapen":
$ \ls
Klassifizieren
Läuft alleine, ls listet Dateien einfach in so vielen Spalten auf, wie in Ihr Terminal passen:
$ ls ~/example
bunko jdk-10.0.2
chapterize otf2ttf.ff
despacer overtar.sh
estimate.sh pandoc-2.7.1
fop-2.3 safe_yaml
games tt
Es sind nützliche Informationen, aber alle diese Dateien sehen im Grunde gleich aus, ohne die Bequemlichkeit von Symbolen, um schnell zu vermitteln, was ein Verzeichnis, eine Textdatei, ein Bild usw. ist.
Verwenden Sie das -F (oder --classify auf GNU), um nach jedem Eintrag Indikatoren anzuzeigen, die die Art der Datei identifizieren, um die es sich handelt:
$ ls ~/example
bunko jdk-10.0.2/
chapterize* otf2ttf.ff*
despacer* overtar.sh*
estimate.sh pandoc@
fop-2.3/ pandoc-2.7.1/
games/ tt*
Mit dieser Option werden die in Ihrem Terminal aufgelisteten Elemente anhand dieser Abkürzung nach Dateityp klassifiziert:
- Ein Schrägstrich (/ ) bezeichnet ein Verzeichnis (oder "Ordner").
- Ein Sternchen (* ) bezeichnet eine ausführbare Datei. Dazu gehören eine Binärdatei (kompilierter Code) sowie Skripte (Textdateien, die eine Ausführungsberechtigung haben).
- Ein at-Zeichen (@ ) bezeichnet einen symbolischen Link (oder "Alias").
- Ein Gleichheitszeichen (= ) bezeichnet einen Socket.
- Auf BSD ist ein Prozentzeichen (% ) bezeichnet ein Whiteout (eine Methode zum Entfernen von Dateien auf bestimmten Dateisystemen).
- Bei GNU eine spitze Klammer (> ) bezeichnet eine Tür (Kommunikation zwischen Prozessen auf Illumos und Solaris).
- Ein vertikaler Balken (| ) bezeichnet einen FIFO.
Eine einfachere Version dieser Option ist -p , die nur eine Datei von einem Verzeichnis unterscheidet.
Lange Liste
Abrufen einer "langen Liste" von ls ist so verbreitet, dass viele Distributionen den Alias ll haben zu ls -l . Das lange Listenformular bietet viele wichtige Dateiattribute, wie z. B. Berechtigungen, den Benutzer, dem jede Datei gehört, die Gruppe, zu der die Datei gehört, die Dateigröße in Bytes und das Datum, an dem die Datei zuletzt geändert wurde:
$ ls -l
-rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh
-rwxrwxr-x. 1 seth users 662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users 20697793 Jun 29 2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth users 6210 May 22 10:22 geteltorito
-rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh
[...]
Wenn Sie nicht in Bytes denken, fügen Sie das -h hinzu flag (oder --human in GNU), um Dateigrößen in eine menschenfreundlichere Schreibweise zu übersetzen:
$ ls --human
-rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh
-rwxrwxr-x. 1 seth seth 662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users 20M Jun 29 2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth seth 6.1K May 22 10:22 geteltorito
-rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh
Sie können nur etwas weniger Informationen sehen, indem Sie mit -o nur die Eigentümerspalte anzeigen oder nur die Gruppenspalte mit -g :
$ ls -o
-rwxrwx---. 1 seth 455 Mar 2 2017 estimate.sh
-rwxrwxr-x. 1 seth 662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth 20M Jun 29 2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth 6.1K May 22 10:22 geteltorito
-rwxrwx---. 1 seth 177 Nov 12 2018 html4mutt.sh
Kombinieren Sie beide Optionen, um keine anzuzeigen.
Zeit- und Datumsformat
Das lange Listenformat von ls sieht normalerweise so aus:
-rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh
-rwxrwxr-x. 1 seth users 662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users 20697793 Jun 29 2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth users 6210 May 22 10:22 geteltorito
-rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh
Die Monatsnamen sind nicht einfach zu sortieren, weder rechnerisch noch (je nachdem, ob Ihr Gehirn dazu neigt, Zeichenfolgen oder ganze Zahlen zu bevorzugen) durch Erkennung. Sie können das Format des Zeitstempels mit --time-style ändern Option plus den Namen eines Formats. Verfügbare Formate sind:
- Voll-ISO (1970-01-01 21:12:00)
- long-iso (1970-01-01 21:12)
- iso (01-01 21:12)
- locale (verwendet Ihre Locale-Einstellungen)
- posix-STYLE (ersetze STYLE durch eine Locale-Definition)
Sie können auch einen benutzerdefinierten Stil erstellen, indem Sie die formale Schreibweise des Datums verwenden Befehl.
Nach Zeit sortieren
Normalerweise die ls Befehl sortiert alphabetisch. Mit dem -t können Sie die Sortierung nach der zuletzt geänderten Datei vornehmen (die neueste wird zuerst aufgeführt). Option.
Zum Beispiel:
$ touch foo bar baz
$ ls
bar baz foo
$ touch foo
$ ls -t
foo bar baz
Listentyp
Die Standardausgabe von ls gleicht Lesbarkeit mit Platzeffizienz aus, aber manchmal möchten Sie Ihre Dateiliste in einer bestimmten Anordnung.
Verwenden Sie für eine durch Kommas getrennte Liste von Dateien -m :
ls -m ~/example
bar, baz, foo
Um eine Datei pro Zeile zu erzwingen, verwenden Sie -1 Option (das ist die Nummer eins, kein kleines L):
$ ls -1 ~/bin/
bar
baz
foo
Um Einträge nach Dateierweiterung anstatt nach Dateinamen zu sortieren, verwenden Sie -X (das ist ein großes X):
$ ls
bar.xfc baz.txt foo.asc
$ ls -X
foo.asc baz.txt bar.xfc
Verstecke die Unordnung
Es gibt ein paar Einträge in einigen ls Einträge, die Sie möglicherweise nicht interessieren. Beispielsweise die Metazeichen . und .. repräsentieren „hier“ bzw. „eine Ebene zurück“. Wenn Sie mit der Navigation in einem Terminal vertraut sind, wissen Sie wahrscheinlich bereits, dass sich jedes Verzeichnis mit . bezeichnet und zu seinem übergeordneten Element als .. , sodass Sie nicht ständig daran erinnert werden müssen, wenn Sie das -a verwenden Option zum Anzeigen versteckter Dateien.
Um fast alle versteckten Dateien (die . und .. ausgeschlossen), verwenden Sie das -A Möglichkeit:
$ ls -a
.
..
.android
.atom
.bash_aliases
[...]
$ ls -A
.android
.atom
.bash_aliases
[...]
Bei vielen guten Unix-Tools gibt es die Tradition, Sicherungsdateien zu speichern, indem ein Sonderzeichen an den Namen der zu speichernden Datei angehängt wird. Beispielsweise werden Backups in Vim mit dem ~ gespeichert Zeichen an den Namen angehängt.
Diese Art von Sicherungsdateien hat mich bei mehreren Gelegenheiten vor dummen Fehlern bewahrt, aber nachdem ich jahrelang das Gefühl der Sicherheit genossen habe, das sie vermitteln, habe ich nicht das Bedürfnis, visuelle Beweise dafür zu haben, dass sie existieren. Ich vertraue darauf, dass Linux-Anwendungen Sicherungsdateien erstellen (wenn sie dies behaupten), und ich gehe gerne davon aus, dass sie existieren.
Verwenden Sie zum Ausblenden von Sicherungsdateien -B oder --ignore-backups um gängige Sicherungsformate zu verbergen (diese Option ist in BSD ls nicht verfügbar ):
$ ls
bar.xfc baz.txt foo.asc~ foo.asc
$ ls -B
bar.xfc baz.txt foo.asc
Natürlich existiert die Sicherungsdatei noch; es wird nur herausgefiltert, damit Sie es sich nicht ansehen müssen.
GNU Emacs speichert Sicherungsdateien (sofern nicht anders konfiguriert) mit einem Hash-Zeichen (# ) am Anfang und am Ende des Dateinamens (#file# ). Andere Anwendungen verwenden möglicherweise einen anderen Stil. Es spielt keine Rolle, welches Muster verwendet wird, da Sie mit --hide Ihre eigenen Ausschlüsse erstellen können Möglichkeit:
$ ls
bar.xfc baz.txt #foo.asc# foo.asc
$ ls --hide="#*#"
bar.xfc baz.txt foo.asc
Verzeichnisse mit Rekursion auflisten
Der Inhalt von Verzeichnissen wird nicht mit dem ls aufgelistet Befehl, es sei denn, Sie führen ls aus speziell in diesem Verzeichnis:
$ ls -F
example/ quux* xyz.txt
$ ls -R
quux xyz.txt
./example:
bar.xfc baz.txt #foo.asc# foo.asc
Machen Sie es mit einem Alias dauerhaft
Die ls command ist wahrscheinlich der Befehl, der während einer bestimmten Shell-Sitzung am häufigsten verwendet wird. Es sind Ihre Augen und Ohren, die Ihnen Kontext liefern und die Ergebnisse von Befehlen bestätigen. Obwohl es nützlich ist, viele Optionen zu haben, ist dies ein Teil der Schönheit von ls ist seine Kürze:Zwei Zeichen und die Return-Taste, und Sie wissen genau, wo Sie sind und was in der Nähe ist. Wenn Sie innehalten müssen, um über mehrere verschiedene Optionen nachzudenken (viel weniger zu tippen), wird dies weniger bequem, sodass normalerweise sogar die nützlichsten Optionen weggelassen werden.
Die Lösung besteht darin, Ihre ls mit einem Alias zu versehen Befehl, damit Sie bei der Verwendung die Informationen erhalten, die Ihnen am wichtigsten sind.
Um einen Alias für einen Befehl in der Bash-Shell zu erstellen, erstellen Sie in Ihrem Home-Verzeichnis eine Datei mit dem Namen .bash_aliases (Sie müssen den Punkt am Anfang einfügen). Listen Sie in dieser Datei den Befehl auf, für den Sie einen Alias erstellen möchten, und dann den Alias, den Sie erstellen möchten. Zum Beispiel:
alias ls='ls -A -F -B --human --color'
Diese Zeile bewirkt, dass Ihre Bash-Shell das ls interpretiert Befehl als ls -A -F -B --human --color .
Sie sind nicht darauf beschränkt, vorhandene Befehle neu zu definieren. Sie können Ihre eigenen Aliase erstellen:
alias ll='ls -l'
alias la='ls -A'
alias lh='ls -h'
Damit Aliase funktionieren, muss Ihre Shell wissen, dass die .bash_aliases Konfigurationsdatei existiert. Öffnen Sie die .bashrc Datei in einem Editor (oder erstellen Sie sie, falls sie nicht existiert) und fügen Sie diesen Codeblock ein:
if [ -e $HOME/.bash_aliases ]; then
source $HOME/.bash_aliases
fi
Jedes Mal .bashrc geladen wird (was immer dann der Fall ist, wenn eine neue Bash-Shell gestartet wird), lädt Bash .bash_aliases in deine Umgebung. Sie können Ihre Bash-Sitzung schließen und neu starten oder sie einfach dazu zwingen, dies jetzt zu tun:
$ source ~/.bashrc
Wenn Sie vergessen, ob Sie einen Befehl mit einem Alias versehen haben, wird die welche Befehl sagt Ihnen:
$ which ls
alias ls='ls -A -F -B --human --color'
/usr/bin/ls
Wenn Sie ls als Alias verwendet haben Befehl an sich selbst mit Optionen, können Sie Ihren eigenen Alias jederzeit überschreiben, indem Sie ls voranstellen mit einem Backslash. Beispielsweise werden im Beispiel-Alias Backup-Dateien mit dem -B versteckt Option, was bedeutet, dass es keine Möglichkeit gibt, Dateien mit ls zu sichern Befehl. Überschreiben Sie den Alias, um die Sicherungsdateien anzuzeigen:
$ ls
bar baz foo
$ \ls
bar baz baz~ foo
Mach eine Sache und mach es gut
Die ls command hat eine erstaunliche Anzahl von Optionen, von denen viele Nischen sind oder stark von dem von Ihnen verwendeten Terminal abhängen. Sehen Sie sich info ls an auf GNU-Systemen oder man ls auf GNU- oder BSD-Systemen für weitere Optionen.
Sie finden es vielleicht seltsam, dass ein System, das für die Prämisse bekannt ist, dass jedes Tool „eine Sache tut und es gut macht“, seinen häufigsten Befehl mit 50 Optionen belasten würde. Aber ls macht nur eines:es listet Dateien auf. Und mit 50 Optionen, mit denen Sie steuern können, wie Sie diese Liste erhalten, ls macht seinen Job sehr, sehr gut.