Рубрика «системное администрирование»

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

Заметки о Unix: сильные и слабые стороны errno в традиционных Unix-окружениях - 1

Сильной стороной errno является тот факт, что этот интерфейс представляет собой простейший механизм, способный возвращать несколько значений из системных вызовов C, в которых нет непосредственной поддержки возврата нескольких значений (особенно — в ранних вариантах C). Использование глобальной переменной для «возврата» второго значения — это практически идеал того, что можно сделать в обычном C, если только не планировать передачу из C-библиотеки указателя на каждый системный вызов и функцию, которые собираются возвращать значение errno (при таком подходе придётся, например, интенсивно пользоваться stdio). Постоянная передача подобного указателя приводит не только к ухудшению внешнего вида кода. Такой подход увеличивает объём кода, и, из-за использования дополнительного параметра, приводит к повышению нагрузки на стек (или на регистры).
Читать полностью »

В материале о том, что в наши дни find, как правило, не нуждается в xargs, я отметил, что в конструкции '-exec ... {} +' скобки ('{}') (для имён файлов, генерируемых find) должны находиться в конце команды. В комментарии к той публикации анонимный читатель сказал, что это неприменимо к -exec-версии, которая запускает отдельную команду для каждого имени файла. В результате можно поместить заменяемое имя файла в любом месте команды. Это, как оказалось, относится не только к GNU Find, являясь стандартной возможностью, и я полагаю, что этого даже требует Single Unix Specification (SUS) для find.

Заметки о Unix: ограничения опции -exec команды find и стремление к удобству при реализации команд - 1
Читать полностью »

Сегодня я хочу рассказать о том, как командные оболочки zsh и fish обнаруживают пропущенные символы перевода строки и выделяют соответствующие места в выводе программ, делая это в условиях, когда модель программирования Unix не даёт им возможности исследовать то, что выводят программы.

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

Простой, но умный ход, применяемый в zsh и fish для решения проблемы пропущенного символа перевода строки - 1

То, что приглашение (почти) всегда выводится в известном всем месте, в самой левой колонке следующей строки, объясняется тем фактом, что Unix-программы единодушно сотрудничают в деле размещения курсора именно в этой позиции после завершения их работы.
Читать полностью »

На днях мне пришло сообщение от портала Госуслуги с предложением поучаствовать в тестировании дистанционного электронного голосования (ДЭГ). Стало интересно, начал гуглить и поисковик сразу же выдал ссылку на хабровскую статью «Обзор системы дистанционного электронного голосования ЦИК РФ». Ознакомился…и…после прочтения, испытал противоречивые чувства, которые вылились в эту статью, созданную на базе идеи, описанной мной еще в 2018 году на сайте change.org.

Читать полностью »

После года разработки вышел эмулятор QEMU 6.0 - 1

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

Пример — выполнение приложения для ARM на ПК с процессором x86. Благодаря особенностям эмулятора приложение в изолированном окружении выполняется почти с той же эффективностью, что и в нативном окружении. Достигается это, в частности, за счет прямого выполнения инструкций на процессоре, а также за счет применения гипервизора Xen или модуля KVM. Сейчас эмулятор поддерживает 14 аппаратных архитектур и может эмулировать около 400 разных устройств. За год разработчики внесли свыше 3 тысяч изменений от 268 разработчиков.
Читать полностью »

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

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

Обман обманщиков: форк-бомба нового уровня - 1

Часто это принимает форму грубо замаскированных команд, вроде той, что показана ниже. Её запуск приведёт к выполнению в текущей директории команды rm -rf *, которая всё удалит. Вот эта команда:

$(echo cm0gLXJmICoK | base64 -d)

Много лет назад я наткнулся на людей, которые играли в такие игры, и решил их проучить.
Читать полностью »

werf vs. Helm: корректно ли их вообще сравнивать? - 1

Эта статья — развернутый ответ на вопрос, который нам периодически задают: чем werf отличается от Helm? На первый взгляд можно предположить, что задача у них примерно одинаковая: автоматизировать деплой приложений в Kubernetes. Но всё, конечно, немного сложнее…

Роль в CI/CD

Если упрощенно показать утилиты в рамках полного цикла CI/CD, то их функции значительно отличаются:

Почему -usr-bin-test на 4Кб меньше, чем -usr-bin-[? - 1

Пользователь с Reddit под ником mathisweirdaf поделился интересными наблюдениями:

 $ ls -lh /usr/bin/{test,[}
-rwxr-xr-x 1 root root 59K  Sep  5  2019 '/usr/bin/['
-rwxr-xr-x 1 root root 55K  Sep  5  2019  /usr/bin/test

[ и test должны быть псевдонимами друг друга, и все же между исполняющими их файлами из GNU coreutils наблюдается разница в 4Кб. Почему?Читать полностью »

tl;dr: форматы файлов Netpbm позволяют легко выводить пиксели, используя только текстовый ввод-вывод.

Генерация изображений с помощью echo-printf в 5 строчках кода без библиотек и заголовков - 1

Вот весь генерирующий это изображение скрипт bash без зависимостей:

#!/bin/bash
exec > my_image.ppm    # Все инструкции echo будут писать в этот файл
echo "P3 250 250 255"  # формат, ширина, высота, максимальное значение цвета
for ((y=0; y<250; y++)) {
  for ((x=0; x<250; x++)) {
    echo "$((x^y)) $((x^y)) $((x|y))" # r, g, b
  }
}

Читать полностью »

Сброс пароля и базовая настройка Cisco 1941 - 1

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

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js