На моем компьютере есть команда l
, которая ничего не делает. which l
также не производит вывод. Это настоящая команда, и действительно ли она что-то делает?
На самом деле и 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 -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 Общее форматирование вывода
ls -CF
) аналогичен, но не совпадает с ls
. Также следует помнить:
Это обычно используется для указания опций, которые широко считаются как очень полезными, так и безвредными, например, для автоматической окраски (когда цвет применяется, когда stdout
не направлен или является терминалом, поэтому коды перехода, задающие цвета, практически гарантированно не быть неверно истолкованы).
ls
сам по себе псевдоним. ek@Kip:/$ alias ls
alias ls='ls --color=auto'
Итак, какая команда действительно выполняется при запуске l
? Этот:
/bin/ls --color=auto -CF
bash
) разрешает команды, которые не содержат /
, к первому совпадению, появляющемуся в PATH
, который в Ubuntu для ls
равен /bin/ls
. Итак, l
разрешается в ls -CF
, который разрешается в ls --color=auto -CF
.
Эти псевдонимы существуют, потому что они настроены таким образом по умолчанию, но каждый пользователь может изменить свои псевдонимы. См. man alias
, Глава 25 и Приложение M в Расширенном руководстве по написанию сценариев Bash и Как сохранить мой & quot; псевдоним & quot; записи навсегда .
Связано: Что означают разные цвета в ls?