GNU/Linux >> LINUX-Kenntnisse >  >> Linux

ls-Befehl unter Linux:17 nützliche Beispiele erklärt

Die ls command ist einer der ersten Befehle, die wir lernen, wenn wir die Shell entdecken. Und danach wird es, unabhängig von Ihrem Können, eines der am häufigsten verwendeten bleiben.

Trotz dieser Popularität gehen wir selten über das -l hinaus , -d und -a Optionen. Schade, da ein typisches ls Implementierung hat Dutzende von Optionen zur Verfügung! Ich schlage Ihnen daher vor, mir bei meiner Suche nach dem ls zu folgen Befehl versteckte Edelsteine.

Beispieldateihierarchie, die wir in diesem ls-Befehlsleitfaden verwenden

Bevor wir zum Kern der Sache kommen, brauchen wir ein wenig Vorbereitung:Es wäre schwierig, die ls zu studieren Befehl ohne ein Verzeichnis, an dem gearbeitet werden kann. Damit Sie die in diesem Artikel angegebenen Befehle auf Ihrem Computer ausprobieren können, erfahren Sie hier, wie Sie die Beispieldateihierarchie erstellen, die ich in allen meinen Beispielen verwenden werde. Kopieren Sie einfach diese Befehlsliste und fügen Sie sie in Ihr Terminal ein, und schon sind Sie bereit:

mkdir ls
cd ls
# Create a hidden file:
echo You can not see me > .hidden
# Create a couple of 2MiB files:
dd if=/dev/zero of=a bs=1M count=2
dd if=/dev/zero of=b bs=1M seek=1 count=1
# Create few sub-directories
mkdir -p dir/subdir dir/subdir2
# Create a bunch of empty files
touch c dir/{d,e,f} dir/subdir/{g,h,i} dir/subdir2/{j,k,l}
# Create few links (hard and symbolic)
ln  dir/e hardlink-to-file
ln -s dir/f symlink-to-file
ln -s dir/subdir symlink-to-subdir

Wenn Sie Probleme mit diesen Befehlen haben, zögern Sie nicht, den Kommentarbereich zu verwenden, um um Hilfe zu bitten. Angenommen, jetzt ist alles in Ordnung, ist es an der Zeit, in unser Hauptthema einzutauchen.

Die bekannten Anwendungsfälle des ls-Befehls

Da jede Reise mit einem ersten Schritt beginnt, lassen Sie uns zuerst die sehr grundlegenden Anwendungsfälle für ls betrachten Befehl. Wenn Sie sich als Experte betrachten, können Sie natürlich sofort zu den Abschnitten für Fortgeschrittene springen. Aber wenn du jetzt lieber bei mir bleibst, toll:Vielleicht lernst du ein oder zwei Dinge!

<no option> :das Standardverhalten

Die ls Der Befehl gibt Informationen über alle dateiähnlichen Objekte, auf die durch die in der Befehlszeile angegebenen Pfade verwiesen wird. Bei Verwendung ohne Option:

  • die einzige angezeigte Information ist der Name des dateiähnlichen Objekts, auf das der Pfad zeigt;
  • wenn dieser Pfad auf ein Verzeichnis (oder einen symbolischen Link zu einem Verzeichnis) zeigt, wird der ls Der Befehl listet auch den Inhalt dieses Verzeichnisses auf;
  • werden mehrere Einträge angezeigt, werden sie alphabetisch nach ihrem Dateinamen sortiert.

Wenn schließlich kein Pfad in der Befehlszeile angegeben wird, wird die ls Befehle nimmt ./ an –das ist das aktuelle Verzeichnis.

Sehen wir uns jetzt all diese Regeln in Aktion an:

# display the content of the current directory
sh:~/ls$ ls ./
a  c    e  hardlink-to-file  symlink-to-file
b  dir    f  link-to-subdir    symlink-to-subdir

# without any option, `ls` is equivalent
# to `ls ./`
sh:~/ls$ ls
a  c    e  hardlink-to-file  symlink-to-file
b  dir    f  link-to-subdir    symlink-to-subdir

