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?

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?


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$ 

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,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.