Краткие ссылки
Linux основывается на принципах дизайна Unix, что обеспечивает его высокую функциональность. Программы общаются через текст, их можно комбинировать с помощью пайплайнов, и каждая из них выполняет свою задачу качественно. Однако, помимо этого, программы могут вести себя по-разному и демонстрировать множество разнообразных характеристик.
Фоновые процессы
Многозадачная операционная система, такая как Linux, может одновременно запускать множество программ. Те, которые выполняются без непосредственного контроля пользователя, известны как фоновые процессы. В основном это один тип фонового процесса, который обычно называется «демон».
1. Демон
Термин «демон» может показаться странным, но на самом деле он просто означает «фоновый процесс». Демон обычно использует различные хитрости, чтобы продолжать работу, независимо от других процессов в системе. Например, он может создать свою копию, которая будет работать независимо от оболочки. Программы, такие как inetd или launchd, могут выполнять эти функции от имени других программ и сами являются демонами.
Часто имена демонов заканчиваются на «d», например httpd (веб-сервер Apache), inetd (демон интернет-сервисов) и systemd.
Если внешней программе или пользователю необходимо взаимодействовать с демоном, это обычно происходит путем отправки сигнала, который инструктирует демона перезапустить или перезагрузить свою конфигурацию. Вы можете использовать инструмент ps, чтобы узнать, какие демоны работают в вашей системе.
Интерфейс командной строки
Большинство программ в Linux имеют интерфейс командной строки, что означает, что вы взаимодействуете с ними, вводя текстовые команды. Это наиболее распространенные и, как правило, легкие в использовании терминальные программы. Обычно эти программы запускаются, быстро выполняются и затем останавливаются по завершении работы.
2. Cantrip
Самый простой тип программы — неофициально называемый "cantrip" — просто выполняется без ввода или вывода. Эти программы часто работают с файлами или выполняют связанные с ними задачи системного администрирования. Программа rm, которая удаляет файл, является типичным примером:
Если файл существует, rm удалит его, и ваш терминал выведет приглашение на следующей строке, ожидая следующую программу или команду:
У команды rm есть несколько опций для управления ее работой, но ее простота заключается в отсутствии ввода и вывода.
3. Фильтр
Многие программы Linux совершенно противоположны: они требуют ввода и выдают вывод. Часто эти программы каким-то образом изменяют свой ввод; таких программ много: cut, head, sort, uniq и т. д.
Команда grep особенно хорошо иллюстрирует значение фильтра: она просматривает каждую строку ввода и отображает ее как вывод, если она удовлетворяет определенному условию. В случае grep условием является регулярное выражение, которое соответствует заданному шаблону текста:
Фильтры отлично справляются с манипуляцией данными и часто используются в пайплайнах, которые объединяют несколько команд для выполнения сложной задачи. Вы даже можете комбинировать эти инструменты, чтобы создать примитивную базу данных.
4. Ввод
В отличие от фильтров, таких программ, как ввод, очень мало. Эта категория принимает ввод, но не выдает никаких результатов на экран—по крайней мере, не выводит их в терминале. Один из примеров — lpr, программа для печати, которая распечатывает файл или стандартный ввод на бумаге.
Программы ввода часто выводят данные на устройства, отличные от экрана, такие как espeak, которая преобразует текст в аудиоречь.
5. Источник
Противоположность вводу — это «источник», программа, которая выдает результат, не обрабатывая никакого ввода. Источники получают данные из других мест: из окружения или из файла, указанного в аргументах, например.
Программа ls использует различные методы для перечисления файлов, но никогда не обрабатывает стандартный ввод. В самом простом варианте команда ls даже не требует аргументов:
По умолчанию команда ls работает с текущим каталогом, выводя его содержимое. Вы можете показать детали другого каталога, файла или набора файлов, передав аргументы командной строки:
6. Компилятор
Компилятор — безусловно, самый сложный тип программы CLI, обычно используемый в программировании. Компилятор работает как любая другая программа, но может потребовать больше времени на выполнение из-за сложности своей работы.
Как правило, их имена заканчиваются на «c» для «компилятора»: cc, javac или rustc. Компилятор немного напоминает cantrip, но всегда работает с файлами, преобразуя один тип данных в другой.
Компилятор c, cc, демонстрирует типичное поведение компилятора:
Эта команда запускает компилятор для двух файлов—file1.c и file2.c—создавая третий файл с именем program. Здесь аргумент «-o» означает «выходной файл».
Важно отметить, что компилятор может использовать дополнительные файлы, в зависимости от своей задачи или языка. Программа на c, такая как file1.c, может включать заголовочный файл (например, file1.h), который компилятор найдет и использует для генерации окончательной программы, даже если он не указан явно при выполнении команды.
Это часть того, что делает компиляторы такими сложными: они могут выполнять множество задач в фоновом режиме, не требуя от них прямых указаний на действие.
Интерактивные программы
Предыдущие программы работают неинтерактивно. Когда вы их запускаете, вы не можете напрямую управлять их поведением. Последние два типа программ значительно отличаются.
7. По строкам
Самая простая форма взаимодействия—это по одной строке. В начале истории Unix такие команды были довольно распространены, так как они работали на телетайпах: усовершенствованных пишущих машинках, которые обрабатывали по одной строке за раз.
В наши дни эти программы сильно напоминают "интерактивные лишь по названию", но в 1960-х они были настоящей революцией. Если вы готовы, вы можете вернуться в те дни с помощью оригинального текстового редактора, ed:
Этот вывод из ed демонстрирует команды, которые записывают текст "hello world" в файл с именем foo.txt. Некоторые из этих строк введены пользователем: «a» — это команда для добавления текста в буфер, «,p» — печатает текущий буфер, и «w» — записывает буфер в файл. После записи ed сообщает количество записанных байтов, в данном случае 13.
Если вы запомните одну вещь о ed, это должна быть команда «q», которая завершает программу. Она не сохранит новый текст, который вы ввели, но если вы случайно запустите ed, ввод «q» и нажатие Enter позволят вам как можно быстрее выйти!
Как видно, редактирование текста построчно — это трудоемкий процесс, подверженный ошибкам. Программа ed может быть полезна в экстренной ситуации, но программы, работающие построчно, обычно устарели.
8. TUI
Насколько лучше альтернатива для интерактивных программ, особенно для текстовых редакторов, стиль TUI: текстовый пользовательский интерфейс. Название подчеркивает различие между этими программами и графическими приложениями GUI, которые используют графику для достижения более-менее того же результата: действительно интерактивной программы.
Текстовый редактор vim по-прежнему в значительной степени основан на командах, но вы можете использовать его для навигации в текстовом файле, поиска текста, удаления целых кусков и просмотра всего происходящего на экране в реальном времени. Современные TUI активно используют цвет и символы для рисования рамок, чтобы приблизиться к графическому интерфейсу:
Хотя вы не всегда будете видеть ссылки на эти типы программ, полезно знать, что они существуют, и понимать, что они делают. Каждый тип имеет свои сильные стороны и может использоваться в определенных контекстах для выполнения множества задач.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Любите активный отдых на природе? Подписывайтесь на канал Поход лайфхак в Яндекс Дзен — кладезь полезных советов для любителей активного отдыха!
Вы также можете читать наши материалы в:
- Telegram: https://t.me/gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru