LINUX.ORG.RU
ФорумTalks

GNU/Linux vs KISS

 


0

2

Безусловно, среди классических юниксовых утилит есть такие, какие сложно написать, не соответствующими KISS, например cat, ls.

Но буквально шаг в сторону и:

Команда поиска выглядит так:

find . -iname smth 2>/dev/null

Вопрос - зачем такие заклинания? Сравните с fd:

fdfind -gH smth .

Проще же в разы.

adduser – это вообще финиш. Команда требует ввести КОМНАТУ, почту, телефон… Где тут KISS, алё.

Кстати, юниксовый принцип «всё есть файл» - враньё. Учётка пользователя - это не файл. Почему-то. Хз почему.

Тоже касается man, nano, vim…

Хоть что-то из чуть-чуть сложных, хоть чуть-чуть сложнее cat, обычных утилит/программ линукса следует KISS ?

★★★★★
Ответ на: комментарий от lbvf50txt

Судя по тому что у них в коде - даже если видели, то не поняли.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Они реально дебилы, вообще ничего не соображающие.

Главное, что вы гений.

lbvf50txt
()
Ответ на: комментарий от lbvf50txt

Ну я особо не спорю. Но я грил про определённую аудиторию, что необходимость использовать регулярные выражения и традиционные инструменты неизбежна для постоянных пользователей юникса, и на этом фоне если использовать ripgrep/fd/fzf, то в них куча уникальных особенностей, собственного синтаксиса, идиом и острых углов. Ментальная нагрузка не упрощается, а удваивается, пусть медленно и незаметно.

Но это не значит, что двери для новых инструментов полностью закрыты.

kaldeon
()
Ответ на: комментарий от bread

В глобальном окружении как на войне — победитель получает всё.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 3)
Ответ на: комментарий от Stanson

Второе конечно не найдет, а Part.1.Movie.mp4

$ fd -e mp4                              
Desktop/Part.1.Movie.mp4
Videos/Big Puppy Grand Slam.mp4
Videos/Davis-50.mp4
Videos/Ловушки в дебюте. Защита Каро Канн.mp4
Videos/Мат.Конь.Слон.mp4
Videos/Мат.Слон.Конь.mp4
$ fd '.+\.mp4.+'     
Desktop/Movie.mp4 - Part.1
dmitry237 ★★★★☆
()
Ответ на: комментарий от dmitry237

Вроде когда-то проскакивала новость, что растишки договорились всё называть appname-rs или как-то так. Или мне показалось? В любом случае, такое имя это слишком уж вызывающе. Может просто старые названия захватывать как делают в uutils, чего церемониться? Впендюрить вам find совершенно несовместимый со старым, и чтобы все скрипты отвалились. Надеюсь, так и сделают.

bread
()
Ответ на: комментарий от dmitry237

Второе конечно не найдет, а Part.1.Movie.mp4

Это лор съел \r после .mp4 В торрентах иногда попадаются файлики с \r в конце имени.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от bread

Я об этом ничего не знаю и мне без разницы раст/нераст, я не программист, не из IT и не был даже близко.

$ fd '/fd\.\d\.gz' -p /
/usr/share/man/man1/fd.1.gz    # утилита
/usr/share/man/man4/fd.4.gz    # флоппи
dmitry237 ★★★★☆
()
Ответ на: комментарий от bread

В любом случае, такое имя это слишком уж вызывающе.

А в чём проблема? Оно свободно.

Если проблема в том, что оно перекрывает что-то локальное, то это более глобальная проблема.

Edit: Здесь бы помогло нечто более гибкое, чем PATH, чтобы можно было удобно использовать распространённые имена для нераспространённых действий.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от kaldeon

Проблема в том, что fd это устоявшаяся аббревиатура. Перегружать её какой-то хернёй мне кажется не слишком хорошей идеей.

bread
()
Ответ на: комментарий от lbvf50txt

Да есть куча утилит, заменяющих стандартные юниксовые и нормально работающие. fd, он же fdfind, как пример.

next_time ★★★★★
() автор топика
Ответ на: комментарий от MirandaUser2

Вообще-то, у fdfind умный case по-дефолту, так что ключ -i излишен, если паттерн написан без кейса

