Відповіді:
l
це псевдонім для ls -CF
, який веде себе інакше, ніж звичайнийls
.
-C
-C
робить ls
друк виводу у формі стовпця. Коли stdout є терміналом (замість того, щоб перенаправлятись на файл або нетермінальний пристрій або переносити на іншу команду), -C
мається на увазі. Отже біг ls -C
- це те саме, що біг ls
. Але вони не рівноцінні, коли ls
вони переспрямовуються або переносяться. Наприклад:
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
...
На відміну від цього ls -C
(або -l
) виводиться у формі стовпців незалежно від типу пристрою stdout
. ls -C | less
схоже на верхній вихід (але less
, звичайно, підказок).
-F
Основна видима різниця між ls
і l
пов'язана з-F
прапором, який викликає ls
додавання символьних суфіксів (званих індикаторів) до записів, які він відображає. Ці показники ідентифікують, що це за файл чи каталог.
Порівняйте це з результатами першої ls
команди вище:
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*
...
Тут:
/
означає запис - каталог.*
означає, що запис - це звичайний файл і виконується (тобто має виконуваний файл) права ).Є кілька інших показників:
@
означає, що запис є символічним посиланням (див. також man symlink
).|
означає, що запис є пристроєм FIFO (пам’ятайте, багато ресурсів в ОС, схожі на Unix, представлені записами файлової системи ).=
означає, що запис є розеткою .>
означає вхід - двері .--classify
Прапор та --indicator-style=classify
еквівалентні -F
.
Джерело: Посібник GNU Coreutils , Розділ 10.1.5 Загальне форматування вихідних даних
l
( ls -CF
) подібний, але не такий, якls
.Також добре пам’ятати:
Зазвичай це використовується для визначення параметрів, які широко вважаються як дуже корисними, так і нешкідливими, наприклад, автоматичне забарвлення (коли колір застосовується, коли stdout
не перенаправлений або є терміналом, тому коди евакуації, що вказують кольори, практично гарантуються, що їх неправильно трактують).
ls
сама по собі є псевдонімом.ek@Kip:/$ alias ls
alias ls='ls --color=auto'
То яка команда насправді виконується при запуску l
? Цей:
/bin/ls --color=auto -CF
bash
) розв'язує команди, які не містять /
першого, що з’являється в матчі PATH
, що в Ubuntu for ls
є /bin/ls
.Так l
вирішує, до ls -CF
якого вирішується ls --color=auto -CF
.
Ці псевдоніми існують, оскільки вони налаштовані таким чином за замовчуванням, але кожен користувач може змінити свої псевдоніми. Дивіться man alias
, Розділ 25 та Додаток M у Посібнику з розширеного сценарію Bash та як зберегти мої записи "псевдоніму" назавжди .
Пов'язане: Що означають різні кольори у л?
Насправді обидва ls
і l
рівні
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
чому означає, що для цього є вбудований псевдонім системи. якщо ви хочете побачити, відкрийте свій термінал і введіть, alias
тоді ви отримаєте такий вихід
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
і рівнини ls
є НЕ те ж саме - вони просто сталося , щоб зробити той же результат для цих конкретних файлів, так як не було жодного каталоги, виконувані, символічні посилання, або вузли пристрою (і стандартний висновок був термінал).
alias l='ls -CF'
так що це не те саме. Крім того, якщо ви хочете отримати більш короткий вихід, ви можете запустити alias l
.