Na l
moim komputerze dostępne jest polecenie, które wydaje się nic nie robić. which l
również nie produkuje. Czy to prawdziwe polecenie i czy faktycznie coś robi?
l
to alias dla ls -CF
, który działa inaczej niż zwykłyls
.
-C
-C
tworzy ls
wydruk w formie kolumny. Gdy standardowe wyjście jest terminal (zamiast przekierowany do pliku lub urządzenia bez końca, lub wyprowadzony do innego polecenia) -C
jest domyślnie. Więc bieganie ls -C
jest takie samo jak bieganie ls
. Ale są nie równoważne, gdy ls
jest 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 | less
wygląda jak górne wyjście (ale less
oczywiście na stronie).
-F
Główna widoczna różnica między ls
i l
wynika z -F
flagi, która powoduje ls
dołą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 ls
polecenia 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 ).Istnieje kilka innych wskaźników:
@
oznacza, że wpis jest dowiązaniem symbolicznym (patrz także man symlink
).|
oznacza, że wpis jest urządzeniem FIFO (pamiętaj, że wiele zasobów w systemach uniksopodobnych jest reprezentowanych przez wpisy systemu plików ).=
oznacza, że wejście jest gniazdem .>
oznacza, że wejście to drzwi .--classify
Flaga i --indicator-style=classify
są równoważne -F
.
Źródło: Podręcznik GNU Coreutils , Rozdział 10.1.5 Ogólne formatowanie wyjściowe
l
( ls -CF
) jest podobny, ale nie taki sam jak ls
.Warto również pamiętać:
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 stdout
jest przekierowany lub jest terminalem, więc kody ucieczki określające kolory są praktycznie gwarantowane, że nie zostaną źle zinterpretowane).
ls
sam 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
bash
) usuwa poleceń, które nie zawierają /
pierwszego spotkania znajdującym się w PATH
, co w Ubuntu ls
jest /bin/ls
.Więc l
rozwiązuje, do ls -CF
którego rozwiązuje ls --color=auto -CF
.
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?
Właściwie oba ls
i l
są 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, alias
a 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$
l
i 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).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
.W razie wątpliwości
type l
:(zobacz także Co robi polecenie la )
źródło