# entries are sorted alphabetically
# ("dir/f" starts with a "d" so it is before "e")
sh:~/ls$ ls c b e dir/f a
a  b  c  dir/f    e

# when a command line argument is a directory
# (or a symbolic link to a directory)
# displays its content
sh:~/ls$ ls a b c link-to-subdir dir
a  b  c

dir:
d  e  f  subdir  subdir2

link-to-subdir:
g  h  i

-d :Verzeichnisinhalt nicht auflisten

Mit dem -d Option ls zeigt nicht mehr den Inhalt des auf der Kommandozeile angegebenen Verzeichnisses an, sondern behandelt Verzeichniseinträge genauso wie Dateieinträge. Vergleichen wir:

# Default behavior: display the content of the `dir` directory
sh:~/ls$  ls a dir b
a  b

dir:
d  e  f  subdir  subdir2

# `-d` option: directories are handled like files
sh:~/ls$  ls -d a dir b
a  b  dir

Bei Verwendung des -d Option allein, gibt es keinen großen Unterschied zwischen ls und ein einfaches echo Befehl:

# In both case, the `*` glob pattern is expanded by
# the shell, which also takes care of
# sorting entries in the alphabetical order
sh:~/ls$  ls -d *
a  b  c  dir  hardlink-to-file    symlink-to-file  symlink-to-subdir

sh:~/ls$  echo *
a b c dir hardlink-to-file symlink-to-file symlink-to-subdir

Aber das -d Die Option wird nützlicher, wenn sie mit einer anderen Option verknüpft ist, um zusätzliche Informationen anzuzeigen, z. B. bei Verwendung von -l Flagge werden wir jetzt sehen.

-l :die Langformatoption

Im ls Beliebtheitswettbewerb für Optionen, der -l (Kleinbuchstabe) Option wäre wahrscheinlich der Gewinner. Es ist so nützlich, dass viele Systeme einen ll anbieten Alias ​​für ls -l (oder ls -l<something> )

Das -l steht für das lange Format. Mit dieser Option wird die ls Der Befehl zeigt jeden Eintrag in einer eigenen Zeile mit den folgenden Informationen an:* Dateimodus * Anzahl der Links * Eigentümername * Gruppenname * Anzahl der Bytes in der Datei * Datum und Uhrzeit * Pfadname

Auch mit dem -l Option ls folgen keinen symbolischen Links mehr. Daher werden die Informationen (Dateimodus, Anzahl der Links usw.) über den Link selbst und nicht über sein Ziel angezeigt. Aus dem gleichen Grund ist der ls Der Befehl zeigt nicht den Inhalt von Verzeichnissen an, auf die symbolische Links verweisen:

# Default behavior: displays only the filename and
# follows symbolic links:
sh:~/ls$  ls *
a  b  c  e  f  hardlink-to-file  symlink-to-file

dir:
d  e  f  subdir  subdir2

link-to-subdir:
g  h  i

symlink-to-subdir:
g  h  i

# `-l` option: displays extended informations and
# no longer follows symbolic links
sh:~/ls$  ls -l *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 19 22:18 c
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 e
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 12:09 f -> dir/f
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 12:09 link-to-subdir -> dir/subdir
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 22:18 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 22:18 symlink-to-subdir -> dir/subdir

dir:
total 8
-rw-r--r-- 1 sylvain sylvain    0 Sep 19 22:18 d
-rw-r--r-- 3 sylvain sylvain    0 Sep 19 22:18 e
-rw-r--r-- 1 sylvain sylvain    0 Sep 19 22:18 f
drwxr-xr-x 2 sylvain sylvain 4096 Sep 19 12:09 subdir
drwxr-xr-x 2 sylvain sylvain 4096 Sep 19 12:09 subdir2

Zum Abschluss dieses Abschnitts lasse ich Sie die Ausgabe untersuchen, die wir durch Kombinieren der beiden -l erhalten und -d Optionen:

sh:~/ls$  ls -ld *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 19 22:18 c
drwxr-xr-x 4 sylvain sylvain    4096 Sep 19 12:09 dir
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 e
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 12:09 f -> dir/f
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 12:09 link-to-subdir -> dir/subdir
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 22:18 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 22:18 symlink-to-subdir -> dir/subdir

