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
Please open Telegram to view this post
VIEW IN TELEGRAM
Полный контроль над Kubernetes через мониторинг и логи
⚡️Хотите уверенно выявлять сбои, мониторить метрики и быстро находить ошибки в k8s? За 12 часов теории и 44 часа практики вы не только освоите широкий стек инструментов, но и best practices по ним.
⚡️Курс «Мониторинг и логирование инфраструктуры в Kubernetes» — быстрый способ научиться выстраивать эффективную систему мониторинга. На обучении вы поймёте:
- Как обеспечить долгосрочное хранение метрик распределённо месяцы и годы для анализа динамики и сравнения графиков
- Какие метрики стоит собирать с помощью Prometheus
- Как визуализировать мониторинг с помощью Grafana и как грамотно настроить алерты
☄️Старт — 7 июля. Прямо сейчас по промокоду LETO2025 вы можете занять место со скидкой ❗️50%❗️
*промокод вводится при оформлении оплаты
Вводите в эксплуатацию мониторинг и логирование инфраструктуры в k8s сразу после курса и станьте ещё востребованнее на рынке IT.
👉🏻Смотреть программу и применить скидку
⚡️Хотите уверенно выявлять сбои, мониторить метрики и быстро находить ошибки в k8s? За 12 часов теории и 44 часа практики вы не только освоите широкий стек инструментов, но и best practices по ним.
⚡️Курс «Мониторинг и логирование инфраструктуры в Kubernetes» — быстрый способ научиться выстраивать эффективную систему мониторинга. На обучении вы поймёте:
- Как обеспечить долгосрочное хранение метрик распределённо месяцы и годы для анализа динамики и сравнения графиков
- Какие метрики стоит собирать с помощью Prometheus
- Как визуализировать мониторинг с помощью Grafana и как грамотно настроить алерты
☄️Старт — 7 июля. Прямо сейчас по промокоду LETO2025 вы можете занять место со скидкой ❗️50%❗️
*промокод вводится при оформлении оплаты
Вводите в эксплуатацию мониторинг и логирование инфраструктуры в k8s сразу после курса и станьте ещё востребованнее на рынке IT.
👉🏻Смотреть программу и применить скидку
В этом кратком руководстве вы увидите, как сравнивать строки в сценариях оболочки Bash.
if [ "$string1" == "$string2" ]
if [ "$string1" == "This is my string" ]
#!/bin/bash
string1="MyString"
string2="MyString"
if [ "$string1" == "$string2" ]
then
echo "Equal Strings"
else
echo "Strings not equal"
fi
Между
[
и именем переменной и оператором равенства ==
должен быть пробел. Если вы пропустите здесь какой-либо пробел, вы увидите ошибку типа «ожидается унарный оператор» или отсутствие «]
».if [ "$string1" != "Not MyString" ]
#!/bin/bash
string1="MyString"
if [ "$string1" != "Not MyString" ]
then
echo "Not Equal Strings"
else
echo "Strings equal"
fi
if [ -z "$VAR" ]
-z
фактически проверяет, равна ли длина переменной нулю или нет. Если переменная не установлена или она пуста (равна « »), длина будет равна нулю и, следовательно, условие вернет true.Полный пример:
#!/bin/bash
string1=
string2=""
if [ -z "$string1" ]
then
echo "Null Strings"
fi
if [ -z "$string2"]
then
echo "Empty String"
fi
if
с двойными скобками, например:if [[ "$string1" == "My String" ]]
if [ $string1 == "My String" ]
$string1
пуста или не определена в приведенном выше коде, эта строка станет эквивалентной if
[ == "$string2" ]
Please open Telegram to view this post
VIEW IN TELEGRAM
Работать и не уставать, достигать цели, но делать это в кайф - реально!
Как научиться делать дела и не выгорать?
Психолог взрослого человека — канал для айтишников, у которых периодически опускаются руки и отключается мозг, ибо переработки и постоянная тревожность не приводят к другим исходам.
▪️ Как научиться отвлекаться от работы и отдыхать?
▪️ Как совместить кучу рабочих задач и время с семьей?
▪️ Как справиться с прокрастинацией?
▪️ Как не растерять запал, даже если начальник и коллеги 💩 и кажется, что ничего не выходит?
Подписывайтесь на канал @vadimpetrovpsi и научитесь работать без упахивания, выгорания и ущерба для личной жизни!
👨🏻💻 Псс. Заходите в закреп канала - там много полезного, и даже бесплатный мини-курс по выходу из апатии.
Как научиться делать дела и не выгорать?
Психолог взрослого человека — канал для айтишников, у которых периодически опускаются руки и отключается мозг, ибо переработки и постоянная тревожность не приводят к другим исходам.
▪️ Как научиться отвлекаться от работы и отдыхать?
▪️ Как совместить кучу рабочих задач и время с семьей?
▪️ Как справиться с прокрастинацией?
▪️ Как не растерять запал, даже если начальник и коллеги 💩 и кажется, что ничего не выходит?
Подписывайтесь на канал @vadimpetrovpsi и научитесь работать без упахивания, выгорания и ущерба для личной жизни!
👨🏻💻 Псс. Заходите в закреп канала - там много полезного, и даже бесплатный мини-курс по выходу из апатии.
sudo apt update
sudo apt install certbot
sudo certbot certonly --standalone -d project.com -d www.project.com
sudo certbot certificates
--standalone
означает, что Certbot временно поднимет собственный сервер на 80 порту для валидации домена. Проверьте, что порт 80 не занят! Иначе ничего не заработает.sudo systemctl stop nginx
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
Certbot dry-run was successful.
journalctl -u certbot.service --no-pager --since "2 days ago"
sudo systemctl stop certbot.timer
sudo systemctl disable certbot.timer
sudo crontab -e
0 0 1 * * /usr/bin/certbot renew --standalone --quiet
which certbot
#!/bin/bash
APP_PATH="/home/projects/project"
DOMAIN="project.com"
FULL_CHAIN_SRC="/etc/letsencrypt/live/${DOMAIN}/fullchain.pem"
PRIVATE_KEY_SRC="/etc/letsencrypt/live/${DOMAIN}/privkey.pem"
FULL_CHAIN_DIST="${APP_PATH}/volumes/etc/ssl/certs/project_com.full.crt"
PRIVATE_KEY_DIST="${APP_PATH}/volumes/etc/ssl/private/project_com.key"
echo "Starting script execution: $(date "+%Y-%m-%d %H:%M:%S")"
echo "Stopping the service..."
systemctl stop my-project.service
echo "Renewing the certificates..."
/usr/bin/certbot renew --standalone --quiet
/usr/bin/certbot certificates
echo "Copying the certificates to the project..."
cp -f "$FULL_CHAIN_SRC" "$FULL_CHAIN_DIST"
cp -f "$PRIVATE_KEY_SRC" "$PRIVATE_KEY_DIST"
echo "Setting correct permissions for the certificates..."
chmod 644 "$FULL_CHAIN_DIST"
chmod 644 "$PRIVATE_KEY_DIST"
echo "Running the service..."
systemctl start my-project.service
echo "End of script execution: $(date "+%Y-%m-%d %H:%M:%S")"
0 0 1 * * sh /home/projects/project/cert-renew.sh >> /var/log/project-cert-renew.log 2>&1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM