Простой и удобный шаблон для bash-скриптов выполняемых по расписанию
С самого начала моей работы системным администратором linux, я обнаружил, что cron не очень удобный планировщик задач. При этом практически безальтернативный. Чем больше становился мой парк серверов и виртуальных машин, тем больше я получал абсолютно бесполезных почтовых сообщений "From: Cron Daemon". Задание завершилось с ошибкой - cron напишет об этом. Задание выполнено успешно, но напечатало что-нибудь в STDOUT/STDERR - cron всё равно напишет об этом. При этом даже нельзя отформатировать тему почтового сообщения для удобной автосортировки. Сначала были годы борьбы с использованием разных вариаций из > /dev/null, 2> /dev/null, > /dev/null 2>&1, | mail -E -s '<Subject>' root@. Потом я нашёл Cronic - обёртку на bash, которая скрывает вывод запускаемой задачи, если она завершена успешно. Стало полегче, но обнаружилось, что от некоторых заданий всё же лучше получать сообщение "Task OK", чтобы не столкнуться в самый неподходящий момент с тем, что выполнение задания тихо сломано месяц назад. Постепенно копились и другие хотелки:
1. иногда требуется, чтобы задание было автоматически принудительно остановлено, если выполняется больше определённого времени;
2. иногда нужны гарантии, что в каждый момент времени запущена только одна копия задания;
3. бывает так, что запускать задачу нужно с рандомной задержкой по времени (такая дисперсия иногда нужна, чтобы не положить какой-нибудь сервис одновременными запросами с большого количества машин).
В какой-то момент я отложил в сторону cronic и написал свой шаблон для запуска периодических заданий, в котором реализовано всё, что перечислено выше.
🖼️ Ссылка на шаблон
🔨 bash_help
С самого начала моей работы системным администратором linux, я обнаружил, что cron не очень удобный планировщик задач. При этом практически безальтернативный. Чем больше становился мой парк серверов и виртуальных машин, тем больше я получал абсолютно бесполезных почтовых сообщений "From: Cron Daemon". Задание завершилось с ошибкой - cron напишет об этом. Задание выполнено успешно, но напечатало что-нибудь в STDOUT/STDERR - cron всё равно напишет об этом. При этом даже нельзя отформатировать тему почтового сообщения для удобной автосортировки. Сначала были годы борьбы с использованием разных вариаций из > /dev/null, 2> /dev/null, > /dev/null 2>&1, | mail -E -s '<Subject>' root@. Потом я нашёл Cronic - обёртку на bash, которая скрывает вывод запускаемой задачи, если она завершена успешно. Стало полегче, но обнаружилось, что от некоторых заданий всё же лучше получать сообщение "Task OK", чтобы не столкнуться в самый неподходящий момент с тем, что выполнение задания тихо сломано месяц назад. Постепенно копились и другие хотелки:
1. иногда требуется, чтобы задание было автоматически принудительно остановлено, если выполняется больше определённого времени;
2. иногда нужны гарантии, что в каждый момент времени запущена только одна копия задания;
3. бывает так, что запускать задачу нужно с рандомной задержкой по времени (такая дисперсия иногда нужна, чтобы не положить какой-нибудь сервис одновременными запросами с большого количества машин).
В какой-то момент я отложил в сторону cronic и написал свой шаблон для запуска периодических заданий, в котором реализовано всё, что перечислено выше.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍6✍3
Перезагрузка Asterisk по расписанию
В версиях Asterisk начиная с версии 1.4 периодически наблюдались проблемы с утечкой памяти, которые лечились с помощью перезагрузки сервера. Так как никто не застрахован от вероятных неизвестных багов, лучше для перестраховки перезагружать сервер IP - АТС раз в неделю (или чаще) с помощью скрипта.
По факту, в скрипте достаточно одной команды перезагрузки. Сделаем немного информативной нагрузки – добавим запись в лог – файл: мы будем записывать дату и время ребута с лог – файл. Итак, создаем файл reboot.sh:
Далее открываем этот файл для редактирования через vim редактор:
Открыв файл, нажмите «О» для редактирования. Вставьте код, указанный ниже:
После нажимаем комбинацию «:x!» для сохранения конфигурации. В данном скрипте:
Осталось только сделать работу скрипта по расписанию. Для этого мы воспользуемся планировщиком cron:
Зашедулим скрипт на выполнение каждую полночь в воскресение. Для этого, открываем для редактирования crontab файл:
В открывшийся файл добавляем:
Где
🖼️ Дочитать статью
🔨 bash_help
В версиях Asterisk начиная с версии 1.4 периодически наблюдались проблемы с утечкой памяти, которые лечились с помощью перезагрузки сервера. Так как никто не застрахован от вероятных неизвестных багов, лучше для перестраховки перезагружать сервер IP - АТС раз в неделю (или чаще) с помощью скрипта.
По факту, в скрипте достаточно одной команды перезагрузки. Сделаем немного информативной нагрузки – добавим запись в лог – файл: мы будем записывать дату и время ребута с лог – файл. Итак, создаем файл reboot.sh:
[root@asterisk ~]# touch reboot.sh
Далее открываем этот файл для редактирования через vim редактор:
[root@asterisk ~]# vim reboot.sh
Открыв файл, нажмите «О» для редактирования. Вставьте код, указанный ниже:
#!/bin/sh
LOGFILE=/home/admin/log_mail.txt
DATE="`date +%d.%m.%Y" "%H:%M:%S`"
echo "REBOOT :: $DATE :: Reboot is in progress" >> "$LOGFILE"
shutdown -r now
После нажимаем комбинацию «:x!» для сохранения конфигурации. В данном скрипте:
LOGFILE
- переменная, которая указывает на лог – файл;DATE
- записываем дату и время в указанную переменную;echo "…"
- записываем в лог – файл отметку о перезагрузке;shutdown -r now
- команда перезагрузки сервераОсталось только сделать работу скрипта по расписанию. Для этого мы воспользуемся планировщиком cron:
* * * * * команда для выполнения
- - - - -
| | | | |
| | | | +----- день недели (0 - 6) (Воскресенье=0)
| | | +------- месяц (1 - 12)
| | +--------- день месяца (1 - 31)
| +----------- час (0 - 23)
+------------- минута (0 - 59)
Зашедулим скрипт на выполнение каждую полночь в воскресение. Для этого, открываем для редактирования crontab файл:
[root@asterisk ~]# crontab -e
В открывшийся файл добавляем:
0 0 * * 0 /bin/bash /home/reboot.sh >/dev/null
Где
/home/reboot.sh
- полный путь к скрипту перезагрузки сервера. Нажимаем F2 и далее Yes. Задача на выполнение сохранена.Please open Telegram to view this post
VIEW IN TELEGRAM
👍14✍2🔥2
Использование команды Sleep в скриптах Bash в Linux
Команда sleep в Linux — одна из самых простых команд. Как видно из названия, его единственная функция — спать. Другими словами, он вводит задержку на указанное время.
Таким образом, если вы используете команду sleep с x, то следующая команда может быть запущена только через x секунд.
Команда Sleep имеет простой синтаксис:
Здесь суффикс может быть:
Команда sleep без суффикса считается в секундах
Предположим, вы хотите приостановить ваш bash-скрипт на 5 секунд, вы можете использовать режим sleep следующим образом:
В примере скрипта bash это может выглядеть так:
Если вы запустите его с помощью команды time, вы увидите, что скрипт bash на самом деле работал (немного) более 5 секунд.
Команда Sleep с суффиксом m, h или d
Вы можете указать время sleep в минутах следующим образом:
Это приостановит скрипт/оболочку на одну минуту. Если вы хотите отложить сценарий на несколько часов, вы можете сделать это с помощью опции h:
Даже если вы хотите приостановить скрипт на несколько дней, вы можете сделать это с помощью суффикса d:
Это может помочь, если вы хотите работать в разные дни или дни недели.
Команда sleep с комбинацией секунд, минут, часов и дня
Вы не обязаны использовать только один суффикс за раз. Вы можете использовать более одного суффикса, и продолжительность sleep является суммой всех суффиксов.
Например, если вы используете следующую команду:
Это заставит скрипт ждать 1 час 10 минут и 5 секунд. Обратите внимание, что суффикс s здесь по-прежнему необязателен.
🔨 bash_help
Команда sleep в Linux — одна из самых простых команд. Как видно из названия, его единственная функция — спать. Другими словами, он вводит задержку на указанное время.
Таким образом, если вы используете команду sleep с x, то следующая команда может быть запущена только через x секунд.
Команда Sleep имеет простой синтаксис:
sleep Number[Suffix]
Здесь суффикс может быть:
s
. Это по умолчанию.m
. минуты.h
. час.d
. день.Команда sleep без суффикса считается в секундах
Предположим, вы хотите приостановить ваш bash-скрипт на 5 секунд, вы можете использовать режим sleep следующим образом:
sleep 5
В примере скрипта bash это может выглядеть так:
!/bin/bash
echo "Sleeping for 5 seconds…"
sleep 5
echo "Completed"
Если вы запустите его с помощью команды time, вы увидите, что скрипт bash на самом деле работал (немного) более 5 секунд.
time ./sleep.sh
Sleeping for 5 seconds…
Completed
real 0m5.008s
user 0m0.000s
sys 0m0.007s
Команда Sleep с суффиксом m, h или d
Вы можете указать время sleep в минутах следующим образом:
sleep 1m
Это приостановит скрипт/оболочку на одну минуту. Если вы хотите отложить сценарий на несколько часов, вы можете сделать это с помощью опции h:
sleep 2h
Даже если вы хотите приостановить скрипт на несколько дней, вы можете сделать это с помощью суффикса d:
sleep 5d
Это может помочь, если вы хотите работать в разные дни или дни недели.
Команда sleep с комбинацией секунд, минут, часов и дня
Вы не обязаны использовать только один суффикс за раз. Вы можете использовать более одного суффикса, и продолжительность sleep является суммой всех суффиксов.
Например, если вы используете следующую команду:
sleep 1h 10m 5s
Это заставит скрипт ждать 1 час 10 минут и 5 секунд. Обратите внимание, что суффикс s здесь по-прежнему необязателен.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14✍7🔥3
Bash скрипт для отправки электронной почты со списком учетных записей пользователей, срок действия которых истекает через «X» дней
Политика принудительного применения пароля будет применяется большинством компаний, но период времени будет отличаться.
Обычно каждый админ использует 90-дневный цикл паролей.
Пользователь будет изменять пароль только на тех серверах, которые он использует, и он не будет менять пароль на серверах, которые он использует не часто.
В частности, большинство разработчиков забывают изменить пароль учетной записи службы, что может привести к нарушению обычных заданий, даже если они настроены для работы с аутентификацией на основе ключей SSH.
Аутентификация на основе ключей SSH и cronjobs не будут работать, если срок действия пароля учетной записи пользователя истечет.
Чтобы избежать этой ситуации, мы создали скрипт на bash, который отправляет вам список учетных записей, срок действия которых истекает в течение 10 дней.
В это руководство включены два скрипта bash, которые помогут вам собрать информацию о сроках действия пользователей в вашей системе.
🖼️ Ссылка на скрипт
🔨 bash_help
Политика принудительного применения пароля будет применяется большинством компаний, но период времени будет отличаться.
Обычно каждый админ использует 90-дневный цикл паролей.
Пользователь будет изменять пароль только на тех серверах, которые он использует, и он не будет менять пароль на серверах, которые он использует не часто.
В частности, большинство разработчиков забывают изменить пароль учетной записи службы, что может привести к нарушению обычных заданий, даже если они настроены для работы с аутентификацией на основе ключей SSH.
Аутентификация на основе ключей SSH и cronjobs не будут работать, если срок действия пароля учетной записи пользователя истечет.
Чтобы избежать этой ситуации, мы создали скрипт на bash, который отправляет вам список учетных записей, срок действия которых истекает в течение 10 дней.
В это руководство включены два скрипта bash, которые помогут вам собрать информацию о сроках действия пользователей в вашей системе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3✍2
Операторы Bash if: if, elif, else, then, fi
Если вы только начинаете изучать скриптовой язык программирования Bash, вы скоро обнаружите, что вам надо использовать условные операторы.
Другими словами, условные операторы определяют «если условие истинно или ложно, то сделать то или это, а если верно противоположное, сделать что-нибудь еще». Это самая основная функция любого условного оператора.
Эта статья познакомит вас с пятью основными предложениями оператора if , а именно if, elif, else, then и fi.
Первый просто открывает оператор if, затем вводит раздел, какие команды выполнять, если условие оператора было истинным, а else вводит, какие команды выполнять, если условие оператора было ложным. Наконец, fi закрывает оператор.
У нас также есть специальный elif, о котором мы узнаем больше далее. Начнем с простого примера.
В этом руководстве вы узнаете:
1. Как реализовать оператор if в командной строке Bash
2. Как такие операторы if также могут использоваться внутри скриптов Bash
3. Примеры, демонстрирующие работу if, elif, else, then и fi в Bash
Пример 1: простой оператор if в командной строке
В этом примере мы сравниваем один к одному.
Обратите внимание, что
Чтобы сделать обратное, можно использовать
В этом случае мы проверили неравенство, и, поскольку 0 не равно 1, оператор if верен, и команды после then будут выполнены.
Давайте немного изменим это:
Здесь мы ввели оператор else; какие команды выполнять, если условие в инструкции if оказалось ложным (или неверным).
Когда мы пытаемся запросить, не равно ли 1 (-ne) на этот раз 1, и поскольку 1 действительно равно 1, условие, сформулированное в этом операторе if, ложное, и мы сталкиваемся с нашим оператором else с выведенным совпадающим текстом.
🖼️ Дочитать статью
🔨 bash_help
Если вы только начинаете изучать скриптовой язык программирования Bash, вы скоро обнаружите, что вам надо использовать условные операторы.
Другими словами, условные операторы определяют «если условие истинно или ложно, то сделать то или это, а если верно противоположное, сделать что-нибудь еще». Это самая основная функция любого условного оператора.
Эта статья познакомит вас с пятью основными предложениями оператора if , а именно if, elif, else, then и fi.
Первый просто открывает оператор if, затем вводит раздел, какие команды выполнять, если условие оператора было истинным, а else вводит, какие команды выполнять, если условие оператора было ложным. Наконец, fi закрывает оператор.
У нас также есть специальный elif, о котором мы узнаем больше далее. Начнем с простого примера.
В этом руководстве вы узнаете:
1. Как реализовать оператор if в командной строке Bash
2. Как такие операторы if также могут использоваться внутри скриптов Bash
3. Примеры, демонстрирующие работу if, elif, else, then и fi в Bash
Пример 1: простой оператор if в командной строке
$ if [ 1 -eq 1 ]; then echo "Matched!"; fi
Matched!
В этом примере мы сравниваем один к одному.
Обратите внимание, что
-eq
означает равно.Чтобы сделать обратное, можно использовать
-ne
, что означает не равно, как показано в следующем примере:$ if [ 0 -ne 1 ]; then echo "Matched!"; fi
Matched!
В этом случае мы проверили неравенство, и, поскольку 0 не равно 1, оператор if верен, и команды после then будут выполнены.
Давайте немного изменим это:
$ if [ 1 -ne 1 ]; then echo "Matched!"; else echo "Not Matched!"; fi
Not Matched!
Здесь мы ввели оператор else; какие команды выполнять, если условие в инструкции if оказалось ложным (или неверным).
Когда мы пытаемся запросить, не равно ли 1 (-ne) на этот раз 1, и поскольку 1 действительно равно 1, условие, сформулированное в этом операторе if, ложное, и мы сталкиваемся с нашим оператором else с выведенным совпадающим текстом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥5✍3
NucleiFuzzer — инструмент для обнаружения уязвимостей в веб-приложениях
Он представляет собой простой bash-скрипт, который позволяет обнаруживать уязвимости в различных программах и системах, проводить тестирование на проникновение и поиск уязвимостей, а также предоставляет возможность указывать ссылки на найденные уязвимости в отчетах.
🐙 Перейти на Github
🔨 bash_help
Он представляет собой простой bash-скрипт, который позволяет обнаруживать уязвимости в различных программах и системах, проводить тестирование на проникновение и поиск уязвимостей, а также предоставляет возможность указывать ссылки на найденные уязвимости в отчетах.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9✍4👍2
Bash Bible — полезный ресурс для тех, кто изучает Linux
Этот репозиторий можно использовать как справочник для изучения различных команд Bash. Он содержит множество примеров.
🐙 Перейти на Github
🔨 bash_help
Этот репозиторий можно использовать как справочник для изучения различных команд Bash. Он содержит множество примеров.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍8✍2😐1
В истории bash можно включить отметку времени
И теперь он также сообщит вам, когда вы выполнили определенную команду в истории
Чтобы сделать изменения постоянными, надо экспортировать эту переменную в свой
🔨 bash_help
$ export HISTTIMEFORMAT="%F %T "
И теперь он также сообщит вам, когда вы выполнили определенную команду в истории
Чтобы сделать изменения постоянными, надо экспортировать эту переменную в свой
.bashrc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥6✍5😐1
Как создать постоянный псевдоним команды
Чтобы создать постоянную
Все окна терминала, которые вы открываете с этого момента, по умолчанию будут содержать вашу команду
Вы можете открыть несколько окон и проверить, введя
🔨 bash_help
Чтобы создать постоянную
alias
команду, вы должны добавить команду alias
в файл конфигурации оболочки. Некоторые известные оболочки:Bash - ~/.bashrcРассмотрим создание постоянного псевдонима в оболочке bash. Откроем .bashrc файл с помощью Vim.
Zsh - ~/.zshrc
Fish - ~/.config/fish/config.fish
sudo vim ~/.bashrcПерейдите в нижнюю часть файла и нажмите
i
, чтобы перейти в режим вставки. Добавьте команду псевдонима, которую вы хотите добавить навсегда.alias cdv="cd Videos"Каждый раз, когда вы вносите изменения в файл конфигурации оболочки, вам необходимо повторно загружать файл, чтобы изменения вступили в силу немедленно.
Все окна терминала, которые вы открываете с этого момента, по умолчанию будут содержать вашу команду
alias
.Вы можете открыть несколько окон и проверить, введя
alias -p
.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥4✍3
Репозиторий DevOps-Bash-tools
В нем 1000+ Bash скриптов — AWS, GCP, Kubernetes, Docker, CI/CD, APIs, SQL, PostgreSQL, MySQL, Hive, Impala, Kafka, Hadoop, Jenkins, GitHub, GitLab, BitBucket, Azure DevOps, TeamCity, Spotify, MP3, LDAP, Code/Build Linting, pkg mgmt для Linux, Mac, Python, Perl, Ruby, NodeJS, Golang, .bashrc, .vimrc, .gitconfig, .screenrc, tmux.
Загрузка:
🐙 Перейти на Github
🔨 bash_help
В нем 1000+ Bash скриптов — AWS, GCP, Kubernetes, Docker, CI/CD, APIs, SQL, PostgreSQL, MySQL, Hive, Impala, Kafka, Hadoop, Jenkins, GitHub, GitLab, BitBucket, Azure DevOps, TeamCity, Spotify, MP3, LDAP, Code/Build Linting, pkg mgmt для Linux, Mac, Python, Perl, Ruby, NodeJS, Golang, .bashrc, .vimrc, .gitconfig, .screenrc, tmux.
Загрузка:
curl -L https://git.io/bash-bootstrap | sh
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23✍5🔥5
AnonYou — утилита для безопасности
Бесплатная утилита с открытым исходным кодом, написанная на bash, которая позволяет быстро выполнять действия, связанные с анонимизацией.
▪️Изменение MAC-адреса на случайный или произвольный
▪️Перенаправление всего трафика через TOR
▪️Очистка ОЗУ
▪️Очистка пространства подкачки
▪️Надежное стирание файлов
▪️Удаление системного журнала
🐙 Перейти на Github
🔨 bash_help
Бесплатная утилита с открытым исходным кодом, написанная на bash, которая позволяет быстро выполнять действия, связанные с анонимизацией.
▪️Изменение MAC-адреса на случайный или произвольный
▪️Перенаправление всего трафика через TOR
▪️Очистка ОЗУ
▪️Очистка пространства подкачки
▪️Надежное стирание файлов
▪️Удаление системного журнала
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍5✍3
Selfharm Linux
Контейнер Docker и форк Suicide Linux — любая неверная команда Bash заставит интерпретатор удалить случайный файл с жесткого диска пользователя.
Это игра, чтобы увидеть, как долго пользователь может продолжать использовать операционную систему до ее сбоя.
Игру можно запустить в безопасном или опасном режиме
🐙 Перейти на Github
🔨 bash_help
Контейнер Docker и форк Suicide Linux — любая неверная команда Bash заставит интерпретатор удалить случайный файл с жесткого диска пользователя.
Это игра, чтобы увидеть, как долго пользователь может продолжать использовать операционную систему до ее сбоя.
Игру можно запустить в безопасном или опасном режиме
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13😐10🔥5✍3
Как безопасно программировать в bash
В bash есть массивы и безопасный режим. При правильном использовании bash почти соответствует практикам безопасного кодирования.
В fish сложнее допустить ошибку, но там нет безопасного режима. Поэтому хорошей идеей станет прототипирование в fish, а затем трансляция с fish на bash, если вы умеете правильно это делать.
Данное руководство сопровождает ShellHarden, но автор также рекомендует ShellCheck, чтобы правила ShellHarden не расходились с ShellCheck.
Bash — не тот язык, где самый правильный способ решить проблему одновременно является самым простым. Если принимать экзамен по безопасному программированию в bash, то первое правило BashPitfalls звучало бы так: всегда используй кавычки.
Маниакально ставить кавычки!
Незакавыченная переменная должна расцениваться как взведённая бомба: она взрывается при контакте с пробелом. Да, «взрывается» в смысле разделения строки на массив. В частности, расширения переменных вроде
🖼️ Дочитать статью
🔨 bash_help
В bash есть массивы и безопасный режим. При правильном использовании bash почти соответствует практикам безопасного кодирования.
В fish сложнее допустить ошибку, но там нет безопасного режима. Поэтому хорошей идеей станет прототипирование в fish, а затем трансляция с fish на bash, если вы умеете правильно это делать.
Данное руководство сопровождает ShellHarden, но автор также рекомендует ShellCheck, чтобы правила ShellHarden не расходились с ShellCheck.
Bash — не тот язык, где самый правильный способ решить проблему одновременно является самым простым. Если принимать экзамен по безопасному программированию в bash, то первое правило BashPitfalls звучало бы так: всегда используй кавычки.
Маниакально ставить кавычки!
Незакавыченная переменная должна расцениваться как взведённая бомба: она взрывается при контакте с пробелом. Да, «взрывается» в смысле разделения строки на массив. В частности, расширения переменных вроде
$var
и подстановки команд вроде $(cmd)
подвергаются расщеплению слов, когда внутренняя строка расширяется в массив из-за расщепления в специальной переменной $IFS
с пробелом по умолчанию. Это обычно незаметно, потому что чаще всего результатом становится массив из 1 элемента, неотличимый от ожидаемой строки.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3✍2
JShielder
Bash-скрипт, разработанный для помощи системным администраторам и разработчикам защитить Linux-серверы, на которых они будут развертывать любые веб-приложения или службы.
Инструмент автоматизирует процесс установки всех необходимых пакетов для размещения веб-приложения и повышения уровня защиты сервера Linux при минимальном взаимодействии со стороны пользователя.
🐙 Перейти на Github
🔨 bash_help
Bash-скрипт, разработанный для помощи системным администраторам и разработчикам защитить Linux-серверы, на которых они будут развертывать любые веб-приложения или службы.
Инструмент автоматизирует процесс установки всех необходимых пакетов для размещения веб-приложения и повышения уровня защиты сервера Linux при минимальном взаимодействии со стороны пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😐3✍2🔥2
Автоматизация резервного копирования с помощью bash-скрипта
Резервное копирование — это то, что мы все делаем регулярно, так почему бы не автоматизировать это? Взгляните на следующий скрипт backup.sh :
Итак, вы сначала создали массив с именем
Затем для всех каталогов в массиве
Вот пример выполнения сценария backup.sh :
🔨 bash_help
Резервное копирование — это то, что мы все делаем регулярно, так почему бы не автоматизировать это? Взгляните на следующий скрипт backup.sh :
#!/bin/bash
backup_dirs=("/etc" "/home" "/boot")
dest_dir="/backup"
dest_server="server1"
backup_date=$(date +%b-%d-%y)
echo "Starting backup of: ${backup_dirs[@]}"
for i in "${backup_dirs[@]}"; do
sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i
if [ $? -eq 0 ]; then
echo "$i backup succeeded."
else
echo "$i backup failed."
fi
scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir
if [ $? -eq 0 ]; then
echo "$i transfer succeeded."
else
echo "$i transfer failed."
fi
done
sudo rm /tmp/*.gzecho "Backup is done."
Итак, вы сначала создали массив с именем
backup_dirs
, в котором хранятся все имена каталогов, резервную копию которых мы хотим создать. Затем вы создали три другие переменные:dest_dir
: для указания каталога назначения резервной копии.dest_server
: для указания целевого сервера резервного копирования.backup_time
: , чтобы указать дату резервного копирования.Затем для всех каталогов в массиве
backup_dirs
создайте сжатый tar-архив gzip в /tmp
, затем используйте команду scp
для отправки/ скопируйте резервную копию на целевой сервер. Наконец, удалите все архивы gzip из /tmp
.Вот пример выполнения сценария backup.sh :
kabary@handbook:~$ ./backup.sh
Starting backup of: /etc /home /boot
/etc backup succeeded.
etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s 00:02
/etc transfer succeeded.
/home backup succeeded.
home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s 00:04
/home transfer succeeded.
/boot backup succeeded.
boot-Aug-30-20.tar.gz 100% 105MB 520.2KB/s 03:26
/boot transfer succeeded.
Backup is done.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34✍7🔥3😐3
Bash-скрипты для настройки среды DevOps в Ubuntu, CentOS и MacOS
DevOps и управление инфраструктурой являются критически важными процессами для любой организации, которая использует технологии для управления своей деятельностью. Наличие нужных инструментов и их правильная настройка могут существенно повлиять на эффективность и действенность этих процессов.
Этот сценарий предназначен для упрощения настройки среды разработки или инфраструктуры для различных задач, связанных с DevOps и управлением инфраструктурой. Он автоматизирует установку и настройку часто используемых инструментов, таких как Terraform, Ansible, Git, Docker, Kubernetes, Helm и интерфейс командной строки AWS, что упрощает начало работы с широким спектром задач, связанных с выделением и управлением серверами, сетями. и хранилище, а также развертывание и масштабирование приложений.
Независимо от того, настраиваете ли вы новую машину, работаете в команде или настраиваете конвейер CI/CD, этот сценарий является мощным инструментом для автоматизации задач DevOps и управления инфраструктурой.
🖼️ Ссылка на скрипт
🔨 bash_help
DevOps и управление инфраструктурой являются критически важными процессами для любой организации, которая использует технологии для управления своей деятельностью. Наличие нужных инструментов и их правильная настройка могут существенно повлиять на эффективность и действенность этих процессов.
Этот сценарий предназначен для упрощения настройки среды разработки или инфраструктуры для различных задач, связанных с DevOps и управлением инфраструктурой. Он автоматизирует установку и настройку часто используемых инструментов, таких как Terraform, Ansible, Git, Docker, Kubernetes, Helm и интерфейс командной строки AWS, что упрощает начало работы с широким спектром задач, связанных с выделением и управлением серверами, сетями. и хранилище, а также развертывание и масштабирование приложений.
Независимо от того, настраиваете ли вы новую машину, работаете в команде или настраиваете конвейер CI/CD, этот сценарий является мощным инструментом для автоматизации задач DevOps и управления инфраструктурой.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10✍4🔥4😐4
Поиск по StackOverflow из командной строки
На GitHub опубликовали утилиту how2, которая даёт возможность удобно искать на StackOverflow прямо из командной строки. Получается нечто похожее на man, но с глобальным поиском по базе SO и возможностями составлять запросы на обычном (английском) языке.
Установить утилиту можно через npm:
Если появятся ошибки доступа, то загляните сюда. Или используйте команду:
Если у вас нет npm, то установите Node.js:
Если вы не указали обратное, то язык по умолчанию считается Bash.
Как это работает?
Утилита how2 использует Google и StackOverflow API, потому что собственный поиск SO не так хорош.
Зачем это надо?
Потому что программисты часто забывают, как сделать некоторые простые вещи. А читать маны слишком долго.
🐙 Перейти на Github
🔨 bash_help
На GitHub опубликовали утилиту how2, которая даёт возможность удобно искать на StackOverflow прямо из командной строки. Получается нечто похожее на man, но с глобальным поиском по базе SO и возможностями составлять запросы на обычном (английском) языке.
Установить утилиту можно через npm:
npm install -g how2
Если появятся ошибки доступа, то загляните сюда. Или используйте команду:
sudo npm install -g how2
Если у вас нет npm, то установите Node.js:
sudo apt-get install nodejs npm
Если вы не указали обратное, то язык по умолчанию считается Bash.
Как это работает?
Утилита how2 использует Google и StackOverflow API, потому что собственный поиск SO не так хорош.
Зачем это надо?
Потому что программисты часто забывают, как сделать некоторые простые вещи. А читать маны слишком долго.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍6👍5🔥4
xdotool - эмулятор действий мыши и клавиатуры
Утилита предоставляет широкие возможности по управлению клавиатурой и мышью. Позволяет эмулировать нажатие клавиш и двигать курсор мыши. Некоторые примеры пригодятся при написании bash скриптов или для динамической подвязки горячих клавиш. Также вы можете заранее определить текст, который нужно ввести в определенное поле при определенных условиях.
*Xdotool
Есть другие утилиты для эмуляции нажатия клавиш xvkbd, xte (менее функциональная) и для работы с буфером обмена - xsel, xclip.
Определить keycode и keysym клавиши, а также дополнительную информацию о клавише, можно утилитами xev или xkeycaps.
Также можно получить комбинацию клавиш утилитой xbindkeys:
Примеры использования
Эмулировать нажатие клавиш по названию:
🖼️ Дочитать статью
🔨 bash_help
Утилита предоставляет широкие возможности по управлению клавиатурой и мышью. Позволяет эмулировать нажатие клавиш и двигать курсор мыши. Некоторые примеры пригодятся при написании bash скриптов или для динамической подвязки горячих клавиш. Также вы можете заранее определить текст, который нужно ввести в определенное поле при определенных условиях.
*Xdotool
умеет переключать клавиши с индикаторами *lock, однако сами световые индикаторы не изменяют свое состояние.Есть другие утилиты для эмуляции нажатия клавиш xvkbd, xte (менее функциональная) и для работы с буфером обмена - xsel, xclip.
Определить keycode и keysym клавиши, а также дополнительную информацию о клавише, можно утилитами xev или xkeycaps.
Также можно получить комбинацию клавиш утилитой xbindkeys:
xbindkeys -k
Примеры использования
Эмулировать нажатие клавиш по названию:
xdotool key Shift+Left
xdotool key Control+c
xdotool key Alt+Tab
xdotool key Shift+Caps_Lock
xdotool key XF86AudioRaiseVolume
xdotool key XF86AudioLowerVolume
xdotool keyup Mod2+Mod4+m ## Отпустить клавиши
xdotool key Ctrl+Alt+Shift+m
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥13✍3
Необычные и малоизвестные трюки с перенаправлениями в bash, которые могут значительно упростить работу
Многие пользователи Linux не подозревают, что bash особым образом обрабатывает перенаправление в файл
Например, перенаправим вывод TCP сервера времени на
Более сложный пример - HTTP запрос. Давайте создадим новый файловый дескриптор, перенаправим на него строку HTTP-запроса, затем прочитаем ответ.
Placeholder
Некоторые команды, например
Передача стандартного вывода одной команды в стандартный ввод другой команды - мощный инструмент. Но что, если вам нужно передать стандартный вывод нескольких команд? Для того чтобы объединить вывод нескольких команд можно использовать группировку команд, для этого используется синтаксис:
🖼️ Дочитать статью
🔨 bash_help
/dev/tcp
Многие пользователи Linux не подозревают, что bash особым образом обрабатывает перенаправление в файл
/dev/tcp/host/port
, и если host
- это допустимое имя хоста или ip адрес, а port
- целое число порта или имя службы, пытается открыть соответствующий TCP-сокет.Например, перенаправим вывод TCP сервера времени на
cat
и выведем на экран:$cat < /dev/tcp/time.nist.gov/13
60311 24-01-02 10:43:53 00 0 0 798.9 UTC(NIST) *
Более сложный пример - HTTP запрос. Давайте создадим новый файловый дескриптор, перенаправим на него строку HTTP-запроса, затем прочитаем ответ.
$exec 5<>/dev/tcp/google.de/80
$echo -e "GET / HTTP/1.1\nhost: google.de\n\n" >&5
$cat <&5 | head
HTTP/1.1 301 Moved Permanently
Location: http://www.google.de/
Content-Type: text/html; charset=UTF-8
Date: Thu, 18 Nov 2021 08:27:18 GMT
Expires: Sat, 18 Dec 2021 08:27:18 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 218
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Placeholder
-
Некоторые команды, например
tar
, воспринимают символ -
как перевод на стандартный вывод, что позволит воспользоваться результатом работы команды без создания промежуточных файлов, например создадим бэкап директории /www/data
и скопируем по ssh:tar zcvf - /www/data | ssh user@remoter "cat > /backup/wwwdata.tar.gz"Группировка команд
Передача стандартного вывода одной команды в стандартный ввод другой команды - мощный инструмент. Но что, если вам нужно передать стандартный вывод нескольких команд? Для того чтобы объединить вывод нескольких команд можно использовать группировку команд, для этого используется синтаксис:
{ command1; command2; }
, например объединим вывод команд ls
, чтобы подсчитать количество файлов в двух директориях:$mkdir dir{1,2}
$touch dir1/test1.txt
$touch dir2/test2.txt
${ ls dir1; ls dir2; } | wc -l
2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥6✍3😐1
Быстрое изучение Bash: 30 легких команд для новичков
Список из 30 легких команд, с которыми вы быстро освоите Bash и не будете бояться терминала Linux. Идеально для новичков.
Первые команды – учимся ходить
Современные файловые системы – это древовидные каталоги с корневой и родительскими директориями. Движение вверх по родительским каталогам приводит к корневому. В некоторых системах встречается несколько корневых каталогов, например, всем известные диски Windows: C:\ , A:\, etc.
Но в Unix-подобных системах все по-другому: здесь принят один корневой каталог с именем \. А вот и основные команды Bash для перемещения по файловой системе:
При работе в файловой системе пользователь находится в каталоге, который называется текущим или рабочим.
**Команда
**С
**Перейти в другой каталог поможет
**Используйте команду
**Сокращение
Три bash команды для управления
**Иногда вам потребуется запускать эти команды одну за другой. Тогда на помощь приходит оператор
**Точка с запятой означает, что сначала перечисляется содержимое рабочего каталога с помощью
**Команда
🖼️ Дочитать статью
🔨 bash_help
Список из 30 легких команд, с которыми вы быстро освоите Bash и не будете бояться терминала Linux. Идеально для новичков.
Первые команды – учимся ходить
Современные файловые системы – это древовидные каталоги с корневой и родительскими директориями. Движение вверх по родительским каталогам приводит к корневому. В некоторых системах встречается несколько корневых каталогов, например, всем известные диски Windows: C:\ , A:\, etc.
Но в Unix-подобных системах все по-другому: здесь принят один корневой каталог с именем \. А вот и основные команды Bash для перемещения по файловой системе:
pwd / ls / cd
При работе в файловой системе пользователь находится в каталоге, который называется текущим или рабочим.
**Команда
pwd
выводит рабочий каталог пользователя**С
ls
вы сможете вывести содержимое каталога (файлы и дочерние директории)**Перейти в другой каталог поможет
cd
**Используйте команду
cd ..
для быстрого перемещения в родительскую директорию**Сокращение
cd ~
используется для перемещения домой, в /home/$USER
Три bash команды для управления
**Иногда вам потребуется запускать эти команды одну за другой. Тогда на помощь приходит оператор
;
**Точка с запятой означает, что сначала перечисляется содержимое рабочего каталога с помощью
ls
, а затем pwd
выводит местоположение каталога. Еще один полезный инструмент для создания цепочек команд – &&
. При использовании &&
команда справа не будет выполняться, если команда слева не выполнена. Но если использовать ;
, вторая команда выполняется даже после ошибки в первой**Команда
&
похожа на &&
, но на самом деле выполняет другую функцию. Часто процессы блокируют ввод в терминал во время работы. Чтобы свернуть подобный процесс в фон, используйте &
в конце команды. Тогда процесс выполняется в фоне, не блокируя ввод в окно терминалаPlease open Telegram to view this post
VIEW IN TELEGRAM
👍20✍5🔥4