Каждая Linux-система уникальна по-своему, а в мире других Unix-подобных ОС — например, macOS или BSD — различий ещё больше. Однако есть нечто, что их объединяет: в самом центре всегда стоят одни и те же инструменты — классические утилиты, определяющие лицо Linux.
Что такое coreutils?
GNU Core Utilities, или просто coreutils — это золотой стандарт командной строки в Unix, который есть практически на каждом Linux-дистрибутиве. Эти инструменты отвечают за базовые операции — например, ls показывает содержимое папок, pwd сообщает, где вы находитесь, cp копирует файлы и так далее.
Большинство этих команд появились ещё в рассветную эпоху Unix. Они настолько проверены временем и надёжны, что практически не изменились за десятилетия. Команды вроде cat, mv, wc стали неотъемлемой частью Linux, и их продолжают использовать миллионы пользователей по всему миру.
Утилиты coreutils устроены очень похоже: поддерживают единый стиль флагов (например, --help или --verbose), работают с потоками данных и интегрируются между собой.
В macOS используются свои версии этих инструментов (часто из BSD), поэтому команды в целом схожи, но нюансы могут отличаться.
Какие команды входят в coreutils?
Пожалуй, проще всего начать с самых базовых программ — true и false. Они на вид почти ничего не делают: true всегда завершает работу с кодом "0", а false — с любым другим.
Эти утилиты настолько элементарны, что оболочки вроде zsh реализуют их как встроенные. В coreutils они нужны ради полной совместимости. Система всегда выбирает встроенную версию, если она есть. Хотите узнать, какую именно команду запускаете? Проверьте через which и полный путь до файла.
Большинство других coreutils работают с файлами, пользователями или управляют системой на глубоком уровне: сюда входят chmod, chown, dd, du. Если нужно работать с файлами — пригождаются cp, mkdir, mv, rm, touch. Для обработки текста и данных пригодятся cut, sort, uniq, head, tail, fold.
В системах с несколькими пользователями незаменимы команды users, groups, who и whoami. А hostid, hostname и uptime дадут техническую информацию о системе.
Важно помнить: не все популярные команды входят в coreutils. grep, awk, sed, man, top — знакомы каждому, но формально относятся к другим наборам и часто имеют расширенные возможности. В coreutils не входят языки программирования и shell-интерпретаторы.
Как установить и использовать coreutils
На большинстве Linux-систем coreutils уже установлены. Проверить наличие просто — добавьте к нужной команде параметр --version:
Если получите ошибку «опция "--version" не распознана», значит вы используете не coreutils-версию.
Чтобы выяснить точное местоположение и версию команды — используйте which или which -a.
В macOS GNU coreutils можно установить через Homebrew:
После установки имена этих утилит будут начинаться на g во избежание конфликтов. Например, чтобы воспользоваться GNU-версией cp, используйте команду gcp:
Хотите использовать GNU coreutils по умолчанию? Просто добавьте их путь в переменную PATH.
Чему учат coreutils — и почему это важно
Каждая команда coreutils выполняет одну простую задачу — и делает это элегантно и качественно, следуя стандарту POSIX, предлагая при этом дополнительные опции.
Это отличная основа, на которую я часто опираюсь при создании собственных утилит — как по структуре интерфейса, так и по коду.
Подпишитесь на рассылку — получите подборку лайфхаков по coreutils!
Взять, например, программу true. Код этой утилиты на C занимает всего 80 строк. На первый взгляд кажется, что она просто возвращает код 0, но под капотом — и работа с библиотеками, и полноценная совместимость с GNU-стандартами.
Если я хочу написать свою консольную утилиту, всегда начинаю с примеров из coreutils — здесь собраны все основы: от структуры и заголовочных файлов (типа system.h) до расширения функциональности собственным кодом.
Есть ли альтернатива coreutils?
Классические coreutils написаны на C, но им давно появились альтернативы. Например, проект uutils переписывает эти утилиты на Rust, сохраняя полную совместимость и сравнимое удобство.
Некоторые базовые команды уже давно обзавелись более современными альтернативами. Значительно удобнее, например, использовать ncdu вместо du или eza вместо ls — такие версии поддерживают цвет, иконки, обладают удобным интерфейсом.
Есть и целые проекты, которые расширяют возможности coreutils — добавляют те утилиты, которых почему-то нет в основном наборе, но они реально полезны. Самый известный пример — пакет moreutils от Joey Hess: здесь есть ts (добавляет временные метки к данным), sponge (пишет стандартный ввод в файл без конфликтов), lckdo (запускает команду с занятым lock-файлом) и многие другие.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru