Гид по технологиям

Встроенные команды оболочки в Linux: как распознать и когда использовать

4 min read Linux Обновлено 12 Apr 2026
Встроенные команды оболочки в Linux — как проверить
Встроенные команды оболочки в Linux — как проверить

Кратко

Встроенные команды (builtins) загружаются в память оболочки и выполняются быстрее, чем отдельные исполняемые файлы. Проверьте их с помощью type -t, command -v или which, и используйте абсолютный путь для вызова внешней утилиты, если нужно.

Плотник работает рубанком

Что такое встроенные команды оболочки?

Встроенные команды оболочки — это команды, реализованные внутри самой оболочки и загружаемые в оперативную память. Кратко: они выполняются без запуска внешнего процесса, поэтому обычно работают быстрее.

Определение в одну строку: встроенная команда — это команда, реализованная внутри интерпретатора оболочки (например, bash, zsh, dash).

Страница man для встроенных команд bash

Почему это делается? Выполнение команд из RAM быстрее, чем чтение с диска. Часто используемые операции (например, смена каталога) выгодно реализовывать непосредственно в оболочке.

Пример: команда cd обычно реализована как builtin, потому что она меняет состояние самой оболочки (текущий каталог), а внешний процесс не мог бы изменить каталог родительского процесса.

Как определить, является ли команда встроенной

Самый простой путь — команда type:

type -t commandname

где commandname — проверяемая команда.

Пример, чтобы проверить cd:

type -t cd

Выход:

builtin

Если вывод не builtin, он может быть file, alias или function — тогда команда не является встроенной (в контексте этой оболочки).

Альтернативы и дополнительные проверки:

  • command -v name — выведет имя команды или путь для внешней утилиты. Если результат просто cd, значит это builtin.
command -v cd
  • which name — показывает абсолютный путь к исполняемому файлу или сообщает, что это alias/builtin (поведение зависит от вашей оболочки).
  • type name без -t даёт расширенное описание: builtin, путь файла, функция или алиас.

Пример полного вывода:

type cd

может вернуть:

cd is a shell builtin

Важно: разные оболочки имеют разные встроенные команды. То, что builtin в bash, может быть внешней утилитой в sh или наоборот.

Когда builtin не подходит и как действовать

  • Когда вам нужна конкретная реализация утилиты с особыми опциями, которых нет у встроенной версии. Тогда вызовите внешний бинарный файл по абсолютному пути, например /bin/echo.
  • Когда требуется изоляция в отдельном процессе (например, менять переменные окружения в подпроцессе). Встроенная команда меняет состояние текущей оболочки, а внешний процесс — нет.
  • Если вы тестируете поведение конкретного пакета (например, для совместимости), вызывайте внешний исполняемый файл.

Примеры ошибок/ограничений:

  • which может обманывать: в некоторых оболочках which сам является встроенной командой и показывает нестабильные результаты.
  • Скрипт, написанный для bash, может полагаться на bash-билтинги; при запуске в sh он может не работать.

Быстрый справочник и шаблоны (cheat sheet)

  • Проверка типа команды:
type -t ls
  • Полное описание:
type ls
  • Проверить, что именно выполнится в текущей среде:
command -v somecmd
  • Найти все экземпляры исполняемого файла в PATH:
which -a somecmd
  • Вызвать внешний исполняемый файл явно:
/usr/bin/printf "hello\n"
  • В bash можно явно выполнить встроенную версию через builtin:
builtin echo hello

(Это полезно, если в вашей среде echo переопределён функцией или алиасом.)

Сравнение: встроенные vs внешние команды

  • Производительность: встроенные обычно быстрее (нет форка/exec).
  • Контекст выполнения: встроенные могут менять состояние оболочки (переменные, каталог), внешние — нет.
  • Обновляемость: внешние можно обновлять отдельными пакетами; билтинги обновляются при смене оболочки.
  • Портативность: внешние утилиты часто более стандартизованы (POSIX), но поведение может отличаться между реализациями.

Модель принятия решения (Mermaid)

flowchart TD
  A[Нужно изменить состояние оболочки?] -->|Да| B[Использовать builtin]
  A -->|Нет| C[Нужен внешний функционал или конкретная опция?]
  C -->|Да| D[Вызвать внешний исполняемый файл]
  C -->|Нет| B
  D --> E[Использовать абсолютный путь при необходимости]

Роли и чек-листы

  • Для системного администратора:

    • Проверить type -t перед автоматизацией.
    • Использовать абсолютные пути в cron или systemd-юнитах.
    • Тестировать скрипты в целевой оболочке.
  • Для разработчика скриптов:

    • Указывать #!/bin/bash при нужде в bash-билтингах.
    • Не полагаться на нестандартные алиасы в CI.
    • Документировать зависимости от конкретной оболочки.
  • Для новичка:

    • Помните: cd почти всегда builtin.
    • Если что-то не меняет каталог из скрипта — проверьте, не запускаете ли вы подпроцесс.

Критерии приёмки

  • Скрипт отрабатывает одинаково в целевой оболочке: type -t для ключевых команд показывает ожидаемые значения.
  • Поведение не зависит от локальных алиасов: ключевые команды вызываются с command -v и/или абсолютным путём.
  • Изменения состояния оболочки (cwd, переменные) происходят в нужном контексте (основной процесс vs подпроцесс).

Короткий глоссарий

  • builtin — команда, реализованная внутри оболочки.
  • external (внешняя) — исполняемый файл в файловой системе.
  • alias — подстановка имени команды на другую команду или параметры.

Итоги

Встроенные команды — удобный и быстрый инструмент оболочки. Проверяйте тип команды с помощью type -t, используйте command -v и which для уточнений, и применяйте абсолютный путь к внешней утилите, когда нужна её конкретная реализация. Выбирайте оболочку, исходя из функциональности и совместимости с вашими скриптами.

Важно

Разные оболочки имеют разные наборы builtins. Тестируйте скрипты в той оболочке, где они будут выполняться, и явно указывайте интерпретатор в шебангах.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Сброс сайта WordPress: быстро и безопасно
WordPress

Сброс сайта WordPress: быстро и безопасно

Как вернуть папку «Загрузки» в Dock на Mac
Mac

Как вернуть папку «Загрузки» в Dock на Mac

Отключить AutoPlay в Windows 11 и 10
Windows

Отключить AutoPlay в Windows 11 и 10

Установка Node.js и npm на Windows
Разработка

Установка Node.js и npm на Windows

Как вернуть деньги на Facebook
Помощь и безопасность

Как вернуть деньги на Facebook

Приватный режим в Android: включение и советы
Конфиденциальность

Приватный режим в Android: включение и советы