Список терминов

А

Абстракция (abstraction) — программный модуль, приложение или библиотека, которые повторяют основные свойства реального объекта. Абстракции помогают управлять сложностью программных систем. Они скрывают несущественные детали. Также они позволяют работать с разными объектами по одному алгоритму.

Алгоритм (algorithm) — это конечная последовательность инструкций, понятных исполнителю. Задача алгоритма — что-то вычислить или решить задачу.

Аргумент (argument) — слово или строка, которые передаются в программу через интерфейс командной строки. Пример аргументов:

grep "GNU" README.txt

Асинхронность (asynchrony) — означает события, происходящие независимо от основного потока выполнения программы. Так же под асинхронностью понимаются методы обработки таких событий.

Б

Библиотека (library) — набор подпрограмм и объектов, собранных в самостоятельный модуль или файл. Приложения используют ресурсы библиотек как составные части.

В

Встроенные команды (builtin commands) — команды, которые интерпретатор исполняет самостоятельно. Для их выполнения не нужны сторонние утилиты. Пример встроенной команды - pwd.

Вычислительный процесс (process) — экземпляр компьютерной программы, который исполняется процессором.

Д

Дистрибутив Linux (Linux distribution) — операционная система, основанная на ядре Linux и наборе приложений GNU. ОС собирается из пакетов с помощью пакетного менеджера. Она представляет собой набор готовых для работы программ и библиотек.

Дочерний процесс (child process) — процесс, порождённый другим процессом (родительским).

З

Зарезервированные переменные (reserved variable) — то же что и переменные оболочки (shell variables).

И

Идиома (idiom) — способ выражения типовой конструкции в языке программирования. Идиома представляет собой шаблон реализации алгоритма или структуры данных на конкретном языке программирования. Вот идиома в Bash для обработки списка файлов в цикле for:

