Pull to refresh
0
0
Сергей @stepanof23

it'шник

Send message

Linux pipes tips & tricks

Reading time8 min
Views184K

Pipe — что это?


Pipe (конвеер) – это однонаправленный канал межпроцессного взаимодействия. Термин был придуман Дугласом Макилроем для командной оболочки Unix и назван по аналогии с трубопроводом. Конвейеры чаще всего используются в shell-скриптах для связи нескольких команд путем перенаправления вывода одной команды (stdout) на вход (stdin) последующей, используя символ конвеера ‘|’:
cmd1 | cmd2 | .... | cmdN

Например:
$ grep -i “error” ./log | wc -l
43

grep выполняет регистронезависимый поиск строки “error” в файле log, но результат поиска не выводится на экран, а перенаправляется на вход (stdin) команды wc, которая в свою очередь выполняет подсчет количества строк.

Логика


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

Размер буфера начиная с ядра версии 2.6.11 составляет 65536 байт (64Кб) и равен странице памяти в более старых ядрах. При попытке чтения из пустого буфера процесс чтения блокируется до появления данных. Аналогично при попытке записи в заполненный буфер процесс записи будет заблокирован до освобождения необходимого места.
Важно, что несмотря на то, что конвейер оперирует файловыми дескрипторами потоков ввода/вывода, все операции выполняются в памяти, без нагрузки на диск.
Вся информация, приведенная ниже, касается оболочки bash-4.2 и ядра 3.10.10.

Простой дебаг


