388
Subscribers
-124 hours
+17 days
+1530 days
Posts Archive
Хватит эксплуатировать животных.
Частый use case
cat в скриптах - это вывести содержимое файла и грепнуть по нему.
На самом деле это лишняя работа, так как нужно запустить процесс cat, затем передать вывод в неименнованный канал (он же pipe |), запустить grep, прочитать данные и обработать их. Все это можно сделать просто с помощью grep.
С использованием cat:
$ cat dir1/dir2/dir3/file.txt | grep foo foo foobarzooТоже самое просто с
grep + вы можете рекурсивно (-r) искать текст в файлах:
$ grep -r 'foo' dir1/ dir1/dir2/dir3/file.txt:foo dir1/dir2/dir3/file.txt:foobarzoo dir1/dir2/file.txt:foo dir1/dir2/file.txt:foobarzoo dir1/file.txt:foo dir1/file.txt:foobarzoo#linux
График ping в консоли.
Нашел интересный проект: https://github.com/orf/gping/tree/master
Позволяет запускать пинг сразу нескольких адресов и рисовать по ним графики.
Пример команды (результат на скрине):
gping -n 0.2 -b 60 yandex.ru google.com
Как установить:
# Mac
brew install gping
# RedHat-based
sudo dnf copr enable atim/gping -y && sudo dnf install gping
# Debian-based
echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ stable main" | sudo tee /etc/apt/sources.list.d/azlux.list
sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg
sudo apt update
sudo apt install gping
# Docker
docker run ghcr.io/orf/gping:gping-v1.14.0
#linux #networkИстория UNIX.
Всем любителям UNIX систем, рекомендую к просмотру фильм История Linux и UNIX.
Фильм качественный, смотрится на одном дыхании, много интересных фактов и деталий того времени.
Так же есть неплохая книга от первоисточника на русском - Брайан Керниган. Время UNIX. A History and a Memoir.
#linux
Какой вид образовательного контента самый эффективный для вас?
VK Kubernetes Conf 2023.
Когда: 16 ноября 2023, 14:00 Москва (онлайн + офлай)
Очередная рекламная конфа, теперь от VK. Вообще считаю такие мероприятия не очень то и полезными, но если есть офлайн, то почему бы не сходить и не послушать + покушать угощений и пообщаться с коллегами, к тому же - это бесплатно.
Есть интересные темы даже:
- Использование единой платформы разработки для повышения безопасности K8s
- Как сократить время развертывания Managed K8s до времени приготовления чашки капучино
- Экскурсия по матрицам угроз для контейнеров и Kubernetes
- Дискуссия: 10 лет (почти) Kubernetes: что мы узнали за это время и как можем это использовать?
Регистрация тут: https://mcs.mail.ru/events/vk-kubernetes-conf_2
#конференция #k8s
Python 3.12 - удобней, красивей, быстрей.
Классный обзор python 3.12 от Диджитализируй: https://www.youtube.com/watch?v=dxBsWXq86Zc
Что улучшили:
-
f-strings
- Типизацию и дженерики
- Псевдонимы типов
- Производительность
- Полезности: -m uuid, itertools.batched, path.walk
#pythonКакие ваши любимые Youtube IT-блогеры / каналы? 📺
Вот кого смотрю я:
1. Winderton
2. AlekOS
3. Антон Павленко
4. ADV-IT
5. Сергей Балакирев
6. Soer
7. IT Борода
8. Между скобок
9. Разрабы
10. Jacob Sorber
Если знаете еще хорошие каналы, пишите в комментарии 🙂
#youtube
Кто такой девопс? 🤔
В первом вебинаре из цикла тренировок по DevOps вы узнаете кто такой девопс-инженер и чем он занимается.
В целом я согласен с докладчиком и советую посмотреть тем, кто начинает изучать девопс, если вы уже в профессии, то ничего нового не узнаете. В конце, как я люблю, докладчик дал домашнее задание, оно неплохо подойдет начинающим.
Тренировки по DevOps. Лекция 1: Кто такой DevOps.
Домашнее задание.
#образование
Для тех кто смотрит с телефона, вот так это выглядит на десктопной версии telegram.
Ждем когда в мобильную версию добавят.
#include <stdio.h>
int main(int argc, char const *argv[])
{
char *subs = "подписчики";
printf("Hello, %s!\n", subs);
return 0;
}Коллекция старых OS и игр.
Нашел интересный сайт, который запускает образы старых ОС и игр прямо в браузере: https://www.pcjs.org/
Открыл прекрасный Windows 95, прошел уровень в Wolfenstein 3D 🤬, довольно занятно
Для кого-то из вас будет ностальгией по детству, кто-то сможет впервые прикоснуться к истории
#offtop
Друзья, напоминаю что тренировки по DevOps начинаются 30 октября, кто не зарегистрировался - вперед 😄
https://yandex.ru/yaintern/training/devops-training
#образование
Траблшутинг. Запуск скрипта через SSH. Часть II. 🪄
Проблема оказалась не в самом скрипте
deploy.sh, а в команде запуска: ssh ${USER}@${HOST} "export "VERSION=${VERSION}"; setsid /bin/bash -s " < ./backend/deploy.sh
Почему-то именно на одной машине эта команда вела себя странным образом и завершалась с 0 кодом после выполнения одной команды из под sudo.
Если убрать sudo, то все команды выполняются без проблем.
Я подключился к серверу и выполнил команды из скрипта под пользователем деплоя - проблем нет. У пользователя есть sudo права, в /etc/sudoers прописано NOPASSWD: ALL. В общем, корень проблемы так и не удалось найти, но нашел обходное решение.
Помимо первой команды удаленного запуска скрипта через ssh, я нашел еще парочку (ссылка на источник).
В конечном счете с новым способом запуска скрипта все заработало: ssh ${USER}@${HOST} "export "VERSION=${VERSION}"" $(< ./deploy.sh)”
Казалось бы, поменялся лишь способ запуска, но при этом помогло и стали выполняться все sudo команды, хотя никаких изменений на самой VM не было.
Магия 🔮
#troubleshootingТраблшутинг. Запуск скрипта через SSH. Часть I.
Дебаг очередной проблемы, которая случилась у студента курса по DevOps, где я работаю наставником.
Вводные.
На курсе мы деплоим приложение через Gitlab CI/CD с помощью bash-скрипта (начало курса, дальше будет лучше 😅), и ровно у одно студента произошла странная проблема:
1. Есть команда:
ssh ${USER}@${HOST} "export "VERSION=${VERSION}"; setsid /bin/bash -s " < ./backend/deploy.sh. У всех студентов, в том числе и у меня, отрабатывает нормально - экспортирует энвы и запускает локальный скрипт ./deploy.sh на удаленном сервере.
2. Но у студента выполняется только первая команда с sudo и скрипт выходит с 0 кодом ответа.
Вот скрипт:
#!/bin/bash
set -xe
sudo cp /home/someuser/backend.service /etc/systemd/system/backend.service || true
sudo rm -f /home/someuser/backend.jar || true
curl -u ${NEXUS_REPO_USER}:${NEXUS_REPO_PASS} -o backend.jar ${NEXUS_REPO_URL}/com/yandex/practicum/devops/backend/${VERSION}/backend-${VERSION}.jar
sudo cp ./backend.jar /home/someuser/backend.jar || true
sudo systemctl daemon-reload
sudo systemctl restart backend.service
Какие у вас идеи? 🙂
Вечером расскажу как решил это, но сразу скажу, истинной причины такого поведения я не разыскал, как бы не старался.
#troubleshootingДа в чем же дело или очередной дебаг. Часть II. 😎
Самые опытные наверняка догадались, что дело было в
pam.d и модуле pam_limits.so. Теперь расскажу как я пришел к этому.
1. Первым делом я запустил команду на серверах через strace и сохранил вывод в файлы: strace -o strace.log sudo -u someuser bash -c "ulimit -s”
2. Начал анализировать два файла и увидел что системный вызов prlimit64() для первого сервера был вызван один раз: prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
Когда для второго сервера 3 раза:
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
prlimit64(0, RLIMIT_STACK, {rlim_cur=132096*1024, rlim_max=RLIM64_INFINITY}, NULL) = 0
3. Из этого я сделал вывод, что файл /etc/security/limits.d/80-user.conf не читается на первом сервере, что и подтвердил strace - системный вызов openat(AT_FDCWD, "/etc/security/limits.d/80-user.conf", O_RDONLY) = 4 был только на втором сервере.
Окей, причина такого поведения ясна, но почему же не читается этот файл?
Тут я начал гуглить и нашел явную связь лимитов с pam, что нужно связывать поведение либо всей системы, либо отдельных команд с проверкой лимитов из директории /etc/security/limits.d с помощью модуля pam_limits.so.
Далее осталось добавить pam_limits.so в /etc/pam.d/common-session-noninteractive и лимиты заработали. Сделал это через pam-auth-update.
P.S. А меня еще хаяли, зачем я про strace на собеседованиях спрашиваю 👮♂️
P.S.S. Делать еще такие разборы траблшутинга?
👍 - да
👎 - нет
#troubleshootingДа в чем же дело или очередной дебаг. Часть I. 🟡
Этот пост из серии “за что я люблю свою работу”.
Вводные:
Запускаешь команду
sudo -u someuser bash -c “ulimit -s” на одном сервере - процесс получает 8Kb размер стека, а на другом сервере получает 128Kb.
На этих серверах есть файл /etc/security/limits.d/80-user.conf с содержимым:
someuser soft core 10485760
someuser soft stack 132096
someuser - nofile 256000
Как бы вы дебажили это?
Ответ с разбором будет сегодня вечером.
#troubleshootingYaC/e - Конференция про образование от Яндекс. 👨🎓
15 ноября с 9:30 до 17:00 по МСК
Интересные темы докладов:
* Как технологии делают образование более эффективным?
* Мысленный эксперимент: каким может быть университет будущего?
* Этика искусственного интеллекта, или зачем IT нужно гуманитарное знание?
* Нейросети, GPT и прочие технологии: в образовании и вокруг него.
* Как самостоятельно освоить новые навыки в разработке?
* Как новые технологии меняют онлайн-образование?
* Кто такой родитель-тьютор: помогаем ребёнку в обучении
* Искусственный интеллект и образование: возможен ли тандем?
* На каких технологиях EdTech-компании и университеты строят современное образование?
* Как устроено IT-образование в регионах?
* Искусственный интеллект в университете: отключить нельзя использовать?
Вообще я очень скептически отношусь к новейшим технологиям, особенно в образовании. Послушаю, что скажут умные люди, но я считаю что технологии ведут к упрощению и, вследствии, деградации человека.
Регистрация тут: https://yace.yandex.ru/
#образование