Comments 73
ls
, односимвольных?exa [options] [files...]
-?, --help show list of command-line options
-v, --version show version of exa
DISPLAY OPTIONS
-1, --oneline display one entry per line
-l, --long display extended file metadata as a table
-G, --grid display entries as a grid (default)
-x, --across sort the grid across, rather than downwards
-R, --recurse recurse into directories
-T, --tree recurse into directories as a tree
-F, --classify display type indicator by file names
--colo[u]r=WHEN when to use terminal colours (always, auto, never)
--colo[u]r-scale highlight levels of file sizes distinctly
FILTERING AND SORTING OPTIONS
-a, --all show hidden and 'dot' files
-d, --list-dirs list directories like regular files
-L, --level DEPTH limit the depth of recursion
-r, --reverse reverse the sort order
-s, --sort SORT_FIELD which field to sort by
--group-directories-first list directories before other files
-D, --only-dirs list only directories
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore
--git-ignore Ignore files mentioned in '.gitignore'
Valid sort fields: name, Name, extension, Extension, size, type,
modified, accessed, created, inode, and none.
date, time, old, and new all refer to modified.
LONG VIEW OPTIONS
-b, --binary list file sizes with binary prefixes
-B, --bytes list file sizes in bytes, without any prefixes
-g, --group list each file's group
-h, --header add a header row to each column
-H, --links list each file's number of hard links
-i, --inode list each file's inode number
-m, --modified use the modified timestamp field
-S, --blocks show number of file system blocks
-t, --time FIELD which timestamp field to list (modified, accessed, created)
-u, --accessed use the accessed timestamp field
-U, --created use the created timestamp field
--time-style how to format timestamps (default, iso, long-iso, full-iso)
--git list each file's Git status, if tracked or ignored
-@, --extended list each file's extended attributes and sizes
`ll` печатают через exa и запоминать ничего нового не надо.
И вообще, зачем тратить на это время, если есть exa?
Зачем тратить на это время, если есть stat?
В статье есть несколько удобных примеров для пользователей git (но есть же gitk и IDE), но в остальном — ls просто не забирает хлеб у штатных stat/getfattr/find, поэтому ставить еще одну программу, пока она не вошла в дистрибутив по умолчанию — нет особого смысла. Если мне нужна удобная и красивая навигация, разве не лучше поставить mc?
Было бы интересны примеры, как exa может заменить stat/getfattr, а примеры из статьи мне показались недостаточно убедительными, например этот:
Exa не просто знает, что такое симлинк, она может по симлинку найти и отобразить фактическое местоположение файла.
Так и ls тоже может:
$ ls -lF /etc/localtime /etc/resolv.conf
lrwxrwxrwx 1 root root 31 Feb 24 03:01 /etc/localtime -> /usr/share/zoneinfo/Europe/Kiev
lrwxrwxrwx 1 root root 39 Aug 5 2019 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
Зачем тратить на это время
Затем, что з/п автора поста прямо пропорциональна кол-ву букаф в день.
Стартапы и блокчейны уже разобрали на сегодня, поэтому переводит первое попавшееся под руку.
(статью такого же бедолаги на галерах)
Оригинальный автор — девушка в Индии: «She is an RHCSA and is working her way to RHCA.»
Будьте снисходительны.
Ну, и в оригинале нет такой вычурности, какая появилась при переводе. Про симлинки в оригинале было просто: «Exa understands symlinks and also points out the actual file.»
разве не лучше поставить mc
В mc вымораживает постоянные мусорные символы «OA» и прочие символы вместо ожидаемый функций клавиш когда жмешь Home, End или клавиши курсора, и эти символы потом ещё стирать нужно… кто-нибудь знает как с этим бороться?
export TERM=xterm
(или linux
) и всё работает в самом xterm
или из putty
, в последнем нужно выбрать в настройках Terminal/Keyboard/Function Keys ESC[n~
.
скорее всего шпукс не знает ваш новомодный TERM, нужно выбрать что-то типа того же xterm и все условно заработает
Если у вас не UTF-8, то попробуйте поставить en_US.UTF-8 (и выбрать utf8 в настройках ssh клиента).
на языке Rust, который хорошо зарекомендовал себя из-за высокой скорости работы, повышенной безопасности и качественной реализации параллелизма
Охренеть насколько важные параметры при разработке утилиты, рисующей в терминале список файлов.
Дерево прекрасно рисуется командой tree, симлинки вполне себе показывает и ls на дебиане почти что десятилетней давности. Разве что с гитом затык и выхлоп git status не настолько же читабелен. О чём кино-то?
Для ls
это может быть и не так важно, но вот если взять какой-нибудь grep в рекурсивном режиме — он будет делать это в один поток.
К сожалению, на с/с++ так и не осилили добавить в grep многопоточность, хотя есть варианты с костылями.
А на расте многопоточность делается легко и безопасно, собственно поэтому и пишут
на языке Rust, который хорошо зарекомендовал себя из-за высокой скорости работы, повышенной безопасности и качественной реализации параллелизма
на языке Rust, который хорошо зарекомендовал себя из-за высокой скорости работы, повышенной безопасности и качественной реализации параллелизма
Охренеть насколько важные параметры при разработке утилиты, рисующей в терминале список файлов.
Думаю, это примерно как пишут "ИГИЛ". Если это не институт гидродинамики им. М.А.Лавреньтева, то правильно должно быть "ИГИЛ*" с пометкой "запрещённая организация".
Так и тут, к любому упоминанию RUST приписывается список всех его известных свистелок (иначе никто же не оценит!)
на языке Rust, который хорошо зарекомендовал себя из-за высокой скорости работы,
При этом, exa гораздо медленнее работает, особенно с сортировками.
Дак в чем прикол то?
Или это первое апреля?
Но вывод ls по умолчанию [по мнению автора] не совсем приятен для глаз, поэтому приходится выкручиваться.
Вывод по умолчанию у обоих утилит абсолютно одинаков, лишь цветовые схемы чуток различаются
![](https://habrastorage.org/webt/2b/11/yu/2b11yuozpz453vu8eobzhg_d1mm.png)
При этом утилита быстрая, компактная и поставляется с одним единственным бинарником
ну давайте проверим, какая она компактная
$ du -h $(which exa) $(which ls)
1.4M /usr/bin/exa
140K /usr/bin/ls
как-то не впечатляет. Когда добавление пары незначительных функций приводит к увеличению бинарника в 10 раз, это говорит о мягко говоря не самом лучшем качестве кода (хотя чего еще ждать от проекта на расте)
хотя чего еще ждать от проекта на расте
А ведь так хорошо комментарий без этой приписки читался… У вас есть какие-то сведения о среднем низком качестве кода в проектах на расте?
Абсолютно согласен. Даже, если по аналогии сравнивать top
и htop
(они так же параллельны как ls
и exa
)
$ du -h $(which top) $(which htop)
108K /usr/bin/top
184K /usr/bin/htop
то htop — отличная альтернатива. Функционала больше и размер соответствующий. Но у exa
размер x10, а польза +20%.
Автору спасибо, но нет.
P.S. В инете везде пишут, что раст заменит С в будущем как системный язык, но если он генерит в 10 раз жирнее код, то пойдука я мимо.
Он не код жирнее генерит, он просто линкуется статически.
статический или динамический жир… какая разница? не нативные либы в системе тоже можно назвать жиром. Плюс, ls
работает в разы быстрее. Это разве не говорит о качестве?
Разница в том, что с ростом объёма кода объём "жира" не увеличивается.
Тут такое дело...
$ ldd `which ls`
linux-vdso.so.1 (0x00007fff689b3000)
libc.so.6 => /lib64/libc.so.6 (0x00007f056e780000)
/lib64/ld-linux-x86-64.so.2 (0x00007f056e978000)
у ls
жира нет ВООБЩЕ, она использует только libc. Сколько и какого жира rust положил в мегабайтный экзешник? Он точно там нужен?
[dependencies]
ansi_term = "0.12"
datetime = "0.5"
glob = "0.3"
lazy_static = "1.3"
libc = "0.2"
locale = "0.2"
log = "0.4"
natord = "1.0"
num_cpus = "1.10"
number_prefix = "0.4"
scoped_threadpool = "0.1"
term_grid = "0.1"
term_size = "0.3"
unicode-width = "0.1"
users = "0.11"
zoneinfo_compiled = "0.5"
В Rust своя собственная стандартная библиотека линкуется статически.
У ls весь жир в динамических библиотеках и в POSIX совместимой ОС.
Во FreeBSD есть директория /rescue, где на всякий случай собраны типичные утилиты со статической линковкой:
ls -l /rescue/ls
-r-xr-xr-x 146 root wheel 13587336 28 марта 15:02 ls*
И обычная, с динамической линковкой:
ls -l /bin/ls
-r-xr-xr-x 1 root wheel 33560 28 марта 15:02 /bin/ls*
Пока у Rust не появится стабильное ABI, о маленьких бинарниках можно забыть, как и у Go.
P/S Про Фряху наврал, там в /rescue один большой бинарник со всеми утилитами типа busybox. Но масштаб можно оценить.
Установка exaчуть чаем не подавился.
Всё предельно просто:
$ dnf install exa
Автор статьи превентивно считает, что у всех стоит «шляпный» дистрибутив.
EDIT: Претензия снимается, посмотрел оригинал статьи, там написано «Sudeshna Sur (Red Hat, Correspondent)». Вопросы отпадают.
Автор статьи превентивно считает, что у всех стоит «шляпный» дистрибутив.Ну вот тут, кстати, не соглашусь вообще: почему-то убунтуводам/дебианщикам писать apt install в каждой первой статье можно, а федорщикам/редхатовцам аналогичный dnf install — нельзя…
Это дискриминация дистрибутивами по RUST-овому принципу!
Пишу программу, использую Fedora (мне она больше нравится). После добавления некоторых новых фич, она стала медленно работать, я поэтому я решиль отпрофилировать её с помощью perf и FlameGraphs. Я смог их установить одной командой:
dnf install perf flamegraph flamegraph-stackcollapse-perf
. Всё заработало с первой попытки.Поскольку основной средой для запуска являются облачные виртуалки с Ubuntu, я решил, что надо бы отпрофилировать эту программу в одной из этих виртуалок. Каково же было моё удивление, что пакета perf нет вообще (надо ставить linux-tools-что-то там), после установки нужного пакета команда perf появляется, но не работает (потому что у неё нет в зависимостях нужных хедеров ядра), а FlameGraphs вообще отсутствуют как пакет, только клонировать с GitHub'а. Хорошо, что на момент запуска у меня уже были все нужные perl-пакеты, а то бы я вообще с ума сошёл.
Кстати, а ripgrep или хотя бы сам rust есть в вашем дистрибутиве? Правда интересно.
Да, ripgrep и rustc есть, и также perf-tools-unstable находится, но нет flamegraph.
В Debian такая же ситуация, только версии постарше.
Возможно всё есть в debian-unstable, но я склоняюсь к парадигме всегда использовать библиотеки из репозитория и только в крайнем случае собирать самому.
Для особых случаев есть возможность использовать PPA-репозитории.
P.S.: После обновления LM 20 -> LM 20.1, пакет exa появился, но все еще не хватает lsd.
но все еще не хватает lsdдаже шутить не стану
пожалуй добавлю, что в некоторых сборках (в альпине, к примеру) busybox весит в 2 раза меньше, чем этот exa
С другой стороны, ls из бизибокса не умеет прикольно так подсве…
стоп, а ведь он даже это умеет
Размер таки можно уменьшить:
https://habr.com/ru/post/305246/
P.S.: Свой скрин могу позже скинуть, сейчас не за компом.
Установка exa
Всё предельно просто:
$ dnf install exa
Command 'dnf' not found, did you mean:
command 'df' from deb coreutils
Try: sudo apt install <deb name>
$ sudo apt install exa
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package exa
Если собирать, то это добавляет ещё больше смеха к фразе про компактность этой эксы — т.к. не знаю, как конкретно у неё, а на средненьком RESTful-бэкэнде к проекту у меня раст, параллельно со сборкой бинари в 10 мегабайт, сваливает на диск ещё промежуточного выхлопа на 3.5 гигабайта :-)
В планах двигаться дальше: попробовать пособирать KDE, Firefox и Chromium…
А для адептов Gentoo мои подвиги — детский лепет.
~ emerge exa
* Last emerge --sync was Вс 4 апр 2021 09:35:01.
Calculating dependencies ... done!
>>> Verifying ebuild manifests
>>> Emerging (1 of 1) sys-apps/exa-0.9.0-r1::gentoo
>>> Installing (1 of 1) sys-apps/exa-0.9.0-r1::gentoo
>>> Recording sys-apps/exa in "world" favorites file...
>>> Jobs: 1 of 1 complete Load avg: 3.52, 2.42, 1.91
>>> Auto-cleaning packages...
>>> No outdated packages were found on your system.
* GNU info directory index is up-to-date.
Со скриншотами просто беда! Не замыленные версии есть?
Как будто бы кто-то просто переписал ls на rust и добавил 1.5 плюхи, а цель реклама очередного чего-то там на rust'е
Почему стоит использовать exa вместо привычной консольной утилиты ls