Bash Days | Linux | DevOps
23.2K subscribers
127 photos
22 videos
600 links
Авторский канал от действующего девопса

Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу.

Автор: Роман Шубин
Реклама: @maxgrue

Курс: @tormozilla_bot

РКН: https://two.su/bashdays
Download Telegram
🤩 Пятница — это продакшн, который уже не твоя проблема.

Частенько для установки какого-то софта в линукс, предлагают использовать какой-то snap.

snap install chezmoi


Когда snap появился я как-то скептически к нему отнесся. Мол, чо за хуйня, есть же apt и еже подобные коробочные варианты. Больше наверное меня беспокоило что засрётся система какой-то неведомой шляпой.

Время шло и snap появился в коробке. Всё больше вкусных репок стало инсталиться именно через эту штуковину. Пришлось лезть в нору и знакомиться.

Короче snap это пакетный менеджер, кто бы мог подумать.

Фишка snap — пакеты работают на любом дистрибутиве Ubuntu, Fedora, Arch, Debian и др. без необходимости адаптации под конкретный дистрибутив.

То есть создается один пакет с софтиной и он подходит под все дистрибутивы. Красота!

Получается что-то вроде докер контейнера, который заработает на любой машине.

А еще такой софт запускается в песочнице. Тут безопасники сразу ставят плюсик.

А еще установленные пакеты автоматически обновляются в фоне и они всегда актуальны.

А еще snap пакет содержит все зависимости и библиотеки, которые требуются для запуска софтины.

То есть твой линукс не будет загажен файлами, библиотеками, доп-софтом и т.п. Всё это уже есть в рамках пакета. Никаких конфликтов, никаких танцев с бубном. Да, танцы порой случаются, но редко.

Ну ты понял… а когда применять apt, а когда snap?

➡️ snap хорошо подходит для:

— для приложений, которые часто обновляются (камень в гитлаб).
— упрощённого развёртывания на разных дистрибутивах.
— обеспечения безопасности через контейнеризацию.

➡️ apt предпочтительнее для:

— системных компонентов и пакетов, тесно интегрированных с операционной системой.
— софта, требующего максимальной производительности.

Вот и всё! Не такой snap и страшный. Вечерком еще покажу кое-что интересное (не письку).

tags: #linux

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
216919
Бас мазафака фактор! Ща жопы сгорят...

Где бы я ни работал, я стараюсь завязать какой-то кусок именно на себя. В идеале полностью подмять и пустить корни во все процессы связанные с той деятельностью, которой я занимаюсь.

Если на пальцах, к примеру в компании изначально доминирует terraform и golden image через packer. Я прихожу, вижу этот пиздец. Почему пиздец? Да потому, что это пиздец. Но совладать с процессами на начальном этапе я не могу, потому, что я новенький и не мне диктовать условия. К моим предложениям перейти на ansible и сделать динамические inventory для теры, относятся скептически. Хули? Смириться? Нет уж.

Я запиливаю в свое свободное время всю эту связку, делаю пайплайны, кнопку, тесты, короче делаю универсальное решение, которое работает. А не то, что существует у них сейчас. Презентую его CTO в личной беседе. В 99.9999% CTO дает мне зеленый свет на внедрение. А старье с golden image выбрасываем на парашу.

Продавил. Молодец. Но остается хуита, когда коллеги из отдела просто в недоумении, типа хуй с горы пришел, чото новое интегрировал, CTO поддержал, да как так-то? Мы тут сидели баблишко, получали, а теперь надо чему-то новому учиться. Да блядь, ребята! Придется играть по моим правилам, либо идите на хуй!

Дальше ситуация развивается стремительно, коллеги разбираться в этом не хотят и я все больше и больше подминаю инфраструктуру под себя, становлюсь единственным человеком, который во всем этом шарит и умеет управлять. Да, я предлагаю показать как все это работает. У меня есть написанная документация, она доступна для всех желающих. Но желающих обычно нет. Иииии. Возникает тот самый бас фактор.

Грубо говоря, если я хуй забью, то инфраструктуру поддерживать никто не сможет какое-то время, а возможно совсем не сможет.