что касается диагностической информации - нет, это именно мусор, потому, что любому довольно очевидно, что любая утилита не сможет ничего найти в директориях, к которым нет доступа, simple stupid утилита не должна ничего выводить в этом случае

next_time ★★★★★
() автор топика
Ответ на: комментарий от chupasaurus

Уверен, что внутреннее

Почитайте доки по выньапи на эту тему, ваша уверенность «чутка» поубавиться.

в этом куске лапши.

Лапши? Вы сказали ЛАПШИ? Да там спагетти длинной с экватор.

anc ★★★★★
()
Ответ на: комментарий от next_time

В убунте ещё местами сохранился здравый смысл, надо же.

bread
()

2>/dev/null

Когда очень хочется насосать из пальца «сложность», героически превзойденную переписывателями.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от anc

Почитайте доки по выньапи на эту тему

Спасибо, я лучше Некрономикон в голос почитаю.

Хотя даже быстрый загул в документацию говорит, что Access Control Entry состоит из SIDов.

chupasaurus
()
Последнее исправление: chupasaurus (всего исправлений: 1)
Ответ на: комментарий от chupasaurus

Хотя даже быстрый загул в документацию говорит

Этим ваши познания и ограничены.

anc ★★★★★
()
Ответ на: комментарий от next_time

Вообще-то, у fdfind умный case по-дефолту,

ты определись уже, ты smart хочешь или stupid :-)

simple stupid утилита не должна ничего выводить в этом случае

ещё раз: на каком основании simple stupid утилита по умолчанию решает за пользователя, что пропуск в поиске этих директорий является некритичным для него?

По твоей логике все утилиты, которые обходят дерево файлов, при ошибках должны молчать, как рыба об лёд. Типа запустил tar, половина файлов в архив не попала, ну и ладно, зачем пользователю об этом знать.

MirandaUser2
()

Ну, во-первых KISS - это больше из религиозного. Ну типа должно быть, а тех кто помнил нафига - уже нет с нами;

Во-вторых, KISS это не про сложность софта, в случае с cat и ls ты просто натянул сову на глобус, понимая под легкостью операции сложность реализации. Просто открой кот cat'а (или сам напиши на любом ЯП - var = fread(file);printf(var);) и find'а (и запили свою реализацию);

В-третьих, не вижу никаких заклинаний, в обеих командах ты указываешь где, чо, как. Наоборот, find проще, потому что чуточку интуитивно понятнее;

В-четвертых, ты забыл написать альтернативы ко всему остальному.

windows10 ★★★★★
()
Ответ на: комментарий от windows10

find проще, потому что чуточку интуитивно понятнее

Правильная интуиция, это хорошо.

Помню долго читал мануал, не понимал почему в find regex на имя не работает, потом догадался спросить яндекс. Оказалось, что в регулярке надо учитывать путь. В отличие от «интуитивного», fd находит файл, соответствующий паттерну имени, а к найденному файлу прибавляет путь.

dmitry237 ★★★★☆
()
Ответ на: комментарий от dmitry237

Помню долго читал мануал, не понимал почему в find regex на имя не работает, потом догадался спросить яндекс. Оказалось, что в регулярке надо учитывать путь. В отличие от «интуитивного», fd находит файл, соответствующий паттерну имени, а к найденному файлу прибавляет путь.

Первый раз слышу что оно не работает.

root@gideon:~# find / -name "*apach*"
/mnt/supreme-dev/APP_SOURCES/PHP-8.1.14/sapi/apache2handler
/mnt/supreme-dev/APP_SOURCES/PHP-8.1.14/sapi/apache2handler/apache_config.c
/mnt/supreme-dev/APP_SOURCES/PHP-8.1.14/sapi/apache2handler/php_apache.h
/mnt/supreme-dev/APP_SOURCES/PHP-8.1.14/sapi/apache2handler/sapi_apache2.c
/mnt/supreme-dev/APP_SOURCES/PHP-8.1.14/sapi/cgi/tests/apache_request_headers.phpt
/mnt/supreme-dev/APP_SOURCES/PHP-8.1.14/sapi/cgi/tests/apache_response_headers.phpt
/etc/apparmor.d/abstractions/apache2-common
/etc/apache2
root@gideon:~# 