-a :Alle Dateien anzeigen

Mit dem -a Option ls schließt versteckte Dateien ein, wenn der Inhalt eines Verzeichnisses angezeigt wird. Aber was ist eine versteckte Datei?

Per Konvention wird auf Unix-ähnlichen Systemen eine Datei, deren Name mit einem Punkt beginnt, als versteckt betrachtet. Zusätzlich enthält jedes Verzeichnis noch zwei spezielle, normalerweise versteckte Einträge:. und ..

In jedem Verzeichnis:

  • der . Einstiegspunkte zum Verzeichnis selbst. Diese Art von Selbstreferenz mag merkwürdig erscheinen. Aber es ist manchmal nützlich, ein bisschen so, als hätte man seine eigene Telefonnummer in seinem Smartphone-Repertoire.
  • der .. Einstiegspunkte zum übergeordneten Verzeichnis. Da die Dateihierarchie auf Unix-ähnlichen Systemen strikt als Baum organisiert ist, hat jedes Verzeichnis genau ein übergeordnetes Verzeichnis. Außer dem Stammverzeichnis / kann sein? Nun, nicht wirklich:Das Elternverzeichnis des Root-Verzeichnisses ist … das Root-Verzeichnis selbst.
# Default behavior: do not display hidden entries
# (including . and ..)
sh:~/ls$  ls
a  c    e  hardlink-to-file  symlink-to-file
b  dir    f  link-to-subdir    symlink-to-subdir

# `-a` option: show hidden files and directories
sh:~/ls$  ls -a
.   a  c    e  hardlink-to-file  link-to-subdir   symlink-to-subdir
..  b  dir  f  .hidden         symlink-to-file

Die nützlichen Optionen des ls-Befehls

Nachdem Sie das bekannte -l überprüft haben , -d und -a richten wir unsere Aufmerksamkeit auf ein paar weniger bekannte Optionen, die ich besonders nützlich finde.

-s :Zugewiesene Größe anzeigen

Sie erinnern sich vielleicht an das -l Option zeigte die Anzahl der Bytes in der Datei an. Das -s Option zeigt die zugewiesene Größe in Blöcken an. Was ist ein Block? Nun, eine Gruppe von Bytes, deren Größe von der Implementierung abhängt. Es ist normalerweise 512 Bytes auf BSD und 1024 Bytes auf Linux.

Warum sollte ich mich mit der Größe in Blöcken beschäftigen, wenn ich bereits Zugriff auf die Größe in Bytes habe? Nun, die -s Optionen zeigen die zugewiesenen an Größe. Nicht das logische Größe der Datei. Das können zwei völlig verschiedene Dinge für Sparse-Dateien sein. Sparse-Dateien sind Dateien, die „Löcher“ enthalten. Beim Lesen verhalten sich diese Löcher wie normale Dateiblöcke, die nur Nullen enthalten. Aber sie nehmen praktisch keinen Platz auf der Festplatte ein. Wir können den dd verwenden Befehl mit dem seek Option zum Erstellen von Sparse-Dateien, wie ich es für b getan habe Datei in meiner Beispielhierarchie:

sh:~/ls$ ls -ls a b
2052 -rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
1028 -rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b

Wie Sie sehen können, sind sowohl mein a und b Dateien scheinen zwei Mebibyte lang zu sein. Aber das b Da die Datei spärlich ist, benötigt sie nur 1028 Blöcke auf der Festplatte (ungefähr ein Mebibyte).

-h menschenlesbare Größen anzeigen

Mit dem -h Option ls zeigt Dateigrößen mit Einheitensuffixen an, um sie benutzerfreundlicher zu machen. Diese Option ist nur in Kombination mit dem -l sinnvoll Option (Linux, BSD) oder -s (Linux):

sh:~/ls$ ls -lsh a b
2.1M -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 22:18 a
1.1M -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 22:18 b