Я не прав? Хуй там, я прав. Я всегда иду на встречу и делюсь знаниями, при условии, что люди хотят эти знания получить. Но обычно никто не хочет покидать зону комфорта. Соответственно имеем, то что имеем.

Сидеть в говне я не люблю, по этому, всегда, ВСЕГДА выпиливаю гавно и ввожу новые процессы. Хоть это новая робота, хоть старая. Да я уверен, что продавил бы даже яндекс с гуглом, хотя у них надеюсь и без меня все заебись.

Завязав все на себя, легко можно манипулировать своим повышением до начальника отдела, поднятием ЗП и прочее. Главное подходить к этому с умом, а не жопой.

Сейчас со мной работает человек и он действительно вникает в то, что я внедрил. Я спокойно сходил в отпуск на месяц и нихуя не уебалось. Он умеет управлять моим заводом. Я отдал ему поле под цех, он построил себе небольшой заводик и успешно им владеет. Я в него не лезу, он создал свой бас фактор и завязал его на себя. Молодец. А не лезу я, потому, что мне неинтересно. А то что мне неинтересно идет нахуй.

Да я могу сходить на заводик коллеги, чото там посмотреть, потыкать, но как все это устроено я знать не хочу. Даже когда он уйдет в отпуск и заводик наебнется медным тазом, я за час разберусь и починю все что нужно, потому, что коллега ведет документацию и частенько рассказывает на синках, что и как у него происходит.

Короче хуй пойми, бизнес не любит бас фактора, а мы любим бас фактор.

Любим по причине — этим можно манипулировать и выбивать себе хорошие должности и ЗП.

А как ты считаешь?

tags: #рабочиебудни #memories

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
5511224
👀 Один рубит - семеро в хуй трýбят!

Попросил сегодня на собесе кандидата зачистить 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

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
14165
Привет, друзья, вопрос из зала от коллеги. Кто что думает? Велком в комменты!

Вопрос:

Сейчас занимаюсь задачей по миграции/синхронизации файлового сервера предприятия.

Суть проблемы в следующем: Вся информация сейчас распределена по разным серверам, которые начинают выходить из строя.

Используется Windows Server с DFS, права настроены через Active Directory.

Новый файловый сервер нужно реализовать на базе РЕД ОС.

На этапе планирования столкнулся с рядом вопросов — как лучше организовать процесс миграции, чтобы структура и права доступа остались удобными и управляемыми?

Если у вас будут предложения или потребуется дополнительная информация, с радостью предоставлю! Заранее спасибо за помощь!


tags: #рабочиебудни

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
22
Как я изучал кубер или хуёвой пизде — хуёво везде.

Короче взбрело как-то нашему техдиру засунуть бложек компании в кубер. Бложек на вордпрессе, вся хуйня.

На вопрос — чтобы что? Он же и так нормально крутится, не падает, работает и не трогай!

Ответ очевиден — бизнес приказал, денег нет, но вы держитесь, новогодних премий не будет. Шаблонный набор доширака.

В общем владелец компании где-то с корешами посидел за чаркой сакэ и они ему в уши нассали.

Мол у каждой уважающей себя компании должен быть кубер. Если у тебя нет куба, значит ты лох и компания твоя — гавно!


Кубера у нас как ты понял не было. И мне предстояло его внедрять.

О кубере естественно я знал словом — нихуя! Но задача есть, надо делать, ипотека сама себя не оплатит.

Иду на ютуб, смотрю взахлеб все что попадается на эту тему, за сутки сложилось представление что это такое и как его готовить.

Тогда еще было интересно познавать новое, сейчас такого уже нет.

Старым добрым методом «тыка» всё поднял, написал пайплайны, собрал контейнеры, задеплоил. Базу кстати тоже в кубер перетащил, просили же всё туда перенести.

Вся эта поделка была похожа на какой-то обдристанный шалаш подпертый рыхложопными костылями, но всё работало.

Задачу в done, все довольны. Я молодец. Теперь я знаю кубер!

А спустя сутки начались качели. Пользователи начали регулярно получать 500ки, иногда ПОД с базой ПОДъебывал и каким-то образом просто выпадал в осадок. Ну и еще вагон и тележка факапов.

Фиксилось это естественно гуглежом. За неделю более менее все было отлажено, базу по итогу пришлось вытащить из этого комбайна и поселить на отдельном серваке. Опыт!

Но раз в неделю стабильно что-то вылазило новое. Блядь… меня трясти уже начинало когда там что-то ломалось. А еще за каждый инцидент жестко ебали, как медведя. Одним словом — айти.

Любят люди всё усложнять, ну работало оно раньше, нахуй было это трогать. Тем более тащить вордпресс в кубер.

Чуть позже я увидел битрикс в кубе, это отдельный пиздец.

💬💬💬

Эт я к чему. Изучив базово технологию по ютубу, я добавил себе в резюме строчку — знания k8s, покидал отклики на ХХру и через пару дней получил оффер. А через 2 недели забыл про этот вордпресс как страшный сон.

Как потом оказалось в новой компании кубер был, но его обслуживали другие дядьки, а в вакансии HRы просто так это написали. Попытались побольше технологий воткнуть видимо.

Если видишь вакансию и какую-то неизвестную тебе технологию — не ссы, кидай отклик, во всем можно разобраться прям по ходу дела. Было бы желание. А возможно там этой технологии вообще нет.

Тем более в новой компании тебя первое время хуй допустят до таких вещей, сначала будешь всё под присмотром делать. Хотя бывают случаи когда в компании один девопс.

Приходишь такой и ты сам себе тимлид и команда в одно рыло. Потом два месяца пытаешься понять, как все устроено и не сломать, то что работает. А из документации .bash_history.

А если на собесе что-то спросили, а ты не знаешь, так и скажи — я хуй знает, слышал, но не тыкал, разберусь короче, не проблема!

Прозрачность в этих делах очень важна, соискатели очень любят когда ты с ними откровенен и тебе похуй.

Сразу ходи с настроением — Не они тебе нужны, а ты им.

Ну и про кубер. Не нужно его поднимать где только можно, он используется точечно, для проектов которые в нём нуждаются. А не потому что это — модно блядь!

А хочешь его изучить, поставь себе под локальные проекты, задеплой туда своего кота, выстави жопой в интернет и ковыряй, правь баги и обслуживай. Чем больше ты его ковыряешь, тем больше он ковыряет тебя.

Но это справедливо для всех технологий.

Если нет желания — хуй ты чему научишься.

Такие дела, мотай на ус и не ссы, всё у тебя получится!

tags: #рабочиебудни

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
7232
Сегодня 1с начала ругаться на нехватку лицензий. Дело не мое, но начали проверять, и увидели подключение с IP, которого нет в нормативных документах.

🔥 Инцидент. Я немного офигел. Что, откуда? Нужно искать, кто тут такой умный.

Начинаем исследование:

на сервере 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

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
70
Верной дорогой идёте товарищи...

идея в стадии разработки и применение в проде пока нежелательно


Уровень статьи средне-сложный. Я не буду объяснять, как завести пользователя, как прописать ему оболочку, как настроить аутентификацию по ключам. Информации об этом валом.

Сегодня мы рассмотрим как сделать «тупиковую машину». Под ней я понимаю машину, попасть на которую можно через интернет по ssh, но на самой этой машине интернета нет.

Заинтриговал? Мозг немного взорвался? Короче, делаем ssh-прокси.

⁉️ Для чего это нужно?

Это можно использовать для раздачи доступа сторонним пользователям для управления ресурсами внутри сети, для студентов, работающих на удалёнке. (студенты IT - самые агрессивные пользователи).

Короче для минимизации рисков информационной безопасности. Скажу сразу, это не панацея. Инфу/файлы можно таскать через буффер обмена. Но много информации так не передашь.

Поехали!

Понадобится 2 машины: Бастионная (Jump-сервер, ssh-прокси) - машина, которая торчит открытым портом ssh в интернет.

И Тупиковая - машина (возможно виртуалка), с открытым в локалку портом ssh, на которой будет работать пользователь. И у которой нет доступа в инет (закрыт на периметровом маршрутизаторе. Или не прописаны шлюзы.

Основное условие у пользователя не должно быть root, а то сменит IP/MAC, пропишет шлюзы...). (допустим ее локальный ip 10.10.10.10).

С Бастионной машины должен быть доступ к Тупиковой по ssh, внутри локалки.

НА БАСТИОННОЙ МАШИНЕ. (аутентификация по ключам уже настроена, ssh защищена от быстрого перебора, для этой группы пользователей запрещен проброс портов)

1. Заводим пользователя, например, Tagd83j6 с паролем >=20 символов (не пригодится)

2. Добавляем публичный ключ Пользователя. (Он обычно с парольной фразой) в ~/.ssh/authorized_keys

3. Генерим ключ без пароля для доступа к Тупиковой машине. (лучше ed25519).

4. Домашней папке Tagd83j6 создаем файл типа shell10.sh (555 root:root)


#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
ssh $USER@10.10.10.10 2>/dev/null

sudo usermod -s /home/Tagd83j6/shell10.sh Tagd83j6


НА ТУПИКОВОЙ МАШИНЕ (аутентификация по ключам уже настроена)

1. Заводим пользователя Tagd83j6 с паролем >=20 символов (не пригодится)

2. добавляем публичный ключ(с Бастионной машины. п3) в ~/.ssh/authorized_keys

Все. Теперь, если на Бастионной машине от root набрать

su Tagd83j6


Сразу должны попасть на Тупиковую машину.

Собственно все.

Аутентификация пользователя производится на Бастионной машине!!!

При подключении к Бастионной машине нас сразу перебрасывает на Тупиковую. На ней есть локалка, но нет интернета.

Вопросы, критика, плюсики приветствуется.

tags: #networks #linux © by Tagd Tagd

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
61
Привет. Такссс ребят, у нас нативочка. Короче Tagd Tagd пилит пиздатый интенсив по Bash’у для самых маленьких.

Собственно изучаем вопрос, на сколько это будет кому интересно.

Интенсив полностью халява, то есть бесплатный! Я сам его в глаза еще не видел, но думаю Tagd заебись сделает.

Ниже щас закину голосовалку. Потратьте, пожалуйста, секунду и клик, это нам очень важно! Заранее спасибо! Вы супер!

👇👇 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
112
Впишешься в FREE интенсив по Bash?
Anonymous Poll
74%
да
6%
нет
20%
у меня лапки
60
Интересно, но часто получаю вопрос: чем vi отличается от vim?

Если коротко, то все форки vi это стероидные штуки, со своими свистоперделками, обвесами и т.п. А vi давно уже в деприкейтед.

VIM = VI iMproved, то есть — «VI Улучшенный»

Прям готовое погоняло для викинга.


Сейчас в современных дистрибутивах предустановлен именно vim. Даже в CentOS 7 был предустановлен vim вместо vi (без симлинков).

Так что ничего тут такого нет. Отличия — в функциональности.

Банально открой какой-нибудь index.py в vi и потом в vim, сразу увидишь что в vi отсутствует подсветка синтаксиса + в vi если память не изменяет — не было визуального режима.

Но если будешь проверять, убедись что открывается именно vi, потому что в 99999% у тебя отроется vim.

Такие дела. Вечерком залетит пост попизже от Tagd про права.

Хорошей всем рабочий недели!

tags: #linux

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
171
Тут меня попросили подробнее рассказать про права 330 на каталог.

🔤🔤🔥🔤🔤🔤🔤

Но начну я с того, что напомню, что права в текстовом формате несколько лучше, чем в числовом.

Конкретно дело касается права "X". Это то же самое, что "x" но касается только каталогов.

То есть chmod -R +X ./ установит возможность поиска во всех подкаталогах текущего, но не сделает все файлы исполняемыми!

Ну, ладно, я отвлекся. 330.

Тут в чате Alex (генератор идей) правильно назвал права «черной комнатой». Клаcсная аналогия.

Короче, я баню зловредов, которые ломятся ко мне на ssh. Баню в разных филиалах. И филиалы сваливают ежедневные отчеты мне, в головной по sftp.

По-хорошему, нужно, чтоб для каждого филиала, отдельная учетка, все загружают, каждый в свой каталог... Но данные не особо ценные.

Но и паранойю никто не отменял. А если ломанут один филиал, и как начнут данные отравлять... :-)

В общем принял решение, что все работают под одной учеткой. Поставил права на папку 330 (-wx-wx---).

Эти права разрешают файл открыть, записать, удалить. Только нужно точно указать какой конкретно файл. Потому что список получить нельзя.

