Программы Shell предоставляют пользователю интерфейс, через который он общается с другими программами.
Разновидности: C shell (csh), Z shell (zsh), Korn shell (ksh), Bourne shell, Debian's Almquist shell (dash), Bourne Again shell (Bash)
Bash это программа shell, слушающая мои команды и делающая то, что я ей говорю.
Есть два режима Bash:
Работа с консолью, Bash ждет команды от пользователя, пока команда выполняется ты не можешь пользоваться Shell-ом.
Работа bash со скриптами.
Bash (Bourne Again Shell) - это бинарная программа, которая запускается либо в интерактивном, либо в неинтерактивном режиме, обычно в текстовом интерфейсе, предоставляемом программой-эмулятором терминала.
Программа - это набор заранее написанных инструкций, которые может выполнить ядро твоей системы. Программа отдаёт инструкции ядру напрямую. Ядро технически тоже является программой, но такой, которая работает постоянно и вместо этого общается с hardware.
Каждый раз, когда программа запускается, система создаёт для неё работающий процесс. У процессов есть разъёмы, называемые файловыми дескрипторами, которые позволяют им подключать потоки, ведущие к файлам, устройствам или другим процессам.
Файловый дескриптор 0 также называется стандартным вводом. Именно отсюда большинство процессов получают свои входные данные. По умолчанию у процессов в твоём терминале стандартный ввод «подключён» к твоей клавиатуре. Точнее говоря, к вводу, который получает твоя программа-терминал.
Файловый дескриптор 1 также называется стандартным выводом. Именно сюда большинство процессов отправляют свои выходные данные. По умолчанию у процессов в твоём терминале стандартный вывод «подключён» к твоему дисплею. Точнее говоря, твоя программа-терминал отображает этот вывод в своём окне.
Файловый дескриптор 2 также называется стандартным потоком ошибок. Именно сюда большинство процессов отправляют свои сообщения об ошибках и информационные сообщения. По умолчанию у процессов в твоём терминале стандартный поток ошибок «подключён» к твоему дисплею - точно так же, как и стандартный вывод.
Процесс не ограничен только этими тремя файловыми дескрипторами - он может создавать новые с их собственными номерами и подключать их к другим файлам, устройствам или процессам по своему усмотрению.
Эти потоки информации между файлами, устройствами и процессами называются потоками (streams).
Поток - это информация (конкретно, байты), текущая по связям между файлами, устройствами и процессами в работающей системе. Они могут переносить любые байты, и принимающая сторона может потреблять их байты только в том порядке, в котором они были отправлены.