Терминалы, оболочки, консоли и командные строки
Оригинал: Terminals, shells, consoles, and command lines
Автор: Seth Kenlon (Red Hat).
Дата публикации: 23 марта 2020 г.
Перевод: В.Костромин
Дата перевода: 12 мая 2020 г.
Терминалы, оболочки, консоли и командные строки связаны, но эти термины не являются синонимами. Сет Кенлон объясняет различия.
Если вы изучаете Linux или Unix, вы могли встречать термины «терминал», «командная строка», «оболочка» и «консоль», и у вас может быть справедливое замешательство относительно того, что есть что, и обозначают ли эти слова одно и то же. Определенно эти термины связаны, но есть нюансы и различия, которые могут иметь важные последствия. В этой статье вы найдете необходимые разъяснения.
Где скачать Windows Terminal
Прежде чем приступить, два важных примечания: в Windows 11 Терминал Windows уже встроен (нажмите правой кнопкой мыши по кнопке Пуск и вы сможете его запустить), а для работы нового терминала в Windows 10 требуется версия 1903 или новее.
Бесплатно скачать Windows Terminal можно из двух официальных источников:
- Microsoft Store — достаточно ввести Windows Terminal в поиске магазина или перейти на страницу приложения https://www.microsoft.com/ru-ru/p/windows-terminal/9n0dx20hk701
- Загрузить последний релиз из GitHub, скачиваем файл .msixbundle из раздела Assets и устанавливаем его как обычное приложение — https://github.com/microsoft/terminal/releases/
После установки Windows Terminal готов к работе — можно запускать. При первом старте по умолчанию будет открыта вкладка с PowerShell.
Терминалы в Windows
Стандартный эмулятор терминала Windows Console появился ещё в первых версиях Windows NT почти тридцать лет назад. В этом терминале по умолчанию запускается оболочка командной строки (интерпретатор cmd), PowerShell и другие консольные утилиты.
Командная строка Windows (интерпретатор cmd.exe)
Оболочка Windows PowerShell
Также в Windows 10 поддерживается подсистема WSL (Windows Subsystem for Linux), позволяющая установить внутри Windows один из дистрибутивов Linux и пользоваться оболочками командной строки (например, bash или zsh) и стандартными утилитами (grep, sed, awk, …) из этой операционной системы.
Оболочка bash (WSL, Linux Ubuntu)
По правде говоря, за прошедшие десятилетия терминал Windows Console изменился совсем незначительно, работать в нём было неудобно.
Поэтому разработчики, которым часто приходилось пользоваться командной строкой, предпочитали пользоваться программными терминалами сторонних производителей (ConEmu, cmder, Console2, Hyper, Git Bash).
Terminal Emulator и Pseudoterminal
Каждый раз, когда мы открываем новый терминал в X Window System, GNOME Terminal Server порождает новый процесс и запускает в нём выбранную по умолчанию программу. Обычно, это какой-то Shell (например, Bash).
Общение с запущенной программой происходит через так называемый Pseudoterminal (псевдотерминал, PTY). Сам псевдотерминал существует в ядре, однако ввод получает из пользовательского пространства — из эмулятора терминала.
Псевдотерминал состоит из следующих двух виртуальных TTY устройств:
1) PTY master (PTM) — ведущая часть псевдотерминала. Используется GNOME Terminal Server для передачи ввода с клавиатуры в запущенную внутри терминала программу, а также для чтения вывода программы и отображения вывода на дисплей. GNOME Terminal Server в свою очередь общается с X Window System по X протоколу.
2) PTY slave (PTS) — ведомая часть псевдотерминала. Используется программой, запущенной внутри терминала, для чтения ввода с клавиатуры и отображения вывода на экран. По крайней мере, так думает сама программа (объясню, что это значит, чуть далее).
Любые данные, записанные в PTS устройство, являются вводом PTM устройства, то есть становятся доступны для чтения на PTM устройстве. И наоборот: любые данные, записанные в PTM устройство, являются вводом PTS устройства. Именно таким образом и происходит общение GNOME Terminal Server и запущенной внутри терминала программы. Каждому PTM устройству сопоставляется свое PTS устройство.
Процесс запуска нового терминала выглядит примерно следующим образом:
1) GNOME Terminal Server создает master и slave устройства с помощью вызова функции open() на специальном устройстве /dev/ptmx. Вызов open() возвращает файловый дескриптор созданного PTM устройства — master_fd.
2) GNOME Terminal Server создает новый процесс с помощью вызова функции fork() . Данный процесс и будет являться новым терминалом.
3) В терминале PTS устройство открывается на файловых дескрипторах 0, 1, 2 (stdin, stdout и stderr соответственно). Теперь стандартные потоки ввода/вывода терминала ведут на данное устройство.
4) В терминале запускается нужная программа с помощью вызова функции exec() . Обычно запускается какой-то Shell (например, Bash). Любая программа, запущенная впоследствии из Bash, будет иметь те же файловые дескрипторы, что и сам Bash, то есть потоки программы будут направлены на PTS устройство.
Вы можете сами посмотреть, куда направлены стандартные потоки вывода терминала, с помощью команды ls -la /proc/self/fd :
PTS устройство находится по пути /dev/pts/N, а путь к PTM устройству нас абсолютно не интересует. Дело в том, что GNOME Terminal Server уже имеет файловый дескриптор открытого PTM устройства и ему не требуется путь к нему, однако в дочернем процессе мы должны открыть PTS устройство на стандартных потоках вывода с помощью вызова функции open() , которая требует путь к файлу.
Помните, я сказал, что программа, использующая PTS устройство, только думает, что она общается напрямую с терминалом? Дело в том, что PTS также является терминальным устройством (TTY устройством), но разница между PTS устройством и действительным TTY устройством в том, что PTS устройство ввод получает не с клавиатуры, а с master устройства, а вывод идет не на дисплей, а на master устройство. Именно поэтому псевдотерминал назван так — псевдотерминал лишь имитирует (опять??) терминал. Разница между эмулятором терминала и псевдотерминалом в том, что эмулятор терминала — это лишь графическая программа, позволяющая запускать терминал прямо внутри оконного интерфейса, но реализована эта возможность с помощью псевдотерминала.
То, что PTS устройство является TTY устройством — это очень важно. Вот почему:
- Программе, к которой прикреплено терминальное устройство, доступны все возможности обычного терминала. Например: отключение эха, отключение/включение каноничного вида.
- Программа, зная, что к ней прикреплен терминальное устройство (говорится, что программа имеет управляющий терминал), может работать в интерактивном режиме и просить у пользователя ввода. Например, спрашивать логин и пароль.
- Здесь также существует TTY Line Discipline, поэтому мы имеем возможность обрабатывать управляющие символы до того, как они дойдут до программы, а также форматировать вывод программы.
PTM устройство также является TTY устройством, но это не играет никакой роли, так как оно не используется в роли управляющего терминала. Более того, дисциплина линии PTM устройства установлена в raw режим, поэтому процессинг при передаче данных от PTS к PTM устройству не производится. Однако, вызовы read() и write() из пользовательского пространства все равно сперва обслуживаются дисциплиной линии на обоих устройствах. Данный момент сыграет еще большую роль, как мы увидим позднее.
Процесс общения GNOME Terminal Server и запущенной внутри терминала программы выглядит следующим образом:
Следует поподробнее рассмотреть роль, которую играет дисциплина линии при общении между обеими частями псевдотерминала. Здесь дисциплина линии отвечает за процессинг данных, переходящих от PTM к PTS устройству, а также за доставку данных из одной части псевдотерминала в другую. Когда мы находимся в драйвере PTS устройства, мы задействуем дисциплину линии PTM устройства, и наоборот.
Зачем нужен Терминал?
Есть три причины, которые делают Терминал незаменимым инструментом для исследователей, анализирующих большие массивы данных:
- он позволяет программировать манипуляции с файлами и папками в операционной системе
- Внутри него можно запускать другие программы и программировать их взаимодействие друг с другом
- Через него осуществляется работа с серверами и суперкомпьютерами, позволяющими анализировать гигабайты данных в сотни раз быстрее, чем на персональном компьютере
Разберем каждый из этих аспектов подробнее.
Терминал, как манипулятор файлов и папкок
Большинству пользователей нет необходимости использовать Терминал благодаря графической оболочке их операционной системы. Однако, без него не обойтись, когда речь идет о манипуляциях с файлами и папками более сложными, чем: «скопировать документ из одной папки и вставить в другую». Я приведу простой пример, показывающий ограниченность использования графической оболочки операционной системы.
Допустим, мне нужно переименовать фотографию и добавить к текущему названию дату, когда эта фотография была сделана. Что может быть проще, скажите Вы: «открой свойства файла, скопируй дату создания файла, закрой окно «Свойства» и вставь дату в название файла». Так и есть, все довольно просто, вот только повторить это действие нужно для всех фотографий на моем компьютере (а их у меня более 25 тысяч). Очевидно, что если я буду делать это подобным образом, то это задание отнимет у меня несколько недель.
Решение этой же задачи в Терминале займет не более получаса даже у начинающего пользователя. Фокус в том, что в Терминале пользователь может программировать действия, делегируя компьютеру рутинную работу. В разных типах эмуляторов терминала – разные языки программирования, но вероятно самым распространенным в наши дни является язык bash (о нем скоро будет отдельная статья).
Использование Терминала для создания скриптов
Другая важная особенность эмуляторов терминала – это возможность запуска в нем других программ, чтобы автоматизировать процессы в программах и обеспечить автономное взаимодействие между ними. Если входные и выходные данные этих программ оформить в виде файлов, то Терминал сможет запускать последовательно программы. Алгоритм будет напоминать цепочку из таких действий: запустить программу А, загрузить туда входные данные (файл А), экспортировать результаты анализа в файл B, закрыть программу A, запустить программу B, загрузить туда файл B, ну и так далее…
Таким образом, миллионы файлов могут быть проанализированы автоматически и в быстрые сроки. Эта особенность делает Терминал незаменимым инструментом среди биоинформатиков, генетиков и эволюционных биологов, работающих с геномами организмов, которые в оцифрованном виде представляют из себя множество текстовых файлов оформленных в разных форматах.
Управления суперкомпьютерами и серверами через Терминал
Терминал является не только окном в операционную систему персонального компьютера, но также и в операционную систему сервера или суперкомпьютера, который может находиться в тысячах километров от Вашего текущего месторасположения. Через эмулятор терминала на суперкомпьютер можно подавать алгоритмы (bash-скрипты), выполнение которых на Вашем компьютере могло бы занять неделю. Благодаря своей мощности суперкомпьютер проведет расчёты за считанные часы. Подобный подход позволяет проводить анализ больших массивов данных в кратчайшие сроки.
Как правило, на суперкомпьютерах и серверах стоят версии операционной системы Linux. Так как различий между эмуляторами терминала на Линуксе и на Маке практически нет, в дальнейших статьях я буду писать только об эмуляторах терминала, работающих на языке программирования bash (например, программа Terminal).
Настройки привязки клавиш
«keybindings»Массив в settings.jsonпереопределениях или дополнениях клавиша по умолчанию, установленный в defaults.json. Каждая привязка клавиш определяется как объект с «command«комбинацией клавиш и «keys». Например:
В некоторых случаях это «command»может быть приложение «action«с одним или несколькими аргументами. Например:
«keys»Значение принимает модификаторы ctrl+, shift+и alt+затем:
тип | ключи |
функциональные клавиши | f1-f24 |
буквенно-цифровые клавиши | a-z, 0-9 |
символьные клавиши | -, =, [, ], , ;, ‘. / |
клавиши курсора | down, left, right, up, pagedown, pageup, pgdn, pgup, end, home,plus |
клавиши действий | tab, enter, esc, escape, space, backspace, delete,insert |
клавиши цифровой клавиатуры | numpad_0-numpad_9, numpad0-numpad9, numpad_add, numpad_plus, numpad_decimal, numpad_period, numpad_divide, numpad_minus, numpad_subtract,numpad_multiply |
Например, если вы хотите открыть поле поиска с помощью Ctrl+ F, вы можете добавить строку в «keybindings«массив в settings.json:
Поле поиска также откроется с Ctrl+ Shift+, Fпотому что этот параметр определен в defaults.json-, если вы не назначите комбинацию клавиш другой команде.
Ползу в направлении мечты. Пост № 9
Всем привет, дорогие Пикабушники. Прошел еще месяц и как обещала, выкладываю видео игры, которая получилась по итогу. Это не полноценная игра, это проект, который я делала, обучаясь на Udemy. Вот само видео, после него будет небольшой обзор самого курса и того, чему научилась, ну и планы на будущее.
И так, курс скажу я не плохой, но и не отличный. Он очень поверхностный с одной стороны, но с другой, если это самое начало, и ты ничего не умеешь, то этот курс “для скелета” очень даже подойдет. Но, конечно, необходимо будет изучать Unity дальше, более углубленно, чтобы использовать в будущем правильные вещи в игре. Мне повезло еще в том, что у меня имеется очень хороший наставник, который мне объяснял какие вещи, например лучше не использовать, хотя они указаны в курсе, т.к. они, например жрут много ресурсов, памяти или медленные и т.д. Ну и давал дополнительные какие то задания, вот тут и начинается настоящее обучение, когда делаешь сам, а не просто повторяешь всё по курсу. Еще в этом курсе много багов, которые автор даже убирает в каких-то уроках, но на самом деле они остаются. Как например двойной прыжок. То решение, которое он показывает, на самом деле не решает эту проблему. Но как я и говорила, курс очень поверхностный, и автор сам этого не скрывает. Из плюсов, дополнительно, автор показывает еще и мобильное управление, это не плохо.
И так, в этом курсе я поняла, как работать с камерой, создавать персонажа, как работать с ассетами, даже как делать анимацию (не глобально, конечно) но что-то про анимировать по мелочи могу. Управление персонажем: бег, ходьба, прыжки, боевка, работа с врагами, их движения, атака, преследование персонажа, работа с префабами, как добавлять музыку и определенные звуки, работа со сценами, менюшками, какие-то взаимодействия в игре. В общем, считаю, что у меня появилась не плохая база. Которую я могу уже перенести на свой проект, и уже на своем проекте изучать Юнити более углубленно. Думаю, в этом плане уже хорошо будут помогать книги по Unity.
Теперь, после окончания этого курса, считаю, что можно больше времени уделять и С#. До этого основной упор был на Юньку. НО! Для тех, кто только начинает или собирается начинать, мой совет, в начале изучаете С#, просто основы, а потом уже переходите в Unity. Иначе у вас будет каша и вы вообще не будете понимать, чтобы пишите.
И так, мои планы. Наверное, в начале апреля хорошо займусь С#, а после начну свой проект и параллельно уже буду более углубленно изучать и шарп, и юньку. Свой проект тоже хочется создать уже по нормальному, поэтому еще немного времени уделю на геймдизайну и левелдизайну. Что бы понимать, что это вообще за верь и было более полное понимание своего проекта. Всё-таки это потом будет мой карточкой. В которую я скорее всего загляну в будущем и буду удивляться, какую же чушь я раньше писала в коде)))
Если у кого то в процессе обучения появились какие то вопросы, то можете писать мне в телеграмм, группа @annaleeplay Она у меня больше по играм, но возможно совмещу ее с обучением с геймдевом.
Устранение проблем с терминалом Windows
Если приложение Терминал не работает из-за серьезных настроек или вы просто хотите вернуть настройки по умолчанию, вы можете сбросить Терминал Windows через его страницу настроек или, поскольку приложение Терминал является приложением UWP, вы также можете сбросить приложение через приложение Настройки на вашем компьютере. ПК с Windows 10. Кроме того, вы можете сбросить приложение Terminal с помощью PowerShell.
Другой способ устранения неполадок, который вы можете попробовать, — это выйти из Windows 10, а затем войти обратно или перезагрузить систему.
Если ничего не помогает, вы всегда можете удалить и переустановить Терминал Windows.
Хочу больше? Взгляните на этот пост Windows Terminal Tips and Tricks.
.