1 for file in ./*.txt
2 do
3   cp "$file" ~/Documents
4 done

Интерпретатор (interpreter) — программа, которая исполняет инструкции. Инструкции пишутся на языке программирования. Предварительная компиляция исходного кода для этого не требуется.

Итерация (iteration) — однократное исполнение команд в теле цикла.

К

Команда (command) — текст, введённый после приглашения интерпретатора. Этот текст соответствует действию, которое интерпретатор выполняет самостоятельно или с помощью другого приложения.

Компилятор (compiler) — программа для перевода текста программы с языка программирования в машинный код.

Компьютерная программа (computer program) — набор инструкций, которые может исполнить компьютер. Каждая программа решает прикладную задачу.

Конвейер (pipeline) — механизм взаимодействия процессов в Unix-подобных ОС. Он строится на передаче сообщений. Также конвейером называют два и более процесса со связанными потоками ввода-вывода. Поток вывода одного процесса передаётся напрямую в поток ввода другого и так далее.

Л

Литерал (literal) — условное обозначение в исходном коде программы. Оно представляет собой фиксированное значение. В зависимости от типа данных литералы записываются по-разному. Большинство языков программирования поддерживают литералы для целых чисел, чисел с плавающей точкой и строк. Пример строкового литерала (~/Documents) в Bash:

1 var="~/Documents"

Логическое выражение (Boolean expression) — конструкция языка программирования. В результате её вычисления получается либо значение “истина”, либо “ложь”.

Логический оператор (logical operator) — операция над логическими выражениями. Она комбинирует их в одно выражение. Результат операции зависит от значений исходных выражений.

М

Массив (array) — структура данных, состоящая из набора элементов. Расположение каждого элемента определяет порядковый номер. В памяти компьютера элементы массива хранятся последовательно друг за другом.

Многозадачность (multitasking) — параллельное выполнение нескольких задач (процессов) за определённый отрезок времени. Это достигается за счёт переключения компьютера (переключение контекста) между задачами и выполнения их по частям.

Мультипрограммирование (multiprogramming) — распределение нагрузки компьютера между несколькими программами. Например, компьютер выполняет программу до тех пор, пока ей не потребуется некоторый ресурс. Если ресурс занят, программа останавливается. Компьютер переключается на другую программу. Он вернётся к выполнению первой программы, когда нужный ей ресурс освободится.

О

Область видимости (scope block) — часть программы или системы, в которой имя переменной остаётся связанным с её значением. Другими словами имя переменной корректно конвертируется в адрес памяти, по которому хранится её значение. За пределами области видимости то же имя может указывать на другую область памяти.

Операнд (operand) — аргумент математической операции или команды. Он представляет собой данные для обработки. Например, в следующей операции сложения операнды — это числа 1 и 4:

1 + 4

Оператор перенаправления (redirection operator) — специальная конструкция языков Bash и Bourne shell, которая перенаправляет потоки ввода-вывода для встроенных команд, утилит и приложений. Как источник и цель перенаправления указываются файловые дескрипторы. Они связаны с файлами или стандартными потоками. Пример перенаправления вывода утилиты find в файл result.txt:

find / -path */doc/* -name README 1> result.txt

Опции интерпретатора (shell options) — настройки, которые меняют поведение интерпретатора в режимах оболочки и исполнения скриптов. Настройки задаются встроенной командой set. Например, вот команда включения отладочного вывода интерпретатора:

set -x

Опция (option) — аргумент в стандартизированной форме, который передаётся в программу. Опция начинается с тире - или двойного тире –. Она переключает режим работы программы. Следующие друг за другом опции можно объединить в одну группу. Вот пример объединения опций -l, -a и -h утилиты ls:

ls -lah

П

Парадигма программирования (programming paradigm) — это набор идей, методов и принципов, которые определяют способ написания программ.

Параметр (parameter) — сущность, которая хранит какое-то значение. Параметр в отличие от переменной может не иметь имени.

Параметр интерпретатора (shell parameter) — именованная область памяти интерпретатора для хранения данных.

Параметр командной строки (command line parameter) — вид аргумента команды. Он передаёт информацию в программу. Параметр также может быть часть опции. Например, чтобы указать выбранный режим работы.
Вот вызов утилиты find:

find ~/Documents -name README

Её первый параметр ~/Documents сообщает путь начала поиска. Второй параметр README относится к опции -name.

Переменная (variable) — 1) это область памяти, обращаться к которой можно по имени.

  1. в Bash это параметр, доступный по имени. Переменные задаются пользователем или интерпретатором. Пример объявления переменной:
filename="README.txt"

Переменные оболочки (shell variables) — переменные, которые устанавливает интерпретатор. В них хранятся временные данные, настройки и состояния ОС или Unix-окружения. Пользователь может читать значения переменных оболочки. Для записи доступны только некоторые из них. Выводятся командой set. Пример — переменная PATH.

Переменные окружения (environment variables) — неупорядоченный набор переменных, который копируется из родительского процесса в дочерний. Утилита env изменяет переменные окружения при запуске программы. При вызове её без параметров, она выводит переменные, объявленные в текущем командном интерпретаторе.

Подпрограмма (subroutine) — фрагмент программы, который выполняет одну задачу. Фрагмент выделяется в самостоятельный блок кода. Его можно вызвать из любого места программы.

Позиционные параметры (positional parameters) — параметры со всеми аргументы командной строки, которые Bash-скрипт получил при вызове. Имена параметров соответствуют порядку аргументов. Пример использования позиционного параметра в скрипте:

cp "$1" ~

Порядок выполнения (control flow) — порядок выполнения инструкций программы и вызова функций в процессе её работы.

Приглашение командной строки (prompt) — это последовательность символов. Командный интерпретатор выводит её, когда готов обработать следующую команду пользователя.

Р

Разделение времени (time-sharing) — использование ресурсов компьютера несколькими пользователями одновременно. Достигается за счёт многозадачности и мультипрограммирования.

Расширение файла (filename extension) — часть имени файла. Добавляется в конец имени через точку. Расширение определяет тип файла.

Рекурсия (recursion) — вызов функции из неё же самой (простая рекурсия) или через другие функции (косвенная рекурсия).

С

Связанный список (linked list) — структура данных, состоящая из элементов или узлов. Порядок их размещения в списке не совпадает с порядком следования в памяти. Поэтому каждый узел содержит данные и адрес памяти следующего узла. Такая организация списка делает эффективными операции вставки и удаления.

Сетевой протокол (communication protocol) — соглашение о формате сообщений между узлами компьютерной сети.

Символьная ссылка (symbolic link) — файл специального типа. Вместо данных он содержит указатель на другой файл или каталог.

Синхронный (synchronous) — обозначает события или действия, которые происходят в одном потоке выполнения программы.

Специальные параметры (special parameters) — устанавливаются интерпретатором для хранения своего состояния, передачи параметров в вызываемые приложения (позиционные параметры) и чтения их кода возврата. Специальные параметры доступны только для чтения. Пример такого параметра — $?.

Стандартные потоки (standard streams) — программные каналы коммуникации приложения с окружением, в котором оно работает. Потоки — это абстракции физических каналов ввода с клавиатуры и вывода на экран монитора. Обращение к каналу происходит по дескриптору, который назначается ОС.

У

Управляющая последовательность (escape sequence) — набор символов, которые не имеют собственного значения. Вместо этого они управляют устройством вывода. Например, символ перевода строки \n даёт команду устройству вывода начать новую строку.

Управляющие символы — другое название для управляющей последовательности.

Условный оператор (conditional statement или conditional expression) — конструкция языка программирования. Она выбирает набор команд для выполнения в зависимости от значения логического выражения.

Утилита (utility software) — вспомогательная программа для работы с ОС или оборудованием.

Уязвимость (vulnerability) — ошибка или недостаток в системе. Используя уязвимость, можно выполнить несанкционированные действия.

Ф

Файловый дескриптор (file descriptor) — абстрактный указатель на файл или канал коммуникации (поток, конвейер или сетевой сокет). Дескрипторы являются частью POSIX-интерфейса. Они представляют собой целые неотрицательные числа.

Файловая система (file system) — способ хранения и чтения данных с носителей информации.

Функция (function) — другое название для подпрограммы.

Х

Xеш-таблица (hash table) — структура данных. Каждый её элемент — это пара ключ-значение (key-value). Говорят, что хеш-таблица отображает ключи на значения. Роль ключей напоминает индексы элементов в массиве. Ключи рассчитываются хеш-функцией.

Хеш-функция (hash function) — функция для генерации уникальной последовательности байтов из переданных на вход данных.

Ш

Шаблон поиска (glob) — поисковый запрос. Вместе с обычными символами в него входят символы подстановки: * и ?. Символы подстановки соответствуют любым символам. Например, шаблон R*M?. Он соответствует строкам, которые начинаются с R и предпоследняя буква которых M.

Шебанг (shebang) — последовательность из символов решётки и восклицательного знака #! в начале скрипта. Загрузчик программ рассматривает строку после шебанг как имя интерпретатора. Дальше загрузчик запускает интерпретатор и передаёт ему скрипт на выполнение. Пример шебанг для Bash-скриптов:

1 #!/bin/bash

Я

Язык программирования общего назначения (general-purpose programming language) — язык, на котором можно разрабатывать приложения для разных прикладных областей. В нём нет конструкций, полезных для одной области и бесполезных в других.

A

alias (псевдоним) — встроенная команда Bash для сокращения длинных строк. Применяется в режиме командного интерпретатора.

Application Programming Interface или API (интерфейс прикладного программирования) — набор соглашений о взаимодействии компонентов информационной системы. Соглашения отвечают на следующие вопросы:

  • Какую функцию выполнит вызываемый компонент?
  • Какие данные передать на вход функции?
  • Какие данные функция возвращает?

Arithmetic Expansion (арифметическая подстановка) — в Bash вычисление арифметического выражения и подстановка его результата. Например:

echo $((4+3))

ASCII-кодировка — восьмибитная система кодировки символов. Включает в себя:

  • десятичные цифры
  • латинский алфавит
  • национальный алфавит
  • знаки препинания
  • управляющие символы

B

Background (фоновый режим) — в Bash режим исполнения процесса. В этом режиме его идентификатор не относится к группе идентификаторов процесса терминала. Исполняемый процесс не обрабатывает прерывания клавиатуры.

Bash (Bourne again shell) — интерпретатор командной строки, разработанный Брайаном Фоксом. Bash заменил интерпретатор Bourne shell в Linux-дистрибутивах и некоторых проприетарных Unix-системах. Bash совместим с POSIX-стандартом. Некоторые его расширения стандартом не предусмотрены.

Bash-скрипт (Bash script) — текстовый файл, содержащий команды интерпретатора. Bash исполняет скрипты в не интерактивном режиме.

Best Practices (хорошая практика) — рекомендованные приемы использования языка программирования или какой-то технологии. Пример для языка Bash — заключение строк в двойные кавычки, чтобы избежать word splitting.

Bottleneck (букв. бутылочное горло, узкое место) — компонент или ресурс информационной системы, который ограничивает её производительность или пропускную способность.

Bourne shell — интерпретатор командной строки, разработанный Стивеном Борном. Он заменил оригинальный интерпретатор Кена Томпсона в Unix версии 7. Все функции Bourne shell соответствуют POSIX-стандарту. Но некоторые упомянутые в стандарте возможности отсутствуют.

Brace Expansion (подстановка фигурных скобок) — в Bash генерация слов из заданных частей. Эта функция отсутствует в стандарте POSIX. Например, следующие две команды эквивалентны:

1 cp test.{txt,md,log} Documents
2 cp test.txt test.md test.log Documents

C

Coding Style (стандарт оформления кода) — набор правил и соглашений для написания исходного кода программ. Задача стандарта — помочь нескольким программистам писать, читать и понимать общий исходный код.

Command Substitution (подстановка команды) — подстановка вместо команды её вывода в stdout. Вывод получается после исполнения команды в subshell. Пример:

echo "$(date)"

E

Endianness (порядок байтов) — порядок байтов при хранении чисел в памяти компьютера. Он определяется свойствами центрального процессора. Сегодня используются порядки от старшего к младшему (big-endian) и от младшего к старшему (little-endian). Некоторые CPU поддерживают оба варианта (bi-endian). Переключение между ними происходит при запуске компьютера. Пример хранения четырёхбайтового числа 0x0A0B0C0D для разных порядков:

0A 0B 0C 0D     big-endian
0D 0C 0B 0A     little-endian

Error-prone (подверженный ошибкам) — характеристика неудачных приёмов программирования и решений. Эти решения работают корректно в частных случаях, но приводят к ошибкам при определённых входных данных или условиях. Пример error-prone решения — обработка вывода утилиты ls в конвейере:

ls | grep "test"

Exit Status (код возврата) — в Bash целочисленное значение от 0 до 255, которое команда возвращает интерпретатору при завершении. Код возврата 0 означает успешное выполнение команды. Все остальные коды указывают на ошибку.

F

Filename Expansion (подстановка имён файлов) — в Bash подстановка имён файлов вместо шаблонов, содержащих символы ?, * и [. Пример:

rm -rf *

Foreground (активный режим) — в Bash режим исполнения процесса. При этом его идентификатор относится к группе идентификаторов процесса терминала. Исполняемый процесс обрабатывает прерывания клавиатуры.

G

Globbing или glob — в Bash другое название для filename expansion.

I

Input Field Separator или IFS (разделитель поля ввода) — список следующих друг за другом символов. Bash использует их как разделители при обработке вводимых строк (в том числе и для word splitting). По умолчанию это символы пробела, табуляции и перевода строки.

L

Linux-окружение (Linux Environment) — другое название для POSIX-окружения.

P

Parameter Expansion (подстановка параметров или подстановка переменных) — в Bash подстановка вместо имени переменной или параметра его значения. Примеры:

echo "$PATH"
echo "${var:-empty}"

Portable Operating System Interface или POSIX (переносимый интерфейс операционных систем) — набор стандартов. Они описывают интерфейсы взаимодействия прикладных программ с ОС, командный интерпретатор и интерфейсы утилит. POSIX поддерживает совместимость ОС семейства Unix. Благодаря этому, между ними легче переносить прикладные программы.

POSIX-окружение (POSIX environment) — программная среда полностью или частично совместимая со стандартом POSIX. Для полной совместимости нужна поддержка ядром ОС, командной оболочкой и файловой системой. Для частичной совместимости достаточно окружения наподобие Cygwin.

POSIX Shell — стандарт для POSIX-систем с описанием минимального набора функций командного интерпретатора. Если интерпретатор имеет эти функции, он считается POSIX-совместимым. При этом стандарт никак не ограничивает дополнительные возможности и расширения. В основу стандарта легла реализация ksh88 Korn shell. Этот интерпретатор появился позже, чем Bourne shell. Поэтому некоторые функции стандарта POSIX отсутствуют в Bourne shell.

Process Substitution (подстановка процесса) — в Bash аналог подстановки команды. В отличие от неё исполнение происходит асинхронно. При этом ввод и вывод команды привязаны к файлам. Содержимое этих файлов Bash перенаправляет родительскому процессу. Пример:

diff <(sort file1.txt) <(sort file2.txt)

Q

Quote Removal (удаление кавычек) — подстановка, которую Bash выполняет последней. Она удаляет неэкранированные символы \, ‘ и “, которые не были получены в результате предыдущих подстановок.

S

Short-circuit evaluation (короткое замыкание) — вычисление только тех операндов логического оператора, которые достаточны для вывода значения всего выражения.

Subshell (подоболочка) — способ группирования команд. Команды исполняются в интерпретаторе, запущенном в дочернем процессе. Переменные, определённые в дочернем процессе, не доступны в родительском. Пример выполнения команд в subshell:

(ps aux | grep "bash")

T

Tilde Expansion (подстановка тильды) — в Bash подстановка вместо символа тильда ~ домашнего каталога пользователя. Путь до домашнего каталога читается из переменной HOME.

U

Unix-окружение (Unix environment) — другое название для POSIX-окружения.

W

Word Splitting (разделение слов) — в Bash разделение аргументов командной строки на слова и передача их отдельными параметрами. Символы из переменной IFS используются как разделители. Аргументы, заключённые в кавычки, не обрабатываются. Пример:

cp file1.txt file2.txt "my file.txt" ~