Что делает команда l?

На моем компьютере есть команда l, которая ничего не делает. which l также не производит вывод. Это настоящая команда, и действительно ли она что-то делает?

19
задан 3 February 2013 в 16:12

3 ответа

На самом деле и 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$ 
0
ответ дан 3 February 2013 в 16:12

В случае сомнений type l:

l is aliased to `ls -alF'

(см. Также Что делает команда la )

0
ответ дан 3 February 2013 в 16:12

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*

...

Здесь:

  • / означает, что запись является каталогом.
  • * означает, что запись является обычным файлом и является исполняемой (то есть имеет права на выполнение ).
  • Отсутствие какого-либо индикатора означает, что запись является обычным файлом, который не может быть выполнен.

Есть несколько других индикаторов:

Флаг --classify и --indicator-style=classify эквивалентны -F.

Источник: Руководство по GNU Coreutils , Раздел 10.1.5 Общее форматирование вывода

В заключение [ 1135] (ls -CF) аналогичен, но не совпадает с ls.

Также следует помнить:

Один и тот же текст может быть как обычной командой, так и псевдонимом.

Это обычно используется для указания опций, которые широко считаются как очень полезными, так и безвредными, например, для автоматической окраски (когда цвет применяется, когда stdout не направлен или является терминалом, поэтому коды перехода, задающие цвета, практически гарантированно не быть неверно истолкованы).

По этому принципу, ls сам по себе псевдоним.

ek@Kip:/$ alias ls
alias ls='ls --color=auto'

Итак, какая команда действительно выполняется при запуске l? Этот:

/bin/ls --color=auto -CF
  1. Оболочка ( bash ) разрешает команды, которые не содержат /, к первому совпадению, появляющемуся в PATH , который в Ubuntu для ls равен /bin/ls.
  2. Псевдонимы могут содержать псевдонимы. Разрешение псевдонима не является рекурсивным (псевдоним не может вызывать сам себя, хотя он может вызывать обычную команду с тем же именем). Но он поддерживает вложенность .

Итак, l разрешается в ls -CF, который разрешается в ls --color=auto -CF.

Псевдонимы могут быть изменены.

Эти псевдонимы существуют, потому что они настроены таким образом по умолчанию, но каждый пользователь может изменить свои псевдонимы. См. man alias , Глава 25 и Приложение M в Расширенном руководстве по написанию сценариев Bash и Как сохранить мой & quot; псевдоним & quot; записи навсегда .

Связано: Что означают разные цвета в ls?

0
ответ дан 3 February 2013 в 16:12

Другие вопросы по тегам:

Похожие вопросы: