Coreutils linux что это
Coreutils linux что это
The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system. These are the core utilities which are expected to exist on every operating system.
Table of Contents
Getting Help
Downloads
Stable source releases are available on the main GNU download server (via HTTPS, HTTP or FTP), and its mirrors. Please use a mirror if possible.
Source Code
The latest source with revision history can be browsed using cgit, gitweb or GitHub.
Assuming you have git installed, you can retrieve the latest version with this command:
A Coreutils code structure overview is available, which is useful for educational purposes, or for those interested in contributing changes.
To build from the latest sources please follow the instructions in README-hacking.
Please note that we do not suggest using test versions of Coreutils for production use.
Third Party Testing Resources
Mailing Lists
You do not need to be subscribed in order to post messages to any GNU mailing list. However non-subscribers are moderated by humans so please be patient when waiting for your email to arrive.
You can subscribe to any GNU mailing list via the web as described below. Or you can send an empty mail with a Subject: header line of just “subscribe” to the relevant -request list. For example, to subscribe yourself to the main coreutils list, you would send mail to with no body and a Subject: header line of just “subscribe”.
It has been necessary to moderate the Coreutils mailing lists to prevent the flood of spam. Postings to the lists are held for release by the list moderator. Sometimes the moderators are unavailable for brief periods of time. Please be patient when posting. If you don’t eventually see the message in the list archive then it did not get posted.
The low-volume mailing list coreutils-announce@gnu.org contains all announcements about Coreutils.
Important announcements about Coreutils and most other GNU software are also made on info-gnu@gnu.org.
There are also periodic summaries of committed, rejected and pending changes, to which one can subscribe.
The main discussion list for all things related to coreutils is coreutils@gnu.org. This is a recent change as previously general discussion took place on the bug list. If you have questions, comments, or other general discussion about Coreutils then this is the mailing list for that discussion. If you don’t know where to start then this is the place to start. You can browse and search past postings to the coreutils archive. Discussion prior to its creation in March 2010 is available in the bug mailing list archive.
If you think you have found a bug in Coreutils, then please send as complete a bug report as possible to bug-coreutils@gnu.org, and it will automatically be entered into the Coreutils bug tracker. Before reporting bugs please read the FAQ. A very useful and often referenced guide on how to write bug reports and ask good questions is the document How To Ask Questions The Smart Way. You can browse previous postings and search the bug-coreutils archive.
Trying the latest test release (when available) is always appreciated. Test releases of Coreutils are typically announced on the platform-testers mailing list.
If you would like any new feature to be included in future versions of Coreutils, please send a request to coreutils@gnu.org. This is the general discussion list and a good place to start discussion of a new feature. After consideration you may be asked to log a request into the bug tracker so that the issue is not lost. If you would like to implement yourself, then note that non trivial changes require copyright assignment to the FSF as detailed in the “Copyright Assignment” section of the Coreutils HACKING notes.
Mailing List Etiquette
Please do not send messages encoded as HTML nor encoded as base64 MIME nor included as multiple formats. Please send messages as plain text. Please include a descriptive subject line. If all of the subjects are bug then it is impossible to differentiate them. Please avoid sending large messages, such as log files, system call trace output, and other content resulting in messages over about 40 kB, to the mailing lists without prior contact. Those are best sent directly to those requesting that information after initial contact.
Please remember that development of Coreutils is a volunteer effort, and you can also contribute to its development. For information about contributing to the GNU Project, please read How to help GNU.
Previous Mailing Lists
Previously these utilities were offered as three individual sets of GNU utilities, Fileutils, Shellutils, and Textutils. Those three were combined into the single set of utilities called Coreutils.
Since Coreutils had existed as the three individual packages for a long time you may want to read the archives of those previous mailing lists. Fileutils archive, Shellutils archive, Textutils archive.
Maintainers
Please see the Translations README for information on coordinating and contributing translations of this article.
Copyright © 2016 Free Software Foundation, Inc.
GNU Coreutils (coreutils)
GNU Coreutils (coreutils) — набор GNU/Linux консольных утилит для shell, содержащий основные служебные утилиты для работы с файлами, оболочкой и текстом (Core GNU utilities). Подобный набор утилит необходим для полноценной работы операционной системы.
В пакет входят утилиты:
arch — вывод архитектуры компьютера
basename — возвращает имя файла по указанному полному имени с путями и суффиксами.
cat — суммирует содержимое файлов на стандартный вывод.
chgrp — изменяет группу-владельца для указанного файла на заданную группу. Группа может быть определена как по имени, так и по числовому ID.
chmod — изменяет режим доступа к файлу на указанные. Режим может быть указан в качестве последовательности символов для изменения режима доступа или как восьмеричное число для определения нового режима.
chown — изменяет пользователя и/или группу, которые являются владельцем файла на указанную пару user:group.
chroot — запускает указанную команду с указанной директорией в качестве корня /. Эта команда может быть интерактивным шеллом. На большинстве систем только пользователь root может это сделать.
cksum — печатает контрольную сымму CRC и количество байт в указанном файле.
comm — сравнивает два файла и выводит в три колонки одинаковые строки и разные.
cp — копирует файлы.
csplit — разделяет указанный файл на несколько других файлов, разделяя их по указанному шаблону либо по номерам строк и выводит количество байт для каждого нового файла.
cut — печетает часть строк, соответствующих заданным параметрам.
date — паказывает текущее время в указанном формате или устанавливает системное время.
dd — копирует файл, используя указанные размеры блоков и опциональные преобразования.
df — показывает сколько места доступно (и используется) для всех примонтированых файловых систем или только для системы, содержащий указанные файлы.
dir — синоним ls.
dircolors — выдает команду для установки переменной окружения LS_COLOR, используемой для изменения цветовой схемы для ls.
dirname — удаляет суффикс, не являющийся директорией, из имени файла.
du — возвращает место на диске, занимаемое указанной или текущей директориями со всеми вложенными директориями или файлами.
echo — показывает заданную строку.
env — запускает команду в измененном окружении.
expand — заменяет знаки табуляции пробелами.
expr — вычисляет выражения.
factor — выводит разложение на простые множители всех указанных целых чисел.
false — ничего не делает, но неудачно. Он всегда завершается со статусом ошибки.
fmt — форматирует абзацы в указанных файлах.
fold — переносит строки в заданных фалах.
groups — выводит группу, к которой принадлежит пользователь.
head — печатает первые десять строк файла (или указанное число строк).
hostid — возвращает числовой идентификатор хоста (в шестнадцатеричном формате).
hostname — возвращает установленное имя хоста.
id — возвращает ID пользователя, ID группы, и группу к которой принадлежит текущий или заданный пользователь.
install — копирует файлы, устанавливая им режим доступа и, если возможно, их владельца и группу.
join — соединяет строки двух файлов в поля.
kill — завершает указанный процесс.
link — создает жесткую ссылку на указанное имя или файл.
ln — создает жесткую или символическую ссылку на файлы.
logname — возвращает идентификационное имя текущего пользователя.
md5sum — возвращает контрольную сумму MD5.
mkdir — создает директорию с указанным именем.
mkfifo — создает FIFO с заданным именем.
mknod — создает элемент устройства с заданным именем. Элемент устройства может быть специальным символьным фалом, блочным файлом или FIFO.
mv — перемещает или переименовывает указанные файлы или директории.
nice — запускает программу с измененным приоритетом выполнения.
nl — возвращает количество строк в указанном файле.
nohup — выполняет команду, защищенную от зависаний, с выводом в журнальный файл.
od — выводит дамп файла в восьмеричном или ином формате.
paste — выводит строки, соответствующие заданным образцам из указанных файлов и разделенные символами табуляции.
pathchk — проверяет корректность или портируемость имен файлов.
pinky — упрощенный вариант finger. Возвращает некоторую информацию о указанных пользователях.
pr — форматирует файл по страницам и колонкам для печати.
printenv — печатает окружение.
ptx — печатает оглавление файла, определяя его по указанным ключевым словам.
pwd — возвращает имя текущей директории.
readlink — возвращает значение символической ссылки.
rm — удаляет файлы или директории.
rmdir — удаляет директорию, если она пустая.
seq — печатает ряд чисел в заданном диапазоне с заданным шагом.
sha1sum — возвращает или проверяет контрольную сумму 160-bit SHA1.
shred — удаляет указанные файлы, перезаписывая занимаемые ими блоки указанным шаблоном, что очень сильно затрудняет их последующее восстановление.
sleep — пауза на указанное время.
sort — сортирует строки заданных файлов.
split — разрезает указанный файл на части заданного размера или по номерам строк.
stty — устанавливает или печатает установки терминала.
su — запускает шелл с правами указанных пользователя и группы.
sum — печатает контрольную сумму и количество блоков для указанного файла.
sync — переключает буфер файловой системы. Он принудительно записывает измененные блоки на диск и обновляет super block.
tac — выводит содержимое указанных файлов в обратном порядке.
tail — печатает последние десять строк (или указанное их количество) заданного файла.
tee — считывает данные со стандартного ввода и записывает их в файл, дублируя на стандартном выводе.
test — сравнивает значения и проверяет типы файлов.
touch — изменяет время изменения файла, устанавливает доступ к файлу. Если файл не существует, то он будет создан с нулевой длиной.
true — успешно ничего не делает. Он всегда возвращает результат успешно завершенной операции.
tsort — проводит топологическую сортировку. Он выводит полностью отсортированный список с учетом уже произведенной сортировки указанного файла.
tty — возвращает имя файла терминала, присоединенного к стандартному вводу.
uname — выводит информацию о системе.
unexpand — заменяет пробелы символами табуляции.
uniq — удаляет все повторяющиеся строки из отсортированного файла.
unlink — удаляет указанный файл.
uptime — возвращает время, которое система работает, сколько пользователей к ней подключились и загрузку системы.
users — выводит список подключенных к системе пользователей.
wc — выводит количество строк, слов и байт в указанном файле и общее количество строк, если указано более одного файла.
who — сообщает, кто сейчас подключен.
whoami — возвращает имя пользователя, соответствующее текущему ID.
yes — выводит циклически ‘y‘ или заданную строку, после чего завершается.
Введение в GNU Core Utilities
Оригинал: An introduction to the GNU Core Utilities
Автор: David Both
Дата публикации: 24 апреля 2018 года
Перевод: А. Кривошей
Дата перевода: сентябрь 2018 г.
Эти инструменты незаменимы, потому что без них невозможно выполнять любую полезную работу на компьютере Unix или Linux. Учитывая их важность, давайте рассмотрим их подробнее.
GNU coreutils
Чтобы понять происхождение GNU Core Utilities, нам нужно совершить короткую поездку на машине времени в ранние дни Unix в Bell Labs. Unix была написана так, что Кен Томпсон, Деннис Ричи, Дуг Макилрой и Джо Оссанна могли продолжать использовать что-то, что они начали писать, работая над большой многозадачной и многопользовательской операционной системой под названием Multics. Это что-то было игрой под названием Space Travel. Как и сегодня, геймеры продвигали технологии вычислений. Эта новая операционная система была намного более ограниченной, чем Multics, поскольку только два пользователя могли войти в систему одновременно, поэтому ее называли Unics. Это имя позднее было изменено на Unix.
Со временем Unix оказалась настолько успешной, что Bell Labs начала по сути отдавать ее университетам, а затем компаниям за стоимость носителя и пересылки. В те времена программное обеспечение на системном уровне распространялось между организациями и программистами, поскольку они работали над достижением общих целей в контексте системного администрирования.
В конце концов, PHB и AT&T решили, что они должны делать деньги на Unix и начали использовать более ограниченные и дорогостоящие лицензии. Это происходило в то время, когда программное обеспечение становилось все более проприетарным, ограниченным и закрытым. Становится невозможным совместное использование программного обеспечения с другими пользователями и организациями.
Некоторым людям это не нравилось, и они боролись с бесплатным программным обеспечением. Ричард Столлман, также известный как RMS, возглавил группу повстанцев, которые пытались написать открытую и свободно доступную операционную систему, которую они назвали операционной системой GNU. Эта группа создала GNU Utilities, но не создала жизнеспособного ядра.
Когда Линус Торвальдс впервые написал и скомпилировал ядро Linux, ему понадобился набор очень простых системных утилит, чтобы начать выполнять хоть какую-то полезную работу. Ядро не предоставляет команды или командную оболочку, например Bash. Оно бесполезно само по себе. Итак, Линус использовал свободно доступные GNU Core Utilities и перекомпилировал их для Linux. Это дало ему полную, если и достаточно примитивную, операционную систему.
Вы можете узнать обо всех отдельных программах, входящих в Утилиты GNU, введя команду info coreutils в командной строке терминала. Приведенный ниже список основных утилит является частью этой информационной страницы. Утилиты сгруппированы по функциям, чтобы облегчить их поиск; в терминале выделите группу, по которой вы хотите получить дополнительную информацию, и нажмите клавишу Enter.
В этом списке 102 утилиты. Они охватывают многие функции, необходимые для выполнения основных задач на хосте Unix или Linux. Однако многие базовые утилиты здесь отсутствуют. Например, команды mount и umount не входят в этот список. Их, и многие другие команды, которых нет в GNU coreutils, можно найти в коллекции util-linux.
util-linux
Некоторые из этих утилит устарели и, скорее всего, будут удалены из коллекции в какой-то момент в будущем. Вы можете проверить страницу util-linux в Википедии для получения информации о многих утилитах, а man-страницы также содержат подробную информацию о командах.
Заключение
Эти две коллекции утилит Linux, GNU Core Utilities и util-linux, вместе предоставляют основные команды, необходимые для администрирования систем Linux. Когда я писал эту статью, я нашел несколько интересных утилит, о которых я никогда не знал. Многие из этих команд требуются редко, но когда вы в них нуждаетесь, они незаменимы.
Всего в этих двух коллекциях имеется более 200 утилит. Хотя в Linux есть еще много команд, это команды, которые необходимы для управления базовыми функциями типичного хоста Linux.
Разбираем исходный код GNU Coreutils: утилита yes
Зачем?
GNU Coreutils
GNU Core Utilites — это набор утилит для выполнения базовых пользовательских операций: создание директории, вывод файла на экран и так далее. По замыслу разработчиков, эти утилиты должны быть доступны в любой операционной системе, что мы и наблюдаем в настоящее время: для Windows есть Cygwin, ну а про *nix и говорить нечего. Сохранить единообразность работы в разных системах помогает стандарт POSIX, который в Coreutils пытаются соблюдать. Coreutils содержит такие часто используемые утилиты, как cat, tail, echo, wc и многие другие.
Для начала выберем самую тривиальную программу под названием yes. Её простота позволит разобраться с используемыми в Coreutils инструментами и библиотеками.
Утилита yes
Как говорится в мане, всё что умеет утилита yes — это бесконечно выводить «yn» в stdout. Если мы передадим yes какие-то аргументы, то вместо «y» yes будет выводить аргументы через пробел. Наверняка похожую программу писал каждый, кто начинал изучать C. А значит у многих есть возможность сравнить свой подход с тем, как это делают суровые бородатые дядьки из GNU. О практическом применении yes немного написано в Википедии.
Исходный код
Coding style
Первое, на что обращаешь внимание — непривычное форматирование кода. Почитать о нём можно в соответствующей главе GNU Coding Standards. Например, при определении функции тип возвращаемого значения должен располагаться на отдельной строке, как и открывающая скобка:
Для отступов и выравнивания используются только пробелы. Между различными уровнями вложенности разница в отступе составляет 2 пробела. Особо извращённую форму имеют фигурные скобки при операторах:
12 строк
yes.c начинается с обязательного для всех GPL-програм комментария. Он уже успел намозолить мне глаза в других программах и необходимость его наличия была для меня загадкой. Оказывается, что текст этого комментария зафиксирован в инструкции по применению GPL. Именно в ней прописано, что все, кто желает выпускать своё ПО под GPL, должны добавлять эти 12 строк заявления о праве копирования в начало каждого файла исходного кода.
initialize_main
Название программы
Причём это название никак не зависит от имени исполняемого файла:
Такое поведение обеспечивается специально определённым в начале файла макросом PROGRAM_NAME :
Реальное название без всяких хитростей берётся из argv[0] и используется при выводе ошибок и подсказок:
Значение argv[0] помещается в глобальную переменную program_name с помощью вызова функции set_program_name во второй строке main :
Интернационализация
Coreutils используют по всему миру, поэтому во всех утилитах предусмотрена возможность локализации. Причём эта возможность обеспечивается минимальными усилиями благодаря использованию пакета GNU gettext. Немногих удивит использование именно gettext, ведь этот пакет распространился далеко за пределы проекта GNU. Например, интернационализация в моём любимом web-фреймворке Django построена именно на gettext. Про использование gettext совместно с различными языками и фреймворками уже писали на хабре.
Определение функции _ находится в уже знакомом нам файле system.h :
Инициализация механизма интернационализации в Coreutils производится вызовом трёх функций в main :
Обработка ошибок
Интуитивно можно подумать, что в функции close_stdout закрывается стандартный поток вывода, что исключает потерю данных, если мы подменили stdout каким-нибудь файловым дескриптором и используем буферизированный вывод. Но найти исходный код этой функции и понять, что же на самом деле там происходит, выполняются ли какие-нибудь дополнительные действия по подчистке ресурсов, у меня не получилось.
Аргументы командной строки
Запись в argv[argc] не является ошибкой: стандарт ANSI C требует, чтобы элемент argv[argc] был нулевым указателем.
Главный цикл
Ну вот мы и добрались до самого функционала программы. Вот он весь, как есть:
Coreutils
Официальный адрес пакета
Содержимое Coreutils
Пакет Coreutils содержит ряд основных утилит для shell.
Устанавливаемые программы: basename, cat, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id, install, join, kill, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat, stty, su, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, uptime, users, vdir, wc, who, whoami и yes
Краткие описания
basename возвращает имя файла по указаному полному имени с путями и суффиксами.
cat суммирует содержимое файлов на стандартный вывод.
chgrp изменяет группу-владельца для указанного файла на заданную группу. Группа может быть определена как по имени, так и по числовому ID.
chmod изменяет режим доступа к файлу на указанные. Режим может быть указан в качестве последовательности символов для изменения режима доступа или как восьмеричное число для определения нового режима.
chown изменяет пользователя и/или группу, которые являются владельцем файла на указанную пару user:group.
chroot запускает указанную команду с указанной директорией в качестве корня /. Эта команда может быть интерактивным шеллом. На большинстве систем только пользователь root может это сделать.
cksum печатает контрольную сымму CRC и количество байт в указанном файле.
comm сравнивает два файла и выводит в три колонки одинаковые строки и разные.
csplit разделяет указанный файл на несколько других файлов, разделяя их по указанному шаблону либо по номерам строк и выводит количество байт для каждого нового файла.
cut печетает часть строк, соответствующих заданным параметрам.
date паказывает текущее время в указанном формате или устанавливает системное время.
dd копирует файл, используя указанные размеры блоков и опциональные преобразования.
df показывает сколько места доступно (и используется) для всех примонтированых файловых систем или только для системы, содержащий указанные файлы.
dircolors выдает команду для установки переменной окружения LS_COLOR, используемой для изменения цветовой схемы для ls.
dirname удаляет суффикс, не являющийся директорией, из имени файла.
du возвращает место на диске, занимаемое указанной или текущей директориями со всеми вложеными директориями или файлами.
echo показывает заданную строку.
env запускает команду в измененном окружении.
expand заменяет знаки табуляции пробелами.
expr вычисляет выражения.
factor выводит разложение на простые множители всех указанных целых чисел.
false ничего не делает, но неудачно. Он всегда завершается со статусом ошибки.
fmt форматирует абзацы в указанных файлах.
fold переносит строки в заданных фалах.
groups выводит группу, к которой принадлежит пользователь.
head печатает первые десять строк файла (или указанное число строк).
hostid возвращает числовой идентификатор хоста (в шестнадчатиричном формате)
hostname возвращает установленное имя хоста.
id возвращает ID пользователя, ID группы, и группу к которой принадлежит текущий или заданный пользователь.
install копирует файлы, устанавливая им режим доступа и, если возможно, их владельца и группу.
join соединяет строки двух файлов в поля.
kill завершает указанный процесс.
link создает жесткую ссылку на указанное имя или файл.
ln создает жесткую или символическую ссылку на файлы.
logname возвращает идентификационное имя текущего пользователя.
md5sum возвращает контрольную сумму MD5.
mkdir создает директорию с указанным именем.
mkfifo создает FIFO с заданным именем.
mknod создает элемент устройства с заданным именем. Элемент устройства может быть специальным символьным фалом, блочным файлом или FIFO.
mv перемещает или переименовывает указанные файлы или директории.
nice запускает программу с измененным приоритетом выполнения.
nl возвращает количество строк в указанном файле.
nohup выполняет команду, защищенную от зависаний, с выводом в журнальный файл.
od выводит дамп файла в восьмеричном или ином формате.
paste выводит строки, соответствующие заданным образцам из указанных файлов и разделенные символами табуляции.
pathchk проверяет корректность или портируемость имен файлов.
pr форматирует файл по страницам и колонкам для печати.
printenv печатает окружение.
ptx печатает оглавление файла, определяя его по указанным ключевым словам.
pwd возвращает имя текущей директории.
readlink возвращает значение символической ссылки.
rm удаляет файлы или директории.
rmdir удаляет директорию, если она пустая.
seq печатает ряд чисел в заданном диапазоне с заданным шагом.
sha1sum возвращает или проверяет контрольную сумму 160-bit SHA1.
shred удаляет указанные файлы, перезаписывая занимаемые ими блоки указанным шаблоном, что очень сильно затрудняет их последующее восстановление.
sort сортирует строки заданных файлов.
split разрезает указанный файл на части заданного размера или по номерам строк.
stty устанавливает или печатает установки терминала.
su запускает шелл с правами указанных пользователя и группы.
sum печатает контрольную сумму и количество блоков для указанного файла.
sync переключает буфер файловой системы. Он принудительно записывает измененные блоки на диск и обновляет super block.
tac выводит содержимое указанных файлов в обратном порядке.
tail печатает последние десять строк (или указанное их количество) заданного файла.
tee считывает данные со стандартного ввода и записывает их в файл, дублируя на стандартном выводе.
test сравнивает значения и проверяет типы файлов.
touch изменяет время изменения файла, устанавливает доступ к файлу. Если файл не существует, то он будет создан с нулевой длиной.
true успешно ничего не делает. Он всегда возвращает результат успешно завершенной операции.
tsort проводит топологическую сортировку. Он выводит полностью отсортированый список с учетом уже произведенной сортировки указанного файла.
tty возвращает имя файла терминала, присоединенного к стандартному вводу.
uname выводит информацию о системе.
unexpand заменяет пробелы символами табуляции.
uniq удаляет все повторяющиеся строки из отсортированного файла.
unlink удаляет указанный файл.
uptime возвращает время, которое система работает, сколько пользователей к ней подключились и загрузку системы.
users выводит список подключенных к системе пользователей.
wc выводит количество строк, слов и байт в указанном файле и общее количество строк, если указано более одного файла.
who сообщает, кто сейчас подключен.
whoami возвращает имя пользователя, соответствующее текущему ID.
yes выводит циклически ‘y’ или заданную строку, после чего завершается.
Зависимости установки Coreutils
Coreutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.