Файлы сваливаются с суффиксом, например filXXX_Ohd1Ul.txt Имя файла для каждого филиала всегда одно и то же, префикс - название филиала, суффикс набор букв (защита от перебора).

То есть на сервере в головном от root я вижу все файлы, а филиалы не видят не то что соседние файлы, но даже свой.

Эти права раньше часто ставили на папку upload на анонимных ftp серверах. Но и сейчас можно использовать, для заливки, бэкапов, например.

Да, знаю, сейчас опытные админы набегут и начнут рассказывать про rsync. Я архивы шифрую. А при работе с шифрованными архивами rsync работает хуже, чем sftp. (Ну, сначала контрольные суммы, потом сравнение, потом синхронизация).

А что там сравнивать... они всегда разные. Блин, опять скатился на больное... В общем, при одной учетке, формально можно считать sftp сервер анонимным, но с кругом пользователей, ограниченным ключами :-).

Применение прав 330 позволяет упростить заливку файлов с обеспечением некоторой секьюрности.

Для освежения памяти очень рекомендую статью chmod в википедии.

tags: #security #linux

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
172
В последнее время пошли мемы и обсуждения касаемо годовых премий.

Я тут как-то пост в стол написал, показываю, выж просили ничего от вас не скрывать, ловите! Такие посты буду помечать тэгом #memories.


❄️ Насчет годовой премии.

Когда только я пришел в компанию и в конце года получил премию (или тринадцатую зарплату) в размере оклада, я конечно прихуел.

Мол, ебать, вот это подгон, вот это я понимаю, чуваки заботятся о своих подчиненных. И для себя понял, что следующий год буду прям со всей силы ебашить и никого не подведу.

Так и было. А еще у меня родился ребенок, ну и там плюшек тоже подогнали + 2 недели отпуска + еще каждый год можно на недельку в отгулы сходить за счет компании. Короче этакая компания мечты.

Во второй год, дали премию в размере половины ЗП. Я такой — ммм, ну ладно, хотя план очень даже перевыполнили. Ну бизнесу виднее. Моя мотивация хуячить в прежнем режиме немного поугасла.

Потом почему-то пропала неделя с отгулами (в году можно было 7 дней прогулять без последсвий), перестали поздравлять с днюхами и вообще все стали каким-то обособленными и злыми.

Мир менялся. И на фоне этого я тоже начал становится обособленным, а самое главное злым. В дальнейшем эта злость помогла мне неплохо попрыгать по карьерной лестнице.

Ну и сейчас кожа помогает не делать хуиту, которую я делать не хочу. Меня можно заставить, но результатом никто доволен не останется.

Прошел еще один год и годовую премию вообще не дали. План снова был перевыполнен. Не, ну чо за херня. Да еще и за дежурства не заплатили (хотя ссали в уши что будет x2). Мотивация работать хорошо, вообще пропала.

И вот в этом году, дошли слухи, что премия будет, но не всем. И ты сидишь такой и думаешь — бляяяяяяя.... сууууккккаааа.... и последнюю неделю просто уже не можешь работать, потому что не знаешь, дадут тебе премию или нет.

А если не дадут? Получается я зря поработал неделю? А если дадут? Что будет? Ну деньги будут. И чо? Но не всем? А как все? Они же будут знать, что тебе дали, а им не дали? Они посчитают, что бизнес повел себя не объективно и будут хуёва работать.

Короче. Вся эта хуита с премиями создает разбалансировку в коллективе. Если ты собрался платить премию, плати ее каждый год и каждый год фиксированной суммой либо больше. Нахуй голову людям морочить?

Один раз дал, потом не дал — всё, человек отреагировал на эту ситуацию и в большинстве случаев негативно. Это условный рефлекс, как у собаки.

Собака получила кость и рада, в другой раз не получила и насрала на стену.

Хочешь сделать хорошо? Не давай вообще никому премий, а если хочешь дать, дай ее никак не привязывая к какой-то дате.

Вот дали мне премию в апреле, ну заебись, но я точно знаю что в апреле 2025 мне хуй чо дадут. Тут у меня есть прозрачность и понимание. А вот в прозрачности тринадцатой разплаты у меня нет.

