BashMaster
8.27K subscribers
727 photos
19 videos
1 file
751 links
Удобные консольные наработки на каждый день для разработчиков, девопсов и сисадминов.

Реклама: @Kone4noVasya

Канал на бирже: https://telega.in/c/bash_help
Download Telegram
⚙️ Система мониторинга на bash’е

✔️Система мониторинга на bash’е хороша тем, что все для ее работы на машине скорее всего уже есть.

➡️ Принципы работы
▶️Прежде чем начинать писать, надо определиться, как будет устроена наша система мониторинга. Пусть у нас будет только серверная часть, клиентской части не будет. И задача у нас будет только одна — проверять, в сети ли машина, за которой мы следим, точнее, пингуется ли она. Для больших сетей такой вариант не подойдет, возможно, будет недостаточно информативен, а для небольшой локальной сети на пару десятков машин его может быть вполне достаточно.

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

▶️Назовём систему мониторинга, желательно оригинально — Byams (Bash-written Yet Another Monitoring Script). Написанный на баше еще один скрипт мониторинга. :) Будем надеяться, что это название еще не занято.

➡️ Приступим
▶️Начнем с подключения хоста к нашей системе мониторинга. На практике это просто запись информации об адресе или доменном имени хоста в какой-то файл. Пусть это будет /etc/byams/hosts.
Вот пример этого файла:
192.168.0.10

▶️Для простоты будем писать один единственный файл скрипта, который будет добавлять в мониторинг хост, удалять из мониторинга хост и мониторить хосты, находящиеся в списке. И выглядеть это будет следующим образом:
byams add 
byams remove
byams

▶️Если скрипт запущен без параметров, он просто запустит мониторинг всех хостов, находящихся в данный момент в списке.

▶️Давайте вынесем файл с настройками в директорию /etc/byams. Вы можете вынести этот файл в любую директорию, доступную пользователю, от имени которого скрипт будет запускаться, поскольку он не требует привилегий суперпользователя для своей работы, достаточно прав обычного пользователя.

➡️ Подробно
▶️В файле настроек будет находиться следующее:
# Директория, где будет храниться файл с данными
DATA_DIR="/etc/byams"
# Название самого файла для хранения данных
DATA_FILE_NAME="hosts"
# Адрес электронной почты, на который будут посылаться оповещения о недоступности хостов
MAILTO=root@localhost

▶️Вот как будет выглядеть сам скрипт:
#!/bin/bash

# Подключаем файл настроек
. /etc/byams/byams.conf

# Формируем полное имя файла с данными
DATA_FILE="$DATA_DIR/$DATA_FILE_NAME"

add_to_monitoring(){
# Дописываем IP-адрес или имя хоста в файл данных
echo $2 >> $DATA_FILE
}

remove_from_monitoring(){
# Удаляем IP-адрес или имя хоста из файла данных
sed -i '/$2/d' $DATA_FILE
}

run_monitoring(){
# Для каждого хоста из списка, содержащегося в файле данных
# последовательно выполняем функцию check_host
for HOST in cat $DATA_FILE
do
check_host $HOST
done
}

check_host(){
# Функция check_host может содержать любые действия по проверке
# доступности одного хоста и реакции на недоступность этого хоста
# В нашем случае мы просто посылаем один ICMP-пакет, и если пришел ответ, значит
# всё в порядке, если не пришел, то переменная RESULT получит пустое значение
RESULT=ping -c 1 $1 | grep ttl
if [ "$RESULT" == "" ]
then
# А здесь будут выполнены действия по извещению о недоступности хоста
# Мы просто посылаем письмо о том, что хост, который мы проверяем, недоступен
MESSAGE="$1 is unavailable"
echo "$MESSAGE" | mail -s "$MESSAGE" $MAILTO
fi
}

case "$1" in
add)
add_to_monitoring $2
;;
remove)
remove_from_monitoring $2
;;
*)
run_monitoring
;;
esac

▶️Вот такая простая система мониторинга, состоящая из одного скрипта на bash’е, у нас получилась. Вы можете ее расширить так, как вам это необходимо.

➡️ Автоматический запуск
Автоматический запуск можно обеспечить, включив вызов скрипта в таблицу заданий cron’а.

🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥115👍5😐2
Forwarded from Network Admin
Команда nc (NetCat): «Сетевой швейцарский армейский нож»

NetCat, или просто nc, — это мощная и универсальная утилита для работы с сетями. Её часто называют «сетевым швейцарским ножом» из-за множества задач, которые она может выполнять.

nc поддерживает работу с TCP, UDP и UNIX-сокетами, и её возможности делают её незаменимым инструментом для администраторов и специалистов по сетевой безопасности.

Что умеет NetCat?
• Устанавливать TCP-соединения.
• Прослушивать порты TCP и UDP.
• Сканировать порты (как одиночные, так и диапазоны).
• Выступать в роли простого TCP-прокси.
• Проверять доступность удалённых портов.
• Тестировать сетевые службы и демоны.
• Передавать файлы между компьютерами в связке с другими инструментами, например, pv.

Примеры использования:

1️⃣Сканирование портов
Чтобы просканировать несколько конкретных портов на сервере, используйте следующую команду:

$ nc -zv server2.merionet.lan 21 22 80 443 3000


Здесь:
• -z — не устанавливать соединение, а только проверить доступность порта.
• -v — выводить дополнительную информацию (режим verbose).

2️⃣ Сканирование диапазона портов
Для проверки диапазона портов, укажите его через дефис:

$ nc -zv server2.merionet.lan 20-90


3️⃣ Установка TCP-соединения
Открыть TCP-соединение с портом 5000 на удалённом сервере с использованием источника порта 3000 и тайм-аутом в 10 секунд:

$ nc -p 3000 -w 10 server2.merionet.lan 5000


Здесь:
• -p — исходный порт (3000).
• -w — время ожидания (10 секунд).

N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥7😐1
☁️ Облака, облака повсюду

Российские компании активно используют облачные технологии и мы видим этому подтверждение на всевозможных "облачных" конференциях.

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

Приглашаем на открытую конференцию K2 Cloud Conf.

У ребят планируется много технических докладов: от обзоров новых типов сетевых дисков до приоритетов бизнеса в области ИТ. Будет интересно.

📅 Когда: 4 марта 2025

👆 Участие бесплатное, ссылка на регистрацию тут
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1😐1
⚙️ Создание переменных, доступных только для чтения, а также неизменяемых переменных в Bash

✔️Иногда немного дополнительной ясности может быть очень полезно, например, четко указать, что переменная не будет меняться.

▶️Внутри функции в Bash вы можете использовать ключевое слово local для определения переменной, и она может быть доступна только для чтения с помощью флага -r.

➡️ Вот несколько примеров использования и результатов:
#!/usr/bin/env bash

set -o errexit
set -o pipefail
set -o nounset

function mutable {
local status="pending"

status="completed"

# This line will echo "completed".
echo "${status}"
}

function immutable {
local -r status="pending"

# This line throws an error: "status: readonly variable"
status="completed"

# This line is never reached.
echo "${status}"
}

mutable
immutable

▶️Если вы хотите объявить переменные только для чтения вне функции, вы можете использовать declare -r status=”pending”, в то время как declare status=”pending” или status=”pending” оба являются изменяемыми.

▶️В случае с read-only вы получите ту же ошибку, что и выше, если попытаетесь ее изменить.

➡️ Помните, что declare и local не соответствуют POSIX, поэтому, если вам нужна максимальная совместимость между оболочками, вам стоит рассмотреть другие варианты, например, использование readonly status=”pending”.

▶️Я предпочитаю использовать declare -r, когда знаю, что мне не нужно соответствие POSIX, потому что declare используется для других вещей, например, для определения ассоциативных массивов.

▶️Наконец, стоит отметить, что если вы попытаетесь снять значение переменной, например unset status, а она доступна только для чтения, то получите сообщение об ошибке, в котором будет сказано, что вы не можете снять значение переменных, доступных только для чтения.

▶️Ясно выражать свои намерения полезно при чтении кода. Если в большом скрипте вы видите readonly, declare -r или local -r, вы можете быть уверены, что больше ничего не измените, а если измените, то скрипт выдаст ошибку, что поможет избежать случайной перезаписи значения.

🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🔥4😐2
👩‍💻 Открытый урок «Инструменты и методы мониторинга серверов на платформе Windows Server»

🗓 10 февраля в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Администратор Windows» от Otus.

На вебинаре вы узнаете:
✔️ Основные подходы к мониторингу серверов и выявлению проблем в инфраструктуре.
✔️ Как использовать встроенные инструменты Windows Server: Performance Monitor, Event Viewer и другие.
✔️ Обзор сторонних решений для мониторинга серверов и сети.
✔️ Практические рекомендации по настройке автоматического уведомления и отчетности.

🔗 Ссылка на регистрацию: https://otus.pw/zgIN/?erid=2W5zFGn1KQL

#реклама
О рекламодателе
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😐3
⚙️ Полезные алиасы в Bash

✔️Операционная система Linux имеет в своем составе множество инструментов, которые могут существенно облегчить жизнь системным администраторам, особенно начинающим, для которых работа с консольными командами, использующими множество различных параметров зачастую кажется слишком сложной. В этой статье мы поговорим об использовании алиасов и разберем примеры создания наиболее полезных.

➡️ Содержание статьи:
▶️Временный алиас
▶️Добавляем в Bash
▶️Виртуальные среды и сети
▶️Полезности для Docker
▶️Заключение

🖼️ Прочитать на Habr'e

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍71
⚙️ Try-Catch в Bash: Обработка ошибок в скриптах Bash

✔️В этой статье мы рассмотрим пять методов обработки ошибок в скриптах Bash, начиная от удобных для новичков и заканчивая более сложными подходами.
В Bash обработка ошибок может осуществляться различными способами, несмотря на то, что в языке нет прямого блока try-catch, как в таких языках, как Python или JavaScript.

▶️Ниже мы рассмотрим пять методов, каждый из которых по мере возрастания сложности позволяет отлавливать и обрабатывать ошибки в скриптах Bash.

➡️ Базовая проверка ошибок с помощью статуса выхода
▶️Самый простой способ обработки ошибок в Bash – это проверка статуса выхода команды.
В Bash каждая команда по завершении возвращает код выхода.
Код выхода, равный 0, означает успех, а любой ненулевой код выхода означает неудачу.
#!/bin/bash

mkdir /root/test_dir
if [ $? -ne 0 ]; then
echo "Error: Failed to create directory."
exit 1
fi
echo "Directory created successfully."

▶️В этом методе мы запускаем команду и сразу же проверяем статус выхода с помощью переменной $? Если статус ненулевой, мы выводим сообщение об ошибке и выходим из скрипта.

➡️ Использование команды ‘set -e’ для выхода при ошибке
▶️Вы можете использовать команду set -e для указания скрипту немедленно выйти, если какая-либо команда возвращает ненулевой статус.
Это полезно для скриптов, в которых необходимо убедиться, что любой сбой останавливает выполнение.
#!/bin/bash
set -e

mkdir /root/test_dir
echo "Directory created successfully."

▶️Если использовать set -e, скрипт автоматически завершается при неудачном создании каталога, что избавляет вас от необходимости вручную проверять статус выхода после каждой команды.

➡️ Обработка ошибок с помощью trap
▶️Bash предоставляет команду trap для перехвата сигналов и ошибок.
Вы можете определить trap для выполнения определенных команд при возникновении ошибки.
#!/bin/bash
trap 'echo "An error occurred. Exiting..."; exit 1;' ERR

mkdir /root/test_dir
echo "Directory created successfully."

▶️Здесь команда trap фиксирует любые ошибки (сигнализируемые ключевым словом ERR) и запускает указанный код обработки ошибок.

➡️ Перенаправление ошибок в файл логов
▶️Вместо отображения ошибок на консоли вы можете перенаправить их в файл журнала для лучшей отладки.
#!/bin/bash

exec 2>error_log.txt

mkdir /root/test_dir
if [ $? -ne 0 ]; then
echo "Error: Failed to create directory."
exit 1
fi
echo "Directory created successfully."

▶️В этом методе строка exec 2>error_log.txt перенаправляет стандартную ошибку (дескриптор файла 2) в файл журнала, что позволяет просмотреть подробности ошибки позже.

➡️ Пользовательская функция обработки ошибок
▶️Для более сложной обработки ошибок вы можете создать пользовательскую функцию для обработки различных типов ошибок, что добавит гибкости вашим скриптам.
#!/bin/bash

handle_error() {
echo "Error on line $1"
exit 1
}

trap 'handle_error $LINENO' ERR

mkdir /root/test_dir
echo "Directory created successfully."

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

➡️ Возможно, в скриптах Bash и нет встроенной функции try-catch, но с помощью различных методов, таких как проверка состояния выхода, команды-ловушки и пользовательские функции обработки ошибок, вы можете эффективно справляться с ошибками.

🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥76
Хотите научиться программировать, но теряетесь в выборе языка? Или уже изучаете Python, но не хватает практики? Тогда этот бесплатный мини-курс от Skillbox по Python-разработке — то, что нужно!

👉🏻 Если коротко: это мини-курс из 4 записанных уроков и 1 прямого эфира. Смотрите, когда удобно, после каждого выполняете задания. В итоге у вас будет 4 проекта для портфолио: Telegram-бот, который умеет превращать голос в текст, парсер для сбора данных и веб-страница на Flask. Неплохая практика для 5 занятий!


🎁 Ещё участников мини-курса ждут подарки: персональная карьерная консультация, скидка 10 000 рублей на любой курс Skillbox и подборка полезных материалов для старта карьеры в Python-разработке.

В общем, приходите практиковаться — не пожалеете: https://epic.st/iQLNm?erid=2VtzqvmR6eG

Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
👍3😐1
⚙️ Bash Auto Completion в Linux

✔️В Linux предусмотрена удобная функция автодополнения (auto completion) для Bash. Этот инструмент значительно ускоряет и упрощает процесс ввода команд. Он автоматически дополняет имена файлов, каталогов или опции команд, когда вы вводите их в командной строке.

➡️ Команда Complete
▶️Эта команда встроена в Bash и отвечает за основную механику автодополнения. Она позволяет устанавливать конкретные автодополнения для различных команд через ряд параметров.

➡️ Применение пользовательских функций
▶️В Bash существует возможность вызова определенной функции в процессе автодополнения. Данная функция может формировать и возвращать список слов для автодополнения. Для этого используется параметр -F команды complete. В практических приложениях это одна из наиболее часто используемых опций:
$ complete -F _mac_addresses foo
$ foo [Tab][Tab]
09:00:22:eb:1e:29 52:54:00:04:29:35

▶️В приведенном выше примере функция _mac_addresses вызывается при автодополнении. Эта функция является частью механизма автодополнения Bash и отображает MAC-адреса сетевых интерфейсов нашей машины. Поэтому, после нажатия клавиши Tab, были показаны соответствующие MAC-адреса.

➡️ Создание функции для автодополнения
▶️Как упоминалось выше, Bash позволяет вызывать функцию в процессе автодополнения по нажатию клавиши Tab.

▶️Для эффективной работы такая функция должна обладать следующими возможностями:
💠Содержать логику для формирования списка дополняемых слов
💠Получать аргументы командной строки.
💠Основываясь на аргументах командной строки, вычислять список для автодополнения.
💠Передавать сформированный список обратно в оболочку.

▶️Для упрощения этого процесса в Bash предусмотрены некоторые заранее определенные переменные:
💠COMP_WORDS: массив, содержащий аргументы командной строки.
💠COMP_CWORD: индекс в этом массиве, указывающий на текущий элемент.
💠COMPREPLY: итоговый массив, который содержит сформированный список слов. Он, в конечном итоге и будет подставлен для автодополнения.

➡️ Размещение функции
▶️Нам надо разместить нашу функцию в папке, из которой механизм автодополнения сможет её считать и загрузить.

▶️Скрипт /etc/bash_completion отвечает за инициализацию автодополнения Bash. Этот скрипт вызывается при логине пользователя с последующей загрузкой скриптов из директории /etc/bash_completion.d.

▶️Таким образом, файл с нашей пользовательской функцией мы должны разместить в директории /etc/bash_completion.d. После этого, при входе в систему, наша функция будет автоматически подключена и готова к вызову при автодополнении.
Внутри пользовательской функции нам надо определить логику создания списка слов для автодополнения. В Bash существует специальная команда как раз для такой задачи.

➡️ Команда compgen
▶️Команда compgen упрощает процесс сравнения с образцом при автодополнении. Она поддерживает большинство параметров команды complete. Вот её синтаксис:
compgen: usage: compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat]
[-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix]
[word]

➡️ Пример функции
Завершим обзор функцией, которая бы автодополняла нашу условную команду foo.

Предположим, у команды foo есть две опции: bar и car. Для bar у нас есть дополнительные опции drink и eat. Точно так же, для car у нас есть drive и park.
function _foo()
{
latest="${COMP_WORDS[$COMP_CWORD]}"
prev="${COMP_WORDS[$COMP_CWORD - 1]}"
words=""
case "${prev}" in
foo)
words="bar car"
;;
bar)
words="eat drink"
;;
car)
words="drive park"
;;
*)
;;
esac

COMPREPLY=($(compgen -W "$words" -- $latest))
return 0
}

complete -F _foo foo

▶️Сначала создайте файл /etc/bash_completion.d/foo. Затем внутри файла определите функцию _foo. В конце файла вызовите complete для нашей команды foo.

▶️Это простая функция призвана продемонстрировать основную концепцию автодополнений. Мы не определили спецификацию автодополнения для подкоманд. Однако это дает представление о том, как реализовать функцию.

🖼️ Дочитать статью на Habr'e

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍83
Крутая программа для тех, кто уже работает с Linux и хочет погрузиться DevOps.

В двух словах: программа на 2 месяца, ты учишься, тебе еще и платят. Начинка: начинающий и продвинутый курс по Linux, погружение в DevOps. Обучение с практикой, лабораторными и под контролем экспертов из K2 Сloud.

Подробнее можно узнать на сайте
1
⚙️ Выводим список установленных пакетов в Linux по дате

✔️Порой необходимо узнать когда тот или иной пакет был установлен в операционной системе (например, в целях аудита). В данной статье рассмотрим как вывести список установленных пакетов в Linux, отсортированный по дате установки - давайте разберемся!

▶️Как всем известно, в разных дистрибутивах Linux используются различные пакетные менеджеры, поэтому, в зависимости от операционной системы, команды будут отличаться.
Например, если вы используете дистрибутив Debian (и производные - Ubuntu, Kubuntu, Xubuntu и т.д.), то для вывода списка установленных пакетов достаточно запустить команду:
grep -i "installed" /var/log/dpkg.log 

▶️Как можно догадаться, данная команда выведет список пакетов, если их установка зафиксирована в файле /var/log/dpkg.log. Так как в Linux используется ротация логов с целью экономии места на диске, старые установочные логи хранятся в архивах. Если нужно узнать список вообще всех установленных пакетов в хронологическом порядке, то стоит воспользоваться командой:
zcat /var/log/dpkg.log.* | grep -i "installed" 

▶️Команда zcat читает содержимое заархивированных файлов, после чего вывод перенаправляется на обработку команде grep. Если нужно найти время установки конкретного пакета, название (или хотя бы часть) которого вы знаете, можно сделать так:
zcat /var/log/dpkg.log.* | grep -i "installed" | grep "google-cloud" 2018-09-12 09:42:08 status installed google-cloud-sdk:all 216.0.0-0 

▶️В качестве альтернативы еще можно использовать команду zgrep, например:
zgrep "installed" /var/log/dpkg.log*

▶️Для RPM-based дистрибутивов (RedHat, CentOS, Scientific Linux, Fedora, SUSE) вывести список установленных пакетов по дате можно с помощью следующей команды:
rpm -qa --last

▶️Для поиска даты установки конкретного пакета, достаточно добавить его название в качестве параметра к команде выше, например:
rpm -qa --last postfix3 postfix3-3.2.0-1.gf.el7.x86_64 Thu 25 May 2017 01:04:35 AM EAT 

▶️В дистрибутивах Arch Linux (в том числе Antergos, Manjaro, Apricity, Ninja OS) для решения нашей задачи можно воспользоваться утилитой expac. Для получения информации в понятном формате, вызывать данную утилиту необходимо с использованием параметра:
expac --timefmt='%F %T' '%l %n' 

▶️Можно дополнить данный вызов сортировкой и дополнительными фильтрами - все зависит только от ваших требований.  Например, так можно вывести 5 последних установленных пакетов в системе:
expac --timefmt='%F %T' '%l %n' | sort -n | tail -n 5 2018-01-15 14:41:15 webkitgtk 2018-01-16 09:18:26 babl 2018-01-16 09:18:26 gegl02 2018-01-16 09:18:26 lcms 2018-01-16 09:18:26 libspiro


🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥97
⚙️ dev-setup

✔️Репозиторий с руководством и коллекцией скриптов для настройки среды разработки в macOS. Он предоставляет подробные инструкции и автоматизацию для установки и настройки различных инструментов разработки, языков программирования и приложений, которые обычно используются разработчиками.

➡️ Некоторые преимущества проекта:
▶️Всестороннее покрытие основных инструментов и языков разработки.
▶️Автоматизированный процесс настройки с помощью скриптов оболочки.
▶️Детальная документация и объяснения для каждого компонента.
▶️Регулярное обновление для включения новых версий инструментов и приложений.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥3
Пора переходить на open source? 🤔

Уже завтра в 11:00 облачный провайдер Cloud.ru проводит бесплатный вебинар для тех, кто открывает для себя мир open source.

В прямом эфире поделятся опытом:
😶‍🌫️как выбирали open source решение;
😶‍🌫️с какими сложностями столкнулись при переходе;
😶‍🌫️как их решали и что в итоге получили.

А еще расскажут про тестирование производительности data plane, нюансы работы control plane и ответят на ваши вопросы.

Еще есть время зарегистрироваться и подключиться.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥21
⚙️ Bunster

✔️Компилятор для скриптов на Shell, который превращает их в безопасные, портативные и статические бинарные файлы.

▶️Инструмент берёт обычный Bash-код и превращает его в нативный код на Go, а затем компилирует в исполняемый файл. В результате получается производительная, портативная и более защищённая альтернатива классическим скриптам.

➡️ Как это устроено:
▶️Bunster парсит и анализирует Bash-скрипт, определяет синтаксические конструкции (условия, циклы, функции) и проверяет специальные ключевые слова вроде continue и break. Затем генерирует Go-код на основе полученного AST (абстрактное синтаксическое дерево). Каждая функция Shell превращается в функцию на Go, а вызовы внешних программ могут переводиться в соответствующие системные вызовы. После генерации Go-файла задействуется Go Toolchain, код компилируется в бинарный файл, при этом можно указать платформу (linux/amd64, darwin/arm64 и т. д.). На выходе получается единый исполняемый файл, который можно распространять как обычный бинарник без необходимости устанавливать Bash или другие зависимости.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍106🔥5
Все новости из мира программирования на этом канале @umnyiprogrammist

Подписывайтесь, чтобы не упустить ничего важного
👍3🔥1
⚙️ Скрипт для запуска нескольких серверов одновременно по ssh

✔️Если есть необходимость быстрого запуска нескольких серверов по ssh без ввода паролей, то этот скрипт вам поможет.

▶️Создаем ключи без sudo:

ssh-keygen -t rsa


▶️Копируем публичный ключ на сервера, которые хотим подключить:

ssh-copy-id вашsshакаунт@ваш_адрес_сервера


▶️Берем скрипт:

#!/bin/sh
gnome-terminal --tab --title="server1" --command="ssh вашsshакаунт@192.168.0.1" \

--tab --title="server2" --command="ssh вашsshакаунт@192.168.0.2" \
--tab --title="server3" --command="ssh вашsshакаунт@192.168.0.3" \
--tab --title="server4" --command="ssh вашsshакаунт@192.168.0.4"
exit 0


🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥5😐54
Подборка популярных каналов по информационной безопасности и этичному хакингу:

