В Bash обработка ошибок может осуществляться различными способами, несмотря на то, что в языке нет прямого блока try-catch, как в таких языках, как Python или JavaScript.
В 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
для указания скрипту немедленно выйти, если какая-либо команда возвращает ненулевой статус.Это полезно для скриптов, в которых необходимо убедиться, что любой сбой останавливает выполнение.
#!/bin/bash
set -e
mkdir /root/test_dir
echo "Directory created successfully."
set
-e
, скрипт автоматически завершается при неудачном создании каталога, что избавляет вас от необходимости вручную проверять статус выхода после каждой команды.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
срабатывает всякий раз, когда происходит ошибка, предоставляя точный номер строки, в которой произошел сбой, что помогает более эффективно отлаживать.try-catch
, но с помощью различных методов, таких как проверка состояния выхода, команды-ловушки и пользовательские функции обработки ошибок, вы можете эффективно справляться с ошибками.Please open Telegram to view this post
VIEW IN TELEGRAM
Хотите научиться программировать, но теряетесь в выборе языка? Или уже изучаете Python, но не хватает практики? Тогда этот бесплатный мини-курс от Skillbox по Python-разработке — то, что нужно!
👉🏻 Если коротко: это мини-курс из 4 записанных уроков и 1 прямого эфира. Смотрите, когда удобно, после каждого выполняете задания. В итоге у вас будет 4 проекта для портфолио: Telegram-бот, который умеет превращать голос в текст, парсер для сбора данных и веб-страница на Flask. Неплохая практика для 5 занятий!
🎁 Ещё участников мини-курса ждут подарки: персональная карьерная консультация, скидка 10 000 рублей на любой курс Skillbox и подборка полезных материалов для старта карьеры в Python-разработке.
В общем, приходите практиковаться — не пожалеете: https://epic.st/iQLNm?erid=2VtzqvmR6eG
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
👉🏻 Если коротко: это мини-курс из 4 записанных уроков и 1 прямого эфира. Смотрите, когда удобно, после каждого выполняете задания. В итоге у вас будет 4 проекта для портфолио: Telegram-бот, который умеет превращать голос в текст, парсер для сбора данных и веб-страница на Flask. Неплохая практика для 5 занятий!
🎁 Ещё участников мини-курса ждут подарки: персональная карьерная консультация, скидка 10 000 рублей на любой курс Skillbox и подборка полезных материалов для старта карьеры в Python-разработке.
В общем, приходите практиковаться — не пожалеете: https://epic.st/iQLNm?erid=2VtzqvmR6eG
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
-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-адреса.Tab
.COMP_WORDS
: массив, содержащий аргументы командной строки.COMP_CWORD
: индекс в этом массиве, указывающий на текущий элемент.COMPREPLY
: итоговый массив, который содержит сформированный список слов. Он, в конечном итоге и будет подставлен для автодополнения./etc/bash_completion
отвечает за инициализацию автодополнения Bash. Этот скрипт вызывается при логине пользователя с последующей загрузкой скриптов из директории /etc/bash_completion.d
./etc/bash_completion.d
. После этого, при входе в систему, наша функция будет автоматически подключена и готова к вызову при автодополнении.Внутри пользовательской функции нам надо определить логику создания списка слов для автодополнения. В Bash существует специальная команда как раз для такой задачи.
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
.Please open Telegram to view this post
VIEW IN TELEGRAM
Крутая программа для тех, кто уже работает с Linux и хочет погрузиться DevOps.
В двух словах: программа на 2 месяца, ты учишься, тебе еще и платят. Начинка: начинающий и продвинутый курс по Linux, погружение в DevOps. Обучение с практикой, лабораторными и под контролем экспертов из K2 Сloud.
Подробнее можно узнать на сайте
В двух словах: программа на 2 месяца, ты учишься, тебе еще и платят. Начинка: начинающий и продвинутый курс по Linux, погружение в DevOps. Обучение с практикой, лабораторными и под контролем экспертов из K2 Сloud.
Подробнее можно узнать на сайте
Например, если вы используете дистрибутив 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 -qa --last
rpm -qa --last postfix3 postfix3-3.2.0-1.gf.el7.x86_64 Thu 25 May 2017 01:04:35 AM EAT
expac
. Для получения информации в понятном формате, вызывать данную утилиту необходимо с использованием параметра:expac --timefmt='%F %T' '%l %n'
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Вот отсортированная база с тонной материала (постепенно пополняется):
БАЗА (4687 видео/книг):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — 1С
(136 видео, 33 книги) — PM/HR
Скачивать ничего не нужно — все выложили в Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Пора переходить на open source? 🤔
Уже завтра в 11:00 облачный провайдер Cloud.ru проводит бесплатный вебинар для тех, кто открывает для себя мир open source.
В прямом эфире поделятся опытом:
😶🌫️ как выбирали open source решение;
😶🌫️ с какими сложностями столкнулись при переходе;
😶🌫️ как их решали и что в итоге получили.
А еще расскажут про тестирование производительности data plane, нюансы работы control plane и ответят на ваши вопросы.
Еще есть время зарегистрироваться и подключиться.
Уже завтра в 11:00 облачный провайдер Cloud.ru проводит бесплатный вебинар для тех, кто открывает для себя мир open source.
В прямом эфире поделятся опытом:
А еще расскажут про тестирование производительности data plane, нюансы работы control plane и ответят на ваши вопросы.
Еще есть время зарегистрироваться и подключиться.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Все новости из мира программирования на этом канале @umnyiprogrammist
Подписывайтесь, чтобы не упустить ничего важного
Подписывайтесь, чтобы не упустить ничего важного
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка популярных каналов по информационной безопасности и этичному хакингу:
🔐 infosec — ламповое сообщество, которое публикует редкую литературу, курсы и полезный контент для ИБ специалистов любого уровня и направления.
😈 Social Engineering — самый крупный ресурс в Telegram, посвященный этичному Хакингу, OSINT и социальной инженерии.
💬 Вакансии в ИБ — актуальные предложения от самых крупных работодателей и лидеров рынка в сфере информационной безопасности.
Please open Telegram to view this post
VIEW IN TELEGRAM
Вы узнаете несколько простых и эффективных способов проверить, существует ли URL, прямо из нашей оболочки.
curl
и wget
.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 может не существовать или возникла проблема с соединением.
#!/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
– это инструмент, который мы можем использовать для загрузки файлов из Интернета.Он также предоставляет удобный способ проверки существования 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
– это быстрый и простой способ проверить, существует ли веб-сайт или ресурс.Please open Telegram to view this post
VIEW IN TELEGRAM
Service mesh: тренд, необходимость или хайп?
Приглашаем обсудить это на бесплатном вебинаре от учебного центра Слёрм.
Что будет на вебинаре:
➡️ посмотрим на service mesh с разных точек зрения: эксплуатации и разработки;
➡️ обсудим, какие преимущества дает service mesh и какие у него особенности;
➡️ определим основные понятия и посмотрим на примеры реализации service mesh.
И еще, кстати, разберём, бесплатен ли service mesh и какова его реальная цена.
Эксперты встречи — спикеры курсов Слёрма:
— Павел Лакосников, TeamLead SLA в Авито
— Георг Гаал, CTO, Aenix
Когда: 19 февраля в 19:00
👉 Занять место на вебинаре — через бота.
Реклама. ООО "СЛЁРМ". ИНН 3652901451.
Приглашаем обсудить это на бесплатном вебинаре от учебного центра Слёрм.
Что будет на вебинаре:
➡️ посмотрим на service mesh с разных точек зрения: эксплуатации и разработки;
➡️ обсудим, какие преимущества дает service mesh и какие у него особенности;
➡️ определим основные понятия и посмотрим на примеры реализации service mesh.
И еще, кстати, разберём, бесплатен ли service mesh и какова его реальная цена.
Эксперты встречи — спикеры курсов Слёрма:
— Павел Лакосников, TeamLead SLA в Авито
— Георг Гаал, CTO, Aenix
Когда: 19 февраля в 19:00
👉 Занять место на вебинаре — через бота.
Реклама. ООО "СЛЁРМ". ИНН 3652901451.
Please open Telegram to view this post
VIEW IN TELEGRAM
Знаем, что многие тут хотят уйти в DevOps или серьезно в нем прокачаться. Но не знают, где взять информацию и четкий план.
💪 Советуем бесплатный мета-курс Devops Roadmap - это расширенный чек-лист, который поможет сориентироваться в мире DevOps и стать крутым спецом.
👀 В мета-курсе перечислены все основные разделы и навыки, которыми должен обладать DevOps инженер: от Linux до программирования в удобном формате.
✔️А еще он будет полезен при подготовке к собеседованиям.
👽 Кстати, бонусом крутой канал о девопс. Там тоже самые свежие IT-новости, полезные советы от DevOps-инженера с 20-летним стажем, эксклюзивные материалы, релизы топовых инструментов, обзоры вакансий и личный взгляд на девопс-сферу.
💪 Советуем бесплатный мета-курс Devops Roadmap - это расширенный чек-лист, который поможет сориентироваться в мире DevOps и стать крутым спецом.
👀 В мета-курсе перечислены все основные разделы и навыки, которыми должен обладать DevOps инженер: от Linux до программирования в удобном формате.
✔️А еще он будет полезен при подготовке к собеседованиям.
👽 Кстати, бонусом крутой канал о девопс. Там тоже самые свежие IT-новости, полезные советы от DevOps-инженера с 20-летним стажем, эксклюзивные материалы, релизы топовых инструментов, обзоры вакансий и личный взгляд на девопс-сферу.
argc
(базовая структура командной строки для Bash) и jq
(процессор JSON).Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Service mesh и зачем он нужен?
Service mesh автоматизирует маршрутизацию, отказоустойчивость, безопасность и мониторинг. Но нужен ли он именно вам или это просто лишний оверхед?
В бесплатном уроке эксперт учебного центра Слёрм разберёт:
✔️ Проблемы микросервисной архитектуры;
✔️ Что такое Service mesh и как он работает;
✔️ Какие задачи решает Service mesh;
✔️ Кому он нужен, а кому – только усложнит жизнь;
✔️ Когда можно обойтись без него.
👉 Получить урок — у бота-помощника 👈
Смотрите сами и делитесь с коллегами!
Реклама. ООО "СЛЁРМ". ИНН 3652901451. erid: 2W5zFJN7yZ2
Service mesh автоматизирует маршрутизацию, отказоустойчивость, безопасность и мониторинг. Но нужен ли он именно вам или это просто лишний оверхед?
В бесплатном уроке эксперт учебного центра Слёрм разберёт:
✔️ Проблемы микросервисной архитектуры;
✔️ Что такое Service mesh и как он работает;
✔️ Какие задачи решает Service mesh;
✔️ Кому он нужен, а кому – только усложнит жизнь;
✔️ Когда можно обойтись без него.
👉 Получить урок — у бота-помощника 👈
Смотрите сами и делитесь с коллегами!
Реклама. ООО "СЛЁРМ". ИНН 3652901451. erid: 2W5zFJN7yZ2
#!/bin/bash
# Use argument for count down. Example: ./countdown.sh 10
# Author: Yevgeniy Goncharov aka xck, http://sys-admin.kz
# Help information
usage() {
echo -e "" "\nParameters:\n"
echo -e "-c - Count (in seconds)"
echo -e "-f - Format (1 - Every line, 2 - One Line)\n"
exit 1
}
countdown_by_line() {
if [[ ! $1 ]]; then
echo "Please set countdown. Exit."
exit 1
else
secs=$1
fi
# bash while loop
while [ "$secs" -gt 0 ]; do
echo "$secs"
(( secs=secs-1 )) || true
sleep 1
done
echo Finish!
}
countdown_one_line() {
# secs=$((5 * 60))
if [[ ! $1 ]]; then
echo "Please set countdown. Exit."
exit 1
else
secs=$1
fi
# bash while loop
while [ "$secs" -gt 0 ]; do
echo -ne "$secs\033[0K\r"
sleep 1
: $((secs--))
done
echo Finish!
}
if [[ -z "$1" ]]; then
usage
exit 1
fi
while [[ "$#" -gt 0 ]]; do
case $1 in
-c|--count) COUNT=$2; ;;
-f|--format) FORMAT="$2"; shift ;;
-h|--help) usage ;;
esac
shift
done
if [[ "$FORMAT" -eq "1" ]]; then
countdown_by_line "$COUNT"
elif [[ "$FORMAT" -eq "2" ]]; then
countdown_one_line "$COUNT"
else
echo "Unknown format. Exit. Bye!"
fi
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM