Многие догадываются, а некоторые точно знают на каких онлайн-сервисах можно посмотреть принадлежность домена или IP организации. Я для этого использую программу
Использовать
ㅤ
Поверьте, я знаю о чем говорю. И иногда бывает так, настроение утром испорчено, и какой-то хостер тебя ну совсем задолбал и хочется просто взять и забанить его целиком, смотрим вывод:
Во, здесь повезло заполнено поле CIDR. Можно забанить
Поле CIDR отсутствует, есть только inetnum: И то хлеб. Как преобразовать NetRange или inetnum в формат CIDR, ведь iptables не понимает диапазоны ip адресов. Ему подсети подавай (CIDR).
Для этого воспользуемся калькулятором ipcalc. Вообще-то я предпочитаю sipcalc, потому что он бинарный и работает быстрее, но функции разбивки диапазона ip адресов у него нет. Что-то я отвлекся.
Итого: с помощью ipcalc -r можно разбить любой непрерывный, даже самый безумный, диапазон ip адресов на подсети в формате CIDR, и количество этих подсетей будет не более 32.
В качестве поиграться предлагаю разбить диапазоны
man whois
man ipcalc
tags: #networks © by Tagd Tagd
—
🔔 ➡️
whois
. apt install whois
whois 164.92.216.105
Использовать
whois
в скриптах не рекомендую, потому что для этого, во-первых, есть специальные базы, а во вторых - забанят.ㅤ
Поверьте, я знаю о чем говорю. И иногда бывает так, настроение утром испорчено, и какой-то хостер тебя ну совсем задолбал и хочется просто взять и забанить его целиком, смотрим вывод:
NetRange:164.92.64.0 - 164.92.255.255
CIDR:164.92.128.0/17, 164.92.64.0/18
Во, здесь повезло заполнено поле CIDR. Можно забанить
164.92.128.0/17
и 164.92.64.0/18
и все будет хорошо, но так бывает не всегда.whois 114.199.33.115
inetnum: 114.199.0.0 - 114.199.63.255
Поле CIDR отсутствует, есть только inetnum: И то хлеб. Как преобразовать NetRange или inetnum в формат CIDR, ведь iptables не понимает диапазоны ip адресов. Ему подсети подавай (CIDR).
Для этого воспользуемся калькулятором ipcalc. Вообще-то я предпочитаю sipcalc, потому что он бинарный и работает быстрее, но функции разбивки диапазона ip адресов у него нет. Что-то я отвлекся.
apt install ipcalc
ipcalc -r 164.92.64.0 - 164.92.255.255
#вывод
deaggregate 164.92.64.0 - 164.92.255.255
164.92.64.0/18
164.92.128.0/17
ipcalc -r 114.199.0.0 - 114.199.63.255
# вывод
deaggregate 114.199.0.0 - 114.199.63.255
114.199.0.0/18
Итого: с помощью ipcalc -r можно разбить любой непрерывный, даже самый безумный, диапазон ip адресов на подсети в формате CIDR, и количество этих подсетей будет не более 32.
В качестве поиграться предлагаю разбить диапазоны
127.0.0.1-192.168.1.1
или 0.0.0.1-255.255.255.254
Вот только банить их не нужно. А вот разбивать диапазон 0.0.0.0 255.255.255.255
не рекомендую, а почему не скажу. Кто еще какими сетевыми калькуляторами пользуется?man whois
man ipcalc
tags: #networks © by Tagd Tagd
—
🔔 ➡️
Всем привет. Опять в чате заговорили про СХД и кое-то вспомнилось.
Когда-то я занимался вопросом выбора дисков для серверов и мне стало интересно, почему диски для корпоративных систем стоят так дорого?
ㅤ
Начал читать статьи и сравнивать характеристики. Нашел старую статью, где говорилось, что один инфогигант в рейдах использует диски wd-blue, мол так дешевле получается.
Да, дешевле. Но при этом нужно отдавать себе отчет, что ты делаешь, как и к чему это может привести.
Для начала сравним ОДИН параметр нескольких ssd и hdd дисков: Конкретно Неисправимых ошибок чтения/прочитанных бит.
Данные брал с сайта одной компьютерной компании с синим логотипом, отличающейся классной технической грамотностью.
Короче, вероятность считать битый шифрованный архив с WD-GOLD в 10 раз меньше, чем с WD-BLUE и в 100 раз c Toshiba, и в 1000 раз меньше с ssd Micron.
Хочу так же обратить внимание на Проникновение долбанных маркетологов Toshiba в тех. описание. 10 ошибок на 1E17 бит РАВНО 1 ошибок на 1E16 бит.
А еще, приличные производители sas-дисков честно говорят о зафиксированных ошибках. Информацию можно глянуть командой из пакета smartmontools
Конечно, для хранения можно использовать и wd-blue, но только с применением специальных файловых систем с контрольными суммами, или применением форматов хранения файлов с избыточностью (типа платный rar).
Кстати, не все рейды справятся с такой ошибкой. Большинство рейдов (0,1,5,10) защищают от поломки диска, но не от неправильного чтения.
6 - вроде бы считает контрольные суммы для каждой записи и корректирует, если что (поправьте если не прав).
Ну, и рейдовые zfs решают проблемы, поскольку содержат контрольные суммы файлов.
В комментах было бы интересно почитать, кто какие диски использует и какие меры применяет, чтобы считывать именно ту информацию, которую записываешь.
tags: #hardware © by Tagd Tagd
—
🔔 ➡️
Когда-то я занимался вопросом выбора дисков для серверов и мне стало интересно, почему диски для корпоративных систем стоят так дорого?
ㅤ
Начал читать статьи и сравнивать характеристики. Нашел старую статью, где говорилось, что один инфогигант в рейдах использует диски wd-blue, мол так дешевле получается.
Да, дешевле. Но при этом нужно отдавать себе отчет, что ты делаешь, как и к чему это может привести.
Для начала сравним ОДИН параметр нескольких ssd и hdd дисков: Конкретно Неисправимых ошибок чтения/прочитанных бит.
sata hdd wd-blue 1Tb (WD10EZEX)=1 ошибка на 1E14 бит
sata hdd wd-gold 1 Tb(WD1005FBYZ)=1 ошибка на 1E15 бит
sas hdd Toshiba 900 Гб (AL15SEB090N) 10 ошибок на 1E17 бит
sata ssd Micron 960 Гб (MTFDDAK960TDS-1AW1ZABYY)1 ошибка на 1E17бит
Данные брал с сайта одной компьютерной компании с синим логотипом, отличающейся классной технической грамотностью.
Короче, вероятность считать битый шифрованный архив с WD-GOLD в 10 раз меньше, чем с WD-BLUE и в 100 раз c Toshiba, и в 1000 раз меньше с ssd Micron.
Хочу так же обратить внимание на Проникновение долбанных маркетологов Toshiba в тех. описание. 10 ошибок на 1E17 бит РАВНО 1 ошибок на 1E16 бит.
А еще, приличные производители sas-дисков честно говорят о зафиксированных ошибках. Информацию можно глянуть командой из пакета smartmontools
sudo smartctl -a /dev/sdXX
#смотреть после Error
Конечно, для хранения можно использовать и wd-blue, но только с применением специальных файловых систем с контрольными суммами, или применением форматов хранения файлов с избыточностью (типа платный rar).
Кстати, не все рейды справятся с такой ошибкой. Большинство рейдов (0,1,5,10) защищают от поломки диска, но не от неправильного чтения.
6 - вроде бы считает контрольные суммы для каждой записи и корректирует, если что (поправьте если не прав).
Ну, и рейдовые zfs решают проблемы, поскольку содержат контрольные суммы файлов.
В комментах было бы интересно почитать, кто какие диски использует и какие меры применяет, чтобы считывать именно ту информацию, которую записываешь.
tags: #hardware © by Tagd Tagd
—
🔔 ➡️
Если взглянуть на картинку выше, то в этом списке ты не найдешь сигналов с номером 32 и 33. Список сформирован командой
И куда же блядь эти сигналы делись?
А всё просто, сигналы с номерами 32 и 33 в современных линукс дистрибутивах зарезервированы для использования библиотекой glibc. И используются для реализации механизма потоков (threads).
Исходник glibc где он резервирует эти сигналы. Можешь увидеть что они будут не обязательно 32 и 33.
Один из сигналов может быть использован для внутренних коммуникаций между потоками. Второй может служить для управления потоками на уровне ядра.
Сигналы же начинающиеся с номера 34 называются — сигналами реального времени. Более подробно про сигналы реального времени можешь почитать тут.
Если попытаться отправить сигнал 32 или 33 вручную процессу, то получишь хуй с маслом. Ядро эти сигналы обрабатывать не будет.
Потому что даже ядро не имеет к этим сигналам никакого о...
kill -l
.И куда же блядь эти сигналы делись?
А всё просто, сигналы с номерами 32 и 33 в современных линукс дистрибутивах зарезервированы для использования библиотекой glibc. И используются для реализации механизма потоков (threads).
Исходник glibc где он резервирует эти сигналы. Можешь увидеть что они будут не обязательно 32 и 33.
22 static int current_rtmin = __SIGRTMIN + 2;
23 static int current_rtmax = __SIGRTMAX;
Один из сигналов может быть использован для внутренних коммуникаций между потоками. Второй может служить для управления потоками на уровне ядра.
Сигналы же начинающиеся с номера 34 называются — сигналами реального времени. Более подробно про сигналы реального времени можешь почитать тут.
Если попытаться отправить сигнал 32 или 33 вручную процессу, то получишь хуй с маслом. Ядро эти сигналы обрабатывать не будет.
Потому что даже ядро не имеет к этим сигналам никакого о...
Не одевай 3.14зду в лапти, она и так смешная
ㅤ
Такс, давай покончим с сигналами реального времени (СРВ) и выйдем на новый уровень написания Bash скриптов, мыж с тобой уже взрослые.
Вчера мы выяснили СРВ имеют условный индекс 34-64 (в разных дистрибутивах может быть по-разному, проверяй)
Где их применять?
Давай глянем на примере. СИшкой задрачивать не буду, перепишем на Bash.
Сначала будет нихуя не понятно, но под конец я тебе всё разжую. Не переживай, тут все просто. Поймешь суть, сможешь реализовать на любом языке программирования.
Пишем сервер signal_listener.sh
Пишем клиент signal_sender.sh
Запускаем первый скрипт, видим его PID:
Во втором терминале запускаем второй скрипт:
Не забываем подставить PID, который выдал первый скрипт.
После отправки СРВ, в терминале где запускали первый скрипт видим:
Вот это нихуя се! То есть
В нашем случае данные это 1 или 2. А скрипт
А когда какой сигнал использовать?
Хе… 34-64… Если у тебя не сложная логика, можешь использовать любой индекс в этом диапазоне. Но если логика совсем ебанутая, то логичнее использовать СРВ с разными индексами для передачи данных.
Например, тебе нужно обрабатывать разные типа событий. В этом случае проще разделить их на разные сигналы.
Типа такого:
Это избавляет от необходимости декодировать данные внутри обработчика, потому что обработка сразу зависит от типа сигнала.
А можно обрабатывать в порядке приоритета. СРВ обрабатываются в порядке их номеров (от SIGRTMIN к SIGRTMAX). Это заебись если у тебя задачи с разным приоритетом.
Если сигналы поступают одновременно, сначала обработается SIGRTMIN+0, потом SIGRTMIN+1 и т.д.
Важно! Использование одного СРВ может привести к переполнению и перезаписи очереди. Имей это ввиду. Потому, что с этим часто ловят багу и потом неделю не могут понять в чем причина. Иногда пишут что СРВ не теряются, но практика показывает обратное.
Если что-то еще вспомню, накидаю отдельным постом.
Удачи тебе и береги себя!
tags: #linux
—
🔔 ➡️
ㅤ
Такс, давай покончим с сигналами реального времени (СРВ) и выйдем на новый уровень написания Bash скриптов, мыж с тобой уже взрослые.
Вчера мы выяснили СРВ имеют условный индекс 34-64 (в разных дистрибутивах может быть по-разному, проверяй)
Где их применять?
Давай глянем на примере. СИшкой задрачивать не буду, перепишем на Bash.
Задача: у меня есть серверный процесс, который должен получить уведомление от клиента с некоторыми данными (например, номер задачи).
Вместо передачи данных через файлы или другие средства, нужно использовать сигналы реального времени.
Сначала будет нихуя не понятно, но под конец я тебе всё разжую. Не переживай, тут все просто. Поймешь суть, сможешь реализовать на любом языке программирования.
Пишем сервер signal_listener.sh
#!/bin/bash
handle_signal() {
echo "Получен сигнал $1"
echo "Переданные данные: $2"
}
trap 'handle_signal SIGRTMIN+0 "Task 1 выполнена"' RTMIN+0
trap 'handle_signal SIGRTMIN+1 "Task 2 выполнена"' RTMIN+1
echo "Слушатель запущен. PID: $$"
echo "Ожидаем сигналы..."
while true; do
sleep 1
done
Пишем клиент signal_sender.sh
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Использование: $0 <PID> <TASK>"
echo "TASK может быть 1 или 2"
exit 1
fi
PID=$1
TASK=$2
if [ "$TASK" -eq 1 ]; then
kill -RTMIN+0 $PID
echo "Отправлен сигнал SIGRTMIN+0 (Task 1) процессу с PID $PID"
elif [ "$TASK" -eq 2 ]; then
kill -RTMIN+1 $PID
echo "Отправлен сигнал SIGRTMIN+1 (Task 2) процессу с PID $PID"
else
echo "Ошибка: TASK должен быть 1 или 2"
exit 1
fi
trap
= перехватываем сигналы, для СРВ пишем: RTMIN+0 и RTMIN+1kill -RTMIN+N
= отправляет СРВ. Номер сигнала (например, RTMIN+0) задаёт, какой именно сигнал будет обработан.chmod +x signal_listener.sh signal_sender.sh
Запускаем первый скрипт, видим его PID:
Слушатель запущен. PID: 20821
Во втором терминале запускаем второй скрипт:
./signal_sender.sh 20821 1
Отправлен сигнал SIGRTMIN+0 (Task 1) процессу с PID 20821
Не забываем подставить PID, который выдал первый скрипт.
После отправки СРВ, в терминале где запускали первый скрипт видим:
Получен сигнал SIGRTMIN+0
Переданные данные: Task 1 выполнена
Вот это нихуя се! То есть
signal_sender
подключился к процессу 20821 и передал в него данные.В нашем случае данные это 1 или 2. А скрипт
signal_listener
успешно это схавал и переварил исходя из логики.Использование СРВ открывает ОГРОМНЫЕ возможности, чтобы несколько скриптов или приложений взаимодействовали друг с другом на низких уровнях не использую велосипеды и прокладки.
А когда какой сигнал использовать?
Хе… 34-64… Если у тебя не сложная логика, можешь использовать любой индекс в этом диапазоне. Но если логика совсем ебанутая, то логичнее использовать СРВ с разными индексами для передачи данных.
Например, тебе нужно обрабатывать разные типа событий. В этом случае проще разделить их на разные сигналы.
Типа такого:
SIGRTMIN+0 (34): "Начать обработку данных"
SIGRTMIN+1 (35): "Обновить конфигурацию"
SIGRTMIN+2 (36): "Выебать медведя в жопу"
SIGRTMIN+3 (37): "Остановить обработку данных"
Это избавляет от необходимости декодировать данные внутри обработчика, потому что обработка сразу зависит от типа сигнала.
А можно обрабатывать в порядке приоритета. СРВ обрабатываются в порядке их номеров (от SIGRTMIN к SIGRTMAX). Это заебись если у тебя задачи с разным приоритетом.
SIGRTMIN+0: Высший приоритет (аварийная задача)
SIGRTMIN+1: Средний приоритет (регулярные уведомления)
SIGRTMIN+2: Низший приоритет (обновление статистики)
Если сигналы поступают одновременно, сначала обработается SIGRTMIN+0, потом SIGRTMIN+1 и т.д.
Важно! Использование одного СРВ может привести к переполнению и перезаписи очереди. Имей это ввиду. Потому, что с этим часто ловят багу и потом неделю не могут понять в чем причина. Иногда пишут что СРВ не теряются, но практика показывает обратное.
Если что-то еще вспомню, накидаю отдельным постом.
Удачи тебе и береги себя!
про сигналы писал ранее тут и тут и тут и тут
tags: #linux
—
🔔 ➡️
Вчерашний медведь прям в тренды залетел, издеваться над ним больше не будем, пусть ковыляет своей дорогой.
ㅤ
Сегодня рассмотрим утилиту
Устанавливается так:
Короче сидишь ты такой, на ascii картинки рукоблудишь в терминале, заходит мамка и ты такой —
Консоль моментально превращается в сообщение — This TTY is now locked. Please press [ENTER] to unlock.
Вот и всё! Это типа
Чо там этот
Основное:
🅰️🅰️
Из сочного тут -s отключает сочетания клавиш SysRq, лично не проверял, но будем верить что если на заборе написано — хуй, значит он там есть.
🅰️🅰️
А еще прикол обнаружил в
Ну и получается разблокировать сеанс уже никак не сможешь. Поэтому с этим поаккуратнее, сначала вспоминай пароли и лишь только потом запускай этот скринлокер.
ХЗ кто этой байдой пользуется, но она существует и о ней порой говорят в англоязычном сегменте.
Короче я показал, ты почитал. На этом и закончим. Мож где-то пригодится. Давай краба!
tags: #utilites #linux
—
🔔 ➡️
ㅤ
Сегодня рассмотрим утилиту
vlock.
Устанавливается так:
apt install vlock
Vlock
блокирует виртуальную консоль/ли и требует ввода пароля. Короче сидишь ты такой, на ascii картинки рукоблудишь в терминале, заходит мамка и ты такой —
vlock
бля!Консоль моментально превращается в сообщение — This TTY is now locked. Please press [ENTER] to unlock.
Вот и всё! Это типа
WIN+L
или как там на маках CMD+CTRL+Q
, но только для консоли. Локскрин! На случай если у тебя иксов нет, или ты в серверной живешь.А чем отличается консоль от терминала я писал в этом посте и да, это не одно и тоже!
Чо там этот
vlock
умеет?Основное:
-c lock only this virtual console, allowing user to switch to other virtual consoles.
-a lock all virtual consoles by preventing other users from switching virtual consoles.
-n allocate a new virtual console before locking,implies --all.
-s disable SysRq while consoles are locked to prevent killing vlock with SAK
-t run screen saver plugins after the given amount of time.
🅰️🅰️
Из сочного тут -s отключает сочетания клавиш SysRq, лично не проверял, но будем верить что если на заборе написано — хуй, значит он там есть.
🅰️🅰️
Про Magic SysRq писал тут, обязательно почитай, тема довольно пиздата.
А еще прикол обнаружил в
vlock
, что если у тебя авторизация (аутентификация) по ключам, то пароль от юзера или рута ты никогда не вспомнишь. Аксиома!Ну и получается разблокировать сеанс уже никак не сможешь. Поэтому с этим поаккуратнее, сначала вспоминай пароли и лишь только потом запускай этот скринлокер.
ХЗ кто этой байдой пользуется, но она существует и о ней порой говорят в англоязычном сегменте.
Короче я показал, ты почитал. На этом и закончим. Мож где-то пригодится. Давай краба!
tags: #utilites #linux
—
🔔 ➡️
⚡️Всероссийский Хакатон ФИЦ 2024
🚀Попробуйте себя в одном из предложенных кейсов:
1. Семантический делитель текстов: Разработать алгоритм, который сможет обеспечить точное разделение текста на блоки в рамках произвольно заданных ограничений размера блока.
2. Контекстный перевод названий научных работ: Разработать и реализовать переводчик, который будет переводить названия научных работ с русского на английский.
3. Прогнозирование бизнес драйверов: Разработать решение для задачи прогнозирования временных рядов бизнес-драйверов и произвести прогноз на следующий календарный месяц.
4. Система контроля и управления доступом: Разработка системы контроля и управления доступом в реальном времени. Система будет включать API для управления сотрудниками, точками доступа и интеграцию с системой видеонаблюдения.
И другие 16 кейсов смотрите на сайте: https://фиц2024.рф/hackathon
Хакатон пройдет в 2 этапа: Отборочный этап в Онлайн, Финал в Офлайн.
🏆Призовой фонд: 6 000 000 руб.
🔥Дедлайн регистрации: 26 ноября, 2...
🚀Попробуйте себя в одном из предложенных кейсов:
1. Семантический делитель текстов: Разработать алгоритм, который сможет обеспечить точное разделение текста на блоки в рамках произвольно заданных ограничений размера блока.
2. Контекстный перевод названий научных работ: Разработать и реализовать переводчик, который будет переводить названия научных работ с русского на английский.
3. Прогнозирование бизнес драйверов: Разработать решение для задачи прогнозирования временных рядов бизнес-драйверов и произвести прогноз на следующий календарный месяц.
4. Система контроля и управления доступом: Разработка системы контроля и управления доступом в реальном времени. Система будет включать API для управления сотрудниками, точками доступа и интеграцию с системой видеонаблюдения.
И другие 16 кейсов смотрите на сайте: https://фиц2024.рф/hackathon
Хакатон пройдет в 2 этапа: Отборочный этап в Онлайн, Финал в Офлайн.
🏆Призовой фонд: 6 000 000 руб.
🔥Дедлайн регистрации: 26 ноября, 2...
Пост ищем в этом канале, а не в гугле. В комментах пишем время и ссылку на сам пост. Макс к вам придет и отдаст монету.
Погнали чо! #pizza
кому интересно: предыдущие пиццы (1, 2, 3)
Погнали чо! #pizza
кому интересно: предыдущие пиццы (1, 2, 3)
А давай я научу тебя девопсу. За 5 дней. Результат до/после гарантирую.
Почитал умные книжки, посмотрел ютубчик и научился кубы ворочать? Ага-ага.
Только тебя палкой не били, а я буду.
🙃 Короче кто не успел запрыгнуть в августе в последний вагон Linux Factory, сейчас самое время, по летнему движу5000р 2500р
Внутри почти 2 сезона:
1. Ansible
2. Gitlab CI/CD YML + Docker + Hashi Vault
3. Traefik
4. Prometheus + Consul + VM + Grafana
5. Terraform (Selectel/Yandex)
6. и многое другое…
будут кубы, охуенные циркули и база без воды
После интенсива ты охуеешь от бест-практик и научишься делать ха-ра-шо.
Киллер фича — ты со мной на связи, решаем вопросы 1x1.
Более подробно про интенсив можешь почитать тут и тут.
➡️ Залетай и жми кнопочки:
В номере заказа ничего писать не нужно.
По всем вопросам можешь писать сюда:
Почитал умные книжки, посмотрел ютубчик и научился кубы ворочать? Ага-ага.
Только тебя палкой не били, а я буду.
🙃 Короче кто не успел запрыгнуть в августе в последний вагон Linux Factory, сейчас самое время, по летнему движу
Внутри почти 2 сезона:
1. Ansible
2. Gitlab CI/CD YML + Docker + Hashi Vault
3. Traefik
4. Prometheus + Consul + VM + Grafana
5. Terraform (Selectel/Yandex)
6. и многое другое…
будут кубы, охуенные циркули и база без воды
После интенсива ты охуеешь от бест-практик и научишься делать ха-ра-шо.
Киллер фича — ты со мной на связи, решаем вопросы 1x1.
Более подробно про интенсив можешь почитать тут и тут.
➡️ Залетай и жми кнопочки:
В номере заказа ничего писать не нужно.
По всем вопросам можешь писать сюда:
🍋 Кому то лимонов ящик, а кому то от хуя хрящик
В выходные нужно отдыхать ребят, выходные заебись!
В выходные нужно отдыхать ребят, выходные заебись!
Прочитал статью про сигналы Медведя и захотелось немного разобраться в теме. Немного переписал проги, чтобы можно было от клиента к серверу передавать любые сообщения в виде текста.
ㅤ
Алгоритм простой. Используем 10 сигналов (
Передаются только "единичные биты".
Сохраняем скрипты,
В одном терминале
В другом терминале
При старте клиент сразу передает серверу сообщение "BashBays" А потом можете передать привет медведю. Пустое сообщение завершает клиента. Сервер останавливается через CTRL-C.
Для чего может пригодиться эта фигня я не знаю, Но при написании программы выяснил некоторые вещи:
1. Обработка сигналов (по крайней мере
2. Обратите внимания на задержки в программах. На сервере ввел задержку, чтобы не сильно грузить процессор, на клиенте задержка больше, чем на сервере, иначе сигналы могут теряться. Кому интересно - можете поиграться.
tags: #linux © by Tagd Tagd
—
🔔 ➡️
ㅤ
Алгоритм простой. Используем 10 сигналов (
SIGRTMIN+0 - SIGRTMIN+7
для передачи битов, SIGRTMIN+8
- признак окончания символа, SIGRTMIN+9
признак окончания сообщения).Передаются только "единичные биты".
SEND_CHAR
- "разбирает символ по битам и передает" SEND_MESSAGE
- разбирает сообщение по символам и отдает SEND_CHAR.
Сохраняем скрипты,
chmod +x serv.sh cli.sh
В одном терминале
./serv.sh
(он выдаст что-то вроде Listener process 340527).В другом терминале
./cli.sh 340527
(нужно подставить ваш номер процесса).При старте клиент сразу передает серверу сообщение "BashBays" А потом можете передать привет медведю. Пустое сообщение завершает клиента. Сервер останавливается через CTRL-C.
#/bin/bash
#serv.sh
declare -i ASC=0
declare MSG=
declare DELAY=0.01
handle_signal() {
case "$1" in
W) MSG=${MSG}$(printf "\x$(printf %x $ASC)")
ASC=0 ;;
M) echo $MSG;MSG=;;
*) ((ASC+=$1));;
esac
}
#RTMIN=34
trap 'handle_signal 1' RTMIN+0
trap 'handle_signal 2' RTMIN+1
trap 'handle_signal 4' RTMIN+2
trap 'handle_signal 8' RTMIN+3
trap 'handle_signal 16' RTMIN+4
trap 'handle_signal 32' RTMIN+5
trap 'handle_signal 64' RTMIN+6
trap 'handle_signal 128' RTMIN+7
trap 'handle_signal W' RTMIN+8
trap 'handle_signal M' RTMIN+9
echo Listener process $$
while :;do
sleep $DELAY
done
#!/bin/bash
#cli.sh
if [[ -z $1 ]];then
echo Need server PID
exit
fi
declare -ir SERV_PID=$1
declare MESSAGE=BashBays
declare -ir RTM=34
function DELAY(){ sleep 0.02;}
function SEND_CHAR(){
local -i i ASC
CUR_CHAR=${1:-" "}
printf -v ASC "%d" "'$CUR_CHAR"
for i in {0..7};do
if [[ $(($ASC%2)) -eq 1 ]];then
# echo kill '-'$(($i+$RTM)) $SERV_PID
kill '-'$(($i+$RTM)) $SERV_PID
DELAY
fi
((ASC/=2))
done
# echo kill '-'$((8+$RTM)) $SERV_PID
kill '-'$((8+$RTM)) $SERV_PID
DELAY
}
function SEND_MESSAGE(){
local CUR_CHAR
local MESSAGE=${1:-BashDays}
local i
echo Send message \"$MESSAGE\" to Server PID=$SERV_PID
for ((i = 0 ; i < ${#MESSAGE} ; i++));do
SEND_CHAR ${MESSAGE:$i:1}
done
# echo kill '-'$((9+$RTM)) $SERV_PID
kill '-'$((9+$RTM)) $SERV_PID
DELAY
}
while [[ $MESSAGE ]];do
SEND_MESSAGE "$MESSAGE"
read -p "Input new message:" MESSAGE
done
Для чего может пригодиться эта фигня я не знаю, Но при написании программы выяснил некоторые вещи:
1. Обработка сигналов (по крайней мере
SIGRTMIN
не прерывает выполнение команд bash). Т.е если выполняется sleep 10m. То обработки можно ждать долго.2. Обратите внимания на задержки в программах. На сервере ввел задержку, чтобы не сильно грузить процессор, на клиенте задержка больше, чем на сервере, иначе сигналы могут теряться. Кому интересно - можете поиграться.
tags: #linux © by Tagd Tagd
—
🔔 ➡️
В рот мне логи! suqo
ㅤ
Здрасти короче.
Все знают команду
Так, так, так… Чо это?
Этот тот жеиз Австралии наоборот. Оно выводит содержимое файла или стандартного ввода — в обратном порядке по строкам.
Ща покажу. Есть у нас злой файл:
Запускаем:
Поняли? Ну либо так:
А можно прям разделитель указать:
Где применить?
Да где хочешь, можешь логи смотреть, можешь в bash скрипты пихать, можешь из csv бигдату собирать и т.п.
Такие дела, изучай!
tags: #utilites #linux
—
🔔 ➡️
ㅤ
Здрасти короче.
Все знают команду
cat
, но не все знают про tac
.Так, так, так… Чо это?
Этот тот же
cat
только Команда tac входит в состав пакета GNU coreutils, и, как правило, она предустановлена на большинстве Linux-дистрибутивов.
Ща покажу. Есть у нас злой файл:
ножка на ножку и залупа в ладошку
eбутся утки вторые сутки
хуй сосали на вокзале
Запускаем:
tac file.txt
хуй сосали на вокзале
eбутся утки вторые сутки
ножка на ножку и залупа в ладошку
Поняли? Ну либо так:
echo -e "строка 1\nстрока 2\nстрока 3" | tac
строка 3
строка 2
строка 1
А можно прям разделитель указать:
echo "слово1:слово2:слово3" | tac -s ":"
слово3
слово2
слово1
Где применить?
Да где хочешь, можешь логи смотреть, можешь в bash скрипты пихать, можешь из csv бигдату собирать и т.п.
Такие дела, изучай!
tags: #utilites #linux
—
🔔 ➡️
Привет, давай напишем очередной велосипед на Bash.
А напишем мы своё подобие команды
ㅤ
Конечно можно воспользоваться дополнительной утилитой
Вот что у меня получилось:
Не забываем
Запускать так:
➡️ Теперь разбираемся:
threads указываем количество потоков для чтения текстового файла.
process_line = функция, которая будет обрабатывать строку, у меня это простое
export -f = экспортируем функцию, чтобы функция была доступна в subprocess (этот момент ранее в постах мы с тобой уже разбирали, ссылку не дам, по поиску найдешь если интересно).
fifo = задействуем FIFO для контроля потоков (чуть ниже объясню что это такое за хуйня).
mkfifo = создаём именованный канал
for ((i = 0; = заполняем каналы «семафора» чтобы ограничить потоки.
while IFS = читаем файл построчно и обрабатываем строки.
read -u 3 = ждем свободный слот «семафора», каждый поток блокируется до тех пор, пока не освободится место в «семафоре».
wait exec 3>&- = ждем завершение всех потоков
Что такое FIFO?
Представляем ебейшую очередь в магазине:
1. Бабки встают в очередь
2. Первым обслуживают ту бабку, что пришла первой
3. Никто не может сказать — мне только спросить и пройти первым
Ну или на примере стопки книг:
Если ты складываешь книги в стопку и потом начинаешь снимать их, то ты будешь использовать LIFO (Last In, First Out).
Но если ты встал в очередь к кассе — это FIFO.
Думаю ты ты понял, тут все просто.
Единственное отличие от
С другой стороны эту поделку можно применить для каких-то задач, где порядок строк в файле неважен, ну или еще для чего-то.
Ну и домашка тебе: сделай так, чтобы строчки выводились по порядку (также, как и в файле), но использовалась многопоточность.
Пользуйтесь, чо!
tags: #bash #linux
—
🔔 ➡️
А напишем мы своё подобие команды
cat
, но с потоками.ㅤ
Конечно можно воспользоваться дополнительной утилитой
parallel
, но мы лёгких путей не ищем. Глаза боятся, да руки веселятся.Вот что у меня получилось:
#!/bin/bash
file=$1
threads=4
process_line() {
line="$1"
echo $line
}
export -f process_line
fifo="/tmp/fifo"
mkfifo "$fifo"
exec 3<>"$fifo"
rm "$fifo"
for ((i = 0; i < threads; i++)); do
echo >&3
done
while IFS= read -r line; do
read -u 3
{
process_line "$line"
echo >&3
} &
done < "$file"
wait
exec 3>&-
Не забываем
chmod +x pcat
Запускать так:
./pcat.sh input.txt
➡️ Теперь разбираемся:
threads указываем количество потоков для чтения текстового файла.
process_line = функция, которая будет обрабатывать строку, у меня это простое
echo
, но можно накручивать любую логику.export -f = экспортируем функцию, чтобы функция была доступна в subprocess (этот момент ранее в постах мы с тобой уже разбирали, ссылку не дам, по поиску найдешь если интересно).
fifo = задействуем FIFO для контроля потоков (чуть ниже объясню что это такое за хуйня).
mkfifo = создаём именованный канал
/tmp/fifo
для контроля количества одновременно запущенных потоков.for ((i = 0; = заполняем каналы «семафора» чтобы ограничить потоки.
while IFS = читаем файл построчно и обрабатываем строки.
read -u 3 = ждем свободный слот «семафора», каждый поток блокируется до тех пор, пока не освободится место в «семафоре».
wait exec 3>&- = ждем завершение всех потоков
Что такое FIFO?
FIFO = «первым пришёл — первым ушёл».
Представляем ебейшую очередь в магазине:
1. Бабки встают в очередь
2. Первым обслуживают ту бабку, что пришла первой
3. Никто не может сказать — мне только спросить и пройти первым
Ну или на примере стопки книг:
Если ты складываешь книги в стопку и потом начинаешь снимать их, то ты будешь использовать LIFO (Last In, First Out).
Но если ты встал в очередь к кассе — это FIFO.
Думаю ты ты понял, тут все просто.
Единственное отличие от
cat
, у нас получилось, что строчки выводятся в порядке завершения потока. Какой поток быстрее завершился тот и папа.строка4
строка1
строка2
строка3
строка5
строка6
С другой стороны эту поделку можно применить для каких-то задач, где порядок строк в файле неважен, ну или еще для чего-то.
Ну и домашка тебе: сделай так, чтобы строчки выводились по порядку (также, как и в файле), но использовалась многопоточность.
Пользуйтесь, чо!
tags: #bash #linux
—
🔔 ➡️
Добрый вечер, здрасти. За чо купил, за то и продаю.
На повестке —
Эт полезная хуёвина для расширения оболочки. И она достаточно известна среди населения в загнивающем западе.
ㅤ
Позволяет загружать и выгружать переменные среды в зависимости от каталога.
Грубо говоря — позволяет не засирать
Работает так: перед каждым запуском оно проверяет наличие файла (
Если такой файл существует, то он загружается в подоболочку bash. И все экспортируемые переменные становятся доступны для текущей оболочки.
Работает с большой четверкой: bash, zsh, fish, tcsh
Что интересно,
Для убунты ставится так:
Подключаем так, добавляем в
Не забываем перечитать файл
Так, поставили, молодцы! Проверяем чо получилось:
На экран выдалось: bashdays
Переменная среды FOO не вывелась, логично, дальше:
Ёпта, ошибка —
Сработала защита от дурака, которая запретила нам использовать .envrc. Хе, ща пофиксим!
Во! Лепота!
Повторяем первую команду:
Хуяк и получаем:
Что и требовалось доказать,
Теперь выходим из проекта и смотрим:
Ииии барабанная дробь, у нас вывелось — bashdays!
Какая же красота и любовь с первого взгляда!
Рекомендую! Однозначно забираем себе в копилку и внедряем в свой воркфлоу, по крайней мере для всяких лабораторных испытаний эта штука подходит идеально.
➡️ Проект на гитхабе: https://github.com/direnv/direnv
⭐️ Star 12.6k
tags: #bash #linux
—
🔔 ➡️
На повестке —
direnv
.Эт полезная хуёвина для расширения оболочки. И она достаточно известна среди населения в загнивающем западе.
ㅤ
Позволяет загружать и выгружать переменные среды в зависимости от каталога.
Грубо говоря — позволяет не засирать
.profile
всяким дерьмом.Работает так: перед каждым запуском оно проверяет наличие файла (
.envrc
или .env
) в текущем или родительском каталоге.Если такой файл существует, то он загружается в подоболочку bash. И все экспортируемые переменные становятся доступны для текущей оболочки.
Работает с большой четверкой: bash, zsh, fish, tcsh
Суть — используем переменные среды для конкретного проекта, не трогая при этом ~/.profile.
Что интересно,
direnv
это бинарник на golang, что уже подразумевает скорость и все плюхи связанные с этим.Для убунты ставится так:
apt install direnv
Как воткнуть это в другое место, подробно написано тут ну или спроси у медведя.
Подключаем так, добавляем в
~/.bashrc:
eval "$(direnv hook bash)"
Для других шелов смотрим тут.
Не забываем перечитать файл
~/.bashrc
чтобы изменения вступили в силу.Так, поставили, молодцы! Проверяем чо получилось:
cd /tmp
mkdir my-project
echo ${FOO-bashdays}
На экран выдалось: bashdays
Переменная среды FOO не вывелась, логично, дальше:
echo export FOO=foo > .envrc
Ёпта, ошибка —
direnv: error /tmp/my-project/.envrc is blocked. Run `direnv allow` to approve its content.
Сработала защита от дурака, которая запретила нам использовать .envrc. Хе, ща пофиксим!
direnv allow .
Во! Лепота!
direnv: loading /tmp/my-project/.envrc
direnv: export +FOO
Повторяем первую команду:
echo ${FOO-bashdays}
Хуяк и получаем:
foo
Что и требовалось доказать,
direnv
отлично справилась с поставленной задачей.Теперь выходим из проекта и смотрим:
cd ..
direnv: unloading
echo ${FOO-bashdays}
Ииии барабанная дробь, у нас вывелось — bashdays!
Какая же красота и любовь с первого взгляда!
Рекомендую! Однозначно забираем себе в копилку и внедряем в свой воркфлоу, по крайней мере для всяких лабораторных испытаний эта штука подходит идеально.
➡️ Проект на гитхабе: https://github.com/direnv/direnv
⭐️ Star 12.6k
tags: #bash #linux
—
🔔 ➡️
Как-то мы с тобой познакомились с etckeeper, ну дак вот, есть еще такая штука —
ㅤ
Это херня для управления dotfiles (конфигурационными файлами, которые обычно начинаются с точки, например,
Я сейчас такие файлы просто в гит руками херачу. Из основного у меня это конфиг для вима и zshrc со всякими алиасами и настройками.
На убунту ставится так:
Для других операционок мануальчик здесь.
Ну поставили и чо дальше? А дальше запускаем:
Добавляем например .bashrc
Эта команда скопирует bashrc в
Теперь отредактируй файл:
И посмотрим изменения:
То есть началась вестись история изменений, что довольно удобно. Теперь например ты запортачил свой
Запускаем:
Нажимаешь к пример «o» = overwrite.
Хоба! И bashrc успешно восстанавливается. Прекрасно!
Теперь как с гитом работать:
В принципе стандартная практика, первой командой переходим в каталог
Затем на другой машине делаем:
Конфиги успешно подтягиваются. Если репа приватная, то на офф сайте есть чтиво как это настроить.
Я этим пользоваться не буду, мне привычнее свои поделки запускать. Но ты имей в виду что существует такая пепяка. Возможно где-то прикрутишь и оно тебе облегчит трудовые будни.
Сайт проекта: https://www.chezmoi.io/
На гитхабе: https://github.com/twpayne/chezmoi
tags: #utilites #linux
—
🔔 ➡️
ChezMoi.
ㅤ
Это херня для управления dotfiles (конфигурационными файлами, которые обычно начинаются с точки, например,
.bashrc
, .vimrc
, .gitconfig
) на нескольких устройствах.Я сейчас такие файлы просто в гит руками херачу. Из основного у меня это конфиг для вима и zshrc со всякими алиасами и настройками.
ChezMoi
как раз всю эту рутину берет на себя. Из коробки есть синхронизация между устройствами, поддержка git, создание набора конфигураций для разных ОС, шаблоны и куча еще всякого.На убунту ставится так:
snap install chezmoi --classic
Для других операционок мануальчик здесь.
Ну поставили и чо дальше? А дальше запускаем:
chezmoi init
Добавляем например .bashrc
chezmoi add ~/.bashrc
Эта команда скопирует bashrc в
~/.local/share/chezmoi/dot_bashrc
Теперь отредактируй файл:
chezmoi edit ~/.bashrc
И посмотрим изменения:
chezmoi diff
То есть началась вестись история изменений, что довольно удобно. Теперь например ты запортачил свой
.bashrc
в следствии экспериментов, как откатиться?Запускаем:
chezmoi -v apply
Нажимаешь к пример «o» = overwrite.
Хоба! И bashrc успешно восстанавливается. Прекрасно!
Теперь как с гитом работать:
chezmoi cd
git add .
git commit -m "Initial commit"
git remote add origin git.com:$GITHUB_USERNAME/dotfiles.git
git branch -M main
git push -u origin main
В принципе стандартная практика, первой командой переходим в каталог
~/.local/share/chezmoi
ну а дальше база гита.Затем на другой машине делаем:
chezmoi init https://github.com/$GITHUB_USERNAME/dotfiles.git
Конфиги успешно подтягиваются. Если репа приватная, то на офф сайте есть чтиво как это настроить.
Я этим пользоваться не буду, мне привычнее свои поделки запускать. Но ты имей в виду что существует такая пепяка. Возможно где-то прикрутишь и оно тебе облегчит трудовые будни.
Сайт проекта: https://www.chezmoi.io/
На гитхабе: https://github.com/twpayne/chezmoi
tags: #utilites #linux
—
🔔 ➡️
🤩 Пятница — это продакшн, который уже не твоя проблема.
Частенько для установки какого-то софта в линукс, предлагают использовать какой-то snap.
Когда snap появился я как-то скептически к нему отнесся. Мол, чо за хуйня, есть же apt и еже подобные коробочные варианты. Больше наверное меня беспокоило что засрётся система какой-то неведомой шляпой.
ㅤ
Время шло и snap появился в коробке. Всё больше вкусных репок стало инсталиться именно через эту штуковину. Пришлось лезть в нору и знакомиться.
Короче snap это пакетный менеджер, кто бы мог подумать.
Фишка snap — пакеты работают на любом дистрибутиве Ubuntu, Fedora, Arch, Debian и др. без необходимости адаптации под конкретный дистрибутив.
То есть создается один пакет с софтиной и он подходит под все дистрибутивы. Красота!
Получается что-то вроде докер контейнера, который заработает на любой машине.
А еще такой софт запускается в песочнице. Тут безопасники сразу ставят плюсик.
А еще установленные пакеты автоматически обновляются в фоне и они всегда актуальны.
А еще snap пакет содержит все зависимости и библиотеки, которые требуются для запуска софтины.
То есть твой линукс не будет загажен файлами, библиотеками, доп-софтом и т.п. Всё это уже есть в рамках пакета. Никаких конфликтов, никаких танцев с бубном. Да, танцы порой случаются, но редко.
Ну ты понял… а когда применять apt, а когда snap?
➡️ snap хорошо подходит для:
— для приложений, которые часто обновляются (камень в гитлаб).
— упрощённого развёртывания на разных дистрибутивах.
— обеспечения безопасности через контейнеризацию.
➡️ apt предпочтительнее для:
— системных компонентов и пакетов, тесно интегрированных с операционной системой.
— софта, требующего максимальной производительности.
Вот и всё! Не такой snap и страшный. Вечерком еще покажу кое-что интересное (не письку).
tags: #linux
—
🔔 ➡️
Частенько для установки какого-то софта в линукс, предлагают использовать какой-то snap.
snap install chezmoi
Когда snap появился я как-то скептически к нему отнесся. Мол, чо за хуйня, есть же apt и еже подобные коробочные варианты. Больше наверное меня беспокоило что засрётся система какой-то неведомой шляпой.
ㅤ
Время шло и snap появился в коробке. Всё больше вкусных репок стало инсталиться именно через эту штуковину. Пришлось лезть в нору и знакомиться.
Короче snap это пакетный менеджер, кто бы мог подумать.
Фишка snap — пакеты работают на любом дистрибутиве Ubuntu, Fedora, Arch, Debian и др. без необходимости адаптации под конкретный дистрибутив.
То есть создается один пакет с софтиной и он подходит под все дистрибутивы. Красота!
Получается что-то вроде докер контейнера, который заработает на любой машине.
А еще такой софт запускается в песочнице. Тут безопасники сразу ставят плюсик.
А еще установленные пакеты автоматически обновляются в фоне и они всегда актуальны.
А еще snap пакет содержит все зависимости и библиотеки, которые требуются для запуска софтины.
То есть твой линукс не будет загажен файлами, библиотеками, доп-софтом и т.п. Всё это уже есть в рамках пакета. Никаких конфликтов, никаких танцев с бубном. Да, танцы порой случаются, но редко.
Ну ты понял… а когда применять apt, а когда snap?
➡️ snap хорошо подходит для:
— для приложений, которые часто обновляются (камень в гитлаб).
— упрощённого развёртывания на разных дистрибутивах.
— обеспечения безопасности через контейнеризацию.
➡️ apt предпочтительнее для:
— системных компонентов и пакетов, тесно интегрированных с операционной системой.
— софта, требующего максимальной производительности.
Вот и всё! Не такой snap и страшный. Вечерком еще покажу кое-что интересное (не письку).
tags: #linux
—
🔔 ➡️
Бас мазафака фактор! Ща жопы сгорят...
Где бы я ни работал, я стараюсь завязать какой-то кусок именно на себя. В идеале полностью подмять и пустить корни во все процессы связанные с той деятельностью, которой я занимаюсь.
ㅤ
Если на пальцах, к примеру в компании изначально доминирует terraform и golden image через packer. Я прихожу, вижу этот пиздец. Почему пиздец? Да потому, что это пиздец. Но совладать с процессами на начальном этапе я не могу, потому, что я новенький и не мне диктовать условия. К моим предложениям перейти на ansible и сделать динамические inventory для теры, относятся скептически. Хули? Смириться? Нет уж.
Я запиливаю в свое свободное время всю эту связку, делаю пайплайны, кнопку, тесты, короче делаю универсальное решение, которое работает. А не то, что существует у них сейчас. Презентую его CTO в личной беседе. В 99.9999% CTO дает мне зеленый свет на внедрение. А старье с golden image выбрасываем на парашу.
Продавил. Молодец. Но остается хуита, когда коллеги из отдела просто в недоумении, типа хуй с горы пришел, чото новое интегрировал, CTO поддержал, да как так-то? Мы тут сидели баблишко, получали, а теперь надо чему-то новому учиться. Да блядь, ребята! Придется играть по моим правилам, либо идите на хуй!
Дальше ситуация развивается стремительно, коллеги разбираться в этом не хотят и я все больше и больше подминаю инфраструктуру под себя, становлюсь единственным человеком, который во всем этом шарит и умеет управлять. Да, я предлагаю показать как все это работает. У меня есть написанная документация, она доступна для всех желающих. Но желающих обычно нет. Иииии. Возникает тот самый бас фактор.
Грубо говоря, если я хуй забью, то инфраструктуру поддерживать никто не сможет какое-то время, а возможно совсем не сможет.
Я не прав? Хуй там, я прав. Я всегда иду на встречу и делюсь знаниями, при условии, что люди хотят эти знания получить. Но обычно никто не хочет покидать зону комфорта. Соответственно имеем, то что имеем.
Сидеть в говне я не люблю, по этому, всегда, ВСЕГДА выпиливаю гавно и ввожу новые процессы. Хоть это новая робота, хоть старая. Да я уверен, что продавил бы даже яндекс с гуглом, хотя у них надеюсь и без меня все заебись.
Завязав все на себя, легко можно манипулировать своим повышением до начальника отдела, поднятием ЗП и прочее. Главное подходить к этому с умом, а не жопой.
Сейчас со мной работает человек и он действительно вникает в то, что я внедрил. Я спокойно сходил в отпуск на месяц и нихуя не уебалось. Он умеет управлять моим заводом. Я отдал ему поле под цех, он построил себе небольшой заводик и успешно им владеет. Я в него не лезу, он создал свой бас фактор и завязал его на себя. Молодец. А не лезу я, потому, что мне неинтересно. А то что мне неинтересно идет нахуй.
Да я могу сходить на заводик коллеги, чото там посмотреть, потыкать, но как все это устроено я знать не хочу. Даже когда он уйдет в отпуск и заводик наебнется медным тазом, я за час разберусь и починю все что нужно, потому, что коллега ведет документацию и частенько рассказывает на синках, что и как у него происходит.
Короче хуй пойми, бизнес не любит бас фактора, а мы любим бас фактор.
Любим по причине — этим можно манипулировать и выбивать себе хорошие должности и ЗП.
А как ты считаешь?
tags: #рабочиебудни #memories
—
🔔 ➡️
Где бы я ни работал, я стараюсь завязать какой-то кусок именно на себя. В идеале полностью подмять и пустить корни во все процессы связанные с той деятельностью, которой я занимаюсь.
ㅤ
Если на пальцах, к примеру в компании изначально доминирует terraform и golden image через packer. Я прихожу, вижу этот пиздец. Почему пиздец? Да потому, что это пиздец. Но совладать с процессами на начальном этапе я не могу, потому, что я новенький и не мне диктовать условия. К моим предложениям перейти на ansible и сделать динамические inventory для теры, относятся скептически. Хули? Смириться? Нет уж.
Я запиливаю в свое свободное время всю эту связку, делаю пайплайны, кнопку, тесты, короче делаю универсальное решение, которое работает. А не то, что существует у них сейчас. Презентую его CTO в личной беседе. В 99.9999% CTO дает мне зеленый свет на внедрение. А старье с golden image выбрасываем на парашу.
Продавил. Молодец. Но остается хуита, когда коллеги из отдела просто в недоумении, типа хуй с горы пришел, чото новое интегрировал, CTO поддержал, да как так-то? Мы тут сидели баблишко, получали, а теперь надо чему-то новому учиться. Да блядь, ребята! Придется играть по моим правилам, либо идите на хуй!
Дальше ситуация развивается стремительно, коллеги разбираться в этом не хотят и я все больше и больше подминаю инфраструктуру под себя, становлюсь единственным человеком, который во всем этом шарит и умеет управлять. Да, я предлагаю показать как все это работает. У меня есть написанная документация, она доступна для всех желающих. Но желающих обычно нет. Иииии. Возникает тот самый бас фактор.
Грубо говоря, если я хуй забью, то инфраструктуру поддерживать никто не сможет какое-то время, а возможно совсем не сможет.
Я не прав? Хуй там, я прав. Я всегда иду на встречу и делюсь знаниями, при условии, что люди хотят эти знания получить. Но обычно никто не хочет покидать зону комфорта. Соответственно имеем, то что имеем.
Сидеть в говне я не люблю, по этому, всегда, ВСЕГДА выпиливаю гавно и ввожу новые процессы. Хоть это новая робота, хоть старая. Да я уверен, что продавил бы даже яндекс с гуглом, хотя у них надеюсь и без меня все заебись.
Завязав все на себя, легко можно манипулировать своим повышением до начальника отдела, поднятием ЗП и прочее. Главное подходить к этому с умом, а не жопой.
Сейчас со мной работает человек и он действительно вникает в то, что я внедрил. Я спокойно сходил в отпуск на месяц и нихуя не уебалось. Он умеет управлять моим заводом. Я отдал ему поле под цех, он построил себе небольшой заводик и успешно им владеет. Я в него не лезу, он создал свой бас фактор и завязал его на себя. Молодец. А не лезу я, потому, что мне неинтересно. А то что мне неинтересно идет нахуй.
Да я могу сходить на заводик коллеги, чото там посмотреть, потыкать, но как все это устроено я знать не хочу. Даже когда он уйдет в отпуск и заводик наебнется медным тазом, я за час разберусь и починю все что нужно, потому, что коллега ведет документацию и частенько рассказывает на синках, что и как у него происходит.
Короче хуй пойми, бизнес не любит бас фактора, а мы любим бас фактор.
Любим по причине — этим можно манипулировать и выбивать себе хорошие должности и ЗП.
А как ты считаешь?
tags: #рабочиебудни #memories
—
🔔 ➡️
переиграем и завершим эту прекрасную рубрику #pizza хоть квантовый компьютер подключайте, щас без правил и ограничений
👀 Один рубит - семеро в хуй трýбят!
Попросил сегодня на собесе кандидата зачистить nginx логи. Кандидат на роль девопс (мидл) на вилку 200-250к.
Зачистил —
Мде блядь… это будет интересно!
ㅤ
Задаю следующий вопрос — Серёжа, а почему файл
Где карта Билли? Нам нужна карта!
Внятного ответа не получил, что-то на уровне — он появится спустя сутки, когда logrotate отработает. Дада… будем сутки без логов сидеть. А если нет logrotate?
Короче, если хочешь зачистить файл, есть несколько безопасных способов.
Первый способ:
Тут мы перезаписываем лог-файл с помощью оператора редиректа «>».
Это безопасно для процесса, который продолжает записывать в лог, поскольку процесс будет продолжать писать в тот же файл, а его дескриптор не изменится.
Ключевая фраза — дескриптор не изменится. А когда ты этот файл через
Второй способ:
Третий способ:
Некоторые сервисы, например, apache или nginx, позволяют отправить сигнал процессу для того, чтобы он закрыл текущий лог-файл и открыл новый (сигнал USR1). В этом случае процесс продолжит работать, но логи будут записываться в новый файл.
Где
Четвертый вариант — тот самый logrotate, но его рассматривать не будем.
Я пользуюсь первым вариантом с символом перенаправления «>». Стильно, модно, молодежно!
Короче сначала думаем головой, а потом уже пользуемся тяжелой артиллерией вроде
А какие способы обнуления знаешь ты? Про аклкашку не пишите, этот способ знают все.
tags: #рабочиебудни #linux
—
🔔 ➡️
Попросил сегодня на собесе кандидата зачистить nginx логи. Кандидат на роль девопс (мидл) на вилку 200-250к.
Зачистил —
rm /var/log/nginx/access.log
Мде блядь… это будет интересно!
ㅤ
Задаю следующий вопрос — Серёжа, а почему файл
access.log
пропал и больше не появляется? Nginx то в данный момент работает, запросы на него идут.Где карта Билли? Нам нужна карта!
Внятного ответа не получил, что-то на уровне — он появится спустя сутки, когда logrotate отработает. Дада… будем сутки без логов сидеть. А если нет logrotate?
Короче, если хочешь зачистить файл, есть несколько безопасных способов.
Первый способ:
sudo > /var/log/nginx/access.log
Тут мы перезаписываем лог-файл с помощью оператора редиректа «>».
Это безопасно для процесса, который продолжает записывать в лог, поскольку процесс будет продолжать писать в тот же файл, а его дескриптор не изменится.
Ключевая фраза — дескриптор не изменится. А когда ты этот файл через
rm
ёбнул само собой дескриптор потерялся и nginx охуевает.Второй способ:
sudo truncate -s 0 /var/log/nginx/access.log
-s 0 =
обрезать файл до нулевого размера. В этом случае дескриптор также не будет потерян и nginx продолжит писать непотребности.Третий способ:
Некоторые сервисы, например, apache или nginx, позволяют отправить сигнал процессу для того, чтобы он закрыл текущий лог-файл и открыл новый (сигнал USR1). В этом случае процесс продолжит работать, но логи будут записываться в новый файл.
sudo kill -USR1 <pid>
Где
<pid> = PID
процесса. После выполнения этой команды файл с логов превратится в access.log.1
и откроется новый access.log
.Четвертый вариант — тот самый logrotate, но его рассматривать не будем.
Я пользуюсь первым вариантом с символом перенаправления «>». Стильно, модно, молодежно!
Короче сначала думаем головой, а потом уже пользуемся тяжелой артиллерией вроде
rm
и т.п.А какие способы обнуления знаешь ты? Про аклкашку не пишите, этот способ знают все.
tags: #рабочиебудни #linux
—
🔔 ➡️
Привет, друзья, вопрос из зала от коллеги. Кто что думает? Велком в комменты!
ㅤ
Вопрос:
tags: #рабочиебудни
—
🔔 ➡️
ㅤ
Вопрос:
Сейчас занимаюсь задачей по миграции/синхронизации файлового сервера предприятия.
Суть проблемы в следующем: Вся информация сейчас распределена по разным серверам, которые начинают выходить из строя.
Используется Windows Server с DFS, права настроены через Active Directory.
Новый файловый сервер нужно реализовать на базе РЕД ОС.
На этапе планирования столкнулся с рядом вопросов — как лучше организовать процесс миграции, чтобы структура и права доступа остались удобными и управляемыми?
Если у вас будут предложения или потребуется дополнительная информация, с радостью предоставлю! Заранее спасибо за помощь!
tags: #рабочиебудни
—
🔔 ➡️
Сегодня 1с начала ругаться на нехватку лицензий. Дело не мое, но начали проверять, и увидели подключение с IP, которого нет в нормативных документах.
🔥 Инцидент. Я немного офигел. Что, откуда? Нужно искать, кто тут такой умный.
Начинаем исследование:
на сервере 1c
Ага, скорее всего windows 10 после обновления переключила сеть в "общедоступные".
По mac определили, что это ASUS. Но может ноут, может комп или wi-fi роутер вредители воткнули в сеть.
Но как ее найти? Сетка не большая, меньше 100 ip, но не будешь же каждый комп и каждое устройство проверять...
Короче, на серваке 1с:
Через 5 минут пользователь звонит, "у меня 1с не работает".
Проверил - точно. Ip не правильно задали. Восстановил, перевел сеть в режим "Частные".
А проблему нехватки лицензий так и не решили. Конец года, вся бухгалтерия пашет. Вот лицензий на всех и не хватает.
Народ, а вы сталкивались с появлением в сети незарегистрированных ip? Как решали проблему?
tags: #networks #рабочиебудни © by Tagd Tagd
—
🔔 ➡️
🔥 Инцидент. Я немного офигел. Что, откуда? Нужно искать, кто тут такой умный.
Начинаем исследование:
на сервере 1c
ss|grep ip
- Видно, машина работает с 1с.ping ip
- машина не пингуется.nmap -Pn ip
- все порты < 1000 закрыты.Ага, скорее всего windows 10 после обновления переключила сеть в "общедоступные".
arp ip
- показывает macПо mac определили, что это ASUS. Но может ноут, может комп или wi-fi роутер вредители воткнули в сеть.
sudo arping -I enp3s4 ip
- машина пингуется.Но как ее найти? Сетка не большая, меньше 100 ip, но не будешь же каждый комп и каждое устройство проверять...
Короче, на серваке 1с:
sudo iptables -I INPUT -s ip -j REJECT
Через 5 минут пользователь звонит, "у меня 1с не работает".
Проверил - точно. Ip не правильно задали. Восстановил, перевел сеть в режим "Частные".
А проблему нехватки лицензий так и не решили. Конец года, вся бухгалтерия пашет. Вот лицензий на всех и не хватает.
Народ, а вы сталкивались с появлением в сети незарегистрированных ip? Как решали проблему?
tags: #networks #рабочиебудни © by Tagd Tagd
—
🔔 ➡️