Хотя допускаю что возможно где-нибудь в bsd-utils, или как там оно называется - и не работает. У меня на маке find'у приходится указывать директорию для поиска, а в линуксах оно по умолчанию ищет начиная с текущей директории.

Знаете какое главное достоинство find'a? На него можно рассчитывать.

Так или иначе, к KISS'у это не имеет никакого отношения.

windows10 ★★★★★
()

adduser – это вообще финиш.

По умолчанию не ставится. По крайней мере, в Gentoo.

question4 ★★★★★
()

Кстати, юниксовый принцип «всё есть файл» - враньё. Учётка пользователя - это не файл. Почему-то. Хз почему.

То, что изобрели после Юникса, не всегда делали файлами. Сетевые интерфейсы, например. Или окна. Это пытался исправить Plan 9, но не взлетел, к сожалению.

question4 ★★★★★
()

Проще же в разы.

Simple, not easy.

skiminok1986 ★★★★★
()
Ответ на: комментарий от anc

С какой в опу «Амиги»?

Vim появился именно на амиге. Изначально расшифровывался как Vi IMitation.

skiminok1986 ★★★★★
()
Ответ на: комментарий от lbvf50txt

Ничего плохого в рекламе в социальных сетях нет. Маркетинг от слова рынок, базар, если кто-то зазывает на базаре в свою лавку клиентов, он ничего криминального не соврешает. Экономика как вы можете заметить рыночная.

Авторы fd хотят наших денег?

skiminok1986 ★★★★★
()
Ответ на: комментарий от lbvf50txt

Они сделали пакеты для Guix, Debian, OpenBSD и Manjaro c Devuan. А вот file.tar.gz они не видели.

Это сарказм? То есть видели, но специально сделали максимально неправильно? Стоит поостеречься от использования их продукта, а то мало ли где они ещё вредительством занимаются.

skiminok1986 ★★★★★
()
Ответ на: комментарий от windows10

Первый раз слышу что оно не работает

Вы показали пример без -regex

dmitry237 ★★★★☆
()
Ответ на: комментарий от skiminok1986

Авторы fd хотят наших денег?

Во первых я ничего ни про какую рекламу в социальных сетях не слышал. Но в самом факте рекламы нет ничего криминального.

Во вторых можно представить схему по которой комманда рекламирует свою бесплатную утилиту, делает себе имя и потом получает уже комерческие заказы.

Встраивать какие-то закладки в оpen source утилиту в такой ситуации это портить себе репутацию.

lbvf50txt
()
Ответ на: комментарий от lbvf50txt

Но в самом факте рекламы нет ничего криминального.

А кто-то говорил про криминал?

Во вторых можно представить схему по которой комманда рекламирует свою бесплатную утилиту, делает себе имя и потом получает уже комерческие заказы.

Судя по их коду, они заработают себе такую репутацию, что коммерческие заказы будут делать только очень далёкие люди.

Встраивать какие-то закладки в оpen source утилиту в такой ситуации это портить себе репутацию.

Там и закладок не надо. Достаточно просто писать наивный код.

skiminok1986 ★★★★★
()
Ответ на: комментарий от skiminok1986

Это сарказм? То есть видели, но специально сделали максимально неправильно?

Вы спорщики с реальностью откуда беретесь? Возьмите любой крупный проект с GitHub. Например утилиту gh. Там 98% будет иметь расширение. Это практически «все» файлы.

Анализ количество файлов с расширением в проекте gh

https://github.com/cli/cli

Посчитаем общее количество файлов исключая каталог .git.

# Nushell
~/tmp/cli> let files = ls ...(glob **/*) 
~/tmp/cli> $files |  where name !~ '.*\.git.*'  

2185 файлов включая каталоги.

Теперь почитаем сколько «чистых» файлов типа file.

# Nushell
$files |  where name !~ '.*\.git.*' | where type == file  

1871 чистый файл.

Теперь почитаем сколько файлов имеет расширение.

# Nushell
$files |  where name !~ '.*\.git.*' | where type == file | where name =~ '\.[a-z]{2,7}$'

1845 файлов имеет расширение типа *.go, *.xml, *.yaml, *.wixproj.

Итого:

# Nushell
(1845.0 / 1871.0) * 100 | math floor

98% файлов в проекте имеет расширение.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 2)
Ответ на: комментарий от skiminok1986

Судя по их коду, они заработают себе такую репутацию, что коммерческие заказы будут делать только очень далёкие люди.

Как я понимаю, вы себя относите к специалистам которые создают проекты гораздо более качественные и востребованные чем утилита fd.

До такой степени, что относитесь к разрабочтикам снисходительно и с высока. Видимо для вас 36k звезд на GitHub и 852 форка это давно пройденный этап, и не повод для гордости.

Где эти 852 форкнувших пользователя, а где вы? Как принято говорить в таких случаях «миллионы мух не могут ошибаться».

lbvf50txt
()
Ответ на: комментарий от lbvf50txt

Это сарказм? То есть видели, но специально сделали максимально неправильно?

Вы спорщики с реальностью откуда беретесь? Возьмите любой крупный проект с GitHub. Например утилиту gh. Там 98% будет иметь расширение. Это практически «все» файлы.

Вы игнорщики реальности откуда берётесь? Выше по треду уже определились, что с расширениями gh работает некорректно. Типичный растишка – приписать оппоненту то, чего он не говорил, уводя тред в сторону от неудобной темы.

skiminok1986 ★★★★★
()

adduser – это вообще финиш. Команда требует ввести КОМНАТУ, почту, телефон… Где тут KISS, алё.

Ну во первых, я такого не видел. Какими же дремучими юниксами вы пользуетесь?

Во вторых, наброшу на вентилятор:

Я мечтаю, чтобы товарища Поттеринга настигла волна вдохновения и он изобрёл userctl и groupctl, который будет управлять пользователями, заведёнными в виде unit-файлов. А для совместимости, будет на лету генерировать /etc/passwd и /etc/group, которые будут симлинками куда-то в /run

egzakharovich
()
Ответ на: комментарий от lbvf50txt

Как я понимаю, вы себя относите к специалистам которые создают проекты гораздо более качественные и востребованные чем утилита fd.

До такой степени, что относитесь к разрабочтикам снисходительно и с высока. Видимо для вас 36k звезд на GitHub и 852 форка это давно пройденный этап, и не повод для гордости.

А вот и «сперва добейся».

Как я понимаю, вы питаетесь исключительно разваренными и сгоревшими макаронами, ведь вы не являетесь шефповаром в ресторане с пятью мишленовскими звёздами и не можете оценить вкус блюда.

skiminok1986 ★★★★★
()
Ответ на: комментарий от skiminok1986

А вот и «сперва добейся».

Это не «сперва добейся», это «все *****, один я дартаньян». Вы ставите себя выше тех кто сдела 36k лайков и 852 форка, на основании чего?

У вас должны быть какие-то весомые достижения, или ваша критика должна содержать примеры. На данный момент, вы просто оскорбляете раразработчиков утилиты которые на порядок более квалифицированные чем вы.

lbvf50txt
()
Ответ на: комментарий от lbvf50txt

Это не «сперва добейся», это «все *****, один я дартаньян».

Вас кто-то в детстве обижал? Иначе почему обоснованная критика воспринимается так болезненно?

У вас должны быть какие-то весомые достижения, или ваша критика должна содержать примеры.

Примеры выше по треду имеются. Их достаточно, чтобы понять, что люди весьма приблизительно решают поставленные перед собой задачи.

На данный момент, вы просто оскорбляете раразработчиков утилиты которые на порядок более квалифицированные чем вы.

Пример оскорбления можно? А то выглядит как наглая и глупая ложь, которую легко опровергнуть, просто прочитав тред.

skiminok1986 ★★★★★
()
Ответ на: комментарий от lbvf50txt

В догонку.

Вы ставите себя выше тех кто сдела 36k лайков и 852 форка, на основании чего?

  1. Я себя не ставлю выше.

  2. Я критикую в силу того, что такой наивный код даже в тех мелких локальных конторах в худшем случае добрался бы только до feature branch. В обычном – не дошёл бы до коммита. В лучшем – не был бы написан до написания тестов (у нас не TDD ага).

Джуны могут так писать вполне. Мидлы уже не должны. Если этот проект для портфолио джуна в помощь поиску первой работы, то всё ок. Если же нет, то где он работал и работает сейчас?

skiminok1986 ★★★★★
()
Ответ на: комментарий от skiminok1986

Выше по треду уже определились, что с расширениями gh работает некорректно.

Наверное вы опечатались и перепутали утилиты gh и fd. Давайте проверим работает ли утилита fd некорректно.

Провиерил fd работает с поиском корректно. Далее.

P.S. Во время поиска через fdfind и фильтрации вывода ls в Nushell у меня было разночтение в 1 файл. Это происходило потому, что я ленился узнать length и просто читал последний индекс таблицы воспринимая его за количество.

# Nushell

~/tmp/cli> $files | uniq |  where name !~ '.*\.git.*' | where type == file | where name =~ '\.go$' | length

736


Шаг 1. Установим саму утилиту.

nala install fd-find

В моей система утилита fd называется fdfind.

nala show fd-find

...

 Please note: the executable and the associated manpage were renamed
 from ‘fd’ to ‘fdfind’ because of a file name clash.

Шаг 2. Перейу в каталог с утилитой gh.

GNU/Linux vs KISS (комментарий)

В этом каталоге я проводил анализ количества файлов с расширениями.

$ cd tmp/cli

Шаг 3. Проверка количества файлов с расширением *.go в проекте gh.

# Nushell
~/tmp/cli> $files |  where name !~ '.*\.git.*' | where type == file | where name =~ '\.go$'

1471 крайний индекс.

fdfind  -e go | wc -l

736 строк! Ого. Неужели и в правду косячит fd? А есил убрать дубликаты из $files?

# Nushell
~/tmp/cli> $files | uniq |  where name !~ '.*\.git.*' | where type == file | where name =~ '\.go$'

Крайний индекс 735, всего 736 файлов.

Хорошо.

Шаг 4. Количество *.yml файлов.

fdfind -e yml

pkg/cmd/extension/ext_tmpls/goBinWorkflow.yml
pkg/cmd/extension/ext_tmpls/otherBinWorkflow.yml

Дает два файла.

А через Nushell фильтрацию 4 файла.

# Nushell
$files | uniq |  where name !~ '.*\.git.*' | where type == file | where name =~ '\.yml$'

Включает в себя файлы начинающиеся с точки .golangci.yml и .goreleaser.yml.

Занчит надо читать документацию и скать со скрытыми файлами.

fdfind -H -I -e yml | wc -l

Поулчаем 14 файлов ищет еще и в .github.

Всё рабтает нормально. Удивительно быстро.

Шаг 5. Поиск файлов .txtar

$files | uniq |  where name !~ '.*\.git.*' | where type == file | where name =~ '\.txtar$'

71 крайней индекс, всего 72 элемента.

fdfind -I -e txtar | wc -l
72

72 строки

Ищем разницу. Экспоритруем вывод в файл .~/tmp/nu/txtar.list ~/tmp/nu/txtar_nu.list.

fdfind -I -e txtar | sort > ~/tmp/nu/txtar.list
# Nushell
~/tmp/cli> let $txtar = $files | uniq |  where name !~ '.*\.git.*' | where type == file | where name =~ '\.txtar$' | select name | sort-by name | get name
~/tmp/cli> $txtar |  each {  str substring 25..-1 } | save -f ~/tmp/nu/txtar_nu.list

Файлы совпадают, отсортировались по разному

 diff ~/tmp/nu/txtar.list ~/tmp/nu/txtar_nu.list
16d15
< acceptance/testdata/project/project-create-delete.txtar
18d16
< acceptance/testdata/pr/pr-checkout.txtar
19a18
> acceptance/testdata/pr/pr-checkout.txtar
35a35
> acceptance/testdata/project/project-create-delete.txtar

А-а-а-а-а. Точно в Nushell индексация начинается с 0 😀!

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 5)
Ответ на: комментарий от skiminok1986

Джуны могут так писать вполне. Мидлы уже не должны.

Это общие «наукоемкие» слова. Конкретики нет. Вся критика основана на том, что в утилиту добавлена возможность поиска по крайнему расширению файла.

Утилита работает удивительно быстро. Имеет достойную документацию. Пользуется популярностью.

Только что я протестирова утилиту, ошибок в работе не обнаружил. Скоростью работы более чем удовлетворен.

lbvf50txt
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)