Ответы пользователя по тегу bash
  • Как обработать результат команду через grep?

    shambler81
    @shambler81 Куратор тега Linux
    sudo -V | head -n 1 |awk '{ print $3 }'

    вывод
    1.8.21p2


    Теперь проверяем версию
    if [ "$(sudo -V | head -n 1 |awk '{ print $3 }')" = "1.8.21p2" ]; then
    echo "все сработало"
    fi


    Усложняем я так понимаю вам нужно исключить определенные версии для этого нужно будет или несколько иф сделать или эльсиф

    if [["$(sudo -V | head -n 1 |awk '{ print $3 }')" = "1.8.21p2" ]]; then 
      echo "все сработало 1.8.21p2"
    
    elif [[ "$(sudo -V | head -n 1 |awk '{ print $3 }')" = "1.0" ]]; then 
     echo "все сработало 1.0"
    
    fi


    Если четко понимать что вы хотите то можно и сделать в 1 строчку
    например
    Если не это, и не это то
    опишите что вы хотите к примеру если это версия выше определенной то тут могут быть проблем поскольку внутри уже буквы имеются
    Ответ написан
  • Как мне написать скрипт который будет выводить на экран СОДЕРЖИМОЕ файлов директории?

    shambler81
    @shambler81 Куратор тега Linux
    find /home/lalala -type f -exec cat {} \;
    find- найти
    /home/lalala - где
    -type f- файл
    -exec выполнить команду (фишка файнд)
    cat - принт файла
    {} путь до файла который найдет файнд
    \; закрывается файнд экранированный
    если тебе нужно еще и что-то найти в этих файлах то вместо cat ставь grep с тем что искать.
    Ответ написан
    Комментировать
  • Есть ли заготовка bash скрипта с прогресс баром?

    Все зависит от того для чего ты используешь прогресс бар
    к примеру ты собираешься повесить его на архивирование
    то тут будет пролома в том а что собственно в нем считать, время ты сам понимаешь рассчитать можно только примерно, притом сильно примерно, а если точно то по фату за это время ты можешь успеть архивнуть весь файл.
    Так что тут тебе придётся в лучшем случае считать прогресс в файлах попавших в архив и на основана этого уже строить прогресс.
    Правда для этого тебе прийдется посчитать количество файлов к каталоге, при этом исключить те каталоги которые ты исключил при архивирование.
    и строить прогресс архивирования уже по количеству файлов попавших в архив.
    Это можно сделать через pv
    У некоторых утилит есть свой прогресс бар.
    В общем проблема в том что собственно считать. в прогрессе. и что взять за единицу.
    Если же тебе нужне прогрес в том формате что идет движуха смотри я думаю
    То тут можно проще сделать проверять процесс на завершение раз в секунду и ставить к примеру .......
    В общем пиши что собираешся конкретно прогрессбарить ;)
    Ответ написан
  • Как реализовать в bash скрипте значение по умолчанию в read?

    shambler81
    @shambler81 Куратор тега Linux
    Комментировать
  • Как через регулярные выражения написать "x" встречается больше 1 раза не подряд?

    shambler81
    @shambler81 Куратор тега Linux
    x[^x].*x - вот так
    603e8bb0b2f53622710034.png
    Под важу же регулярку лучше составить так
    если разрешение встречается два раза
    [0-9]+x[0-9]+.+[0-9]+x[0-9]+
    603e8b102a206084925706.png
    [0-9]+x- цифры 1 раз и больше

    если же всю строчку
    https://regex101.com/r/jJenlF/1
    Ответ написан
    6 комментариев
  • Какой верный синтаксис цикла for в BASH?

    #!/bin/sh
    #скрипт бэкапа баз данных
    ###########################
    #Создаем папку для архивов.  -p не ругается когда папка уже есь test проверяет есть ли папка  для чистых логов
    test ! -d /var/backup/mysql/`date +%Y` && { mkdir -p /var/backup/mysql/`date +%Y` ; }
    test ! -d /var/backup/mysql/last && { mkdir -p /var/backup/mysql/last ; }
    
    #прячем от умных, и так не зайдут но всеже.
    chmod 600 /var/backup/mysql
    chmod 600 /var/backup/mysql/last
    
    # делаем сам дапм файлов sql, свежинькие файлы лежат всегда в ней, очень удобно не нужно заходить в архивы и искать там вчерашние базы, и логируется.
    for i in `mysql -u***** -p******** -e'show databases;' | grep -v information_schema | grep -v Database`; do mysqldump -u********* -p********* $i > /var/backup/mysql/last/$i.sql;done >> /dev/null 2>> /var/log/sqlbackup.log
    # Архивируем дамп, ну и логируем разумеется
    cd /var/backup/mysql/
    tar -czvf /var/backup/mysql/`date +%Y`/sqldump-`date +%Y-%m-%u`.tar.gz ./last >> /dev/null >> /var/log/sqlbackup.log
    #(echo "Subject: Бэкап mysql  server завершен"; cat /var/log/sqlbackup.log;) | /usr/sbin/sendmail  viktor@demo.ru
    ##################  Конец скрипта

    Ответ написан
  • Как написать .sh скрипт для копирования определенных файлов с определенным названием архива и в определенный каталог?

    правильно ли я понимаю что нужно скопировать определенные файлы но сохранить дерево каталогов ?
    дайте пару примеров было стало
    покажи пример нкскольких было стало
    Ответ написан
    Комментировать
  • Bash-script - SSH подключение?

    да без проблем десяток строк кода
    https://www.shellhacks.com/ru/ssh-execute-remote-c...
    так моно подключиться
    соответственно вам нужно сделать цикл в котором вы будете бежать по этим файлам и выполнять команду.
    вот пример цикла.
    Тут я захожу в бд получаю список баз и каждую из них отдельно бэкаплю.
    for i in `mysql -uroot -pпароль -e'show databases;' | grep -v information_schema | grep -v Database`; do mysqldump -uroot -pпароль $i > /var/backup/mysql/$i/`date +%Y-%m-%d`-$i; gzip /var/backup/mysql/$i/`date +%Y-%m-%d`-$i;done

    grep -v - исключает из массива
    Ответ написан
  • Как автоматически запускать проект при падение?

    shambler81
    @shambler81 Куратор тега Linux
    проблем нет но линукс это не винда тут так не принято
    если падает какой-то из демонов рестартуют именно его а не всю ос.
    Аптайм 1000 дней вполне себе адекватный аптайм для обычных домашних серверков.
    Так что рестарт всей ос это ты брось.
    Технология такая.
    1. проверяешь статусы httpd nginx и mysql обьем памяти место на диске и че там тебе нужно
    если они возвращяют тру то ничего если фелс то рестартуеш конкретный демон.
    делается это в одну строчку
    делается это очень легко
    команда $$ echo "true" || echo "false"
    К примеру если ты сделаешь
    service httpd status | grep "running" || service httpd restart

    где
    && - если команда завершилась с тру
    || если с фелс ( все это облегченый синтаксис)

    линукс это конструктор тут все легко и просто главное определись что тебе нужно
    так же уже есть много чего готового к примеру monit munin zabbix nagios и тд
    есть сторонние сервисы которыми можно тестить я к примеру мелким товарищям вот этих рекомендую
    Тут можно мониторить сервер из облака и посылать на него команд что очень удобно.
    monit-it.ru
    так сказать дешево и сердито. Бесплатного тарифа тебе хватит за глаза
    601b0b4594a91529890390.png
    Ответ написан
    3 комментария
  • Как изменить вывод grep?

    shambler81
    @shambler81 Куратор тега Linux
    find /etc/nginx  -type f  -exec grep -l 3dpaneli.ru {} \; | xargs ls -lah

    find - искать в каталоге
    -type f только имена файлов
    -execвыполнить команду с найденым файлом
    grep -l - не выводить сам греп а выводить имя файла в котором он нашел
    {} - то что на выводе у find
    \; - просто заканчиваем файнд
    |- вывод передаем следующей команде
    xargs ls -lah xargs почитай отдельно короче он передаст вывод пути файла на ls -lah и получаем все че хочеш
    5fd0f0daa8e29240627639.png

    если тебе нужно обрезать вообще все лишнее то тут уже можно awk в общем там уже будет проще удалить лишние колонки
    спасибо кэп, отметил как решенный.
    Ответ написан
    1 комментарий
  • Как сделать bash скрипт который устанавливает lamp сервер?

    shambler81
    @shambler81 Куратор тега Linux
    vestacp (бесплатный веб морад) в 1 клик
    brainycp (проприетарный но бесплатный) в 1клик
    ispconfig3 (бесплатный есть веб морда) + есть на гите скрипты а вот моя личная конфа
    bitrix vm ( бесплатный только центос и консольная морда) отличная оптимизция производительности, готовые вм машины на любую виртуализацию, есть и прсто sh скрипт
    и тд
    Все это ставаится баш скриптом с веб или консольной мордой. Все затебя уже сделали.
    Ответ написан
  • Как изменить права для папки (диска) в Linux?

    shambler81
    @shambler81 Куратор тега Linux
    изменить права на файлы

    find /tmp/you_papka -type d -exec chmod 755 {} ;\ - выставить права на все каталоги
    find /tmp/you_papka -type f -exec chmod 644 {} ;\ - выставить права на все файлы в этой папке и ниже

    chmod -R root:root /tmp/you_papka- владелец root группа root на все что в этой папке (опасная команда вводить только с полным путем иначе есть вариант снести права всей системы ооочень быстро работает.
    но это ответ на ваш вопрос, однако не совсем понятно что вы хотите сделать.
    ОПишите реальную задачу сдается вы делаете что-то не то
    Ответ написан
    Комментировать
  • Как сделать массовое переименование файлов в директории?

    shambler81
    @shambler81 Куратор тега Linux
    find /var/www/ -type f -exec mv {} {}_renamed \;

    find-рекурсивный поиск от заданного каталога и ниже
    /var/www- где искать, если в текущем каталоге то можно заменить на .
    -type f - только файлы
    -exec выполнить с найденным
    mv переместить
    {} то что найдено в данном случае имя файла
    \; - просто закончит команду.
    Проверить можно так, вместо переименовывания вы получите просто принт самих команд.

    find /var/www/ -type f -exec echo {} {}_renamed \;

    5fb18a8d63453365594996.png
    Отметить решенным, спасибо кэп.
    Ответ написан
    Комментировать
  • Что и как в bash?

    sublime3 - вполне себе пойдет, я пишу в vim но для старта куда удобней sublime
    для старта выучи что такое
    1. выучи команду
    man ls
    и
    ls --help
    пойми в чем их разница и вдолби в голову что это то с чего начинается любая работа в баш.

    В начале выучи что такое код завершения команды, ну и как следствие
    stdin
    stdout
    stderr
    Научись работать с этими потоками. без них никуда, да это проще чем кажется.

    НО нужно что-то подавать на эти потоки следоватлеьно тебе нужны
    ls
    cd
    pwd - нужна как ни странно
    tail -f - вывод в потоке
    дальше гугл плюс man и --help

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

    && - упрощеная конструкция возврата положительного кода завершения
    || -не тру завершение кода
    awk - тоже редактор потока
    sed - редактор потока
    ну и научись передавать все это художество |
    это вообще легко
    ну и xargs как апофиоз этого
    Далее уже можно IF учить и тд и тп но по факту у тебя уже будет
    1. работа с потоком ты ее понял и тебе нет проблемы получить вывод из sttderr его части сделать какое-то минимальное условие используя упрощеную ифку
    сед позволит тебе редактировать эти данные на лету.
    файнд позволит работать с кучей файлов по мкске и тд
    grep -без него ни ногой.

    Ну и да на последок тебе нужно понять как работают права в линук + владельцы и группы chmod chown
    то что запускаемость это атрибут

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

    shambler81
    @shambler81 Куратор тега Linux
    самый простой способ для разовых передач просто на вашем mc подключиться к внешнему ssh
    и скопировать ручками.
    логин и пароль как ввести я думаю вы знаете.
    5f916e6e87713949213591.png
    Собственно подойдет любой из протоколов FTP SFTP SSH ( ну фтп должен присутствовать на той стороне)
    Ответ написан
    Комментировать
  • Как в линукс переименовать файлы и папки рекурсивно?

    shambler81
    @shambler81 Куратор тега Linux
    ls -v
    более подробно писал тут
    https://klondike-studio.ru/blog/bitrixtar/
    Ответ написан
    Комментировать
  • Как оптимизировать тысячи картинок с условием?

    Не шибко работал с ImageMagick но на просторах интенета говорят что вполне себе хватает вот такой хрени \>
    Вот что то такое
    find * -iname '*.jpg' -print0 | xargs -0 mogrify -resize 800x800\> -monitor -format jpg
    Ответ написан
    Комментировать
  • Как отслеживать сжатые картинки?

    jpegoptim по умолчанию скипает те картинки которые он не можте обжать, короче он сам скипает уже обжатые.
    так же вы пропустите все jpg JPEG и тд посколкьу они у вас в регулярку не попадут.
    https://klondike-studio.ru/blog/optimizatsiya-kart...
    Ответ написан
    2 комментария
  • Почему не проходит авторизация в MySql из bash script?

    shambler81
    @shambler81 Куратор тега Linux
    в пароле может быть спец символ тогда нужно будет делать -p'.....' а не просто -p
    Ответ написан
    1 комментарий