🔐 infosec — ламповое сообщество, которое публикует редкую литературу, курсы и полезный контент для ИБ специалистов любого уровня и направления.

😈 Social Engineering — самый крупный ресурс в Telegram, посвященный этичному Хакингу, OSINT и социальной инженерии.

💬 Вакансии в ИБ — актуальные предложения от самых крупных работодателей и лидеров рынка в сфере информационной безопасности.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
⚙️ Как проверить правильность URL-адреса из оболочки Linux

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

➡️ Основные методы проверки URL
▶️В оболочке в нашем распоряжении есть два основных инструмента для проверки существования URL. Это curl и wget.

➡️ Использование curl
curl – это инструмент командной строки, который мы можем использовать для передачи данных на серверы или с серверов по различным протоколам (включая HTTP и HTTPS).
Среди множества его возможностей, мы можем использовать curl для проверки того, указывает ли URL на реальный, доступный ресурс.

▶️Теперь давайте рассмотрим несколько различных способов использования curl.
Для начала давайте рассмотрим простой скрипт для проверки существования URL-адреса с помощью curl:
#!/bin/bash
if curl --head --silent http://www.baeldung.com/ > /dev/null 2>&1; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

▶️Давайте разберем ключевые части этого скрипта:
curl: это инструмент командной строки, который мы используем для взаимодействия с веб-сайтом
-head: указывает curl использовать только забор «заголовочной» информации с веб-сайта, а не скачивать всю веб-страницу целиком
-silent: поддерживает порядок, скрывая обычный прогресс и статусный вывод curl
> /dev/null 2>&1: отправляет стандартный вывод (stdout) и стандартную ошибку (stderr) в /dev/null, эффективно отбрасывая любой вывод, который мог бы произвести curl

▶️Кроме того, оператор if проверяет код выхода команды curl. Если он равен 0 (успех), то URL существует и доступен.
Если же код выхода ненулевой (ошибка), то URL может не существовать или возникла проблема с соединением.

▶️Далее рассмотрим, как можно сохранить код ответа HTTP в переменной для дальнейшей обработки ошибок:
#!/bin/bash
result=$(curl --head --silent --write-out «%{http_code}» --output /dev/null https://www.google.com/)
if [[ $result -eq 200 ]]; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

▶️В приведенном выше блоке кода ключевым дополнением является -write-out «%{http_code}».
Это указывает curl включить в вывод код состояния сайта по протоколу HTTP.
Затем мы фиксируем этот вывод в переменной result.
Кроме того, оператор if проверяет значение переменной result.
Если оно равно 200, это означает, что URL существует.
Однако если результат не равен 200, возможно, возникла проблема или URL не существует.

➡️ Использование wget
wget – это инструмент, который мы можем использовать для загрузки файлов из Интернета.
Он также предоставляет удобный способ проверки существования URL.

▶️Теперь давайте посмотрим, как работает wget:
#!/bin/bash
if wget --spider https://www.facebook.com/ > /dev/null 2>&1; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi


▶️В приведенном выше скрипте:
wget: пытается загрузить файлы с веб-сайта
-spider: указывает wget проверить, существует ли файл или ресурс, не скачивая его на самом деле
> /dev/null 2>&1: перенаправляет весь вывод в /dev/null, чтобы отбросить его.

▶️Как и в curl, wget использует коды выхода для передачи результатов операции.
Как правило, код выхода 0 означает успех (URL существует), в то время как другие коды указывают на ошибку или несуществование URL.
Кроме того, мы можем полностью изменить вывод wget, что приведет к более чистому выполнению скрипта.

▶️Давайте разберемся, как работает эта опция:
#!/bin/bash
if wget --spider -q https://www.google.com; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

▶️В приведенном выше примере параметр -q указывает wget работать в тихом режиме, не выводя никаких данных на консоль.
Остальная часть скрипта работает так же, как и в предыдущем примере.
Таким образом, хотя wget в первую очередь предназначен для загрузки файлов, его режим -spider – это быстрый и простой способ проверить, существует ли веб-сайт или ресурс.

🖼️ Дочитать статью

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103🔥3