Ответы:
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 для lsis /bin/ls.Так lрешает, к ls -CFчему разрешает ls --color=auto -CF.
Эти псевдонимы существуют, потому что они настроены таким образом по умолчанию, но каждый пользователь может изменить свои псевдонимы. См man alias, глава 25 и Приложение M в Расширенном руководстве Bash-Scripting, и как сохранить мои «Alias» записи навсегда .
Связанный: Что означают разные цвета в ls?
На самом деле оба 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.