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

Реклама: @Kone4noVasya

Канал на бирже: https://telega.in/c/bash_help
Download Telegram
⚙️ Разница между определением переменных Bash с и без export

✔️Мы определяем переменную с помощью export, чтобы сделать ее доступной для всех подпроцессов (или дочерних процессов).
export variable_name=value

▶️Переменная доступна для любого подпроцесса, который вы запускаете из этого процесса оболочки.
Если вы определяете переменную без экспорта, как показано ниже:
variable_name=value

Переменная ограничена оболочкой и недоступна для любого другого подпроцесса.

▶️Вы можете использовать это для временных и/или циклических переменных.
Давайте определим переменную с именем «itsecforu» без «экспорта», как показано ниже:
$ itsecforu="Welcome to www.itsecforu.ru!"

Теперь отобразим значение с помощью команды «echo»:
$ echo $itsecforu

Будет отображено значение переменной itsecforu.ru:
Welcome to www.itsecforu.ru!

▶️Теперь запустите новый сеанс оболочки Bash, выполнив следующую команду:
 $ bash

Затем попробуйте отобразить значение переменной itsecforu с помощью команды «echo»:
$ echo $itsecforu

Видите?
Система ничего не возвращает!
Вы видите только пустой вывод.

➡️ Следовательно, доказано, что когда мы определяем переменную без экспорта, она не будет доступна дочерним процессам.

▶️Давайте снова определим ту же переменную с опцией экспорта:
$ export itsecforu="Welcome to www.itsecforu.ru!"

Выведем значение переменной:
$ echo $itsecforu

Пример вывода:
Welcome to www.itsecforu.ru!

Начнем новый сеанс оболочки. Попробуйте еще раз отобразить значение переменной:
$ echo $itsecforu

Теперь система вернет значение.

➡️ Следовательно, экспорт делает переменную доступной для любых других дочерних процессов в этой среде оболочки.

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

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Вебинар
QoS в коммутаторах Eltex 24хх/34хх серии

🗓 31.01.2025
🕒 14:00 по МСК

Теория и Практика:
- Базовый и расширенный QoS
- Механизмы классификации трафика
- Доступные алгоритмы организации очередей
- Практические тесты с применением генератора трафика Cisco TRex

👉 Регистрация

Ведущий вебинара:
Алексей Листаров — инженер с многолетним опытом работы в крупном операторе связи. Сертифицированный преподаватель Академии Eltex.

#eltex #eltexcm #webinar #вебинар #mes

@eltexcm

#реклама
О рекламодателе
⚙️ sshudo

✔️Минимальная замена команды sudo на основе SSH для использования с командами, которые содержат параметры с пробелами или пустые параметры.

➡️ Использование:
▶️Нужно использовать sshudo перед ограниченной командой, которую можно выполнить только от имени пользователя root. Тогда система запросит пароль, после его ввода запустит команду.

➡️ Некоторые ограничения:
▶️не будет работать, если параметры содержат одну или несколько одинарных кавычек
▶️не позволяет передавать параметры SSH, для этого нужно использовать ~/.ssh/config
▶️работает только для получения привилегий пользователя root.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Бросаем костыли и внедряем Service Mesh

🔸 Слабый мониторинг или его нет совсем. Непонятно, почему система тормозит.
🔸 Клиенты жалуются на ошибки и долгое время ответа.
🔸 Нужно выкатить новую фичу, но нет уверенности, что всё пойдет как надо.

Знакомо? Значит, пора задуматься о новых решениях для своего проекта.

Приглашаем на трёхдневный онлайн-интенсив по Service Mesh от Слёрм, на котором разберём автоматический мониторинг, chaos engineering, мультикластерное взаимодействие и многое другое.

Чтобы разобраться в технологии, вы на интенсиве:

👉 решите реальные бизнес-кейсы;
👉 поймёте принцип работы и в дальнейшем сможете применить знания на любом решении;
👉 научитесь искать причины проблем.

Даты проведения: 28.02-03.03. 
Специальные условия группам от 3-х человек.

👉 Программа и запись на интенсив по ссылке.

#реклама
О рекламодателе
⚙️ Система мониторинга на 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
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
☁️ Облака, облака повсюду

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

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

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

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

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

👆 Участие бесплатное, ссылка на регистрацию тут
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Создание переменных, доступных только для чтения, а также неизменяемых переменных в 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
👩‍💻 Открытый урок «Инструменты и методы мониторинга серверов на платформе 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
⚙️ Полезные алиасы в Bash

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

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

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

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ 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
Хотите научиться программировать, но теряетесь в выборе языка? Или уже изучаете Python, но не хватает практики? Тогда этот бесплатный мини-курс от Skillbox по Python-разработке — то, что нужно!

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


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

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

Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
⚙️ 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
Крутая программа для тех, кто уже работает с Linux и хочет погрузиться DevOps.

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

Подробнее можно узнать на сайте
⚙️ Выводим список установленных пакетов в 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
⚙️ dev-setup

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

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

🐙 Перейти на Github

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

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

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

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

Еще есть время зарегистрироваться и подключиться.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ 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
Все новости из мира программирования на этом канале @umnyiprogrammist

Подписывайтесь, чтобы не упустить ничего важного