it-swarm.com.de

Was macht der Befehl l?

Auf meinem Computer ist ein Befehl l verfügbar, der anscheinend nichts zu tun scheint. which l erzeugt ebenfalls keine Ausgabe. Ist das ein echter Befehl und macht er überhaupt etwas?

19
Armand

l ist ein Alias für ls -CF, das sich anders verhält als einfaches ls.

-C

-C gibt ls in Spaltenform aus. Wenn stdout ein Terminal ist (anstatt zu einer Datei oder einem Nicht-Terminal-Gerät umgeleitet oder zu einem anderen Befehl weitergeleitet zu werden), ist -C impliziert. Das Ausführen von ls -C ist also dasselbe wie das Ausführen von ls. Sie sind jedoch nicht äquivalent, wenn ls umgeleitet oder weitergeleitet wird. Zum Beispiel:

[email protected]:~/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

...

[email protected]:~/firefox$ ls | less

application.ini
blocklist.xml
chrome
chrome.manifest
components
crashreporter

...

Im Gegensatz dazu wird ls -C (oder -l) in Spaltenform ausgegeben, unabhängig davon, um welche Art von Gerät es sich bei stdout handelt. ls -C | less sieht aus wie die Top-Ausgabe (aber durch less , natürlich).

-F

Der hauptsächliche sichtbare Unterschied zwischen ls und l beruht auf dem Flag -F, wodurch ls symbolische Suffixe (sogenannte Indikatoren) an die angezeigten Einträge anfügt. Diese Anzeigen geben an, um welche Art von Datei oder Verzeichnis es sich handelt.

Vergleichen Sie dies mit der Ausgabe des ersten oben genannten Befehls ls:

[email protected]:~/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 (d. h. ausführbar ist Berechtigungen ).
  • Das Fehlen eines Indikators bedeutet, dass der Eintrag eine normale Datei ist, die nicht ausführbar ist.

Es gibt mehrere andere Indikatoren:

Das Flag --classify und --indicator-style=classify entsprechen -F.

Source: GNU Coreutils manual , Abschnitt 10.1.5 Allgemeine Ausgabeformatierung

Zusammenfassend ist l (ls -CF) ähnlich, aber nicht dasselbe wie ls.

Es ist auch gut zu beachten:

Der gleiche Text kann sowohl ein regulärer Befehl als auch ein Alias ​​sein.

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 Farbe angewendet wird, wenn stdout nicht umgeleitet wird oder wenn es sich um ein Terminal handelt, sodass die Escape-Codes für Farben so gut wie garantiert nicht falsch interpretiert werden).

Nach diesem Prinzip ist ls selbst ein Alias.

[email protected]:/$ alias ls
alias ls='ls --color=auto'

Welcher Befehl wird also wirklich ausgeführt, wenn Sie l ausführen? Dieser:

/bin/ls --color=auto -CF
  1. Die Shell ( bash ) löst Befehle auf, die keinen / enthalten, bis die erste Übereinstimmung in PATH vorliegt, die in Ubuntu für ls/bin/ls lautet.
  2. Aliase können Aliase enthalten. Die Aliasauflösung ist nicht rekursiv (ein Alias ​​kann sich nicht selbst aufrufen, obwohl er einen regulären Befehl mit demselben Namen aufrufen kann). Aber es unterstützt Verschachtelung .

Also wird l zu ls -CF aufgelöst, was zu ls --color=auto -CF aufgelöst wird.

Aliase können geändert werden.

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 im Advanced Bash-Scripting Guide und So speichern Sie meine "Alias" -Einträge für immer .

Verbunden: Was bedeuten die verschiedenen Farben in ls?

20
Eliah Kagan

Tatsächlich sind sowohl ls als auch l gleich

[email protected]:~/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
[email protected]:~/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 Sie alias ein. Die Ausgabe erfolgt dann wie folgt

[email protected]:~/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'
[email protected]:~/Pictures$ 
6
rɑːdʒɑ

Im Zweifelsfall type l:

l is aliased to `ls -alF'

(Siehe auch Was macht der la Befehl )

2
user2394284