Ответы пользователя по тегу bash
  • Как сделать бекап папки скриптом в Linux?

    shambler81
    @shambler81 Куратор тега Linux
    Комментировать
  • Как написать скрипт для сброса сайта?

    ну дожидатья выполнения скрипт будет по умолчанию это леоко
    1 удалить rm -rf
    2. по умолчанию
    3. cp
    4. mysql + drop tables
    5 по умолчанию
    5. mysql -u**** -p*** dbname < test.sql ( кстати в таком варианте он дропнет все таблицы и запишет все с дампа)
    Ответ написан
    Комментировать
  • Как удалять файлы по маске в Centos?

    shambler81
    @shambler81 Куратор тега Linux
    вы не ответили в какой части есть отрывок, будем думать что в конце
    find . -type f  -mtime +7  -regex ".+190" -exec rm -r "{}" \;

    -type f - только файлы
    -mtime +7 старше 7 дней
    -regex ".+190" - любые символы в конце файла 190
    -exe - выполнить над ним
    rm -r "{}" - удалить файл который в {} вывод массива из файнд, короче подставляется имя файла которое соответствует всем вышесказанным условиям.
    Ответ написан
    1 комментарий
  • Как скрыть пароль mysql в 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 -uroot -p11111111 -e'show databases;' | grep -v information_schema | grep -v Database`; do mysqldump -uroot -pp11111111 $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  klondike-server завершен"; cat /var/log/sqlbackup.log;) | /usr/sbin/sendmail  viktor@7877796.ru
    ##################  Конец скрипта
    
    #  БЭКАП /etca
    test ! -d /var/backup/etc/ && { mkdir -p /var/backup/etc/ ; }
    DATE=`date +%F`;
    BACKUPPATH="/var/backup/etc";
    find $BACKUPPATH/ -mtime +60 | xargs rm -f; #удаляет предыдущие бэкапы старше 60 дней.
    tar -czvf "$BACKUPPATH/etc.$DATE.tar.gz" /etc/ > /dev/null 2> /dev/null;


    ну или вариант .
    #!/bin/sh
    # Пример пути до сайта /var/www/site.ru/web/
    SITEDIR="/var/www"                                  # Папка до названия доменаов
    WEB="web"                                           # Папка после названия доменов (если есть)
    DBCONN="bitrix/php_interface/dbconn.php"            # Откуда читать настройки mysql
    FTPUSER="111111111"                                   # Логин FTP сервера
    FTPPASS="111111111111111"                        # Пароль FTP
    FTPHOST="u113948.your-storagebox.de"                # сервер FTP
    FTPDIR="/11111.ru/site/"                             # папка на FTP
    TMPDIR="/var/backup/site"                           # Где будут храниться временные файлы
    DATE=`date +"%Y-%m-%d"`                             # Формат даты в имени файла
    DATEYM=`date +%Y`/`date +%m`                        # Второй форматы даты
    LIST=${1:-`ls -L $SITEDIR | grep -E ".*\.\w{1,5}" | grep -v "restore.php" | grep -v "klondike.php"`} # Название сайта, тут выбор или аргумент или, регулярка  можно убрать только -L ;)
    
    test ! -d $TMPDIR/$DATEYM && mkdir -p $TMPDIR/$DATEYM # создаем  структ уру каталогов если их нет
    
    for ELEMENT in $LIST
        do
                    if [ ! -f /$SITEDIR/$ELEMENT/$WEB/$DBCONN ];
                            then
                                echo " Файл $SITEDIR/$ELEMENT/$WEB/$DBCONN не найден, сайт будет без БД!"
                            else
                                    DBLOGIN=$(grep "^\$DBLogin =" $SITEDIR/$ELEMENT/$WEB/$DBCONN | cut -f2 -d'"')
                                    DBPASS=$(grep "^\$DBPassword =" $SITEDIR/$ELEMENT/$WEB/$DBCONN | cut -f2 -d'"')
                                    DBNAME=$(grep "^\$DBName =" $SITEDIR/$ELEMENT/$WEB/$DBCONN | cut -f2 -d'"')
                                    mysqldump -u$DBLOGIN -p$DBPASS $DBNAME > $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql && echo "Дамп БД $DBNAME будет сохранен в корне сайта"  ||  echo "Ошибка дампа базы данных " $DBNAME
                                    sed -i "/\/*40101 SET/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    sed -i "/\/*40103 SET/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    sed -i "/\!40111 SET/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    sed -i "/\!40014 SET/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    sed -i "/\!40000 ALTER/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    #echo "SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';" > $SITEDIR/$ELEMENT/$WEB/bitrix/backup/$DBNAME\-$DATE\_after_connect.sql
    
                    fi
    
        echo "Архивируем сайт $ELEMENT"
            tar -cvpzf $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz --directory $SITEDIR/$ELEMENT/$WEB --ignore-failed-read --exclude='./bitrix/tmp' --exclude='./bitrix/updates' --exclude='./bitrix/backup/*\.gz*' --exclude='./bitrix/backup/*\.tar*' --exclude='./bitrix/cache' --exclude='./bitrix/managed_cache' --exclude='./bitrix/stack_cache' --exclude='./upload/resize_cache' --exclude='./stats' . >> /dev/nool 2> /var/log/backup_error.log
            rm -f $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql # поскльку ложим на реальный сайт, ибо нормально добавить в архив не получитяс.
            #rm -f $SITEDIR/$ELEMENT/$WEB/bitrix/backup/$DBNAME\-$DATE\_after_connect.sql
    
            echo "Сохраняем $ELEMENT на FTP"
            wput  --basename=$TMPDIR --limit-rate=60000K --timestamping  --tries=2 $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz ftp://$FTPUSER:$FTPPASS@$FTPHOST$FTPDIR
            rm -f $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz
    
    echo -en "\n\033[37;1;41m Ссылочка:\033[0m \e[1;4;36mwget ftp://u113948-sub1:11111111111@$FTPHOST/$DATEYM/$ELEMENT-$DATE.tar.gz\e[0m\n\n" #ks05
      done
    rm -r $TMPDIR

    Данный вариант уже поддерживает аргумент в виде сайта котормоу нужно сделать дампbxbump site.ru, так же он демпит сам сайт со спецификой движка ( тут битрикс) берет данные прям с конфига, заливает на внешний фтп
    Если аргумента нет то будет дамп всех сайтов и всех бд к ним
    ну и дает ссылку в режиме RO уже для чтения с этого сервера.
    p.s требует доустановку wput поскольку можно ограничить скорость аплоада
    Ответ написан
    1 комментарий
  • Как удалиить папки вместе с файлами в Shell скрипте?

    shambler81
    @shambler81 Куратор тега Linux
    это самая знаменитая команда в линукс
    имеющая даже совю страничку на лурке и на вики
    wikireality.ru/wiki/Rm_-rf
    lurkmore.to/Rm_-rf
    Ответ написан
    Комментировать
  • Через Bash удалить самый старый файл на яндекс диске в определённой папке если файлов в ней больше 10, как?

    не нужно монтировать, этого может требовать политика безопасности на сервере
    а вот удаленно вполне себе можно, по сути все тоже самое .
    на кроне от рута монтируете получаете значения удаляете отмонтируете,
    Поскольку монтировтаь нужно в RW то естественно обычным юзерам права обрезаете. и все
    Вам могут понадобиться
    find -type f
    удалить самый старый файл
    rm -rf $(ls /var/backup/site | head -1)
    Если боитесь сразу выполнять, попробуйте что выдаст Вам команда
    ls /var/backup/site | head -1

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

    shambler81
    @shambler81 Автор вопроса
    не нравится реализация, я и так уже удалил милион говна,
    как минимум конфиг например читать прям переменные сразу, поскольку синтаксис переменных с башем совпадает, через read наверное, но я не делал, его ни разу, видишь 3 раза подряд лезу в один и то же файл, да еще и обрезаю потом , и присваиваю, в идиале просто считать их с файла, опять же архивировать бд приходится через жопу поскольку ее ложить приходится а потом удалят, да и tmpdir не нужен, по идее сразу в потоке делать, ;( нехрина ssd лишний раз мурыжить
    Ответ написан
  • Как можно отфильтровать вывод, по количеству символов в столбце?

    shambler81
    @shambler81 Куратор тега Linux
    cut - позволяет вам вырезать данные по символам, по полю или по столбцу
    собственно там вообще просто, разделитель у тебя пробел, выводишь первый столбец
    манов в инете вагон.

    Если еж гвоорить о grep то grep -Ev " ^[0-9][1,]" - от нуля до девяти 1 и более раз
    [0-9][3,4] - оно же от 3 до 4 цифр

    так же может быть полезным sed
    ну и awk
    Ответ написан
  • Как можно дописать скрипт на bash?

    Смысл проверять по тексту если код завершения ошибочный ?
    /opt/cprocsp/bin/*/certmgr -inst -crl -store root -file vguc2.crl && echo "ок" || echo " не ок"

    А вообще в задаче было бы не плохо и вывод показать
    Ответ написан
    Комментировать
  • Как посчитать количество обычных файлов в каталоге, у которых БОЛЕЕ 1 жёсткой ссылки (Linux)?

    shambler81
    @shambler81 Куратор тега Linux
    у жестких ссылок тот же айнод
    а следоватлеьно совпадений по айнд будет больше чем одно
    по сути можешь даже так сделат если совпадений айнод больше 10 то это и будет 10 файлов
    5c3b63782345b338441056.png
    Ответ написан
    Комментировать
  • Если как вывести 0 если Awk не нашел значение?

    shambler81
    @shambler81 Куратор тега Linux
    Если он не нашел то он вернет ошибочный код завершения с него можно и плясать, дешево и сердито.
    cat /countCodes | awk ' /'$1'/ {print $1} ' ||  echo "0"
    Ответ написан
  • Как с помощью команды grep сделать поиск строки только в определенных файлах?

    shambler81
    @shambler81 Куратор тега Linux
    find . -regex ".*\.conf" -exec grep -f "тут что ищем" {} \;

    получишь имена файлов в которых есть упоменание твоей строки
    А вот пример если тебе нужно заменить
    например во всех файлах поменять одно значение ( регулярка писалась для делбиана там несколько php.ini)
    find . -name 'php.ini' -exec sed -i 's/log_errors = Off/log_errors = On/g' "{}" \;
    Ответ написан
    Комментировать
  • Как правильно организовать grep?

    shambler81
    @shambler81 Куратор тега Linux
    cat 111.txt | grep 1 | grep 2 | grep 3
    А еше лучше покажи что есть и что нужно сделать
    Ответ написан
    Комментировать
  • Как организовать атомарную блокировку на основе lock-файла?

    shambler81
    @shambler81 Куратор тега Linux
    1. наличие файла команда test
    test -f /etc/pki/nginx/dhparam.pem && echo "файл /etc/pki/nginx/dhparam.pem уже есть, пропускаем его" || openssl dhparam -out /etc/pki/nginx/dhparam.pem 4096

    2. grep и && или|| в зависимости от требуемого кода.
    2. выйти из if или удалить
    3.ls
    Вообще все зависит от размера и сложности скрипта, я вам написал самый простой способ.
    Ответ написан
    2 комментария
  • Как написать скрипт на bash для мониторинга postgresql для zabbix?

    вот пример, тут и цикл есть и запрос в бд, думаю на основе этого ээ художества, сможешь создать свой скрипь.
    #!/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 -uroot -ppass -e'show databases;' | grep -v information_schema | grep -v Database`; do mysqldump -uroot -ppass $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  klondike-server завершен"; cat /var/log/sqlbackup.log;) | /usr/sbin/sendmail  viktor@7877796.ru
    ##################  Конец скрипта
    Ответ написан
    Комментировать
  • Как изменить имя папки при копировании?

    shambler81
    @shambler81 Куратор тега Linux
    find . -regex ".*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)" -print0 | xargs -0 cp --parents --target-directory ./tmp/backup

    Так можно скопировать картинки сохраняя структуру.
    Все что вам остается это переименовать файлы по пути.
    Ответ написан
    Комментировать
  • Как через php запустить sh файл?

    shambler81
    @shambler81 Куратор тега Linux
    Ответ написан
    Комментировать