Может быть, может не быть, может половина, а может 0.58 процента. ЭТО ЕБАЛА!

Еще работал в компании, дак там директор был жадный до мозга костей, покупал себе особняки и ламборджини. Но премий никому не давал. Люди по этому поводу даже и не парились, потому, что знали что премий нет. Прозрачность.

Хуль тут еще скажешь, с предстоящим вас Новым Годом, господа и дамы!

Чо там у тебя с премией-то?

tags: #рабочиебудни #memories

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
12118
Сегодня настроение ныть почему-то нет, поэтому научимся открывать файл на нужной строке в разных редакторах.

А нахуя это нужно? Ну ХЗ, я обычно этим не пользуюсь, открываю полностью файл и ищу нужную мне строку. Но это вкусовщина, кто как привык.

Вообще я встречал людей, которые так открывают файлы, когда видят нечто подобное:

Error in file "script.py" on line 42: NameError: name 'variable' is not defined


Хуяк и открыл script.py сразу на 42 строке.

Короче давай посмотрим как это сделать.

Создаем файл для теста:

( printf '%s\n' {A..Z}-$[++I] > /tmp/bashdays.txt )


Получаем такое содержимое:

A-1
B-2
C-3
D-4
E-5
F-6
G-7
H-8
I-9
...


Ну и теперь давай открывать это:

➡️ mcedit

mcedit +7 /tmp/bashdays.txt


➡️ less

less -w +11 /tmp/bashdays.txt


➡️ nano

nano +14 /tmp/bashdays.txt


➡️ vim

vim +4 /tmp/bashdays.txt


Вот такие пироги. А какие еще редакторы ты знаешь в которых можно открыть файл на определенной строке? Камон в комменты!

tags: #linux #tricks #bash

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
12111
Про процессоры

Привет, знаю что несколько не формат, но давно хотел написать да и в личке довольно много просили, потому полагаю некоторым пригодится.

🔤🔤🔥🔤🔤🔤🔤🔤🔤🔤

Автор поста 👆👆👆 А я лишь утащил в телеграф, получился длинно-пост, сюда не влезло. Лайки и комментарии приветствуются.

👉 Читаем и проникаемся

tags: #hardware

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
136
Про эстетику и терминал

Записывал я тут какое-то видео и заметил, что меня пиздец бесит такое поведение:

1. Открываю терминал
2. Запускаю к примеру sleep 10
3. Курсор перескакивает на новую строку


Но команда sleep еще не завершилась, а курсор уже выпрыгнул из штанов.

Хочу, чтобы курсор после запуска команды не перескакивал на новую строку, а ждал завершения команды.

Люблю я себе головняк создать на ровном месте. Поехали решать чо!

cursor_killer() {

echo -ne '\e[?25h'
trap 'echo -ne "\e[?25l"; trap DEBUG' DEBUG
}

PROMPT_COMMAND='cursor_killer'


Получилась такая упоротая и непонятная функция.

Что происходит?

Инициализируем переменную PROMPT_COMMAND. Это команда выполняется перед выводом строки приглашения (prompt).

Дальше делаем курсор видимым с помощью echo. А следом скрываем курсор перед выполнением каждой команды с помощью trap.

В trap мы установили обработчик для псевдо-сигнала DEBUG.

➡️ help trap

If a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.