Утилита strace позволяет отследить системные вызовы в процессе выполнения программы:
$ strace -f bash -c ‘/bin/echo foo | grep bar’
....
getpid() = 13726                   <– PID основного процесса
...
pipe([3,  4])                       <– системный вызов для создания конвеера
....
clone(....) = 13727                <– подпроцесс для первой команды конвеера (echo)
...
[pid 13727] execve("/bin/echo",  ["/bin/echo",  "foo"],  [/* 61 vars */] 
.....
[pid 13726] clone(....) = 13728    <– подпроцесс для второй команды (grep) создается так же основным процессом
...
[pid 13728] stat("/home/aikikode/bin/grep",   
...
Видно, что для создания конвеера используется системный вызов pipe(), а также, что оба процесса выполняются параллельно в разных потоках.
Читать дальше →
Total votes 105: ↑97 and ↓8+89
Comments36

F-строки в Python мощнее, чем можно подумать

Reading time5 min
Views135K

Форматированные строковые литералы, которые ещё называют f-строками (f-strings), появились довольно давно, в Python 3.6. Поэтому все знают о том, что это такое, и о том, как ими пользоваться. Правда, f-строки обладают кое-какими полезными возможностями, некоторыми особенностями, о которых кто-нибудь может и не знать. Разберёмся с некоторыми интересными возможностями f-строк, которые могут оказаться очень кстати в повседневной работе Python-программиста.

Читать далее
Total votes 73: ↑71 and ↓2+94
Comments25

Разработчик с мозгом груга

Reading time14 min
Views90K

Введение


это сборник мыслей о разработке программ собранный разработчиком с мозгом груга

разработчик с мозгом груга не очень умный, но разработчик с мозгом груга программирует много лет и научился кое чему, хоть всё равно часто запутывается

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

разработчиков с большим мозгом много, некоторым страница не понравится, скривят кислая рожа

Ещё больше-больше ДУМАЮТ, что они разработчики с большим мозгом и им она тоже не понравится

(груг раньше думал груг с большим мозгом, но потом всё понял)

это ладно!

груг надеется, что тебе понравится читать и может ты научишься на много-много ошибка груг совершил за длинную жизнь программиста
Читать дальше →
Total votes 223: ↑197 and ↓26+209
Comments81

Что мы действительно (не)знаем о наличии сознания у сверхбольших нейросетей?

Reading time28 min
Views54K
image

В последнее время чаще стали появляется новости о том, что тот или иной эксперт в области ИИ заявил про появление у машины сознания. То Илья Суцкевер, директор по науке в OpenAI напишет о том, что «может быть, сегодняшние большие нейронные сети немножко обладают сознанием». А то и вовсе инженер Гугла Леймон Блейк найдет у искусственного интеллекта LaMDA разум и сознание и выложит в доказательство диалоги с ним. Резонанс последнего эпизода вообще большой — после объявления о том, что Блека отстранили от работы, а он в свою очередь собирается нанять для ИИ адвоката, разные конспирологические версии появились даже в комментариях на Хабре. Ну и чего бы им не появиться, если реально серьезный разбор вопроса о «сознании» нейросети с технической точки зрения найти трудно. Кроме того, что «комиссия по этике Гугл рассмотрела вопрос и решила, что ИИ не обладает сознанием», да еще ряда давно известных общефилософских размышлений ничего особо и нет. Поэтому, как человек потративший по роду работы более сотни часов своей жизни на общение с моделями такого рода и поиску в них проблем, я решил, что будет полезно восполнить пробел более подробным обзором вопроса. Завесу мистической тайны сознания нейросетей приподнимаем под катом )
Читать дальше →
Total votes 106: ↑103 and ↓3+131
Comments230

Что же такое GitOps? Его свойства и недостатки

Reading time12 min
Views36K


Полтора года назад мы переводили пару статей о том, что такое GitOps. С тех пор этот термин (и сам подход) набрал ещё большую популярность в среде DevOps-инженеров, особенно эксплуатирующих Kubernetes. В то же время у меня появилось свое видение того, какие у него проблемы и каким он должен быть. Поделиться этими мыслями я решил в получасовом видео — смотрите его либо читайте основную выжимку, если предпочитаете текст:
Total votes 43: ↑43 and ↓0+43
Comments16

Как настроить Kubernetes кластер на Vagrant VM

Reading time4 min
Views8.2K

В этом учебном пособии Kubernetes я рассмотрел пошаговое руководство по настройке Kubernetes кластера на Vagrant. Это многонодовая настройка Kubernetes с использованием kubeadm.

Vagrant - это отличная утилита для настройки виртуальных машин на вашей локальной рабочей станции.

Это руководство в первую очередь посвящено автоматизированной настройке Kubernetes с использованием скриптов Vagrantfile и  shell scripts. 

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments38

30 команд Git, необходимых для освоения интерфейса командной строки Git

Reading time9 min
Views440K

Git — самая популярная в мире распределённая система контроля версий. Линус Торвальдс, разработчик ядра ОС Linux, создал этот инструмент ещё в 2005 году, а сегодня Git активно поддерживается как проект с открытым исходным кодом. Огромное количество открытых и коммерческих проектов используют Git для контроля версий.

В данной статье перечисляются самые основные команды, которые следует знать разработчику, чтобы освоить управление репозиториями GitHub на высоком уровне. Ознакомиться с ними будет полезно как новичкам, так и опытным разработчикам.
Читать дальше →
Total votes 64: ↑49 and ↓15+54
Comments63

Топ 25 инструментов DevOps 2021

Reading time16 min
Views24K


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


В ходе опроса, проведенного аналитическим отделом Harvard Business Review, 48% респондентов заявили, что их компания полностью полагается на DevOps в контексте повышения эффективности. А более 80% представителей индустрии программного обеспечения заявили, что DevOps значительно повышает ценность их работы в том или ином виде.


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


2021 год станет важным годом для раскрытия потенциала DevOps. Он охватывает как команды разработчиков, Ops, IT и отделы обеспечения безопасности, так и различные этапы разработки программного обеспечения. Именно поэтому для каждой сферы существует множество инструментов на любой вкус и цвет.


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

Читать дальше →
Total votes 26: ↑12 and ↓14-2
Comments7

Метаинформация, возможности файловых систем и децентрализованные сети будущего

Reading time16 min
Views11K

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

Читать далее
Total votes 10: ↑8 and ↓2+7
Comments27

Не повторяйте: мои инфраструктурные ошибки

Reading time7 min
Views16K

По мере своего карьерного роста я все чаще и чаще испытываю чувство дежа вю. Во время личной или деловой встречи моему собеседнику достаточно упомянуть какой-то малозначительный факт — и я сразу же вспоминаю о событии, которое произошло со мной несколько лет (или даже «работ») назад. Чаще всего это касается неверно принятых мною решений, последствия которых пришлось расхлебывать долгие месяцы. Такие флешбеки настолько сильны, что я едва сдерживаюсь, чтобы не закричать человеку в лицо: «Ни в коем случае не делай X!». Почему сдерживаюсь? Всё просто: моих коллег не было в том месте и в то время и они попросту не поймут, каких ужасов я натерпелся в подобной же ситуации.

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

Читать далее
Total votes 22: ↑19 and ↓3+19
Comments18

Как мы построили систему управления проектами на базе Azure DevOps

Reading time6 min
Views5.9K

За 15 лет работы мы встречались с различными трекерами: от экзотических FogBugz и Mantiss до современных, которые активно использовали до 2019 года - TFS, Jira, Redmine, даже GitLab. В прошлом году мы за несколько месяцев перевели 200 человек на работу с Azure DevOps. В этой статье рассказываем, как это произошло.

Четыре трекера - это четыре разных процесса, шаблона проектов, системы сборки и развертывания, которые мы поддерживали. Путь к общему трекеру начался с эксперимента - перевести в Azure DevOps одну из команд из "не майкрософт" стека. Так совпало, что эксперимент прошел практически перед уходом на карантин из-за пандемии, но это нам не помешало. И меньше чем через год все наши инженеры переехали в Azure DevOps.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments0

Почему твоя мама всё ещё не прогает?

Reading time11 min
Views124K

Случай с бомжом

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

Обычно вместо денег я даю попрошайкам-мужчинам телефон отдела кадров одной курьерской компании, которая постоянно нуждается в сотрудниках. Но у него не было ног… Тогда я подумал: «Чувак, у тебя полным полно времени. Работа за компом — лучшее, что может случиться в твоей жизни. Купон со скидкой на курс по PHP — вот, что должны были положить тебе на койку туда, где раньше были ноги, когда ты очнулся после ампутации».

Я решил предложить ему изучить программирование. В его положении он должен был быть чертовски мотивирован. Но получится ли у него?

Читать далее
Total votes 247: ↑219 and ↓28+248
Comments468

Использование общедоступных источников информации для деанонимизации криптовалютных кошельков

Reading time4 min
Views11K

В данной статье мы рассмотрим как, а самое главное с помощью чего мы можем получить информацию о владельце того или иного криптокошелька.

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

Читать далее
Total votes 9: ↑3 and ↓6-2
Comments4

Автоматизация тестирования «с нуля» (нетехническая сторона вопроса)

Reading time5 min
Views22K

Есть множество статей про технологии и те или иные подходы к автоматизации. Но почему-то нет статей про «обратную сторону» автоматизации. Как вообще всё зарождается на проекте? И как это «всё» организовать?

Читаю дальше
Total votes 15: ↑15 and ↓0+15
Comments8

Как писать bash-скрипты надежно и безопасно: минимальный шаблон

Reading time8 min
Views68K

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

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

Читать далее
Total votes 109: ↑109 and ↓0+109
Comments27

K8S для начинающих. Первая часть

Reading time10 min
Views209K

Технологический прогресс не стоит на месте, особенно если это касается области IT. Еще в 2014 году, когда Google открыл исходный код проекта Kubernetes, который вобрал в себя лучшее из Borg и Omega - внутренних систем Google, его мало кто знал и использовал. Но прошло 7 лет и K8S (он же Kubernetes) стал успешным open-source проектом, который используется по всему миру. В большинстве компаний инфраструктура построена на K8S - от маленьких проектов до огромных кластеров и облаков, которые обеспечивают бесперебойную доступность сервисов. Давайте коснемся Kubernetes и расскажем, как им пользоваться на практике. Но сначала надо спросить, а что такое этот ваш Kubernetes и для чего он собственно нужен. Подойдет ли он для ваших проектов.

Читать далее
Total votes 16: ↑15 and ↓1+15
Comments1

Практические рекомендации по работе с Docker для Python-разработчиков

Reading time28 min
Views105K

Прим. Wunder Fund: в этой длииинной статье вы найдете ряд полезных советов по работе с Docker, как общего характера, так и Python-специфичных. Хоть мы и давно используем Docker в работе, про некоторые советы мы подумали "а что, так можно было?". Советуем вначале пролистать статью, и отметить штуки, которые покажутся актуальными для вашей текущей ситуации.

Читать далее
Total votes 53: ↑52 and ↓1+65
Comments8

ХPath: что нужно делать, а что нет

Reading time5 min
Views18K

Привет, Хабр! В прошлый раз мы уже поднимали тему написания селекторов на XPath для автоматизации тестирования веб-сервисов. Сегодня мне хотелось бы поговорить о практиках работы с XPath. Этот пост будет том, какие приемы хорошо работают, а каких вещей лучше избегать, если вы так же как и мы сделали выбор в пользу XPath. Всех заинтересованных прошу под кат, а если у вас есть свои уже проверенные временем ноу-хау, давайте делиться ими в комментариях.

Читать далее
Total votes 21: ↑20 and ↓1+23
Comments12

«У agile-самурая нет цели, только Путь». Как я пришел в IT после 35

Reading time8 min
Views16K

Я всегда хотел заниматься программированием, но мой путь в IT оказался очень длинным. В маленьком северном городе сфера IT была не развита от слова «совсем» и выбор был сделан в пользу военной карьеры. Так пронеслись 15 лет службы на Севере. Я понимал, что жду пенсии, чтобы заняться по-настоящему любимым делом. Поэтому за 5 лет перед увольнением стал готовиться к «новой жизни», самостоятельно учиться языкам программирования.

Тогда я просто верил, что смогу в свои «около 40» лет измениться и найти работу своей мечты. Но настоящие испытания были еще впереди…

Читать далее
Total votes 19: ↑14 and ↓5+10
Comments10

Hello, World! Глубокое погружение в Терминалы

Reading time24 min
Views93K


На написание данной статьи меня вдохновила статья об анализе Сишного printf. Однако, там был пропущен момент о том, какой путь проходят данные после того, как они попадают в терминальное устройство. В данной статье я хочу исправить этот недочет и проанализировать путь данных в терминале. Также мы разберемся, чем отличается Terminal от Shell, что такое Pseudoterminal, как работают эмуляторы терминалов и многое другое.

Читать дальше →
Total votes 110: ↑110 and ↓0+110
Comments44

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Specialist
Junior
Git
Linux
Python
SQL
Database
Bash
Docker
CI/CD
C++
C