Ответы пользователя по тегу bash
  • Почему при передаче аргумента в функцию у него обрезаются пробелы?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Возьмите параметр в кавычки, иначе команда echo не видит где заканчивается ваш параметр.
    Ну и если версия баш не древняя, то команда read сама умеет промпт выводить типа
    read -p "$1" var
    Ответ написан
    Комментировать
  • Есть ли open-source Bash скрипты, позволяющие собирать информацию с серверов?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    В крайнем случае интересуют любые исходники подобных сервисов на иных ЯП, в которых можно прокопаться и поглядеть, как оно изнутри работает.


    Так подучите системное администрирование линукс. Вся информация о хосте берется из /proc и /dev.
    Все системные утилиты оттуда все забирают и парсят.
    Банальные команды типа df, cpuinfo, free лазят именно там
    Ответ написан
    4 комментария
  • Существуют ли open-source скрипты для Linux для сбора информации о сервере?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    базовую информацию о железе собрать несложно, и это умеет практически любая система мониторинга в штатном режиме (экспортеры стандартных линукс метрик у всех систем, это обычно скрипты на баш/перл/питон/го)

    А вот про установленный софт, такое врядли возможно в принципе, ибо что-то может ставиться через пакет менеджер, что-то просто распаковываться, что-то копироваться, что-то ставиться из файла другим менеджером.
    Общего и единственного реестра среди разных линуксов нет. Путь установки может зависеть от организации.
    Поэтому тут нужно взять hand.sys и стандартизировать свою инфраструктуру, скрипт писать под нее.
    Ответ написан
    Комментировать
  • Скомпилировать Bash программу в exe?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Какая цель такой "компиляции", поскольку баш изначально не предназначался для компиляции, это скриптовый язык, и штатных средств для такого нет.
    Кроме того, баш собственно хорошо заточен на вызов внешних утилит, поэтому их все "вкомпилировать" в баш врядли возможно
    Ответ написан
    3 комментария
  • Как перехватить ввод extra-button в Zenity?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    вопрос не понят. Что перехватит, как перехватить?
    Вы тут просто вызываете внешнюю команду, для которой нужно указать набор переменных, а в options попадает аутпут этой команды, а не ее параметры
    Ответ написан
    Комментировать
  • Как добавить право записи для группы в Bash скрипте?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    /var/log может содержать логи с небезопасной информацией. Поэтому давать доступ группе надо только если все кто в группе доверенные лица.
    Или запускай скрипт от рута.
    Ответ написан
    Комментировать
  • Как выполнить код для каждого вхождения подстроки в строке?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    если после номера задачи идет и перевод строки, то это уже не нахождение в строке.
    от начала до не-цыфра простой регуляркой.
    Если все цифры начинаются с номера, то можно так

    sed -r 's/#.{0.1}\d*/replacement/g' file
    Ответ написан
    3 комментария
  • Как верно обработать результат функции которая возвращает boolean?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    if checkLocationExists "$path"; then
      echo "FOUND"
    else
      echo "NOT FOUND"
    fi


    да и функцию можно упростить

    checkLocationExists () {
      pathWithShieldingSlash=$(echo "$1" | sed 's/\//\\\//g')
      isPathExists=$(sed -n 's/.*\(location '"$pathWithShieldingSlash"'.*\).*{/\1/p' "$locations_path/$file_name")
      return [[ -z $isPathExists ]]
    }


    тут в принципе даже return не обязателен - вернет результат последней команды, но с return лучше читается
    Ответ написан
  • Выбор нужной строки с последующей обработкой?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    command2 "$(command1 | grep -oP "vm.*Z "| tail -n1)"
    Ответ написан
    Комментировать
  • Как вырезать слова из вывода?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    у меня так сработало
    sshd -T | grep -oiP '[a-z0-9-.]*etm@[a-z0-9-.]*'
    Ответ написан
    Комментировать
  • Как правильно написать bash alias?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Переменные в баш раскрываются не во время выполнения команды, а перед выполнением команды, вдобавок цифровые аргументы не относятся к алиасам, а относятся к командам, то есть так как вы пишете не выйдет.
    Пользуйтесь функциями, их тоже можно сохранить в ваш профайл, и они тоже автодополняются
    Ответ написан
    Комментировать
  • Как скрыть сообщения telnet?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    если они попадают в stderr, перенарпавить его, например
    telnet .... 2>/dev/null
    Ответ написан
    Комментировать
  • Как в jq bash вывести только первое значение ключа из одного словаря?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    для валидного JSON (а ваш пример невалидный, плюс кавычка во втором айпишнике не закрыта", можно было бы заюзать так

    jq '[.[][][].addr]|.[1]'

    spoiler
    { "addresses" : {
    "Network hidden ab4252cc-8e5f-5d76-86e7-618f3f18ac48": [
    {
    "version": 4,
    "addr": "123.12.1.123"
    }
    ],
    "Network 4df4332c-6a52-43b3-bdf3-653d6b6764a4": [
    {
    "version": 4,
    "addr": "123.123.12.123"
    }
    ]
    }
    }
    Ответ написан
    Комментировать
  • Как отправить процесс в фон?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Здравствуйте.
    На Ubuntu server после ввода команды bg <номер процесса> ничего не происходит, просто возвращается строка на ввод.

    Так и должна просто возвращаться строка на ввод. Во первых если процесс уже был запущен и работал в фоне, то вы ничего не делаете. Если он был приостановлен, он просто должен перейти в running.
    Но для того, чтобы вам помочь, было бы неплохо чтобы вы привели лог своей консоли, как вы выполняете jobs, как вы указываете номер процесса. То есть выполнить jobs, bg номер, jobs

    При вводе команды bg <номер процесса> на экране начинает отображается вывод этого процесса, при этом окно терминала наглухо зависает и я ничего не могу сделать, даже остановить процесс (ctr+C)

    Как докажете что окно терминала именно зависает?
    для начала, если вы запустили процесс в фоновом режиме, то Ctrl+C естественно не может его остановить. Он же в фоне выполняется. Скорее всего вы не понимаете, что вам доступен терминал, в котором вы можете вводить другие команды.
    Фоновый процесс просто может писать текст в терминал.
    Напишите вслепую clear, например, проверьте что экран очистился ненадолго.
    И запускать процессы в фон, которые шлют много текста в терминал - в общем случае бессмысленно
    Ответ написан
    Комментировать
  • Как в bash создать динамический select?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    select, for, while, until - это просто четыре команды, которые создают цикл.
    То есть
    for a in 1 2; do
     for b in 1 3; do
       select list; do
         while something; do
           break
         done
      done
     done
    done

    это нормальная работа всех циклов..

    А у вас в скрипте case или лишний или криво написан, как мне кажется.

    Не совсем понял задачу, но может попробуйте поковыряться в этом примере:
    jsonlist="$(jq '.[][]|keys[]' sites.json|tr -d \")"
    select action in ${jsonlist};do
      echo "[$action]"
      test "$action" == "title" && break
      newlist="$(jq ".[][][\"$action\"][]" sites.json)"
      echo "$newlist"
    done
    Ответ написан
    1 комментарий
  • Ошибка в задаче bash при изменении оболочек юзеров из файла. Как исправить?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Если у вас такая задача, то она непонятно чему учит.
    Слишком ненужные и длинные цепочки
    Итак.

    1. sed умеет сам открывать файлы. то есть вместо cat users.txt | sed можно просто sed users.txt
    2. учитесь смотреть промежуточные значения, тот же ваш $line перед выполнением
    3. Учитесь пользоваться sed без -i и смотреть промежуточный результат перед тем как он полезет в файл.
    4. Что у вас с кавычками?
    /^" $line ":/ это что?
    вы пытаетесь пользоваться регулярками без понимания что это такое?
    Вы вообще не понимаете как хотя бы одну строчку изменить через sed?

    Тут даже чинить нечего, в строчке с sed все неверно.

    for user in $(grep -vP "^(/s)*#" users.txt)
    do
       sudo sed -ir $user "/^$user:/s/\\bin\\sh/\\bin\\bash/" /etc/passwd
    done
    Ответ написан
    2 комментария
  • Как написать bash мониторинг файловой системы EXT4?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    16 tb это довольно большой размер. Не так часто файлы его достигают.
    Я бы разбил мониторинг на две части.

    Первая часть - find всех файлов которые больше 10 tb, например, и занесение их в базу. Раз в сутки, например.
    Вторая - stat по файлам из базы, выбрать частоту, которая устраивает.

    Базой может быть банально текстовый csv файл с timestamp, absolute path, size с каким-то разделителем.
    Или, например, influxdb с графаной.. на выбор

    Короче главная идея - разделить поиск в принципе больших файлов и более детальный и частый мониторинг когда они пересекут нужный размер.
    Ответ написан
    Комментировать
  • Как правильно подменить (скопировать) скрипта в самом скрипте?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Что значит "портится" - непонятно. Надо выяснить что происходит. Флешку кто-то вынимает, не размонтировав, или копирование фейлится
    Простой способ - копируй скрипт в medteco.sh.tmp и после того как скопировалось успешно, переименовывай.
    Можно добавить какую-нить верификацию чексуммы, для бОльшей надежности.
    Но сперва понять причину "порчения".
    Ответ написан
    Комментировать
  • Что не так в скрипте для копирования файлов по запросу из одной директории в другую?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    почитать документацию к команде read
    она читает данные не куда-то, а уже в переменную

    #!/bin/bash
    
    read -p  "please enter file names to copy:   " COPYFILE
    cp $COPYFILE /mnt/u/wsl
    Ответ написан
    3 комментария