Auf l
meinem Computer ist ein Befehl verfügbar, der scheinbar nichts zu tun hat. which l
erzeugt auch keine Ausgabe. Ist das ein echter Befehl und macht er überhaupt etwas?
l
ist ein Alias für ls -CF
, der sich anders als normal verhältls
.
-C
-C
macht ls
in Säulenform Druckausgabe. Wenn stdout ein Terminal ist (anstatt zu einer Datei oder einem Nicht-Terminal-Gerät umgeleitet oder an einen anderen Befehl weitergeleitet zu werden), -C
wird dies impliziert. Laufen ls -C
ist also dasselbe wie Laufen ls
. Sie sind jedoch nicht gleichwertig, wenn sie ls
umgeleitet oder weitergeleitet werden. Beispielsweise:
ek@Kip:~/firefox$ ls
application.ini libfreebl3.chk libxpcom.so
blocklist.xml libfreebl3.so libxul.so
chrome libmozalloc.so mozilla-xremote-client
chrome.manifest libmozsqlite3.so omni.ja
components libnspr4.so platform.ini
crashreporter libnss3.so plugin-container
...
ek@Kip:~/firefox$ ls | less
application.ini
blocklist.xml
chrome
chrome.manifest
components
crashreporter
...
Im Gegensatz dazu werden ls -C
(oder -l
) Ausgaben in Spaltenform ausgegeben, unabhängig davon, um welche Art von Gerät es sich stdout
handelt. ls -C | less
sieht aus wie die Top-Ausgabe (aber less
natürlich ausgelagert von ).
-F
Der größte sichtbare Unterschied zwischen ls
und l
ist auf das -F
Flag zurückzuführen, durch das ls
symbolische Suffixe (sogenannte Indikatoren) an die angezeigten Einträge angehängt werden. Diese Anzeigen kennzeichnen die Art der Datei oder des Verzeichnisses.
Vergleichen Sie dies mit der Ausgabe des ersten ls
obigen Befehls:
ek@Kip:~/firefox$ ls -F
application.ini libfreebl3.chk libxpcom.so*
blocklist.xml libfreebl3.so* libxul.so*
chrome/ libmozalloc.so* mozilla-xremote-client*
chrome.manifest libmozsqlite3.so* omni.ja
components/ libnspr4.so* platform.ini
crashreporter* libnss3.so* plugin-container*
...
Hier:
/
bedeutet, dass der Eintrag ein Verzeichnis ist.*
bedeutet, dass der Eintrag eine normale Datei ist und ausführbar ist (dh über ausführbare Berechtigungen verfügt ).Es gibt mehrere andere Indikatoren:
@
bedeutet, dass der Eintrag ein symbolischer Link ist (siehe auch man symlink
).|
bedeutet, dass der Eintrag ein FIFO- Gerät ist (denken Sie daran, dass viele Ressourcen in Unix-ähnlichen Betriebssystemen durch Dateisystemeinträge dargestellt werden ).=
bedeutet, dass der Eintrag eine Steckdose ist .>
bedeutet, der Eingang ist eine Tür .Die --classify
Flagge und --indicator-style=classify
sind gleichbedeutend mit -F
.
Quelle: GNU Coreutils-Handbuch , Abschnitt 10.1.5 Allgemeine Ausgabeformatierung
l
( ls -CF
) ähnlich, aber nicht dasselbe wie ls
.Es ist auch gut zu beachten:
Dies wird häufig verwendet, um Optionen anzugeben, die allgemein als äußerst nützlich und harmlos angesehen werden, z. B. die automatische Einfärbung (wenn die Farbe nicht stdout
umgeleitet wird oder ein Terminal ist, werden die Escape-Codes, die Farben angeben, so gut wie garantiert nicht falsch interpretiert).
ls
ist selbst ein Pseudonym.ek@Kip:/$ alias ls
alias ls='ls --color=auto'
Welcher Befehl wird also wirklich ausgeführt, wenn Sie ausführen l
? Dieses:
/bin/ls --color=auto -CF
bash
) löst Befehle auf, die /
beim ersten Auftauchen in PATH
, was in Ubuntu für ls
ist , kein a enthalten /bin/ls
.Also l
löst auf, ls -CF
was auflöst ls --color=auto -CF
.
Diese Aliase existieren, weil sie standardmäßig so eingerichtet sind, aber jeder Benutzer kann ihre Aliase ändern. Siehe man alias
, Kapitel 25 und Anhang M in der Advanced Bash-Scripting Guide und wie speichern meine "alias" Einträge für immer .
Verwandte: Was bedeuten die verschiedenen Farben in ls?
Eigentlich sind beide ls
und l
gleich
raja@badfox:~/Pictures$ l
des.png
Screenshot from 2012-09-22 19:37:03.png
Screenshot from 2012-09-22 19:37:11.png
Screenshot from 2012-09-22 19:37:12.png
Untitled.png
raja@badfox:~/Pictures$ ls
des.png
Screenshot from 2012-09-22 19:37:03.png
Screenshot from 2012-09-22 19:37:11.png
Screenshot from 2012-09-22 19:37:12.png
Untitled.png
Warum bedeutet dies, dass ein integrierter Systemalias vorhanden ist? Wenn Sie sehen möchten, öffnen Sie Ihr Terminal und geben alias
Sie Folgendes ein: Sie erhalten eine Ausgabe wie diese
raja@badfox:~/Pictures$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias lock='gnome-screensaver-command -l'
alias ls='ls --color=auto'
alias sms='php .sms.php'
raja@badfox:~/Pictures$
l
und plainls
sind nicht dasselbe - sie haben nur zufällig die gleiche Ausgabe für diese bestimmten Dateien erzeugt, da es sich bei keiner um Verzeichnisse, ausführbare Dateien, Symlinks oder Geräteknoten handelte (und die Standardausgabe war ein Terminal).alias l='ls -CF'
es ist also nicht dasselbe. Wenn Sie eine prägnantere Ausgabe erhalten möchten, können Sie auch ausführenalias l
.Im Zweifelsfall
type l
:(Siehe auch Was macht der la Befehl? )
quelle