sudo
.~/.local/bin
.Please open Telegram to view this post
VIEW IN TELEGRAM
Как запустить собственный пет-проект и зарабатывать на нём как senior-разработчик? 💲
А что, если перевернуть игру, и вместо работы в IT на дядю запустить собственный пет-проект, который будет приносить деньги?
Александр Рогачев запустил телеграм-канал Indie Hackers, где рассказывает про пет-проекты, которые приносят неплохой стабильный доход своим создателям. Без венчурных инвестиций, без бизнес-планов и команды. Разве такое возможно? Да!
Несколько примеров:
— Агрегатор вакансий c доходом в 4000$ / месяц
— Плагин для Chrome с доходом 20000₽ / месяц
Вдохновляйтесь свежими идеями, которые могут обеспечить стабильный пассивных доход, на канале Indie Hackers. Уверен, что там вы найдёте то самое, что зажжёт огонь в вашем сердце!❤️🔥
➡️ Ссылка для входа
А что, если перевернуть игру, и вместо работы в IT на дядю запустить собственный пет-проект, который будет приносить деньги?
Александр Рогачев запустил телеграм-канал Indie Hackers, где рассказывает про пет-проекты, которые приносят неплохой стабильный доход своим создателям. Без венчурных инвестиций, без бизнес-планов и команды. Разве такое возможно? Да!
Несколько примеров:
— Агрегатор вакансий c доходом в 4000$ / месяц
— Плагин для Chrome с доходом 20000₽ / месяц
Вдохновляйтесь свежими идеями, которые могут обеспечить стабильный пассивных доход, на канале Indie Hackers. Уверен, что там вы найдёте то самое, что зажжёт огонь в вашем сердце!
Please open Telegram to view this post
VIEW IN TELEGRAM
Одно работает с любой оболочкой Bash или Bash-подобной оболочкой, а другое соответствует POSIX, если вам нужна максимальная совместимость.
Скрипт ниже включает в себя оба решения.
Вы можете раскомментировать вариант 1 или 2 в зависимости от вашего случая использования.
#!/usr/bin/env bash
set -o errexit
set -o nounset
while true; do
printf "Please input your API key and hit enter: "
# ВАРИАНТ 1: ТРЕБУЕТСЯ ОБОЛОЧКА BASH ИЛИ BASH-ПОДОБНАЯ ОБОЛОЧКА (BASH, ZSH, ASH И Т. Д.)
read -sr key
# ВАРИАНТ 2: ДЛЯ МАКСИМАЛЬНОЙ СОВМЕСТИМОСТИ С ОБОЛОЧКАМИ (SH, DASH И Т. Д.)
# stty -echo
# read -r key
# stty echo
if [ -z "${key}" ]; then
printf "\n\nPlease input your API key or hit CTRL+c to halt this script\n\n"
else
# TODO: Вставьте свою пользовательскую логику, которая использует этот ключ.
printf "\n\nFor demo purposes, your API key is: %s\n" "${key}"
break
fi
done
-s
из read недоступен в sh и других минимальных оболочках.Флаг
-s
не позволяет передавать ввод пользователя через echo
.stty
, чтобы отключить эхо, возвращающее наш чувствительный текст, записать этот ввод в переменную, а затем снова включить echo
.Please open Telegram to view this post
VIEW IN TELEGRAM
IT-челлендж Слёрма — проверь свой скилл!
5 дней — 5 тем для IT-инженеров уровня Middle:
▪️ Bash / Linux / DevOps
▪️ Сети
▪️ CI/CD, Docker, Jenkins
▪️ SQL и базы данных
▪️ Информационная безопасность
🔺Короткие, но умные задания в Google Формах
🔺Удобный Telegram-бот ведёт по шагам
🔺Занимает не больше 15–20 минут в день
Подарки победителям:
Подписка на курсы Слёрма
Курс «Администрирование Linux»
Курс «Ansible: Infrastructure as Code»
🎫 30% скидка всем, кто дойдёт до конца
📅 Челлендж с 16 по 20 июня
📍 Регистрация в боте до 15 июня
5 дней — 5 тем для IT-инженеров уровня Middle:
▪️ Bash / Linux / DevOps
▪️ Сети
▪️ CI/CD, Docker, Jenkins
▪️ SQL и базы данных
▪️ Информационная безопасность
🔺Короткие, но умные задания в Google Формах
🔺Удобный Telegram-бот ведёт по шагам
🔺Занимает не больше 15–20 минут в день
Подарки победителям:
Подписка на курсы Слёрма
Курс «Администрирование Linux»
Курс «Ansible: Infrastructure as Code»
🎫 30% скидка всем, кто дойдёт до конца
📅 Челлендж с 16 по 20 июня
📍 Регистрация в боте до 15 июня
DRIVE_TO_MOUNT
— путь к локальному диску, который нужно смонтировать (например, /dev/sda1
).PATH_WHERE_MOUNT
— абсолютный путь к точке монтирования.MOUNT_TYPE
— тип файловой системы, который будет использоваться в опции -t
команды mount.crontab
.Please open Telegram to view this post
VIEW IN TELEGRAM
— Пентесты Wi-Fi, камер, сайтов
— OSINT и социальная инженерия
— Техники анонимности и обход слежки
— Сливы и разборы реальных утечек
— Инструменты: Metasploit, Nmap, Kali Linux
https://t.me/+jBip_a1-JM9jNjFi
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
🚀 Почему пользователи платят $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