В чем разница между терминалом, консолью, оболочкой и командной строкой?

В чем разница между терминалом, консолью, оболочкой и командной строкой?

10 ответов

Решение

Короткий ответ:

  • терминал = среда ввода / вывода текста
  • консоль = физический терминал
  • shell = интерпретатор командной строки

Длинный ответ:

Консоль и терминал тесно связаны. Первоначально они имели в виду оборудование, с помощью которого вы могли взаимодействовать с компьютером: в первые дни существования Unix это означало устройство в стиле телепринтера, напоминающее пишущую машинку, иногда называемое телетайпом, или сокращенно "tty". Название "терминал" пришло с электронной точки зрения, а название "консоль" с точки зрения мебели. Очень рано в истории Unix электронные клавиатуры и дисплеи стали нормой для терминалов.

Терминал

В терминологии Unix терминал - это особый тип файла устройства, который реализует ряд дополнительных команд ( ioctls) помимо чтения и записи. Некоторые терминалы предоставляются ядром от имени аппаратного устройства, например, при вводе с клавиатуры и выводе на экран текстового режима или при вводе и выводе, передаваемом по последовательной линии. Другие терминалы, иногда называемые псевдо-терминалами или псевдо-терминалами, предоставляются (через тонкий слой ядра) программами, называемыми эмуляторами терминалов. Некоторые типы эмуляторов терминала включают в себя:

  • Приложения с графическим интерфейсом, работающие в X Window System: Xterm, Gnome Terminal, Konsole, Terminator и т. Д.
  • Screen и tmux, которые обеспечивают уровень изоляции между программой и другим терминалом
  • Ssh, который соединяет терминал на одной машине с программами на другой машине
  • Ожидайте, для сценариев терминальных взаимодействий

Слово " терминал" также может иметь более традиционное значение устройства, через которое оно взаимодействует с компьютером, обычно с клавиатурой и дисплеем. Например, X-терминал - это своего рода тонкий клиент, специализированный компьютер, единственной целью которого является управление клавиатурой, дисплеем, мышью и, иногда, другими периферийными устройствами взаимодействия с человеком, при этом реальные приложения работают на другом, более мощном компьютере.

Приставка

Консоль, как правило, представляет собой терминал в физическом смысле, который по определению является основным терминалом, напрямую связанным с машиной. Консоль представляется операционной системе как (реализованные в ядре) терминалы. В некоторых системах, таких как Linux и FreeBSD, консоль выглядит как несколько терминалов (ttys) (между этими терминалами переключаются специальные комбинации клавиш); просто чтобы запутать дело, имя, данное каждому конкретному терминалу, может быть "консоль", "виртуальная консоль", "виртуальный терминал" и другие варианты.

См. Также Почему виртуальный терминал "виртуальный", и что / почему / где "настоящий" терминал?,

Интерфейс командной строки]

Командная строка - это интерфейс, в котором пользователь вводит команду (которая выражается в виде последовательности символов - обычно это имя команды сопровождается некоторыми параметрами) и нажимает клавишу Return, чтобы выполнить эту команду.

Ракушка

Оболочка - это основной интерфейс, который видят пользователи при входе в систему и который предназначен для запуска других программ. (Я не знаю, является ли первоначальная метафора тем, что оболочка является домашней средой для пользователя, или что оболочка - это то, в чем работают другие программы.)

В кругах Unix оболочка специализировалась на командной оболочке, сосредоточенной вокруг ввода имени приложения, которое нужно запустить, затем имен файлов или других объектов, с которыми должно работать приложение, и нажатия клавиши Enter. Другие типы сред (за исключением недавнего исключения из Gnome Shell) обычно не используют слово "shell"; например, оконные системы включают " оконные менеджеры " и " окружение рабочего стола ", а не "оболочку".

Есть много разных оболочек Unix. По умолчанию оболочка Ubuntu - Bash (как и большинство других дистрибутивов Linux). Популярные альтернативы включают zsh (что подчеркивает мощь и настраиваемость) и fish (что подчеркивает простоту).

Оболочки командной строки включают конструкции управления потоком для объединения команд. Помимо ввода команд в интерактивном режиме, пользователи могут писать сценарии. Наиболее распространенные оболочки имеют общий синтаксис, основанный на Bourne_shell. При обсуждении " программирования оболочки ", оболочка почти всегда подразумевается как оболочка в стиле Борна. Некоторые оболочки, которые часто используются для написания сценариев, но не имеют расширенных интерактивных функций, включают оболочку Korn (ksh) и множество вариантов золы. Практически любая Unix-подобная система имеет оболочку в стиле Борна, установленную как /bin/sh, обычно ясень, кш или баш. На Ubuntu, /bin/sh это Dash, вариант Ash (выбран, потому что он быстрее и использует меньше памяти, чем Bash).

В системном администрировании Unix оболочка пользователя - это программа, которая вызывается при входе в систему. Обычные учетные записи пользователей имеют оболочку командной строки, но пользователи с ограниченным доступом могут иметь ограниченную оболочку или какую-либо другую конкретную команду (например, для передачи файлов). только счета).


Разделение труда между терминалом и оболочкой не совсем очевидно. Вот их основные задачи.

  • Ввод: терминал преобразует ключи в управляющие последовательности (например, влево\e[D). Оболочка преобразует управляющие последовательности в команды (например, \e[Dbackward-char).
  • Строчная редакция, история ввода и завершение обеспечиваются оболочкой.
    • Терминал может предоставить свою собственную версию строки, историю и завершение взамен, и отправлять строку в оболочку только тогда, когда он готов к выполнению. Единственный общий терминал, который работает таким образом, M-x shell в Emacs.
  • Вывод: оболочка выдает такие инструкции, как "display foo "," Переключить цвет переднего плана на зеленый "," переместить курсор на следующую строку "и т. Д. Терминал действует в соответствии с этими инструкциями.
  • Подсказка - это просто концепция оболочки.
  • Оболочка никогда не видит вывод команд, которые она выполняет (если не перенаправлена). Выходная история (прокрутка) является чисто терминальной концепцией.
  • Копирование-вставка между приложениями обеспечивается терминалом (обычно с помощью последовательности клавиш мыши или клавиш, таких как Ctrl + Shift + V или Shift + Insert). Оболочка также может иметь свой собственный внутренний механизм копирования-вставки (например, Meta + W и Ctrl + Y).
  • Управление заданиями (запуск программ в фоновом режиме и управление ими) в основном выполняется оболочкой. Тем не менее, это терминал, который обрабатывает комбинации клавиш, такие как Ctrl + C, чтобы убить задание переднего плана и Ctrl + Z, чтобы приостановить его.

Переработано с Unix и Linux

Визуальное представление.

Терминал

Что-то, за что можно сесть и работать как босс.

Терминал

Приставка

Некоторое оборудование, которое делает кучу вещей.

Приставка

Другим примером консоли будет игровая консоль, такая как Super Nintendo [где вы можете играть в Actraiser]

Ракушка

В основном приложение для запуска команд.

РакушкаРакушка

Интерфейс командной строки]

В основном все, что вы вводите команды.

CLICLI

Из Информационного проекта Linux:

Terminal: Технически, окно терминала, также называемое эмулятором терминала, является текстовым окном в графическом интерфейсе пользователя (GUI), который эмулирует консоль.

В наших словах приложение с графическим интерфейсом, откуда мы можем получить доступ к консоли пользователя.

Консоль: приборная панель, содержащая элементы управления для компьютера

Оболочка: Оболочка - это программа, предоставляющая традиционный текстовый пользовательский интерфейс для Linux и других Unix-подобных операционных систем.

Командная строка. Командная строка - это пробел справа от командной строки в режиме полнотекстового отображения на мониторе компьютера (обычно ЭЛТ или ЖК-панели), в котором пользователь вводит команды и данные.

Ответы здесь кажутся очень хорошими. Однако они слишком сухие и технические на мой вкус, поэтому я попробую.

Терминал - это конец чего-то, где он заканчивается. Например, если вы едете на метро в каком-то городе, станция, на которой вы спускаетесь, является вашим терминалом. Или в аэропорту терминал, где люди выходят, когда они достигают страны назначения, считается терминалом. Причина, по которой терминал в аэропорту в настоящее время является местом, куда вы доставляете людей на борт, и местом, куда вы выводите их из самолета, по очевидным экономическим причинам.

Цель компьютера - получить данные, что-то с ними сделать и выложить результат. Таким образом, терминал - это любое устройство, с которого вы можете получить результат вычислений (например, экран). Так получилось, что на первых компьютерах вход (клавиатура) и выход (экран) обычно были единым устройством. Из-за этого в настоящее время терминалами считаются любые устройства ввода / вывода. Мышь, клавиатура, экран, камера - все это терминалы.

Оболочка это вещь ОС. На компьютере у вас есть ядро, которое, например, в Ubuntu является частью Linux. Теперь, поскольку ядро ​​действительно низкоуровневое, предусмотрена оболочка - программа, которая позволяет пользователю легко взаимодействовать с ядром. Вот что такое BASH, например.

Консоль есть (из словаря)

плоская поверхность, на которой расположены органы управления машиной, электрическим оборудованием и т. д.

Вот почему в музыкальной индустрии доска со всеми ручками, или в космическом челноке командный стол, все они считаются консолями. Super Nintendo и PS2 исторически называют также консолями, так как первые подобные развлекательные устройства выглядели как коробки с кучей кнопок на них.

Командная строка - это просто интерфейс - противоположность GUI. А именно, есть два типа интерфейсов на компьютере; CLI (интерфейс командной строки) и GUI (графический интерфейс пользователя). Основное отличие состоит в том, что первый получает ввод с клавиатуры, а второй - с помощью мыши.

Подводя итог моему ответу:

Shell это программа, которая processes команды и returns вывод, как bash в Linux .

Терминал это программа, которая run оболочка, в прошлом это было физическое устройство (до того, как терминалы были мониторами с клавиатурой, они были телетайпами), а затем ее концепция была перенесена в программное обеспечение, такое как Gnome-Terminal.

Итак, я открываю Gnome-Terminal, появляются черные окна, которые запускают Shell, чтобы я мог выполнять свои команды.

Консоль - это особый вид терминала, это также физическое устройство. пример в линуксе у нас есть virtual console который я могу получить к ним доступ с помощью комбинации Ctrl + Alt + F1 до F7.

Консоль иногда означает, что клавиатура и монитор физически подключены к этому компьютеру.

Эти термины часто идут вместе, поэтому люди используют один из терминов для обозначения коллекции. (т.е. из контекста обычно очевидно, что они имеют в виду окно терминала, предоставляющее интерфейс к оболочке командной строки).

Чтобы избежать этого, я просто скажу xterm как замену для терминала XTerm / Gnome / Konsole / mrxvt / etc / etc. То же самое для bash.

Консоль имеет несколько других специфических значений, так что оставьте это пока.

Терминал: что-то, что обеспечивает взаимодействие человека с программами через двунаправленный поток символов ASCII / UTF8 / других, обычно с VT100 или аналогичной обработкой кода перехода. (Например, клавишу Backspace, Delete, клавиши со стрелками и т. Д. Генерируют управляющие коды. Программы могут печатать управляющие коды для перемещения курсора по экрану терминала, переключения на жирный текст и / или цветной, очистки или прокрутки экрана и т. Д.) В старые времена это часто было специализированное устройство с экраном, клавиатурой и последовательным портом. Теперь это обычно программа наподобие xterm.

Существуют файлы устройств для программ для чтения / записи с / на терминалы, а виртуальные терминалы также имеют другую сторону, доступную как файл устройства. Здесь xterm записывает ваши данные, чтобы bash мог их прочитать.

Каждый терминал, включая виртуальный, обеспечивает базовое редактирование строк, когда он находится в режиме готового (в отличие от необработанного). Это обрабатывается кодом ядра. Это bash, который обеспечивает редактирование строки, которое вы можете сделать с помощью клавиш со стрелками. (Попробуйте запустить cat и набрав, если вы хотите увидеть, как выглядит базовое редактирование строк, предоставляемое ядром. Backspace работает, и пара других вещей в соответствии с вашими настройками STY.)

Несмотря на то, что за терминальными устройствами имеется много кода ядра, его можно назвать кодом обработки терминала, а не самим терминалом.

Изменить: Жиль убедил меня, что ссылка на tty в качестве терминала является правильным использованием. Эмуляторы терминала и интерактивные программы, которые запускаются подключенными к терминалу, зависят от семантики терминала, реализованной ядром. (Большая часть этого поведения стандартизирована POSIX и одинакова в Linux/*BSD/ других Unix.) Полноэкранный текстовый редактор зависит от поведения Unix tty, а также от обработки escape-кода перемещения курсора, и многие другие функции эмулятора терминала.

Однако физический VT100 с экраном, клавиатурой и последовательным портом является экземпляром терминала. Для завершения не требуется ядро ​​Unix на другом конце последовательного порта. Нечто совершенно иное может быть отправкой управляющих кодов и текста ASCII и получением того же от него. Это был бы только VT100, а не терминал Unix. Эмулятор терминала плюс семантика Unix tty составляют полный пакет терминала Unix, на котором обычно запускается такая программа, как bash.

Командная строка - это стиль пользовательского интерфейса, в котором вы что-то вводите, а затем нажимаете return, чтобы что-то произошло. Он также используется как сокращение для оболочки командной строки, такой как bash или MS-DOS, но вы также можете сказать "это инструмент командной строки" о чем-то вроде fdisk. Рассматривая только программы, которые используют терминал для своего пользовательского интерфейса, два основных семейства - это командная строка и полноэкранный текст (например, редактор, такой как vi или emacs -nw).

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

Оболочка - это программа для запуска других программ. В контексте Unix обычно подразумевают оболочку командной строки (то есть оболочку Bourne или эквивалент оболочки C). Оболочки Unix также могут читать свои входные данные из файлов, то есть сценариев оболочки. Это полные языки программирования с переменными, циклами и условными выражениями, и многие программы написаны на bash (или только с /bin/sh Особенности оболочки POSIX, для большей мобильности). Также легко можно написать быстрый for i in *.something; do some_program "$i";done в интерактивной оболочке.

Собрав все это вместе, оболочка типа bash (или любая другая программа, которую вы запустили, выполнив команду оболочки), получит символы из /dev/pts/N Терминальное устройство после xterm записывает ваш ввод в свою сторону псевдотерминала. Если вы бежите catзатем нажмите ^cкод ядра tty будет действовать на ^c и отправить SIGINT на передний план процесса на этом терминале. (Обратите внимание на использование терминала в этом контексте для обозначения Unix tty, а не эмулятора терминала или чего-то, подключенного к последовательному порту.) Это происходит потому, что оболочка переводит терминал в режим "приготовленный" перед запуском любой программы, что означает Ядро действует на некоторые управляющие последовательности. (Код tty по-прежнему не имеет ничего общего с обработкой управляющих кодов VT100, только с несколькими управляющими кодами с низким ASCII.) Если вместо xterm вы используете консольный текстовый терминал Linux, то ядро ​​IS выполняет эмуляцию VT100, и обрабатывать все эти вещи. Linux может быть скомпилирован без поддержки текстового терминала виртуальной консоли, но не без поддержки tty.

Консоль иногда используется как синоним терминала (в KDE даже есть эмулятор терминала, называемый Konsole).

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

В контексте ядра консоль имеет другое специфическое значение: это терминал, на котором пишутся загрузочные сообщения. Это может быть последовательный порт. Обычно, конечно, это текстовая консоль, реализованная ядром поверх драйверов для графического оборудования и клавиатур USB/ps2/AT. Если вы загружаете Linux с console=tty0 console=ttyS0,115200n8 в командной строке вы получите сообщения ядра на экране И на последовательном порту.

Linux реализует виртуальные консоли (/dev/tty1 к н). Вы можете поменять местами, которыми управляет ваш физический экран / клавиатура, с помощью Ctrl+Alt+FN. Типичные дистрибутивы Linux создают 6 и запускают getty на всех них, так что даже если вы не можете или не хотите запускать X11, вы можете войти в систему 6 раз и переключаться между командой, страницей руководства и всем остальным, не запуская программу, подобную screen. Linux (ядро) включает эмулятор терминала в стиле VT100 для обеспечения интерфейса терминала через экран и клавиатуру на виртуальных консолях.

Стандартные 6 виртуальных терминалов с подсказками входа в систему - вот почему Ctrl+Alt+F7 возвращает вас к сеансу X11: X-сервер захватывает следующую доступную виртуальную консоль. (Х-сервер открывается /dev/input/... напрямую, вместо того, чтобы получать нажатия клавиш /dev/tty7, хоть.)

Поэтому "переключиться на текстовую консоль" означает нажать Ctrl+Alt+F1 и использовать этот терминал. В те времена, когда компьютеры работали медленно и не имели много оперативной памяти, некоторые люди проводили большую часть своего времени на текстовых консолях, поскольку они были быстрыми, вы могли установить хороший шрифт и даже изменить размер терминала, чтобы иметь меньшие символы, но иметь больше на экране сразу. Alt+Left и Alt+Right меняются на предыдущую / следующую консоль. (X11 отключает это для своей консоли, конечно, оставляя только комбинацию Ctrl+Alt+FN.)

Таким образом, консоль - единственный из этих терминов, который не имеет единого четко определенного технического значения. У него есть пара разных. (В зависимости от того, как вы относитесь к терминалу собственно по отношению к терминалу плюс обработка tty, вы можете сказать, что терминал также имеет несколько значений.)

Я думаю, что в первые дни компьютеров с разделением времени у каждого пользователя был терминал (когда он мог его получить!), Но только у системных операторов была консоль. Консоль может использоваться для таких задач, как перезагрузка компьютера или получение диагностики системы, которая была невозможна из пользовательских терминалов. Консоль находилась в машинном отделении, как неотъемлемая часть компьютера, а терминалы могли быть удаленными. Консоль также будет включать аппаратные индикаторы и переключатели, а не только ввод и вывод текста.

Я бы сказал, что командная строка - это область, где пользователь может вводить команду, а оболочка - это программа, которая интерпретирует / подчиняется этой команде. Термин "оболочка" очень специфичен для производных Unix; "Командная строка" больше в традициях Windows/DOS. Эквивалент на мэйнфреймах обычно называется "языком управления заданиями".

Понятно, что эти оригинальные различия со временем стираются по мере изменения технологий.

Это расплывчатая тема, потому что термины очень неоднозначные. Я настоятельно рекомендую прочитать ссылки, которые я предоставил в этом ответе, которые также являются моими источниками для этого ответа.

Оболочка - это слой над ядром:

  • Он интерпретирует команды, введенные пользователем, и обрабатывает их. Оболочка имеет доступ к ядру, в отличие от пользователей. Пользователи могут получить доступ к ядру только путем ввода команд с помощью оболочки и с помощью процессов (т. Е. Запуска программ). Программы используют системные вызовы для доступа к функциональности ядра. Все системные вызовы вместе образуют системный API.
  • Примеры оболочек приведены во втором терминальном определении.

Терминал имеет много значений:

  • (1) Текстовый терминал. Это комбинация дисплея монитора и клавиатуры. Кабель подключил терминал к компьютеру (часто косвенно). Он был назван терминалом, так как он был расположен на конце этого кабеля. Эти терминалы обычно физически отделены от компьютера, потому что в те времена многие терминалы были подключены к одному мэйнфрейму / компьютеру, поэтому несколько пользователей могли иметь доступ к компьютеру одновременно.
  • (2) Окно терминала, также называемое эмулятором терминала. В Linux окно терминала - это эмуляция консоли, которая содержится в окне GUI. Это CLI, в который вы вводите свой текст, и этот ввод читается используемой оболочкой. Существует много типов оболочек (например, bash, dash, ksh88) и терминалов (например, konsole, gnome).
  • (3) Для объяснения псевдотерминалов, посмотрите это. Это пара из двух "файлов устройств", используемых для связи между процессом и эмулятором терминала.

Консоль имеет много значений:

  • (1) приборная панель, содержащая элементы управления для компьютера.
  • (2) Системная консоль или компьютерная консоль. Это комбинация монитора и клавиатуры, подключенных к компьютеру. Это синоним того, что мы называем "текстовым терминалом". Иногда также другие периферийные устройства пользовательского ввода, такие как мышь, являются частью консоли.
  • (3) Интерфейс командной строки, который охватывает весь экран. Это контрастирует с окном терминала, которое представляет собой графический интерфейс пользователя с X в правом верхнем углу, чтобы закрыть его. Это два режима отображения для CLI (интерфейсы командной строки) в Unix-подобных системах. Как и в окне терминала, консоль может запускать много оболочек.

Часто операционные системы позволяют запускать несколько консолей на физической консоли (определение консоли 2). Они называются виртуальными консолями, или виртуальными терминалами, и доступны через комбинации ctrl + alt + Fx. Например, если вы хотите открыть 3-ю виртуальную консоль, вы используете комбинацию ctrl + alt + F3.

Консоли (определение 3) могут показаться вам анахронизмом, но экспертам должно быть удобно их использовать, поскольку существует множество ОС, которые не поддерживают GUI. Кроме того, если графический интерфейс перестает отвечать на запросы, консоль все еще может работать.

Попытка ориентированного на пользователя короткого ответа:

Командная строка - строка, где вы вводите команды. Обычно он говорил, что вам нужно что-то запустить в окне текстового режима (интерфейс командной строки), предоставляемом вашей операционной системой.

shell - фактическая программа, запускаемая операционной системой для обработки того, что вы вводите command line, Отсюда и название - удобная оболочка для не дружественного ядра ОС. Он предоставляет командную строку, такую ​​как $ или же >, запускает свои собственные команды и приложения. Вы всегда работаете через shell Запрограммируйте и никогда не работайте с консолью или терминалом напрямую.

console - это окно, в котором работают ваши текстовые программы. Это окно обрабатывает нажатия клавиш, знает, что это ширина и высота. Может быть полноэкранным.

терминал - это какое-то устройство с дисплеем для людей, которое принимает входной поток символов и показывает их. Пользователю не сообщают о высоте или ширине (только хаки) или нажатиях клавиш на клавиатуре - к нему идут только символы. Терминал обрабатывает специальные последовательности в этом потоке, чтобы раскрасить вещи, очистить экран и сделать другие неприятные вещи. Терминалы ненадежны, потому что легко запутаться, если файл, который вы выводите, содержит эти специальные последовательности. Они популярны в сетевых интерфейсах и интерфейсах отладки устройств, потому что вам нужен только один поток для отправки вывода и управления устройством вывода, и вы можете просто tap в разговор без необходимости инициализировать или создать окно.

Последовательная консоль - это консоль, которая обрабатывает входной поток как терминал.

Большинство терминалов в настоящее время являются строго говоря эмуляторами терминалов. Это тип роли в работе UNIX-подобной системы и в то же время базовый интерфейс, предлагаемый системами. На самом деле все, включая графический интерфейс, строится поверх него.
В разговорной речи "терминал" может также относиться к конечным точкам в компьютерной сети со звездообразной топографией.

Консоль относится к (аппаратным) интерфейсам для терминалов. Т.е. есть серийные консоли, а в настоящее время в основном виртуальные.
Окно, условно обозначаемое как "консоль", - это оболочка, подключенная к терминалу системы через виртуальную консоль.

В те времена, когда компьютеры были дорогими, на объекте мог быть один настоящий компьютер и несколько терминалов, подключенных к нему через последовательные кабели ("последовательная консоль"). Операционная система, операции и т. Д. Выполнялись на физическом компьютере, ввод и вывод выполнялись на консоли.
Вы можете переключаться между виртуальными терминалами, нажимая CTRL + ALT + F1 (до F6): остаток тех времен.
Сегодня концепция "тонких клиентов" восходит к этому направлению, заключающемуся в централизации огромного количества ресурсов и предоставлении достаточного количества аппаратного обеспечения для обеспечения современного интерфейса на рабочем месте.

Оболочка - это "двигатель", который вы видите в терминале. Он обеспечивает взаимодействие с самой системой и добавляет полезные функции, такие как автозаполнение, переменные и т. Д.
Он переводит назад и вперед между реальной ОС / ядром, которое использует системные вызовы, и вами. Системные вызовы без оболочки немного похожи на кодирование assembler и оболочка по крайней мере дает вам C,

Командная строка относится к способу обмена ввода и вывода через текстовое окно. Строго говоря, строка, в которую вы вводите, является (текущей) командной строкой. Метод в целом более правильно называется интерфейсом командной строки или CLI.

  1. ядро
  2. предлагает терминал
  3. терминал подключен через консоль
  4. консоль запускает оболочку
  5. команды и выходные данные передаются через командную строку (интерфейс)
Другие вопросы по тегам