Философия PowerShell. Части 0,1 Вступление и первый командлет
Часть 0.
Что было до PowerShell?
В 1981 году вышел MS-DOS 1.0. с командным интерпретатором COMMAND.COM. Для автоматизации задач использовались пакетные файлы (.bat) — простые текстовые файлы с последовательностью консольных команд. Удивительный аскетизм командной строки на фоне POSIX совместимых систем где уже с 1979 года существовала оболочка Борна (sh).
Состояние рынка оболочек на момент выхода MS-DOS 1.0 (август 1981)
Что такое sh, csh
sh — Bourne Shell, основной скриптовый интерпретатор UNIX с 1977 года.
csh — C Shell, улучшенная оболочка с синтаксисом, похожим на C, и удобствами для интерактивной работы.
Эти оболочки поддерживали редиректы, пайпы, переменные, функции и условия — всё, что сделало UNIX мощным инструментом автоматизации.
Microsoft ориентировалась на дешёвые 16-битные IBM PC, которые имели мало памяти (обычно 64–256 КБ),не имели многозадачности и были предназначены для домашнего и офисного использования, а не серверов. UNIX был платным, требовал сложной архитектуры и опыта, а бухгалтеры и инженеры, не системные админы, им требовалась быстрая и простая ОС
Интерфейс DOS Вместо сложного sh представлял один файл command.com с скудным набором внутренних команд (dir, copy, del и т.p.) без функций, циклов и модулей.
Были и внешние команды — отдельные исполняемые файлы (.exe или .com). Примеры: FORMAT.COM, XCOPY.EXE, CHKDSK.EXE, EDIT.COM. Сценарии исполнения записывались в текстовый файл с расширением .bat (batch file)
Примеры конфигуарционных файлов:
AUTOEXEC.BAT
CONFIG.SYS
В Майкрософт было понятно, что DOS тупиковая ветвь и они почти сразу начали разрабатывать принциально новое ядро.
Ядро Windows NT(New Technology) впервые появилось с релизом операционной системы:
Windows NT 3.1 — 27 июля 1993 года
Разработка началась: в 1988 году под руководством Дейва Катлера (бывшего инженера DEC, создателя VMS) с целью создать полностью новую, защищённую, переносимую и многозадачную ОС, не совместимую с MS-DOS на уровне ядра.
NT 3.1 — называлась так, чтобы подчеркнуть совместимость с Windows 3.1 на уровне интерфейса, но была совершенно новой архитектурой.
Что принесло ядро NT:
Линейка NT:
Ядро NT было хорошим, годным продуктом от Майкрософт, если бы не одно большое «НО!»
Но средствам автоматизации и администрирования не уделялось должного внимание вплоть до 2002 года.
Microsoft использовала совершенно разные подходы, стратегии и инструменты для администрирования. Всё это было разрозненным, часто GUI-ориентированным и не всегда автоматизируемым.
Список некоторых инструментов:
Инструменты автоматизации
VBScript-файлы (*.vbs) для администрирования пользователей, сетей, принтеров и служб. Привет✋ вирус "ILOVEYOU"
WMIC — командный интерфейс к WMI (например: wmic process list brief).
.cmd скрипты с вызовами net, sc, reg, wmic, и т.д.
Windows Scripting Host (WSH)
Впервые появился в Windows 98, активно использовался в Windows 2000 и XP.
Позволял выполнять VBScript и JScript-файлы из командной строки:
> Set objShell = WScript.CreateObject(«WScript.Shell»)
> objShell.Run «notepad.exe»
HTA (HTML Applications)
Чистое шаманство. Если кратко, то это приложения, написанные на HTML и скриптах (чаще всего VBScript или JScript), которые запускались с полноценным GUI и имели полный доступ к Windows через WSH — без ограничений, как обычные сайты в браузере.
Часть 1.
Только в 2002 году в компании сформулировался проект Monad , который позже вылился в powershell:
Начало разработки: ориентировочно в 2002 году
Публичное анонсирование: 2003 год, как «Monad Shell»
Первые бета-версии: появились к 2005 году
Финальный релиз (PowerShell 1.0): ноябрь 2006 года
Автором и главным архитектором проекта Monad / PowerShell является Джеффри Сновер (Jeffrey Snover)
Параллельно шла разработка фреймворка .NET и powershell был в нее глубоко интегрирован, в следующих частях я покажу примеры
А теперь — самое главное!
Главное преимущество PowerShell по сравнению с классическими командными оболочками — это то, что он работает с объектами, а не с текстом. Когда вы выполняете команду, она возвращает вам не просто текст, а структурированный объект (или коллекцию объектов), у которого есть четко определенные свойства (Properties) и методы (Methods).
Смотрите, как PowerShell элегантно решает задачу благодаря работе с объектами
Как было: dir и ручной парсинг
В CMD (и в старом COMMAND.COM, и в cmd.exe) команда dir возвращает результат работы как обычный текст. Пример вывода:
Допустим, вы хотите извлечь имя файла и размер каждого файла. Вам придётся парсить строки вручную:
for /f "tokens=5,6" %a in ('dir ^| findstr /R "[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]"') do @Echo %a %b
Это страшно сложно читается, зависит от локали, формата даты, шрифта. И ломается при пробелах в названиях
PowerShell: объекты вместо текста
Простой и читаемый пример:
> Get-ChildItem | Select-Object Name, Length
Результат:
Get-ChildItem возвращает массив объектов файлов/папок
Select-Object позволяет легко получить нужные свойства
Что на самом деле возвращает Get-ChildItem?
> $item = Get-ChildItem -Path .\11.md
> $item | Get-Member
Результат:
PowerShell возвращает объекты типа System.IO.FileInfo, у которых есть:
Свойства (Name, Length, CreationTime, Extension, …)
Методы (Delete(), CopyTo(), MoveTo() и т.д.)
Вы работаете с полноценными объектами, а не со строками.
Синтаксис «Глагол-Существительное»:
PowerShell использует строгий и логичный синтаксис команд:
Глагол-Существительное (Verb-Noun)
Существительное
Даже если вы не знаете точной команды, вы можете предположить её по смыслу — и почти всегда угадаете.
Командлет Get-Help — ваш главный помощник.
Получим справку о самой справке:
> Get-Help Get-Help
Получим базовую справку о команде для работы с процессами:
> Get-Help Get-Process
Посмотрим примеры использования этой команды:
> Get-Help Get-Process -Examples
Если файл `help` не найден в системе — получим такое сообщение:
Решение:
> Update-Help
Для одного языка:
> Update-Help -UICulture en-US
`-Examples` это невероятно полезный параметр, который часто дает готовые решения для ваших задач.
Получим максимально подробную информацию о команде:
> Get-Help Get-Process -FullВ следующей части: конвеер или цепочка команд (PipeLines)
Полезно? Подпишись.
Понравилось — ставь «+»
Удачи! 🚀
Повышение производительности с использованием LVM Striping
В области управления хранилищами приоритетом является достижение оптимальной производительности дисков. Стремление к более быстрому доступу к данным, уменьшению задержек и повышению количества операций ввода-вывода (I/O) и пропускной способности привело к использованию передовых техник. Одной из таких является LVM Striping (полосование), мощная функция менеджера логических томов (LVM), которая существенно повышает производительность дисковых томов.
Линейный (Linear) LVM против LVM Striping:
1.1 — Линейный LVM:
Линейная конфигурация, являющаяся стандартным подходом для LVM, подразумевает последовательное добавление нескольких физических томов (дисков) в группу томов (Volume Group). Данные последовательно записываются на эти диски: сначала заполняется один диск, затем следующий, и так далее.
Хотя линейный LVM прост и удобен для расширения хранилищ, он не полностью раскрывает потенциал параллельной обработки и увеличения общей пропускной способности.
1.2 — LVM Striping (Полосование):
Напротив, LVM Striping представляет собой более продвинутый подход, при котором данные распределяются одновременно по нескольким физическим томам. Это создает логический том, охватывающий сразу несколько дисков, что позволяет осуществлять параллельные операции чтения и записи. В результате значительно повышается производительность, что делает LVM Striping особенно привлекательным для систем с высоким уровнем нагрузки ввода-вывода.
Процесс создания полос:
Создание полос:
Данные разделяются на сегменты («полосы»).
Каждая полоса записывается на отдельный диск в составе логического тома.
2. Параллельная запись полос:
Полосы записываются параллельно на несколько физических томов (дисков).
3. Равномерное распределение:
Полосы равномерно распределены по дискам, предотвращая появление узкого места (bottleneck).
4. Увеличение IOPS и пропускной способности:
Благодаря параллельной записи полос LVM Striping существенно увеличивает общую производительность и пропускную способность логического тома.
1.3 — Пример использования:
Рассмотрим пример с тремя дисками, каждый из которых обеспечивает пропускную способность 125 МБ/с:
При использовании LVM Striping суммарная производительность составит 375 МБ/с.
В случае же с линейным LVM, производительность останется равной 125 МБ/с, вне зависимости от количества добавленных дисков.
Настройка Linear LVM и Striping LVM:
В этом разделе мы создадим две группы томов (Volume Groups, VG): одну линейную, вторую — с полосованием, каждая с использованием трёх дисков. Затем создадим логические тома (Logical Volumes, LV), отформатируем и смонтируем их.
2.1 — Исходные данные:
Сервер: AWS EC2 instance типа m4.10xlarge
EBS-диски: 6 штук по 20ГБ (тип GP3, 3000 IOPS, 125MiB/s пропускная способность каждый)
ОС: Amazon Linux 2
Просмотр подключенных дисков:
# lsblk
2.2 — Создание групп томов (VG):
Создадим две группы томов:
# vgcreate vg_linear /dev/sdb /dev/sdc /dev/sdd
# vgcreate vg_striping /dev/sde /dev/sdf /dev/sdg
# vgs
2.3 — Создание линейного логического тома (Linear LVM):
# lvcreate -l 100%FREE -n lv_linear vg_linear
Параметры:
-l 100%FREE — задействовать весь доступный объем VG.
-n lv_linear — имя логического тома.
vg_linear — целевая группа томов.
2.4 — Создание логического тома с полосованием (Striping LVM):
# lvcreate -l 100%FREE -i 3 -I 64k -n lv_striping vg_striping
Параметры:
-l 100%FREE — задействовать весь объем VG.
-i 3 — количество полос (равно числу дисков).
-I 64k — размер полосы.
-n lv_striping — имя логического тома.
vg_striping — целевая группа томов.
2.5 — Проверка созданных LV:
Проверка линейного LV:
# lvdisplay -m /dev/vg_linear/lv_linear
Проверка LV с полосованием:
# lvdisplay -m /dev/vg_striping/lv_striping
Здесь мы можем увидеть различные детали наших настроек.
2.6 — Форматирование и монтирование LV:
# mkfs.xfs /dev/vg_linear/lv_linear
# mkfs.xfs /dev/vg_striping/lv_striping
# mkdir /mnt/linear
# mkdir /mnt/striping
# mount /dev/vg_linear/lv_linear /mnt/linear/
# mount /dev/vg_striping/lv_striping /mnt/striping/
# df -h
LV успешно смонтированы.
3 — Тестирование производительности LV (benchmark):
Для тестирования используем инструмент fio:
# yum install fio -y
3.1 — Тестирование линейного LV:
Чтобы сравнить LV, мы будем использовать файл конфигурации FIO, который поможет нам генерировать трафик на 400м:
# cat fio_config-1.fio
[global]
ioengine=libaio
runtime=60
time_based
direct=1
rw=write
size=10G
bs=512K
rate=400M
numjobs=16
[job1]
filename=/mnt/linear/testfile
Запуск тестирования с созданным конфигом:
# fio fio_config-1.fio
Одновременно с этим в отдельном терминале запустим iostat, чтобы контролировать использование дисков:
# iostat -xdmt 2
Видим, что используется только один диск xvdb со скоростью 125 МБ/с.
Ту же картину нам демонстрирует и fio:
Операции записи были выполнены исключительно на одном диске.
3.2 — Тестирование LV с полосованием:
Теперь снова запустим fio, но изменим параметр filename в файле конфигурации:
filename=/mnt/striping/testfile
Запускаем iostat:
Все три диска работают параллельно, суммарная скорость равна 375 МБ/с (125 x 3).
Аналогичную картинку нам демонстрирует и fio:
Вывод:
LVM Striping является мощным решением для организаций, которые хотят максимально эффективно использовать ресурсы своих хранилищ. Распределяя данные параллельно на несколько дисков, LVM Striping не только значительно увеличивает производительность, но и обеспечивает масштабируемость и гибкость управления хранилищами.
Используйте LVM Striping, чтобы раскрыть потенциал параллельной обработки данных и вывести производительность дисковой подсистемы на новый уровень.
Ответ на пост «Типичный Гриша»2
Опять шутки про критический релиз перед выходными.
Да что с вами не так, люди⁉️
Всю жизнь работал в финансовых компаниях и банках, в разных странах. Не удаленно, жопкой на передовой.
Все ❗серьезные релизы ТОЛЬКО в пятницу вечером, а желательно, чтобы в понедельник праздник.Если что-то пойдет не так, а по женскому половому, времени до раннего утра понедельника около 54 часов!
Какие, блджад, релизы в другое время? Только если решил отправиться путем самурая - до харакири.
Ответ на пост «Разоблачаем "несбывшиеся прогнозы" К. Маркса. Про вытеснение независимых производителей»1
Назови хоть одну монополию
Например, свободного рынка труда давно нет, он монополизирован покупателем – работодателем (и ему же принадлежит государство). Смешно даже думать, что договор работника и работодателя – это договор двух равноправных сторон: по форме это вроде бы так, по факту так может думать лишь наивный, мягко говоря, человек.
Самая свободная и самая "честная" (насколько она вообще может быть честной) конкуренция всегда приводит к монополии.
И, кстати, монополия - это не всегда один игрок на рынке (хотя бывает и такое) - для монопольного взвинчивания цен достаточно, что бы осталось всего несколько игроков - они-то и поделят рынок ("братва - не стреляйте друг в друга - нам нечего больше делить…").
Монополия контролирует всю цепочку производства - от добычи сырья, до реализации готовой продукции.
Самые заметные монополи сейчас - нефтегазовые, такие как Shell, ExxonMobil, Eni, StatOil, Газпром.
Ответ на пост «Конвертеры»1
Эта команда используется в Unix-подобных операционных системах, таких как Linux или macOS, для поиска файлов с расширением .flac и их конвертации в формат .mp3 с использованием утилиты ffmpeg.
По частям:
find . -name "*.flac":
find — это команда для поиска файлов и каталогов.
. — указывает на текущий каталог.
-name "*.flac" — ищет файлы, имена которых заканчиваются на .flac.
-exec ffmpeg -i {} -ab 320k {}.mp3 \;:
-exec — это опция команды find, которая позволяет выполнять другую команду для каждого найденного файла.
ffmpeg — это утилита для обработки мультимедийных файлов.
-i {} — указывает ffmpeg использовать найденный файл ({} заменяется на имя найденного файла) в качестве входного.
-ab 320k — устанавливает битрейт аудио на 320 кбит/с.
{}.mp3 — указывает ffmpeg сохранить выходной файл с расширением .mp3.
\; — завершает команду -exec.
Применение
Эту команду можно использовать в терминале Unix-подобной операционной системы. Она будет полезна, если у вас есть множество файлов .flac, которые вы хотите конвертировать в формат .mp3 с битрейтом 320 кбит/с.
Пример использования
Откройте терминал.
Перейдите в каталог, содержащий ваши .flac файлы, с помощью команды cd.
Выполните команду:
find . -name "*.flac" -exec ffmpeg -i {} -ab 320k {}.mp3 \;
Важно
Убедитесь, что у вас установлена утилита ffmpeg. Если она не установлена, вы можете установить её с помощью пакетного менеджера вашей операционной системы (например, apt для Debian/Ubuntu, brew для macOS и т.д.).
Команда создаст файлы .mp3 в том же каталоге, где находятся исходные .flac файлы. Если вы хотите сохранить их в другом месте, вам нужно будет изменить путь в команде.
Пример установки ffmpeg
Для Debian/Ubuntu:
sudo apt update sudo apt install ffmpeg
Для macOS (с использованием Homebrew):
brew install ffmpeg
Эта команда автоматизирует процесс конвертации, что может сэкономить много времени, если у вас много файлов для обработки.