\e[?25h = включает отображение курсора (h = "show")

\e[?25l = отключает отображение курсора (l = "low visibility" или "hide")

Получилось так:

1. Первая команда делает курсор видимым.
2. Вторая команда установит обработчик на сигнал DEBUG.
3. Обработчик скрывает курсор и сбрасывается обработчик для сигнала DEBUG в дефолт.

Сохраняем эту поделку в cur_killer.sh и запускаем когда нам это нужно. Либо делаем source cur_killer.sh.

Ну а чтобы эта штука оказалась тебе полезной, можешь написать свой отладчик bash скриптов.

К примеру будем выводить команду, перед её выполнением:

trap 'echo "RUN: $BASH_COMMAND"' DEBUG


Теперь позапускай sleep, ls или что-то еще, перед выполнением команды, на экран будет выводиться команда. К примеру так:

trap 'echo "RUN: $BASH_COMMAND"' DEBUG

ls

RUN: ls --color=auto -la


Вот такой фигнёй я порой занимаюсь, а не сериальчики смотрю.

Покеда! Вечером еще увидимся, декабрь прям шепчет на контент и интеграции. В январе уж отдохнем.

tags: #bash

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
1056
Пули закончатся раньше чем ноги

Откапал сегодня в одном коммерческом интерпрайзе такую конструкцию:

while [ $(pgrep process_name)>'0' ]  
do
sleep 5
done


Смотрю я в неё и понять не могу, а нахуя?

Давай разберемся что тут не так.

«[» = это аналог или синоним встроенной команды «test». Если не задавать оператор, то на пустой строке вернется FALSE. Ну и логично что вернется TRUE если срока не пустая.

«while» — ежу понятно, условный цикл. Будем вертеть на хуй, пока команда заданная в условие возвращаешь истину. В нашем случае эта команда «test».

«pgrep» — ищем процесс с именем process_name. Эта штука выводит на стандартный вывод PID процесса. Если процесс не найден, код возврата отличный от нуля и нуль в противном случае.

«$(command)» — Command запускается в подоболочке. Результат выполнения, подставляется в текущую позицию.

«>» — Перенаправляет результат работы команды в файл (в нашем случае файл 0). Существующий файл, перезаписывается. Несуществующий, будет создан.

Понял в чем дело? Нет? Давай дальше…

Вопрос — нахуя здесь «test»? Цикл и так является условным и сам проверяет что вернула команда. Получается избыточность.

Команда test — Предназначена для проверки типа файла и сравнения чисел и строк. Возвращает код возврата 0 (истина) или 1 (ложь) в зависимости от вычисления выражения. Выражения могут быть как унарными, так и бинарными.


Такое обычно херачат, либо по привычке, либо когда нужно быстрое решение, а времени на ресерч нет. Работает да и хрен с ним.

Вся эта конструкция могла бы выглядеть так:

while pgrep process_name &> /dev/null  
do
sleep 5
done


Цикл будет шуршать, пока команда pgrep отрабатывает без ошибок и находит процесс.

Вот такая вот романтика, на хую два бантика… Изучай!

tags: #bash

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
1072
Набрёл сегодня на мануал по установке ack, а там такое:

curl https://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 !#:3


ack — инструмент для поиска текста в файлах, который часто используется разработчиками как более удобная и современная альтернатива `grep`. Он написан на Perl и ориентирован на работу с кодом.


В строке, в конце есть непонятности: !#:3

Опять какая-то магия, а магию мы с тобой любим.

Давай разберемся.

В данном случае !#:3 — это конструкция, связанная с историей команд в оболочке Bash/Zsh.

! = Используется для доступа к истории команд.

Например, !! повторит последнюю команду, а !123 выполнит команду с номером 123 в истории.

# = Ссылается на текущую команду, которая в данный момент пишется.

Вместо доступа к уже выполненной команде из истории, мы ссылаемся на текст текущей строки.

:3 = Указывает, что нужно взять третий аргумент в текущей строке.

Соответственно:

:1 — первый аргумент
:2 — второй аргумент
:3 — третий аргумент


Как это работает?

Сначала выполняется команда curl, которая скачает файл ack-2.28-single-file и сохранит его в ~/bin/ack.

После этого, команда chmod изменяет права доступа для файла.

А !#:3 подставляет третий аргумент текущей команды, то есть ~/bin/ack.

И по итогу команда превращается в chmod 0755 ~/bin/ack

 curl http://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 ~/bin/ack


Вот и вся магия. Упорото? Аще!

А зачем это нужно?

- удобно для автоматизации и избежания дублирования ввода
- снижает вероятность ошибок, если накосячил в путях

Короче эта хреновина делает команду более динамичной и минимизирует рукоблудие.

Штука прикольная, как говорится — век живи, век учись.

🔥 Ну и с пятницей друзья! Еще пару недель и каникулы.

tags: #bash

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
12124
This media is not supported in your browser
VIEW IN TELEGRAM
🎄 Моя! 🎄

Ну чо, кто на ёлку богат уже? Кидайте в комменты ёлки и своё пятничное настроение, пиво там, вискарь или чо там у вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
5560