Задать вопрос
  • Как с помощью Notepad ++ преобразовать текст?

    saboteur_kiev
    @saboteur_kiev
    volt111, Удалить можно, но ты же говоришь что тебе сперва надо по ним посортировать?

    Ты можешь вообще подумать логически и нормально сформулировать задачу, а не говорить вещи, которые противоречат самим себе?
  • Как с помощью Notepad ++ преобразовать текст?

    saboteur_kiev
    @saboteur_kiev
    volt111, В вопросе этого не было.
    несложно самостоятельно модицифировать мой пример
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Примитивный - это не попытка обидеть вашу любимую игрушку, это констатация факта. Если в python вы положите команду в переменную, она не начнет выполнятся при выводе на экран.

    А с чего вы считаете, что в баш вывод переменной на экран будет выполняться???
    $ A="echo B"
    $ echo $A
    echo B

    То есть ваша константация факта - это заблуждение.

    Верно. И у bash нет нормальных тест-фреймворков.


    Конечно, да. Но тут либо CI/CD решает 100% задач, либо приходится допиливать что-то. И, опять же, редко когда удается допилить требя строчками bash скрипта.

    баш - отличная вещь для того, чтобы связать несколько инструментов или допилить какие-то мелочи.

    Ну вот помимо существующих CI/CD, с радостью попробую kotlin script.

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

    А в чем проблема, если каждый инструмент будет лезть в github своим методом?

    В том, что этот метод нужно поддерживать в двух местах, вместо одного? Насобирать три-четыре таких места и никто не захочет это трогать.

    А если у вас 5 микросервисов, у вас будет 5 мест или одно?
    Непонятно что такое за разные места и в чем заключается сложность. Я редко встречал проекты, написанные один в один - как минимум бэк и фронт зачастую разные фреймворки, а то и разные языки программирования, вот уже два места вместо одного. И в чем собственно проблема?

    И как это решает то, что люди (девопсы) за*бутся апгрейдить ее постоянно ручками? Да никак, проекты тупо забивают и скедьюлят "апгрейд архитектуры" раз в миллион лет - ну потому что не будут же они обновлятся раз в месяц. А фиксы, нужные фиксы базы, релизятся раз в месяц, если не чаще.

    Фиксы для базы, которые могут вызвать несовместимость данных - выводить автоматом не рекомендуется в принципе. При этом автоматизировать апгрейд на том же баше - да нет никаких проблем. В этой штуке автоматизация сложна в первую очередь на организационном уровне, а именно - когда делать апгрейд, сколько времени он займет (потребуется ли конвертация самих данных), будет ли даунтайм приложения, если все пойдет не так, сколько времени займет откат назад, и соответственно согласование этих этапов.
    В первую очередь в апгрейде версии таких вещей как джава, версия ОС, базы данных и других third party вещей - это организационный момент, а не технический. Техническое обновление автоматизируется чем угодно, включая баш, ансибл, докер.. неважно.
    Вот вы пишете на фреймворке, а к нему выходят те же обновления уязвимости. Как вы его обновляете каждый месяц? Или фреймворк вы так часто не обновляете, и почему-то считаете что уязвимости в базе важны, а в фреймворке нет?

    Если вам в жизни удастся поуправлять самолетом, вы не станете пилотом.

    Управлял, но почему я не могу стать пилотом - непонятно.

    А вы пишите, что вполне нормально копировать все страницы памяти, для простейших операций.

    Где я это пишу???

    Но писать про это предлагая взамен полное копирование всех страниц памяти интерпретатора (fork) даже при элементарных операциях - это показывать полное непонимание на чем можно экономить

    Хм. вы понимаете как работает форк и что именно копируется? Это же не к башу вопрос, это в принципе к архитектуре ОС. При форк страницы памяти не копируются.

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

    Универсальность - обозначает то, что язык можно использовать для разных вещей, а не узкоспециализированных (как lua/scala). Баш достаточно универсален, другое дело, что он не такой мощный.

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Alex Wells,
    Но давайте поговорим не о копировании файла, а, например, о билде и деплое проекта.

    Простите, но какое отношение дефолтная оболочка имеет к билду и деплою?
    Докер это вообще не для этого. Любой язык программирования - тоже не для этого
    Для этого нужен не контейнер и не баш и не язык программирования в принципе, а любой CI инструмент - Дженкинс, тектон, тимсити, gitlab-ci и все другое - там и время записывается и пайплайны и все остальное. А вот уже под капотом может быть и баш и груви и докер и все что угодно. Но вы IMHO путаете цели и инструменты.

    Я про автоматические тесты.

    Автоматические тесты не имеют отношения к конкретному языку программирования.
    Каждый уважающий себя язык программирования имеет свои библиотеки и инструменты для юнит тестов и автотестов, поэтому тут не должно быть некоего универсального языка. Это должно решаться средствами того языка, на котором пишется проект. Ну простые примеры - юнит тесты для js и java запускаются собственно их сборщиками - maven и npm. А если это более сложные тесты, то они могут запускаться на виртуалках или в докере CI инструментом.

    Мне вот интересно:
    Из банального:
    - погрупировать таски
    - записывать время выполнения каждой мелкой таски
    - проверять что она не завалилась
    - репортить все это в какой-нить слэк в конце
    - делать ролбек в случае неудачи
    - подчищать за собой остатки

    Все это делается очень легко с помощью нормального языка. С bash это адская боль.

    Вот каким именно нормальным ЯЗЫКОМ вы это решаете, как девопс?
    Я это решаю в первую очередь CI/CD инструментом, в котором может использоваться и простые bash скрипты и сложные технические решения вроде GRP в оракле или kubernetes.

    То есть ваш пример вообще нерелевантен.

    Ну, например в проекте есть код, вытаскивающий актуальную версию чего-то там с помощью какого-нить github SDK. Потом эта версия понадобилась в каком-то скрипте. Если проект и скрипты на одном языке - это элементарно шерится. Если на разных - проще вообще не шерить.

    А в чем проблема, если каждый инструмент будет лезть в github своим методом? Главное авторизацию настроить. дженкинс будет лезть своим git плагином, джава своей библиотекой, bash - консольной утилитой. В чем собственно проблема? Вы же не хотите тянуть еще один какой-то универсальный мощный современный язык в каждый проект?

    Ну да. Как часто вы обновляте базы на продакшене? Девелоперы хотят делать это условно раз в месяц, но без контейнеров заниматся этим будут в лучшем случае раз в два-три года.

    Эм, не очень понятно что такое обновлять базу на продакшене и зачем это делать раз в месяц.
    База принадлежит рабочему приложению, она обновляется каждую секунду. Что вы подразумеваете под обновлением?
    Апгрейд версии? База в кластере, апгрейдим по очереди ноды, соблюдая инструкции совместимости и все. Контейнеры для баз данных подходят, если базы размером с цыпленка. А базы, которые физически требуют несколько часов на копирование - контейнеры это лишняя головная боль.

    Да нет, не использую. Над таким "облачным решением" обычно ноль контроля - оно падает когда захочет, обновляется только руками в дешборде, отстает по версиям от self-hosted.

    Значит у вас нет потребности в стабильности крупной базы, если self-hosted достаточна. Опять таки, в большом проекте апгрейдиться на каждую минорную версию совершенно неподходящее решение.

    Затем что обновлять его нужно одновременно у девов, QA, на тестовых, на стейдже, на продакшене. На каждом хосте ручками ставить нужную версию? А она же еще совпадать должна!

    httpd обычно одной версии, и редко когда обновляется именно версия httpd.
    Совпадать опять таки должна не всегда, httpd редко вызывает несовместимость, это же не php

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

    баш - отличный язык программирования для универсальных скриптов в линукс, и решает свою задачу быть отличным языком для того, чтобы быть оболочкой и скриптом для автоматизации рутины, а так же клеем между различными инструментами. И альтернатив у баш именно в этом плане - ksh и zsh
  • Как настроить CI/CD на виртуальный хостинг?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    Иван Кулаков, А в чем проблема с дампами?

    Тут прикол в том, что никто не знает вашу архитектуру и что в вашей базе можно делать.
    Если вам для локальной машины достаточно просто лазить в продакшен базу, то можно сразу в нее лазить. Если нужно быстрее, можно настроить репликацию прода в локалку напрямую.
    Если нужно работать с отдельным экземпляром базы, но чтобы он был максимально прод-лайк - ничего кроме регулярных дампов не остается.
    Дампы тоже можно автоматизировать - практически каждая уважающая себя база имеет инструменты командной строки для дампа и рековера или базы целиком, или возможно даже отдельных таблиц.
  • Как с помощью Notepad ++ преобразовать текст?

    saboteur_kiev
    @saboteur_kiev
    А зачем их удалять?
    В заменить вы выделяете текст, разделенный двоеточием.
    В результате вы указываете этот текст в нужном виде.

    $3 $4:2 означает - взять третий столбец, пробел, четвертый столбец, двоеточие, второй столбец.
  • Как настроить CI/CD на виртуальный хостинг?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    Так а в чем проблема через ftp или ssh заливать не вручную?
  • Как объединять сервера?

    saboteur_kiev
    @saboteur_kiev
    Телепатов на этом сайте нет.
    Сама программа умеет работать в режиме кластера?
    Или это просто рандомная программа, а ты почему-то считаешь что любую программу можно распарралелить на несколько серверов?
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Alex Wells,
    Я к тому и веду, что, имхо!!, это временно.

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

    Чтоже касается контейнера -
    Докер не является тем, что ставится из коробки во всех дистрибутивах, и в контейнере опять таки надо что-то запускать.
    То есть вместо банального cp для копирования файла, ваше "мощное" решение - это установить докер, потом скачать базовый образ чего-то, потом запустить контейнер, потом придумать как в этом контейнере примаунтить все нужные диски, и потом внутри контейнера копировать?
    Вам самому не смешно от этой чуши?

    Только, опять же, джава легко тестируется, более удобна, легко шерит код между проектом и "скриптами" автоматизации, не использует никакие костыли.

    В баше костылей столько же, сколько и в джаве, а то и меньше.
    Баш тоже легко тестируется - +x и все
    Непонятно что такое шарить код между проектом и скриптом автоматизации - скрипты на баш это просто код.

    Это "используем современные подходящие технологии, без велосипедов и заебов". Да, намного проще запустить контейнер с клиентом мускула, что бы создать базу и намного проще обновить контейнер с httpd, чем пытатся сделать это руками/косячной автоматизацией на баш.

    Нет, это не подходящие технологии.
    Запускать базы данных в контейнерах - это в принципе не подходящая технология, ибо зачем контейнер для базы данных? Это может быть удобно для дев енвайрнмента, когда надо запустить базу и потом ее грохнуть, а потом запустить другую базу, возможно другой версии. Но в продакшене, база должна просто жить, используя доступные ресурсы самостоятельно. Именно поэтому в нормальной ситуации вы не ставите себе в облаке базу, а используете готовое облачное решение.
    "проще обновить контейнер с httpd, чем пытатся сделать это руками/косячной автоматизацией на баш"
    Зачем обновлять контейнер с httpd, если httpd это практически по дефолту уже установленный в системе сервис, и обновить его можно не косячным скриптом с контейнером, а штатным пакетным менеджером.

    Ну вот, можете посмотреть на баш-скрипт посложнее: https://github.com/sfkulyk/jks-manager/wiki
    код как код. Упрощенный для максимальной совместимости, можно было бы оптимизировать, но это не требуется - баш не про performance. Поэтому код написан так, чтобы джуниор мог разобраться.
  • Если я поставлю жёсткий диск старого компьютера на новый, не возникнет конфликта программ?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    Нет, они же на другом диске установлены в другую виндовс.
    Главное чтобы на компьютере запустилась виндовс с его родного диска, и тогда программы на другом диске - для него будут просто набором файлов, а не установленным софтом.
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    DevMan, Так я же про zsh и написал =)
    если zsh станет дефолтной оболочкой во всех популярных дистрибутивах, вряд ли кто-то пострадает, а большинство вероятно даже не заметит разницы.
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Vitsliputsli, либо вы не понимаете, как работает баш, либо не знаете что в баш даже отдельно существуют типы данных integer string и array. И внутренняя реализация этого вполне достаточна для баш скриптов.
    По делу вы видимо не хотите читать то, что вам пишут, и причисляете мне то, что я не говорил. Если вы делаете какие-то выводы про меня, указывайте мою цитату, чтобы показать на основании чего вы пришли к неверным выводам.
    Кроме того, я не сисадмин и в свое время работал с Си со всей заморочкой с указателями и работой с памятью.
    Но вот вы никак не хотите понять, что примитивизм - некорректное слово по отношению к тому, что баш - хороший инструмент для написания скриптов. И да, я считаю, что на баш можно писать довольно сложные скрипты для автоматизации, и это - часть программирования.

    ООП бесполезная трата ресурсов, ведь все можно сделать через if и for

    Не понимаю какое вообще отношение ООП имеет к if и for, вы точно считаете, что знаете что такое ООП? ;)

    Но, действительно, спорить бесполезно с человеком, кто не писал ничего сложнее скриптов автоматизации

    Ну так не спорьте с ними, вы же со мной общаетесь, или с кем-то другим?

    Понимаю, что для сисадмина все разработчики занимаются фигнёй, ведь все можно просто и легко сделать в bash.

    С чего вы так считаете?
    Я утверждаю совсем не это. Я утверждаю, что баш - это отличный скриптовый универсальный язык программирования, который одновременно является дефолтной CLI оболочкой в *nix, и на нем удобно программировать и простые скрипты и чуть более сложные. Но пытаться реализовать ООП в баш, или предлагать вместо него использовать такие вещи как python/perl и другое в качестве альтернативы - это оверинженеринг.
    Это вы принижаете возможности баш, упершись в единственный приведенный аргумент в виде реализации хранения переменных.
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Alex Wells,
    Не проще ли зафорсить версии ВСЕГО софта,

    Нет конечно. Как вы это сделаете в принципе? Посмотрите какой процент на тот же питон3 перешли?
    Посмотрите какой процент XP все еще крутится на десктопах.
    А что делать с кучей устройств - телевизоры, роутеры, и другие устройства, для которых обновления уже давно не выпускают?

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

    Какой смысл от миллиарда устройств с bash, если на одном из них не будет wget?)

    А wget никогда не был частью баш, да и редко когда он поставляется с дистрибутивами из коробки, поэтому тру программисты на баш используют curl ;)

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

    Да нет.
    Проблемы bash зачастую связаны с непониманием архитектуры линукс, от которой он напрямую зависит. И да, в баш есть вещи, которые исторически сложились и хотелось бы их исправить, но в любом языке это есть.
    Просто если хочешь писать на баш чуть больше hello world - ну так потрать хотя бы несколько недель на нормальное изучение, а не считай что достаточно 2 минуты погуглить. За 2 минуты погуглить можно найти готовое решение (и кстати из-за высокой совместимости, оно скорее всего будет работать, даже если его написали 10-20 лет назад), но не всегда будет понятно почему именно оно работает и почему надо делать так.

    Проблема большинства ООП программистов - оверинженеринг. Огромный оверинженеринг.
    Контейнеры - то есть чтобы запустить скрипт установки mysql или скрипт для обновления версии httpd вы будете устанавливать докер и запускать контейнер?

    Поэтому, IMHO альтернативы башу - разве что zsh. Баш это и язык программирования и язык автоматизации и стандартная и дефолтная cli оболочка.

    Если говорить об реальных современных альтернативах башу именно в его функционале, то нужно говорить о конкретных инструментах, которые действительно лучше - ansible/puppet/chef для оркестрации, или например Acronis вместо скриптиков с tar/gzip. И другие подобные штуки.
    Но все эти подобные штуки - крупный софт специализированный софт, а не универсальное решение.
    Зачастую платный или с неподходящей лицензией.

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

    Но.
    Банально, скопировать файл - проще в баш, чем в python и проще чем в джава.

    Банально, работать в командной строке - проще чем в баш, чем в интерпретаторе питона.

    Банально, написать stop/start скрипт - проще на bash. Даже в вашей java бутспринг под капотом запускает баш скрипт, который запускает java ;)

    Поэтому полностью универсальной альтернативы башу, которая лучше чем баш - не существует и врядли будет существовать как минимум в обозримом будущем, особенно учитывая что доля *nix растет и в чистом виде и в андроид/harmony/macos.
  • Программы для включения/отключения работы за компьютером?

    saboteur_kiev
    @saboteur_kiev
    ставится программа, которая запускается вместо стандартного проводника (рабочий стол) и выполняет функцию киоска.
    Я же говорю - гуглите "режим киоска под XP", или под что вам нужно.
    Многие решения платные, но можно поискать на торрентах или бесплатные варианты.
  • Как выдать команду пользователю?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Владислав, Так вы уже прочитали как работает PATH?
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Vitsliputsli, Примитивный анализатор ;))))) это смешно.
    я так понимаю, что общепризнанная терминология вам чужда, и "язык программирования" в ваших глазах это не то, что под этим воспринимают нормальные люди. Печально, думаю на этом нет смысла с вами продолжать разговор.
  • Как выдать команду пользователю?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Владислав,
    когда я ставил под рутом нвм он там и остался.

    неизвестно что и как вы ставили.
    PATH нужно настроить, для этого изучить что это такое.
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Марат Нагаев,
    Там есть немного про shell. Если коротко: shell - весьма жуткая вещь с кучей проблем и костылей.


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

    И про shell там написано человеком, который говорит не о том. На что он ругается? Что надо экранировать обратный слеш, если ищешь файлы у которых в имени есть обратный слеш? То, что это символ экранирования, и чтобы к нему нужно было обратиться его самого нужно экранировать для вас новость? Покажите как вы это будете делать в питон - тоже ведь надо будет писать \\.
    При этом в пример приводится команда find, которая не является частью bash вообще. Претензии к выполнению команды на удаленном хосте, через ssh, что тоже не является проблемой bash, или покажите , как вы сможете это сделать "красиво" на другом языке программирования.
    Причем он сам же оправдывается, что ЗНАЕТ как написать проще и удобнее (xargs), но умышленно пишет фигню, чтобы рассказать что экранировать надо и @ и \ (ну то есть все специальные символы, как будто в других языках программирования этого делать не нужно)
    Все примеры проблем что там приведены - в большей степени высосаны из пальца, и практически ни один из них не связан напрямую именно с bash, больше с gnu tools
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    Vitsliputsli,
    При этом bash и sh несовместимы.

    Серьезно? =)
    То есть вы хотите сказать, что шелл скрипт не запустится в bash, или вы в принципе понимаете значение слова "несовместимый"
    Наличие парочки башизмов (и ведь реально, кроме test больше ничего нет), не делает их несовместимыми.

    Назвать bash языком программирования у меня бы язык не повернулся,

    Очень печально, что вы так смотрите на этот мир. Это язык программирования по всем определениям. И он по-своему прекрасен.

    с точки зрения любого языка программирования синтаксис bash ужасен.

    Отличный, понятный, простой синтаксис. То, что он не заточен под ООП, не отменяет прелесть баш.
    Вы его с повершелл сравните, например.

    Но нужно понимать что это командный процессор, а не язык, что многое объясняет.

    Это именно язык.
    Чтобы называться языком программирования, должны быть циклы, условия и оперирование данными. Все это баш делать умеет. И умеет гораздо больше.
    Это отличный универсальный скриптовый язык программирования, библиотеками к которому становится любая консольная команда, особенно соблюдающая posix стандарты.

    Все ваши аргументы - исключительно личные предвзятости.