Do czego służy polecenie l?

19

Na lmoim komputerze dostępne jest polecenie, które wydaje się nic nie robić. which lrównież nie produkuje. Czy to prawdziwe polecenie i czy faktycznie coś robi?

Armand
źródło

Odpowiedzi:

20

lto alias dla ls -CF, który działa inaczej niż zwykłyls .

-C

-Ctworzy lswydruk w formie kolumny. Gdy standardowe wyjście jest terminal (zamiast przekierowany do pliku lub urządzenia bez końca, lub wyprowadzony do innego polecenia) -Cjest domyślnie. Więc bieganie ls -Cjest takie samo jak bieganie ls. Ale są nie równoważne, gdy lsjest przekierowywany lub rurami. Na przykład:

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

...

Natomiast ls -C(lub -l) dane wyjściowe w postaci kolumn niezależnie od rodzaju urządzenia stdout. ls -C | lesswygląda jak górne wyjście (ale lessoczywiście na stronie).

-F

Główna widoczna różnica między lsi lwynika z -Fflagi, która powoduje lsdołączanie symbolicznych sufiksów (zwanych wskaźnikami) do wyświetlanych pozycji. Wskaźniki te identyfikują rodzaj pliku lub katalogu.

Porównaj to z wynikiem pierwszego lspolecenia powyżej:

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*

...

Tutaj:

  • / oznacza, że ​​wpis jest katalogiem.
  • *oznacza, że ​​wpis jest normalnym plikiem i jest wykonywalny (tzn. ma uprawnienia do wykonywania ).
  • Brak jakiegokolwiek wskaźnika oznacza, że ​​wpis jest normalnym plikiem, który nie jest wykonywalny.

Istnieje kilka innych wskaźników:

--classifyFlaga i --indicator-style=classifysą równoważne -F.

Źródło: Podręcznik GNU Coreutils , Rozdział 10.1.5 Ogólne formatowanie wyjściowe

Podsumowując, l( ls -CF) jest podobny, ale nie taki sam jak ls.

Warto również pamiętać:

Ten sam tekst może być zarówno zwykłym poleceniem, jak i aliasem.

Jest to powszechnie używane do określania opcji, które są powszechnie uważane zarówno za bardzo przydatne, jak i nieszkodliwe, takie jak automatyczne kolorowanie (gdy kolor jest stosowany, gdy nie stdoutjest przekierowany lub jest terminalem, więc kody ucieczki określające kolory są praktycznie gwarantowane, że nie zostaną źle zinterpretowane).

Zgodnie z tą zasadą lssam w sobie jest pseudonimem.

ek@Kip:/$ alias ls
alias ls='ls --color=auto'

Więc jakie polecenie naprawdę zostanie wykonane po uruchomieniu l? Ten:

/bin/ls --color=auto -CF
  1. Otoczka ( bash) usuwa poleceń, które nie zawierają /pierwszego spotkania znajdującym się w PATH, co w Ubuntu lsjest /bin/ls.
  2. Aliasy mogą zawierać aliasy. Rozpoznawanie aliasu nie jest rekurencyjne (alias nie może się nazywać sam, ale może wywoływać zwykłe polecenie o tej samej nazwie). Ale obsługuje zagnieżdżanie .

Więc lrozwiązuje, do ls -CFktórego rozwiązuje ls --color=auto -CF.

Aliasy można zmienić.

Te aliasy istnieją, ponieważ są domyślnie skonfigurowane w ten sposób, ale każdy użytkownik może zmienić swoje aliasy. Patrz man alias, rozdział 25 i załącznik M w Advanced Bash-Scripting Guide, a Jak uratować moje „alias” wpisów na zawsze .

Powiązane: Co oznaczają różne kolory w ls?

Eliah Kagan
źródło
6

Właściwie oba lsi lsą równe

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

dlaczego oznacza, że ​​przyczyną tego jest wbudowany alias systemowy. jeśli chcesz zobaczyć, otwórz terminal i wpisz, aliasa otrzymasz wynik w ten sposób

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$ 
rɑːdʒɑ
źródło
Zagadka rozwiązana :)
Armand,
6
@Alison li zwykły niels są takie same - po prostu zdarzyło się, że generują takie same dane wyjściowe dla tych konkretnych plików, ponieważ żaden nie był katalogami, plikiem wykonywalnym, dowiązaniami symbolicznymi lub węzłami urządzeń (a standardowym wyjściem był terminal).
Eliah Kagan
Możesz zobaczyć, alias l='ls -CF'więc to nie to samo. Ponadto, jeśli chcesz uzyskać bardziej zwięzły wynik, możesz uruchomić alias l.
wjandrea,