• терминология Господа гуру-линуксоиды, я вас прошу в целях формирования у нубов более адекватной картины мира при написании туториалов разделять терминологически вызов shell builtin (типа cd) и программ (типа df). Хорошо использовать термины "команда" и "утилита", например.

    Правильный термин для многочленных конструкций вроде FOO && BAR | BAZ предлагаю обсудить в комментах.
    ♡ recommended by @juick

Replies (99)

  • @Self-Perfection, ну и собственно вопрос: [ -z "" ] это комманда или утилита?
  • @mrtron, Что выполнит шелл, когда ты в него это введёшь: $(which \[) или builtin? Так как будет выполнен built in, то это команда.
  • @Self-Perfection, ну и зачем забивать нубам этим голову?
  • @mrtron, лучше пусть в свободное время пойдут мусорку во дворе на osm отметят
  • @Self-Perfection, А может гуру-линуксоидам прекратить писать инструкции для нубов, а написать уже вместо этого нормальный дружелюбный шел, в котором нет кучи разного рода костылей, служащих одному и тому же — функции, альясы итп? Тогда и проблемы с терминологией убавятся, поглядишь.
  • @mrtron, Учи матан, чтобы просечь важность чёткой терминологоии и точных определений.

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

    Но если в прочитанных статьях он будет видеть, что wget называется не командой, а утилитой, то исподволь у него будет формироваться ощущение, что то, с чем он работает, не монолитный чёрный ящик, а многокомпонентная система, и тот же wget может быть и не установлен, например.

    И это важно.
  • @Self-Perfection, меня за матан отчислили. важность терминологии я не успел оценить.
  • @rkit, Давайте ограничим дискуссию практическими рекомендациями. Если вы считатете, что нужен более дружелюбный шелл — пишите. Или хотя бы напишите пост с перечислением проблем существующих шеллов и предлагаемых вами способов их устранения.
  • @Self-Perfection, А я что написал?
  • @Self-Perfection, практическая рекомендация — вместо шелла писать хотя бы на питоне, что ли
  • @rkit, Не вижу в вашем предудыщем комментарии описания анализа, из которого следовало бы, что одновременное существование функций и алиасов вредно и того, как это устранить.
  • @Self-Perfection, Ну очки поменяй, я не знаю. До первого чтобы дойти надо еще чуть-чуть подумать, но второе прямым текстом написано.
  • @netoneko, Для простых автоматизаций питон слишком толстый. Слишком много ест памяти и CPU просто для запуска.
  • @Self-Perfection, простых автоматизаций — это каких например?
  • @Self-Perfection, rm — утилита, rm -f filename — команда. Хули непонятного?
  • @Self-Perfection, ну это сомнительно. в плане про память и цпу. хотя питон конечно избыточен для работы с файлами и т.п.
  • @netoneko, Автоматизаций уровня "запустить такую-то команду с такими-то параметрами", видимо. Альясы не совсем подходят, я же могу захотеть запустить это и не из консоли.
  • @mrtron, ну в плане работы с файлами шелл это полный пиздец, не умеет даже имена с пробелами в 2015 году
  • @rkit, Вы хотите шелл, в котором не будет ни функций, ни алиасов? Или только что-то одно из двух? Или что-то вообще третье, вместо и функций, и алисов, которое будет сочетать их свойства? Какой должен быть синтаксис у такой конструкции, как она должна себя вести?
  • @netoneko, cp "name with space" dir, не?
  • @Self-Perfection, алиасы на помойку
  • @netoneko, а чё? кто-то умеет лучше? в том же питоне любое имя файла надо взять в кавычки.
  • @kapsh, ахаха, а теперь в цикле (циклы там отдельный пиздец)
  • @netoneko, Почему?
  • @Self-Perfection, потому что они не несут никакой ценности
  • @netoneko, Вы можете сделать sudo alias, но не можете сделать sudo function.

    У алиасов своя область применения.
  • @Self-Perfection, ну вот видишь как глупо — надо выкинуть алиас на помойку, включить возможность делать sudo function
  • @netoneko, Я много пишу на шелле и у меня не было проблем с обработкой именов файлов с пробелами, после того как я понял, как шелл работает. Покажите пример — исправим.
  • @netoneko, mr_tron@x120e /tmp/1 % for i in 'fdgfd gfd gdf g' 'dhg kdfjh gdfg'; do ls -l $i ; done
    -rw-rw-r-- 1 mr_tron mr_tron 0 Mar 7 16:35 fdgfd gfd gdf g
    -rw-rw-r-- 1 mr_tron mr_tron 0 Mar 7 16:35 dhg kdfjh gdfg
  • @netoneko, pastebin.com
    Я, наверное, не очень понимаю, о чём ты.
  • @Self-Perfection, ну да, надо задрочить криптознания и считать, что это нормально — писать лишние кавычки и прочее говно
  • @netoneko, Это можно сделать только если сделать sudo встроенной командой шелла. Что в общем, плохая идея.
  • @kapsh, начнем, что “$f” это идиотский пережиток прошлого
  • @netoneko, Аргументируй.
  • @netoneko, надо выкинуть алиас на помойкуИ sudo следом.
  • @netoneko, а есть примеры юзабельных консольных языков с меньшим количеством синтаксического сахара?
  • @netoneko, Надо прочитать нормальный годный туториал перед работой с чем-то, а не познавать это методом проб и ошибок. Годных туториалов я, впрочем, не видел. Что есть в сети качественно объясняющего кажется слишком размазанным и длинным, так что давать на это ссылку новчикам не хочется.

    Даже подумываю сам написать.
  • @kapsh, все просто — если итерация идет по именам файлов, то при передаче утилите имени файла все должно работать безо всяких приведений типов
  • @rkit, И сидеть под рутом всё время? Сами пользуйтесь такой системой, а мне хочется себя чувствовать более защищённым.
  • @mrtron, так нужно больше сахара, потому что старый уже слипся и протух — концепция нетипизированного вывода в 2015 году это абсолютный, стыдный ад
  • @netoneko, да-да! больше типизированного вывода. а то скучно и не поебаться совсем стало.
  • @Self-Perfection, для большинства атак рут и так не нужен
  • @mrtron, ага, парсить каждый раз нетипизированный текстовый вывод всякого консольного говна — это, конечно, “не поебаться”
  • @netoneko, Итерация идёт по строкам. То, что в этих строках могут быть и имена файлов — всего лишь совпадение.
  • @kapsh, ты понимаешь, что когда value превращается в array автоматически — это ненормально?
  • @netoneko, это плата за простоту синтаксиса при работе с файлами без пробелов
  • @netoneko, В многопользовательской системе разделение прав пользователей и неиспользование по-умолчанию прав суперпользователя нужно уже хотя бы для защиты от пользовательской ошибки. Мне вот стрёмно сидеть на продакшен серверах под рутом, так и кажется что вот-то по ошибке не ту команду из истории выполню и пока-пока 100-500 хренабайт важных файлов (которые может и есть в бэкапе, но доставать их оттуда геморрой и простой).
  • @Self-Perfection, я тут кстати недавно в продаешене чуть базу не дропнул. хорошо лишний символ сломал синтаксис :)
  • @mrtron, где там простота синтаксиса-то? ключи команд от значений или имен файлов никак не отличаются, каждый дрочит как может, разбирает этот массив строк по своему разумению. никакой простоты тут нет, только ад, только хардкор
  • @Self-Perfection, “Мне вот стрёмно сидеть на продакшен серверах под рутом”, команда из истории… ты о чем вообще? почему ты вообще на продакшен серверах что-то делаешь не через automation tool, предварительно протестировав на staging?
  • @netoneko, ну я не знаю ни одного языка где будет работа с файлами такая же быстрая как в баше. может у тебя есть примеры?
  • @mrtron, ты под быстрой работой с файлами подразумеваешь дебаг однострочников с помощью отладочной печати или что?
  • @netoneko, а если у тебя на сервере какие-то проблемы надо продиагностировать ты через что это делаешь? через automation tool?
  • @mrtron, запустить рядом такой же, этот из продакшена убрать и диагностировать
  • @netoneko, программист что ли? Потому что без багов ничего не бывает, и админам постоянно приходится разгребать за внезапно заглючившим жокорупо написанным софтом.

    Сделать очистку старых записей? Зачем, их же будет мало! Что, внезапно их скопилось терабайты и место такими темпами закончится через час? А нам нужно 2 дня на доработку и ещё 1 день на тестирование.
  • @netoneko, виртуалки чтоли админишь только? иногда выводить сервер из под нагрузки по каждому чиху — херовая идея.
  • @Self-Perfection, успешные админы заходят и разгребают руками, ясно-понятно
  • @mrtron, ну если у вас нет виртуализации, то только посмеяться можно или посочуствовать
  • @netoneko, не все люди админят стайки из сотен и тысяч однотипных машинок.
  • @mrtron, у тебя что, уникальные, настроенные руками машины? и что ты будешь делать, когда она помрет? настраивать снова?
  • @netoneko, И такое бывает... 3-5 машин с уникальными ролями.
  • @Self-Perfection, И сделать систему, где не надо писать что-то в консоль от имени рута. Потому что вся эта "защищенность" это бред собачий. Получил права ползователя, написал в bashrc что-то в духе alias sudo=sudo evil_code , юзер, хлопая ебалом, ввел sudo some_shit, ввел пароль, и вся твоя защищенность.
  • @rkit, во многих системах sudo вообще без пароля, потому что там крутится один сервис и собственно рут ценности не представляет
  • @netoneko, можешь посочуствовать. виртуалки лет 6 назад хреново работали из-за эмуляции ring 0. с тех пор ситуация поменялась к лучшему, но МТС не хочет опять пробовать виртулизацию. прошлая попытка перейти на виртуалки стоила слишком дорого.
  • @netoneko, помрёт — накатить новую из паппета. но просто так гонять туда-сюда боевых абонентов — пиздец
  • @mrtron, звучит очень печально на самом деле
  • @mrtron, ну вот видишь, паппет есть, не все так плохо
  • @netoneko, А потом этот один сервис начинает на всю сеть раздавать что-нибудь инфицированное, правильно.
  • @netoneko, Да и как будто всё администрирование ограничвается корпоративным продакшеном. Личный компьютер/смартфон тоже бывает в администрировании нуждается.
  • @rkit, так он и без рута будет раздавать, рут-то чем поможет?
  • @netoneko, Вообще где-то что-то такое я видел. Но сейчас ничего кроме Hotwire (обзор rus-linux.net ) не находится. Ну присоединяйтесь, пилите, распространяйте...
  • @mrtron, консольных языковРукалицо
  • @vt, ок. языков у которых есть интерактивная оболочка.
  • @mrtron, forth
  • @Renha, не застал форт, но подозреваю, что замена башу для манипуляции с файлами из него как из дерьма пуля.
  • @mrtron, Вообще ipython внезапно предоставляет некоторое возможности, позволяющие его использовать более-менее в качестве шелла.

    Есть cd, автодополнение путей файлов по табу. Но использвать его в качестве шелла при работе желание не возникает, всё-таки слишком много обвязки приходится печатать для простейших операций.
  • @mrtron, Для манипуляции с файлами есть нормальные файловые менеджеры. Ну знаешь, такие штуки, где есть функция copy+paste, вместо ручного вбивания десяти путей к файлам.
  • @rkit, например? mc?
  • @rkit, Манипулиция с файлами это не только переименование/копирование, но и обработка содержимого. Решать задачу "удалить GPS координаты из EXIF фотографий, сделанных такого-то числа" вы тоже будете тыкая мышкой?

    Я пользуюсь файловыми менеджерами, но даже для переименования/копирования часто мне бывает проще открыть эмулятор терминала с шеллом, чем натыкивать это мышкой.
  • @Self-Perfection, Разумеется. Встроенным поиском найду файлы по дате, и просто перетяну их в командную строку, чтобы получить в ней список имен. Останется только дописать название команды.
  • @rkit, А если мне часто надо gps удалять, то я прямо в менеджере заведу специальную кнопку.
  • @rkit, Неубедительно, набрать <remove_gps> 20150101*.jpg по-моему гораздо быстрее, чем нажать мышкой в 3-4 места и два раза переключиться с мыши на клавиатуру.
  • @Self-Perfection, Так по дате или по имени? Ты в показаниях определись, няша.
  • @rkit, Ну если вы так уж настаиваете на дате, то анализировать ctime / mtime файла для определения даты снимка некорректно, они могут обновиться при копировании/обработке снимка.
    Значит нужно анализировать содержимое EXIF.
  • @rkit, а ведь казалось бы, всего то и надо что имя файла прочитать, прежде чем то писать
  • @Self-Perfection, Я настаиваю на том, что случай твой высосан из пальца, сам ты его никогда не делал. И не сможешь сделать, не погуглив предварительно. А значит ни о каких "набрать гораздо быстрее" речи быть не может.
  • @rkit, У меня специальный алиас даже заведён
    alias CLEANJPGGPS="exiv2 -M 'del Exif.GPSInfo.GPSLatitude' -M 'del Exif.GPSInfo.GPSLongitude' -M 'del Xmp.exif.GPSLongitude' -M 'del Xmp.exif.GPSLatitude' *.jpg"

    Да, мне удобнее вычищать из всех файлов в текущей директории, потому что обычно я все снимки, которое хочу куда-то выложить без привязки к координатам, копирую в отдельную директорию.
  • @Self-Perfection, Да, вот заведение папки, копирование туда-сюда, отсутствие миниатюр перед глазами — вот она скорость-то.
  • @rkit, Для работы конкретно с картинками берется какой-нибудь xnview. В нем все есть — и ексиф, и поиск по нему, и изменение размеров, и пакетная обработка, и поиск визуально похожих картинок, и вообще любая функция, для которой в шеле тебе придется сначала гуглить, а потом устанавливать какую-нибудь дополнительную фигулину.
  • @rkit, Эта дискуссия скатывается в весьма древний спор сторонников комбайнов и сторонников простых консольных утилит, допускающих комбинирование для выполнения сложных задач. Не вижу смысла продолжать.
  • @Self-Perfection, Цивилизованных людей против лицемеров, пользующихся веб браузером, вместо.
    lookupDNS | queryHTTP | renderHTML | dIsplay
  • @rkit, Вот и я о чём. Я этот аргумент раньше видел, да и вы наверняка себе представляете, что я мог бы ответить.
  • @rkit, вики. с тегами по ключевым вопросам, которые могут задать нубы
  • @Rainbow-Spike, наверняка такая уже есть. тогда развивайте её и пиарьте
  • @Rainbow-Spike, wiki at ubuntu.ru Я некогда заглядывал туда и уполз в печали.
  • @netoneko, сие называется "тестовый полигон"
  • @netoneko, домен, только домен