openbsd-6.3$ ls -lsh a b
4128 -rw-r--r--  1 sylvain  sylvain   2.0M Sep 19 23:49 a
2112 -rw-r--r--  1 sylvain  sylvain   2.0M Sep 19 23:49 b

Sie haben vielleicht bemerkt, dass Größen mit Potenzen von 1024 Einheiten angezeigt werden, wobei K für 2 ^ 10 =1024 Bytes steht, M für 1024 ^ 2 =1048576 Bytes und so weiter. Erwähnenswert ist hier das ls Implementierung, die als Teil der GNU Coreutils bereitgestellt wird, hat einen zusätzlichen --si Optionen zur Verwendung von Potenzen von 1000 anstelle von Potenzen von 1024:

sh:~/ls$ ls -lsh --si a b
2.2M -rw-r--r-- 1 sylvain sylvain 2.1M Sep 19 22:18 a
1.1M -rw-r--r-- 1 sylvain sylvain 2.1M Sep 19 22:18 b

-i Inode-Nummer anzeigen

Auf einem Dateisystem im Unix-Stil ist eine Inode-Nummer (oder Dateiseriennummer in der POSIX-Terminologie) ist eine Nummer, die ein Dateisystemobjekt eindeutig identifiziert (eine Datei, ein Verzeichnis, eine Named Pipe, … ). Mit dem -i Option, die ls Der Befehl zeigt seine Inode-Nummer neben jedem Pfad an.

Auch wenn es etwas exotisch erscheint, finde ich mich mit dem -i wieder Option von Zeit zu Zeit, insbesondere um Verzeichniseinträge zu identifizieren, die auf dasselbe Dateisystemobjekt verweisen. Sie werden diese Option hauptsächlich verwenden, wenn Sie Hardlinks oder Bind-Mounts untersuchen. Sehen Sie sich dieses Video für ein praktisches Beispiel an:https://youtu.be/Jp58Osb1uFo?t=140

sh:~/ls$  ls -i *
8222 a    8243 b    8262 c    8264 hardlink-to-file  8272 symlink-to-file

dir:
8263 d    8264 e    8265 f    8245 subdir  8261 subdir2

symlink-to-subdir:
8266 g    8267 h    8268 i

Im obigen Beispiel sehen Sie, dass jedem Dateinamen die Inode-Nummer vorangestellt ist, die diesem Pfad zugeordnet ist. Auf Ihrem System werden die Zahlen sicherlich abweichen. Sehen Sie sich auf jeden Fall den hardlink-to-file genauer an und dir/e Einträge. Beide haben dieselbe Inode-Nummer (in meinem Fall 8264). Das bedeutet, dass es sich um zwei Einträge handelt, die auf dasselbe zugrunde liegende Dateisystemobjekt verweisen – was tatsächlich die genaue Definition dessen ist, was ein harter Link ist.

Sie erinnern sich vielleicht, dass ich vorhin gesagt habe, dass das Stammverzeichnis selbst das Elternverzeichnis des Stammverzeichnisses ist. Durch die Verwendung des -i Option, ist es ziemlich einfach, diese Behauptung zu überprüfen:

openbsd-6$  ls -id /
2 /
openbsd-6$ ls -ia /
    2 .             25985 bin               5 dev           77954 sbin
    2 ..             1235 boot          51969 etc              10 sys
    8 .cshrc         1240 bsd               2 home              7 tmp
    9 .profile       1241 bsd.booted    77953 mnt               2 usr
51968 altroot           4 bsd.rd        26016 root          78016 var

Wie Sie sehen können, ist das Stammverzeichnis auf meinem System mit der Inode-Nummer 2 verknüpft, die auch die Inode des übergeordneten Verzeichnisses ist. Das beweist also, dass das Root-Verzeichnis ist sein eigener Elternteil.

Die selten verwendeten Optionen des ls-Befehls

Ich verwende regelmäßig die im vorherigen Abschnitt beschriebenen Optionen, aber über die werde ich jetzt sprechen … nun ja … ich weiß, dass es sie gibt. Allerdings muss ich zugeben, wenn ich sie brauche, muss ich oft zum man schauen um mein Gedächtnis aufzufrischen.

