IT-инфраструктура • инструкции • практикаПоиск по сайту

Серверы и системное администрирование

Найти материал →

Uutils coreutils 0.11: ускорение утилит и совместимость с Gnu выше 95%

uutils Coreutils 0.11: ускорение утилит, понятные ошибки и совместимость с GNU выше 95%

Проект uutils Coreutils выпустил версию 0.11 - масштабное обновление кроссплатформенной реализации стандартных Unix-утилит, написанной на Rust. Разработчики сосредоточились сразу на нескольких направлениях: производительности, качестве диагностических сообщений, безопасности файловых операций и совместимости с GNU Coreutils.

uutils Coreutils позиционируется как современная альтернатива GNU Coreutils, способная работать не только в Linux, но также в macOS и Windows. Использование Rust позволяет снизить риски, связанные с ошибками управления памятью, а единая кодовая база упрощает перенос утилит между операционными системами.

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

Улучшенные сообщения уже появились в chmod, mkdir, install, tr, sort, cut, head, tail, split, dd, stat, join, ls, df и du. В отдельных случаях программа также предлагает краткую подсказку с правильным синтаксисом. При этом разработчики сохранили совместимость с локализованными сообщениями, что особенно важно для пользователей неанглоязычных систем.

Производительность официальных сборок для Linux, macOS и Windows была улучшена благодаря Profile-Guided Optimization. По оценке команды проекта, применение PGO способно дать прирост до 31% в зависимости от сценария использования и конкретной утилиты.

Дополнительные оптимизации получили отдельные команды. Например, cp в некоторых операциях теперь открывает файлы только один раз, что обеспечило ускорение примерно на 32,93%. Если операция reflink не срабатывает и требуется обычное копирование, программа может повторно использовать уже открытый дескриптор файла назначения. Это позволяет сократить число системных вызовов и лишних операций с файловой системой.

Существенно быстрее стала и утилита join. Согласно тестам проекта, при обработке парных входных данных она работает примерно в 1,37 раза быстрее прежней версии, а в одном из сценариев превосходит GNU join приблизительно в 2,5 раза. Оптимизации также затронули dd, tac, od, ptx, nl, tail, expand, unexpand, numfmt и sort. В этих командах уменьшено количество выделений памяти, копирований данных и обращений к ядру.

Команда uutils отдельно подчеркивает: если отдельная утилита заметно уступает аналогу из GNU Coreutils, это рассматривается как ошибка, которую необходимо исправлять. Такой подход показывает, что проект ориентирован не только на функциональную совместимость, но и на практическую применимость в скриптах, сборочных системах и серверной инфраструктуре.

Важным результатом стал рост совместимости с GNU. В версии 0.11 проект успешно проходит 653 теста из набора GNU против 645 в релизе 0.10. Количество проваленных проверок сократилось с 28 до 22, а ошибки самого тестового набора уменьшились с одной до нуля. Итоговый показатель совместимости вырос с 94,44% до 95,33%.

Разработчики добавили и ряд новых параметров командной строки, совместимых с GNU. Среди них - uname -A и --all-labeled, ключ -F и режим --whitespace-delimited для cut, а также дополнительные параметры и псевдонимы для pr.

Помимо новых опций, была исправлена масса поведенческих расхождений в pr, numfmt, uniq, truncate, paste, join, id, mkdir, more, fold, sort, stat, od и date. Некоторые команды теперь используют реальные сообщения операционной системы вместо сокращённых или самодельных формулировок. Это особенно полезно при диагностике проблем с правами доступа, отсутствующими файлами и ограничениями файловой системы.

Отдельное внимание уделили безопасности. cp и mv получили операции на основе файловых дескрипторов, что помогает противостоять атакам типа TOCTOU при работе с расширенными атрибутами. rm больше не следует за символической ссылкой, если во время рекурсивного удаления она была подменена в обрабатываемом пути.

Команда chmod стала безопаснее при рекурсивной обработке каталогов и символических ссылок. В свою очередь, cp теперь избегает изменения разрешений через симлинк, установленный вместо целевого файла. Эти исправления особенно актуальны для системных сценариев, автоматизации и программ, работающих с файлами от имени привилегированного пользователя.

Улучшения коснулись и интернационализации. ls теперь сортирует имена с учётом правил локали, comm применяет локализованные правила сравнения строк, а cut корректнее обрабатывает многобайтные поля, байты и разделители. Благодаря этому поведение утилит становится более предсказуемым в окружениях с различными языками и кодировками.

Для пользователей, которые хотят протестировать Rust Coreutils для Linux, доступна сборка из исходного кода, а также готовые бинарные варианты для поддерживаемых платформ. Перед тем как uutils Coreutils скачать, стоит проверить требования к системе и выбранный способ установки: пакетный менеджер дистрибутива, готовый архив или сборка через Rust-инструменты могут отличаться набором зависимостей.

Тем, кто планирует uutils Coreutils 0.11 скачать для повседневной работы, полезно начать с отдельных команд, не заменяя сразу весь набор GNU. Это позволит проверить совместимость собственных shell-скриптов, особенности обработки локали и поведение в нестандартных сценариях. Особенно внимательно следует тестировать команды, используемые в системных скриптах и автоматизированных конвейерах.

Сравнение uutils Coreutils и GNU Coreutils показывает, что проект на Rust уже приблизился к зрелому уровню: разрыв по функциональности сокращается, диагностика становится удобнее, а некоторые операции выполняются быстрее. При этом GNU Coreutils по-прежнему остаётся наиболее проверенным временем вариантом с широкой поддержкой в Linux-дистрибутивах.

Версия 0.11 демонстрирует, что uutils развивается не как экспериментальная замена, а как полноценный перенос базовых Unix-инструментов на безопасную и кроссплатформенную основу. Дальнейший рост совместимости, улучшение производительности и внимание к безопасности могут сделать проект особенно привлекательным для контейнеров, минимальных систем, embedded-окружений и современных DevOps-сценариев. Подробный обзор изменений и полный список исправлений опубликованы в материалах о релизе uutils Coreutils 0.11.

Прокрутить вверх