🚀 Почему пользователи платят $30 за простой конвертер картинок? Давайте разберемся.
Кирилл из комьюнити создал простой продукт всего за один месяц, внедрив метод, которой уже принес результат.
Как он это сделал:
1️⃣ Анализ спроса: через поисковые запросы он увидел, что много людей ищут конвертацию «HEIC to JPG».
2️⃣ Фокус на главном: удалил всё лишнее, оставив только функцию конвертации в один клик.
3️⃣ Скорость внедрения: за 30 дней сделал запуск без перфекционизма.
Посты про конвертер (ч.1, ч.2)
Что из этого получилось:
— Доход $500 в месяц с тенденцией роста.
— Более $10K заработано на конвертере.
— $0 на рекламу, всего $40 в месяц на сервер.
Выводы:
— Люди платят за удобство, даже если есть бесплатные аналоги.
— Продукт функционирует автоматически с минимальной поддержкой.
— Быстрая и экономичная проверка идеи может быть успешной.
Результаты из комьюнити билдеров:
— Более 400 запусков по этой методике.
— Некоторые продукты уже набрали от 50К до 100К+ пользователей.
Присоединяйтесь к @its_capitan — следите за процессом разработки, продвижения и узнайте, сколько можно заработать на таких микро-продуктах.
Реклама: ИП Зуев Игорь Владимирович, ИНН: 360408359441, Erid: 2VtzqwBXght
Кирилл из комьюнити создал простой продукт всего за один месяц, внедрив метод, которой уже принес результат.
Как он это сделал:
1️⃣ Анализ спроса: через поисковые запросы он увидел, что много людей ищут конвертацию «HEIC to JPG».
2️⃣ Фокус на главном: удалил всё лишнее, оставив только функцию конвертации в один клик.
3️⃣ Скорость внедрения: за 30 дней сделал запуск без перфекционизма.
Посты про конвертер (ч.1, ч.2)
Что из этого получилось:
— Доход $500 в месяц с тенденцией роста.
— Более $10K заработано на конвертере.
— $0 на рекламу, всего $40 в месяц на сервер.
Выводы:
— Люди платят за удобство, даже если есть бесплатные аналоги.
— Продукт функционирует автоматически с минимальной поддержкой.
— Быстрая и экономичная проверка идеи может быть успешной.
Результаты из комьюнити билдеров:
— Более 400 запусков по этой методике.
— Некоторые продукты уже набрали от 50К до 100К+ пользователей.
Присоединяйтесь к @its_capitan — следите за процессом разработки, продвижения и узнайте, сколько можно заработать на таких микро-продуктах.
Реклама: ИП Зуев Игорь Владимирович, ИНН: 360408359441, Erid: 2VtzqwBXght
Например, при вводе
rm -rf /
программа покажет предупреждение и потребует подтвердить удаление.Please open Telegram to view this post
VIEW IN TELEGRAM
❕ Приглашаем на урок по работе с чувствительными данными в Kubernetes-кластере!
⏺ Открытый урок «K8S + Vault — как получать секреты?»
Бесплатно 17 июня в 20:00 МСК.
Поймете, как организовать безопасное и масштабируемое взаимодействие между Kubernetes и HashiCorp Vault. Разберём подход dynamic secrets и инструмент External Secrets Operator для интеграции секретов из Vault в кластер.
На уроке вы узнаете:
- как Kubernetes работает с секретами по умолчанию и его ограничения;
- способы интеграции Kubernetes и Vault;
- что такое External Secrets Operator и почему его выбирают для production-сред;
- пошаговую схему подключения Vault к K8s.
➡️ Регистрация на вебинар
Урок в рамках старта курса «Инфраструктурная платформа на основе Kubernetes», ты можешь воспользоваться 🎁 бонусным промокодом Kuber_06 при покупке курса.
#реклама
О рекламодателе
⏺ Открытый урок «K8S + Vault — как получать секреты?»
Бесплатно 17 июня в 20:00 МСК.
Поймете, как организовать безопасное и масштабируемое взаимодействие между Kubernetes и HashiCorp Vault. Разберём подход dynamic secrets и инструмент External Secrets Operator для интеграции секретов из Vault в кластер.
На уроке вы узнаете:
- как Kubernetes работает с секретами по умолчанию и его ограничения;
- способы интеграции Kubernetes и Vault;
- что такое External Secrets Operator и почему его выбирают для production-сред;
- пошаговую схему подключения Vault к K8s.
➡️ Регистрация на вебинар
Урок в рамках старта курса «Инфраструктурная платформа на основе Kubernetes», ты можешь воспользоваться 🎁 бонусным промокодом Kuber_06 при покупке курса.
#реклама
О рекламодателе
getopts
— это встроенный в любой POSIX-совместимый Linux/Unix-shell мини-парсер аргументов. Один shebang — и у вас CLI-утилита без единой внешней зависимости. В статье рассмотрим, как выжать из getopts
максимум, где он спотыкается и когда пора переехать на getopt
или Argbash.--long-option
. Но и это решаемо.#!/usr/bin/env sh
set -euo pipefail
IFS='
'
usage() {
cat <<EOF
Usage: ${0##*/} [-a] [-b ARG] file...
-a : включить дополнительный режим
-b ARG : передать аргумент
EOF
exit 2
}
# двоеточие в начале → тихий режим ошибок
while getopts ":ab:" opt; do
case "$opt" in
a) flag_a=true ;;
b) param_b=$OPTARG ;;
:) echo "Опция -$OPTARG требует аргумента" >&2; usage ;;
\?) echo "Неизвестная опция -$OPTARG" >&2; usage ;;
esac
done
shift "$((OPTIND-1))" # убираем уже разобранные параметры
optstring
переводит парсер в «silent mode» — ошибки по argv
приходится ловить самостоятельно, зато можно отдать лайтовый help
, а не cryptic usage
из недр шелла. Про необходимость shift "$((OPTIND-1))"
задокументировано даже в posix man-pages — так убираем из $@
опции и получаем чистый список позиционных аргументов.getopts
умеет распаковывать слипшиеся флаги: -abc
интерпретируется как -a -b -c
. Если после символа ожидается аргумент, разбор прекращается ровно там:# optstring="a:b"
$ my.sh -ac # OK: -a, -c как позиционка
$ my.sh -abx # -a, -b x
$ my.sh -ab # ошибка: -b ждёт аргумент
Edge-case
— отрицательные числа (-5)
внезапно принимаются за флаг. Начинайте список ожидаемых опций с --
, тогда getopts
прекратит работу при виде первого не-флага, и минусы в числах останутся нетронутыми.Частый прием: сначала через
case "$1"
ловим варианты --help
, --version
, --long=value
, а затем отдаём остаток в getopts
— так не ломаем POSIX-совместимость и не тащим GNU getopt.while [ $# -gt 0 ]; do
case "$1" in
--help) usage ;;
--output=*) opt_o=${1#*=}; shift ;;
--) shift; break ;; # двойное тире — конец опций
-*) break ;; # короткие опции разберет getopts
*) break ;;
esac
done
# теперь классический getopts
while getopts ":o:f:" opt; do
...
done
shift "$((OPTIND-1))"
--verbose/-v
, или вообще YAML-конфиг после --config=path.yml
.Please open Telegram to view this post
VIEW IN TELEGRAM
Освой сети и командную строку с лучшими обучающими каналами
🤩 Network Admin - обучающий канал по сетевым технологиям
🤩 Network Admin | Guides - канал, где рассказывают полезную информацию про Windows/Linux
📱 BashTex - обучение работе с командной строкой
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
.env
.cron
.find
(обычно она предустановлена в большинстве Linux-дистрибутивов)Please open Telegram to view this post
VIEW IN TELEGRAM
Hacking & InfoSec Base — канал действующего белого хакера. Подробные уроки по безопасности, эксплуатации уязвимостей, социальной инженерии.
CyberGuard — полезные утилиты, софт и литература по информационной безопасности и Хакингу.
linux administration — всё, что необходимо знать о Linux и его дистрибутивах.
Please open Telegram to view this post
VIEW IN TELEGRAM
logrotate
, но это не так. Да, ротация логов как раз и была придумана и даже демон для нее, что бы старые логи не накапливались, а проходили ротацию и тем самым не засоряли систему. Но не все так радужно и существует куча служб и прочих задач, которые скапливают логи и никак за их количеством не следят. Более того, даже если настроить ротацию таким логам, то ничего не выйдет.find
с вот такими опциями:find /var/log/* -type f -mtime +182 -exec rm {} \;
/var/log/*
– место для поиска и все папки и подпапки-type f
– в поиск должны попасть только файлы, папки удалять не стоит, да же если они старые, хотя все опционально-mtime +182
– искать файлы будем модифицированные старше 182 дней назад-exec rm {}
– ну а эта опция удалит все что подпадет под поиск, для теста можно ее удалить и посмотреть что будет удалено.nano rm_old.sh
:#!/bin/sh
#Задаем переменные
Day=182
log_path="/var/log/"
#Найти и удалить файлы
find $log_path* -type f -mtime +$Day -exec rm {} \;
echo 'файлы журнала старше 30 дней удалены из $log_path'
chmod +x rm_old.sh
crontab -e
и вписываем следующее:0 10 * * * /path_to_script/rm_old.sh >/dev/null 2>&1
Please open Telegram to view this post
VIEW IN TELEGRAM
Устали от «хайповых» курсов?
RECURA — канал с реально работающими инструментами и знаниями:
📚Подборки курсов, сборники, шпаргалки, лайфхаки
💻 Python и Go для автоматизации и DevOps
🐧 Linux + Bash: решения для реальных проектов
🐳 Docker, Kubernetes и CI/CD — практические гайды
🛠 Утилиты, заменяющие кучу софта
🔐 OSINT и этичный хакинг: практика и разборы
Присоединяйся и получай то, что действительно нужно!
RECURA — канал с реально работающими инструментами и знаниями:
📚Подборки курсов, сборники, шпаргалки, лайфхаки
💻 Python и Go для автоматизации и DevOps
🐧 Linux + Bash: решения для реальных проектов
🐳 Docker, Kubernetes и CI/CD — практические гайды
🛠 Утилиты, заменяющие кучу софта
🔐 OSINT и этичный хакинг: практика и разборы
Присоединяйся и получай то, что действительно нужно!
bash permission denied
. Эта ошибка выводится, даже если вы использовали sudo
.sudo
есть, значит права суперпользователя получены и все должно работать но тут все не так просто. В этой статье мы рассмотрим почему возникает ошибка bash permission denied
и как ее обойти.sudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf
/etc/resolv.conf
получаете ошибку bash: /etc/resolv.conf permission denied
bash linux
. Так происходит потому что вы запускаете с правами суперпользователя утилиту echo
и она честно выводит вашу строку в стандартный вывод bash с правами суперпользователя. Но bash запущен от обычного пользователя, и когда интерпретатор bash пытается записать полученную строчку в системный файл, естественно, что вы получите ошибку.tee
, которая записывает стандартный вывод в файл или запустить саму оболочку от имени суперпользователя. echo 'текст' | sudo tee -a /путь/к/файлу
echo 'nameserver 8.8.8.8' | sudo tee -a /etc/resolv.conf
sudo sh -c 'echo текст >> /путь/к/файлу'
sudo bash -c 'echo текст >> /путь/к/файлу'
sudo bash -c 'echo nameserver 8.8.8.8 >> /etc/resolv.conf
~/.bashrc
:sudoe() {
[[ "$#" -ne 2 ]] && echo "Usage: sudoe <text> <file>" && return 1
echo "$1" | sudo tee --append "$2" > /dev/null
}
sudoe 'текст' >> /путь/к/файлу
sudoe "nameserver 8.8.8.8" > /etc/resolv.conf
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Как DevOps-инженеру сэкономить часы работы и избежать ошибок с помощью AI-инструментов
▶️ воркшоп о учебного центра Слёрм с Виктором Чаплыгиным, Senior Engineer в международном GameDev холдинге.
Что будет на воркшопе:
Теория: кратко о том, как работают LLM в контексте разработки и эксплуатации. Обзор Cursor IDE — AI-интегрированная IDE с поддержкой кода и терминала.
Практика:
🔹 Настройка Cursor IDE — подготовка среды для продуктивной работы с AI;
🔹 Создание и отладка IaC (Kubernetes YAML, Ansible) с помощью AI-ассистентов: выявление и исправление ошибок;
🔹 Генерация понятной и структурированной документации к проектам с помощью AI;
🔹 Разбор реальных кейсов и работа с командной строкой: исправление, пояснение, улучшение команд и манифестов.
А ещё — личный опыт и лучшие практики применения GPT-ассистентов для повседневных DevOps-задач, от написания инфраструктуры до исправления ошибок и генерации документации.
Когда: 5 июля 2025 года 📆
Узнать подробности и занять место на воркшопе — через бота 📌
▶️ воркшоп о учебного центра Слёрм с Виктором Чаплыгиным, Senior Engineer в международном GameDev холдинге.
Что будет на воркшопе:
Теория: кратко о том, как работают LLM в контексте разработки и эксплуатации. Обзор Cursor IDE — AI-интегрированная IDE с поддержкой кода и терминала.
Практика:
🔹 Настройка Cursor IDE — подготовка среды для продуктивной работы с AI;
🔹 Создание и отладка IaC (Kubernetes YAML, Ansible) с помощью AI-ассистентов: выявление и исправление ошибок;
🔹 Генерация понятной и структурированной документации к проектам с помощью AI;
🔹 Разбор реальных кейсов и работа с командной строкой: исправление, пояснение, улучшение команд и манифестов.
А ещё — личный опыт и лучшие практики применения GPT-ассистентов для повседневных DevOps-задач, от написания инфраструктуры до исправления ошибок и генерации документации.
Когда: 5 июля 2025 года 📆
Узнать подробности и занять место на воркшопе — через бота 📌
#! /bin/bash
# Сброс всех переменных, которые может использовать система
# Очистка экрана терминала
clear
unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage
while getopts iv name
do
case $name in
i)iopt=1;;
v)vopt=1;;
*)echo "Invalid arg";;
esac
done
if [[ ! -z $iopt ]]
then
{
wd=$(pwd)
basename "$(test -L "$0" && readlink "$0" || echo "$0")" > /tmp/scriptname
scriptname=$(echo -e -n $wd/ && cat /tmp/scriptname)
su -c "cp $scriptname /usr/bin/monitor" root && echo "Congratulations! Script Installed, now run monitor Command" || echo "Installation failed"
}
fi
if [[ ! -z $vopt ]]
then
{
echo -e
}
fi
if [[ $# -eq 0 ]]
then
{
# Определение переменной tecreset
tecreset=$(tput sgr0)
# Проверка подключения к Интернету
ping -c 1 google.com &> /dev/null && echo -e '\E[32m'"Internet: $tecreset Connected" || echo -e '\E[32m'"Internet: $tecreset Disconnected"
# Определение типа ОС
os=$(uname -o)
echo -e '\E[32m'"Operating System Type :" $tecreset $os
# Определение версии и названия выпуска ОС
cat /etc/os-release | grep 'NAME\|VERSION' | grep -v 'VERSION_ID' | grep -v 'PRETTY_NAME' > /tmp/osrelease
echo -n -e '\E[32m'"OS Name :" $tecreset && cat /tmp/osrelease | grep -v "VERSION" | cut -f2 -d\"
echo -n -e '\E[32m'"OS Version :" $tecreset && cat /tmp/osrelease | grep -v "NAME" | cut -f2 -d\"
# Проверка архитектуры
architecture=$(uname -m)
echo -e '\E[32m'"Architecture :" $tecreset $architecture
# Проверка выпуска ядра
kernelrelease=$(uname -r)
echo -e '\E[32m'"Kernel Release :" $tecreset $kernelrelease
# Определение имени хоста
echo -e '\E[32m'"Hostname :" $tecreset $HOSTNAME
# Определение внутреннего IP
internalip=$(hostname -I)
echo -e '\E[32m'"Internal IP :" $tecreset $internalip
# Определение публичного IP
externalip=$(curl -s ipecho.net/plain;echo)
echo -e '\E[32m'"External IP : $tecreset "$externalip
# Проверка DNS
nameservers=$(cat /etc/resolv.conf | sed '1 d' | awk '{print $2}')
echo -e '\E[32m'"Name Servers :" $tecreset $nameservers
# Проверка вошедших в систему пользователей
who>/tmp/who
echo -e '\E[32m'"Logged In users :" $tecreset && cat /tmp/who
# Мониторинг использования ОЗУ и SWAP
free -h | grep -v + > /tmp/ramcache
echo -e '\E[32m'"Ram Usages :" $tecreset
cat /tmp/ramcache | grep -v "Swap"
echo -e '\E[32m'"Swap Usages :" $tecreset
cat /tmp/ramcache | grep -v "Mem"
# Мониторинг использование диска
df -h| grep 'Filesystem\|/dev/sda*' > /tmp/diskusage
echo -e '\E[32m'"Disk Usages :" $tecreset
cat /tmp/diskusage
# Проверка средней нагрузки
loadaverage=$(top -n 1 -b | grep "load average:" | awk '{print $10 $11 $12}')
echo -e '\E[32m'"Load Average :" $tecreset $loadaverage
# Определение длительности сеанса работы ОС
tecuptime=$(uptime | awk '{print $3,$4}' | cut -f1 -d,)
echo -e '\E[32m'"System Uptime Days/(HH:MM) :" $tecreset $tecuptime
# Сброс значений переменных
unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage
# Удаление временных файлов
rm /tmp/osrelease /tmp/who /tmp/ramcache /tmp/diskusage
}
fi
shift $(($OPTIND -1))
chmod 755 monitor.sh
./monitor.sh -i
root
. После завершения установки скрипта, для его запуска требуется просто выполнить команду monitor
./path/to/script/monitor.sh
Please open Telegram to view this post
VIEW IN TELEGRAM