Diese Option modifiziert das Verhalten von ls Befehl, wenn er auf symbolische Links angewendet wird. Mit dem -L Option ls zeigt die Informationen über das Ziel an des symbolischen Links, anstatt diejenigen anzuzeigen, die sich auf den symbolischen Link selbst beziehen. Anhand des folgenden Beispiels wird der Unterschied deutlich:

# Pay special attention to the permission
# and file size for symbolic links with and without
# the `-L` option:
sh:~/ls$  ls -ld *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 c
drwxr-xr-x 4 sylvain sylvain    4096 Sep 20 00:09 dir
-rw-r--r-- 2 sylvain sylvain       0 Sep 20 00:09 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain       5 Sep 20 00:09 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain      10 Sep 20 00:09 symlink-to-subdir -> dir/subdir
[email protected]:/tmp/ls/ls/ls$ ls -lLd *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 c
drwxr-xr-x 4 sylvain sylvain    4096 Sep 20 00:09 dir
-rw-r--r-- 2 sylvain sylvain       0 Sep 20 00:09 hardlink-to-file
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 symlink-to-file
drwxr-xr-x 2 sylvain sylvain    4096 Sep 20 00:09 symlink-to-subdir

-F :Ein Klassifizierungszeichen an den Dateinamen anhängen

Das -F fügt ein zusätzliches Zeichen nach dem Pfadnamen einiger Kategorien von Dateisystemobjekten hinzu, um sie zu identifizieren. Es wird hinzugefügt:

  • ein \ nach jedem Pfadnamen, der ein Verzeichnis ist,
  • ein @ nach jedem Pfadnamen, der ein symbolischer Link ist,
  • ein * nach jeder ausführbaren Datei,
  • und ein | nach jedem FIFO (siehe mkfifo weitere Informationen dazu)

In meinen frühen Unix-Tagen habe ich diese Option häufig verwendet. Aber seit ls kann seine Ausgabe einfärben (und da wir Farbmonitore haben!), brauche ich das selten. Aber ich erinnere mich daran. Und von Zeit zu Zeit finde ich auf einem entfernten Terminal eine Gelegenheit, es zu verwenden:

sh:~/ls$ ls -F
a  b  c  dir/  hardlink-to-file  [email protected]  [email protected]

t :Einträge nach Änderungszeit sortieren

Mit dem -t Option, die ls Befehl mit der Anzeige von Verzeichniseinträgen sortiert nach Änderungszeit (neueste zuerst) anstatt sie nach ihrem Namen zu sortieren:

# Default sort order (by filename)
sh:~/ls$  ls
a  b  c  dir  hardlink-to-file    symlink-to-file  symlink-to-subdir

# Sort by modification date
sh:~/ls$ ls -t
symlink-to-subdir  symlink-to-file  c  dir  hardlink-to-file  b  a

Wenn ich eine Datei ändere, erscheint sie jetzt als erster (dh zuletzt geänderter) Eintrag in der Liste:

sh:~/ls$ echo >> a
sh:~/ls$ ls -t
a  symlink-to-subdir  symlink-to-file  c  dir  hardlink-to-file  b

-S :Einträge nach Größe sortieren

Mit dem -S Option ls zeigt Einträge nach Größe sortiert an, größte Datei zuerst. Bei Gleichstand werden die Einträge nach ihrem Pfadnamen sortiert:

sh:~/ls$ ls -lS
total 6244
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 a
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 b
drwxr-xr-x  4 sylvain  sylvain      512 Sep 19 23:49 dir
lrwxr-xr-x  1 sylvain  sylvain       10 Sep 19 23:49 symlink-to-subdir -> dir/subdir
lrwxr-xr-x  1 sylvain  sylvain        5 Sep 19 23:49 symlink-to-file -> dir/f
-rw-r--r--  1 sylvain  sylvain        0 Sep 19 23:49 c
-rw-r--r--  2 sylvain  sylvain        0 Sep 19 23:49 hardlink-to-file

-r :umgekehrte Sortierreihenfolge

Diese Option kehrt die Sortierreihenfolge um. Ich finde es am nützlichsten, wenn es mit dem -t verknüpft ist Option, um die am längsten geänderte Datei zuerst anzuzeigen, oder mit dem -S Option, um die kleinste Datei zuerst anzuzeigen. Aber es funktioniert auch mit der standardmäßigen Sortierreihenfolge nach Pfadnamen:

# Display the least recently modified file first
sh:~/ls$ ls -rt
b  hardlink-to-file  dir  c  symlink-to-file  symlink-to-subdir  a

# Display the smallest file first
sh:~/ls$ ls -rS
hardlink-to-file  c  symlink-to-file  symlink-to-subdir  dir  b  a

# Display path names in reversed alphabetical order
sh:~/ls$ ls -r
symlink-to-subdir  symlink-to-file  hardlink-to-file  dir  c  b  a

-n :Numerische UID/GID anzeigen

Diese Option ist genau die gleiche wie -l Option – außer mit -n die Gruppen-ID (GID) und die Benutzer-ID (UID) des Eigentümers werden als Zahlen angezeigt, anstatt den zugehörigen Namen zu verwenden:

 sh:~/ls$ ls -ld a b c /
drwxr-xr-x 28 root    root       4096 May  6 00:28 /
-rw-r--r--  1 sylvain sylvain 2097153 Sep 20 00:45 a
-rw-r--r--  1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r--  1 sylvain sylvain       0 Sep 20 00:09 c
sh:~/ls$ ls -nd a b c /
drwxr-xr-x 28    0    0    4096 May  6 00:28 /
-rw-r--r--  1 1000 1000 2097153 Sep 20 00:45 a
-rw-r--r--  1 1000 1000 2097152 Sep 20 00:09 b
-rw-r--r--  1 1000 1000       0 Sep 20 00:09 c

Die wirklich exotische Verwendung des ls-Befehls

Niemand kann behaupten, alles zu wissen. Und während ich diesen Artikel schrieb, habe ich ein paar ls (wieder-)entdeckt Optionen. Ich kann mich nicht erinnern, sie selbst benutzt zu haben, aber vielleicht hast du es getan? Wenn dies der Fall ist, wäre ich neugierig, im Kommentarbereich zu lesen, unter welchen Umständen Sie sie nützlich finden. Wie dem auch sei, hier ist eine Auswahl, die Sie vielleicht interessieren könnte.

-R :Unterverzeichnisse rekursiv auflisten

Standardmäßig ist die Datei ls zeigt nur den Inhalt der explizit auf der Kommandozeile angegebenen Verzeichnisse an. Mit dem -R Option, wird es auch rekursiv den Inhalt der gefundenen Verzeichnisse anzeigen:

sh:~/ls$ ls -R
.:
a  b  c  dir  hardlink-to-file    symlink-to-file  symlink-to-subdir

./dir:
d  e  f  subdir  subdir2

./dir/subdir:
g  h  i

./dir/subdir2:
j  k  l

Während ich theoretisch interessant bin, finde ich (Wortspiel beabsichtigt) die Ausgabe, die von find . erzeugt wird Befehl besser lesbar für diesen Zweck. Aber Ihr Kilometerstand kann natürlich variieren:

sh:~/ls$  find .
.
./c
./.hidden
./hardlink-to-file
./b
./symlink-to-subdir
./dir
./dir/d
./dir/e
./dir/subdir2
./dir/subdir2/l
./dir/subdir2/j
./dir/subdir2/k
./dir/subdir
./dir/subdir/g
./dir/subdir/i
./dir/subdir/h
./dir/f
./symlink-to-file
./a

-A :fast alle Dateien anzeigen

Obwohl nicht im POSIX-Standard definiert, ist -A Optionen erscheinen sowohl in der GNU- als auch in der BSD-Welt. In beiden Fällen funktioniert es wie -a , aber ohne . und .. Einträge. Erwähnenswert auf BSD-Systemen, -A wird für den Superuser impliziert:

sh:~/ls$  ls -a
.   a  c    hardlink-to-file  symlink-to-file
..  b  dir  .hidden          symlink-to-subdir
sh:~/ls$  ls -A
a  b  c  dir  hardlink-to-file    .hidden  symlink-to-file  symlink-to-subdir

openbsd-6.3$ su root
openbsd-6.3# ls
.hidden a  b  c  dir  hardlink-to-file  symlink-to-file  symlink-to-subdir

-f :nicht sortieren

Mit dem -f Option ls zeigt Einträge in der Reihenfolge an, in der sie im Verzeichnis erscheinen. Diese Reihenfolge hängt vom zugrunde liegenden Dateisystem ab, und die Reihenfolge der Dateien wurde erstellt, sodass sie kaum vorhersehbar ist. Das -f Option impliziert auch das -a Möglichkeit:

sh:~/ls$  ls -f
..  .hidden          b             dir          a
c   hardlink-to-file  symlink-to-subdir  symlink-to-file  .

openbsd-6$ ls -f
.                   a                   c                   symlink-to-subdir
..                  b                   hardlink-to-file
.hidden             dir                 symlink-to-file

Amüsanterweise mit den GNU Coreutils 8.26 ls Implementierung können Sie sowohl den -l verwenden und -f Optionen, wenn Sie es -fl schreiben –aber nicht, wenn Sie -lf schreiben . Auf OpenBSD funktionieren beide wie erwartet:

sh:~/ls$ ls -lf
..  .hidden          b             dir          a
c   hardlink-to-file  symlink-to-subdir  symlink-to-file  .
sh:~/ls$ ls -fl
total 3100
drwxr-xr-x 3 sylvain sylvain    4096 Sep 19 12:09 ..
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 c
-rw-r--r-- 1 sylvain sylvain      19 Sep 20 00:09 .hidden
-rw-r--r-- 2 sylvain sylvain       0 Sep 20 00:09 hardlink-to-file
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
lrwxrwxrwx 1 sylvain sylvain      10 Sep 20 00:09 symlink-to-subdir -> dir/subdir
drwxr-xr-x 4 sylvain sylvain    4096 Sep 20 00:09 dir
lrwxrwxrwx 1 sylvain sylvain       5 Sep 20 00:09 symlink-to-file -> dir/f
-rw-r--r-- 1 sylvain sylvain 2097153 Sep 20 00:45 a
drwxr-xr-x 3 sylvain sylvain    4096 Sep 20 00:09 .

openbsd-6$ ls -lf
total 6256
drwxr-xr-x  3 sylvain  sylvain      512 Sep 19 23:49 .
drwxr-xr-x  5 sylvain  sylvain      512 Sep 19 23:49 ..
-rw-r--r--  1 sylvain  sylvain       19 Sep 19 23:49 .hidden
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 a
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 b
drwxr-xr-x  4 sylvain  sylvain      512 Sep 19 23:49 dir
-rw-r--r--  1 sylvain  sylvain        0 Sep 19 23:49 c
-rw-r--r--  2 sylvain  sylvain        0 Sep 19 23:49 hardlink-to-file
lrwxr-xr-x  1 sylvain  sylvain        5 Sep 19 23:49 symlink-to-file -> dir/f
lrwxr-xr-x  1 sylvain  sylvain       10 Sep 19 23:49 symlink-to-subdir -> dir/subdir
openbsd-6$ ls -fl
total 6256
drwxr-xr-x  3 sylvain  sylvain      512 Sep 19 23:49 .
drwxr-xr-x  5 sylvain  sylvain      512 Sep 19 23:49 ..
-rw-r--r--  1 sylvain  sylvain       19 Sep 19 23:49 .hidden
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 a
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 b
drwxr-xr-x  4 sylvain  sylvain      512 Sep 19 23:49 dir
-rw-r--r--  1 sylvain  sylvain        0 Sep 19 23:49 c
-rw-r--r--  2 sylvain  sylvain        0 Sep 19 23:49 hardlink-to-file
lrwxr-xr-x  1 sylvain  sylvain        5 Sep 19 23:49 symlink-to-file -> dir/f
lrwxr-xr-x  1 sylvain  sylvain       10 Sep 19 23:49 symlink-to-subdir -> dir/subdir

-q :Nicht druckbare Dateinamenzeichen als ? anzeigen

Auf Dateisystemen im Unix-Stil kann ein Dateiname jedes Zeichen außer \ enthalten und die NUL-Zeichen. Dies bedeutet, dass ein Dateiname nicht druckbare Zeichen oder sogar Steuersequenzen enthalten kann, die Ihr Terminal stören können. Versuchen wir etwas Amüsantes:

touch "$(echo -e '\x1B[7mBOO\x1B[0m')"

Offensichtlich enthält dieser Dateiname nicht druckbare Zeichen. Über moderne Implementierungen von ls , das -q Option ist impliziert, wenn die Ausgabe ein Terminal ist, um mögliche schädliche Auswirkungen zu vermeiden. Die nicht druckbaren Zeichen werden also durch ein Fragezeichen ersetzt:

sh:~/ls$ ls *BOO*
?[7mBOO?[0m

Anders sieht es jedoch aus, wenn Sie stattdessen Folgendes schreiben:

# I let you try that by yourself
# to not spoil the fun;)
sh:~/ls$ ls *BOO* | cat

Der | cat ist nutzlos, aber als Nebeneffekt wird der ls Der Befehl sieht jetzt eine Pipe auf seiner Standardausgabe anstelle eines tty (ein „Terminal“). Da die Ausgabe kein Terminal mehr ist, wird der -q Option ist nicht mehr impliziert, und ls zeigt den Dateinamen wörtlich an. In diesem Fall, wenn alles wie erwartet funktioniert, um den Dateinamen mit einem abgefahrenen Videoeffekt zu präsentieren.

Explizit mit dem -q Option würde das beheben. Ich werde Sie das selbst ausprobieren lassen (und eventuell mit anderen ANSI-Escape-Sequenzen spielen). Aber ich nutze diese Gelegenheit, um Sie davor zu warnen, ls zu verwenden Befehl in Shell-Skripten. In der Praxis ist ls ist für den „menschlichen Verzehr“ bestimmt. Es gibt viele Nebenfälle in Bezug auf speziell gestaltete Dateinamen, die sehr schwer richtig zu handhaben sind. Wenn Sie eine Liste von Dateien durchgehen müssen, empfehle ich Ihnen dringend, stattdessen den Befehl find zu verwenden. Im einfachsten Fall ein einfacher for Schleife ist sogar ausreichend – aber das wäre eine andere Geschichte.

for f in *; do echo "$f"; done

Das Ende?

Damit ist unsere Tour durch die ls abgeschlossen Befehlsoptionen. Es ist unnötig zu erwähnen, dass es bei weitem nicht erschöpfend war, und ich habe versucht, mich hier auf die nützlichsten und portabelsten Optionen zu konzentrieren. Aber jeder ls Die Implementierung hat ihren Anteil an coolen Funktionen. Wenn Sie also eine nette Option kennen, die ich in diesem Artikel vermisst habe, zögern Sie nicht, uns diese über den Kommentarbereich mitzuteilen. Wenn wir genug Feedback haben, können wir sie sogar in einem Folgeartikel zusammenstellen und veröffentlichen!

Apropos ls-Befehl, kennen Sie den lsof-Befehl? Es hat nichts mit ls zu tun, aber es sagt Ihnen, welcher Benutzer auf eine bestimmte Datei zugreift.


Linux
  1. 12 nützliche Wget-Befehlsbeispiele unter Linux

  2. 7 Beispiele für Linux-df-Befehle

  3. 8 Linux TR-Befehlsbeispiele

  4. sa-Befehlsbeispiele in Linux

  5. w Befehlsbeispiele unter Linux

9 Nützliche Touch-Befehlsbeispiele in Linux

Linux-rm-Befehl für Anfänger erklärt (8 Beispiele)

Tr-Befehl in Linux mit Beispielen erklärt

w Befehl mit Beispielen in Linux erklärt

12 Nützliche Beispiele für Linux-Datumsbefehle

id-Befehlsbeispiele in Linux