1 что такое командная строка операционной системы windows

Содержание

Что такое командная строка или консоль

Командная строка, она же консоль, пришла к нам из MS-DOS. Она позволяет управлять операционной системой (ОС) путем ввода команд в текстовом виде.

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

Запуск командной строки

Существуют, как минимум, три способа запуска командной строки в операционной системе Windows. Один из наиболее быстрых – одновременно нажать на клавиатуре клавишу Windows (с иконкой Windows) и R. При этом откроется меню «Выполнить». Достаточно ввести cmd, нажать кнопку «ОК». Обратите внимание, что командная строка откроется с правами локального пользователя. Если необходимо открыть командную строку с правами администратора, то воспользуйтесь другим способом.

Второй способ – открыть строку поиска и ввести в нее cmd или «командная строка», запустить командную строку, щелкнув по ней мышью. Если требуется запустить командную строку от имени администратора, щелкните по ней правой кнопкой мыши и выберите «Запуск от имени администратора». Этот способ сработает, если у вас Windows 7 и более поздних версий. Пользователям более ранних версий Windows, чтобы запустить командную строку с правами администратора, нужно найти ее в стандартных программах, щелкнуть правой кнопкой мыши по командной строке и выбрать «Запуск от имени администратора».

Команды

Для командной строки существует набор допустимых команд, которые необходимо вводить, соблюдая синтаксис. Для просмотра списка допустимых команд введите команду help и нажмите Enter.

Давайте рассмотрим команды, которые могут пригодиться при настройке средств анонимизации.

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

Удаленный компьютер, который будем пинговать (определим параметры соединения с ним) можно указывать по названию (например, yandex.ru) или ip (например, 77.88.55.60) ping yandex.ru ping 77.88.55.60

tracert

Эта команда служит для определения какие серверы в сетевом пути к указанному ресурсу и время отклика каждого из них. Например, для определения пути до yandex.ru введите в командной строке tracert yandex.ru.

ipconfig /all

Команда предназначена для вывода деталей текущего соединения и управления клиентскими сервисами DHCP и DNS, позволяет определять значения конфигурации.

route

Команда обеспечивает доступ к содержимому таблицы IP-маршрутизации. Для просмотра функций введите команду без параметров: route

Для вывода на экран: route print

Для добавления маршрута до конечной точки: route add

Например, маршрут по умолчанию с адресом стандартного шлюза 192.168.12.1: route add 0.0.0.0 mask 0.0.0.0 192.168.12.1

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

Источник

Изучаем командную строку Windows

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

Эта статья содержит общую ознакомительную информацию для разных версий Windows. После прочтения вы можете пополнить свои знания по конкретной разновидности ОС: 7-ка, 8 версия или узнать о множестве улучшений программы в 10 версии Windows.

Конечно, до сих пор существуют такие ОС, которые используют для общения с пользователями, так называемый, интерфейс командной строки. Но ими обычно пользуются профессиональные программисты, системные администраторы и прочие работники IT-индустрии. Для обычных пользователей производители операционных систем создали удобный графический интерфейс, который позволяет «общаться» с компьютером или, допустим, смартфоном при помощи мышки или нажатий по кнопкам на экране.

Несмотря на это, каждая операционная система (включая Windows XP, 7, 8 и так далее) всё же, как и раньше, поддерживает ввод и вывод информации посредством текстовых команд. Командная строка Windows — явный тому пример. Разберёмся, что это такое.

Что такое командная строка

В первую очередь — это программа cmd.exe, находящаяся в директории system32 папки операционной системы. Вариант ее месторасположения: C:\Windows\system32\cmd.exe. Путь может и отличаться, в зависимости от версии Windows и места ее установки.

В общих чертах, командная строка — это инструмент операционной системы, состоящий, как правило, из оболочки ОС и текстового интерфейса. Оболочка обеспечивает пользователя инструментарием для «общения» с операционной системой, которыми, в данном случае, выступают текстовые команды.

Командная строка операционных систем Windows, начиная с XP, призвана обеспечить пользователей возможностью применения MS-DOS и множества других компьютерных команд. Важная её особенность заключается в том, что она способна выполнять пользовательские команды без помощи графического интерфейса. Необходимость в понимании и знании всех этих команд делает затруднительным использование командной строки для управления операционной системой рядовыми пользователями. Однако, это не так уж и сложно, как кажется на первый взгляд.

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

В каких ситуациях командная строка может оказаться полезной

Существует ряд причин использования командной строки. Бывают и такие ситуации, в которых без её использования просто невозможно обойтись. А в некоторых случаях выполнение определённых функций Windows, а также настройка операционной системы через командную строку происходит удобней и быстрей.

Возьмём ситуацию с вирусами. Существуют такие вирусные программы, которые полностью блокируют графический интерфейс пользователя (так называемые, смс-баннеры). Как правило, эти вирусы выводят на экран компьютера окно, в котором написано сообщение, типа «Ваш компьютер блокирован управлением МВД» или «Ваши данные под угрозой» и так далее. Такие смс-баннеры невозможно закрыть никакими обычными способами — ни при помощи мышки, ни при помощи горячих клавиш на клавиатуре.

В таких ситуациях на помощь как раз и приходит командная строка. Конечно, чтобы её вызвать, необходимо проделать определённые действия с компьютером, но сейчас не об этом.

Ещё одна ситуация. Допустим, Windows XP (или любая другая версия) просто перестала работать, а на жёстком диске остались важные данные, которые срочно необходимо скопировать на флешку. Если под рукой имеется хотя бы установочный диск с Windows, то на определённом моменте установки операционной системы (без ожидания окончания установки) можно вызвать командную строку и скопировать эти данные. Эта возможность часто приходится весьма кстати в случае с повреждённым диском, когда к примеру, установка Windows прекращается во время копирования установочных файлов на жёсткий диск.

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

Как пользоваться командной строкой

На различных компьютерных форумах и сайтах можно найти сотни руководств по использованию тех или программ, выполнению каких-то системных настроек и массу других статей, в которых авторы призывают к использованию командной строки. Многие неопытные пользователи сразу теряются, видя фразу «Запустите командную строку…». Если вы также входите в их число, вам будет очень полезно ознакомиться с работой этого полезного инструмента. Начнём с того, как её вызвать.

Как вызвать командную строку

Начиная с Windows XP и до последней версии этого семейства операционных систем, командная строка вызывается посредством диалога «Выполнить» («Run»), в который необходимо ввести команду — «cmd». Запуск этого диалога осуществляется с помощью одновременного нажатия клавиш Win + R :

В Windows XP (в отличие от последующих версий) в меню «Пуск» имеется специальный ярлык, который так и называется «Выполнить…». Если нажать на него, то диалог также запустится.

Вызвать командную строку можно и другими способами. Вот они:

Выполнение одного из приведённых выше действий приведёт к запуску окна чёрного цвета с мигающим курсором — это и есть командная строка. Давайте, рассмотрим, как с ней работать.

В версии Windows 8 есть другие способы запуска cmd. Также как и в 10-ке, про особенности которой можно узнать здесь подробнее.

Работа в командной строке

Как вы могли заметить, их множество. Однако, это далеко не все команды, которые могут быть выполнены при помощи командной строки. Существует множество различных программ, которые также могут управляться через эту консоль. В принципе, «cmd» является расширяемой оболочкой, что говорит о возможности внесения в список выполняемых ею действий всё новых и новых команд.

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

Попробуем перейти с одного локального диска на другой, просмотрим его содержимое, затем создадим папку, перейдём в неё, а в ней создадим ещё одну папку и удалим её. Интересная задачка? Главное, что для выполнения каждого отдельного действия потребуется задействовать разные команды. Начнём.

После запуска командной строки, вы могли заметить перед мигающим курсором адрес: «C:/Users/Имя пользователя» (в нашем случае — тут «Reptile»). Имя последней папки означает ваше текущее местоположение (то же самое, как если бы вы зашли в эту папку через Проводник). А «С:\» — это локальный диск, на котором вы находитесь. Чтобы сменить текущий локальный диск, достаточно ввести его букву и двоеточие сразу после неё — например, «D:».

Так вы попадёте на диск «D:\» (или любой другой). Чтобы просмотреть содержимое диска (или вообще любой папки) используется команда «dir». Введите её прямо здесь, и вы увидите список файлов и папок, имеющихся на диске «D:\».

Теперь создадим папку прямо в корне диска. Для этого используем команду — «mkdir», а в качестве параметра через пробел нужно вписать имя будущей папки, например, «mkdir xp». В данном случае создастся папка с именем «xp».

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

Для перехода в ту или иную папку используйте команду «cd». Здесь в качестве аргумента также используется имя каталога для перехода. Введём «cd xp» и попадём внутрь папки (сделаем эту папку текущей).

Создадим в папке ещё одну, используя команду «mkdir». Пусть это будет папка «123».

Теперь удалим её. Для этого вводим «rmdir 123». Выполните теперь в каталоге «xp» команду «dir» и вы увидите, что папки «123» больше нет.

Если вы захотите подробнее ознакомиться с описанием той или иной команды, просто введите ключ «/?» сразу после команды, и на экран будет выведена подсказка. Например, введите «dir /?». Другой вариант запуска подсказки: «help dir».

Запомнить все существующие команды не просто — их огромное множество. На официальном сайте Microsoft имеется наиболее полное руководство по командной строке, хотя и описаний, выдаваемых командой help вполне достаточно.

Видео по теме

Источник

Основные cmd команды – просто о полезном

Почему в мире творится такой хаос? Да потому что администратор нашей системы забыл о выполнении своих обязанностей. Или просто потерял список cmd команд от нашего мира. Хотя это несколько оригинальный взгляд на существующий порядок вещей, но, тем не менее, он отражает часть нужной нам правды: с помощью командной строки можно легко навести порядок в своем компьютере:

Что такое командная строка

Командная строка представляет собой наиболее простой инструмент для управления операционной системой компьютера. Управление происходит с помощью целого ряда зарезервированных команд и набора символов текстовой клавиатуры без участия мыши ( в операционной системе Windows ).

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

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

Работа с командной строкой в операционной системе Windows

Вызвать консоль в Windows можно несколькими способами:

Оба способа подразумевают запуск консоли от имени текущего пользователя. То есть со всеми правами и ограничениями, которые наложены на его роль в операционной системе. Для запуска cmd с правами администратора нужно в меню « Пуск » выделить значок программы и в контекстном меню выбрать соответствующий пункт:

После запуска утилиты можно получить справочную информацию о командах и формате их написания в консоли. Для этого нужно ввести оператор help и нажать на « Enter »:

Основные команды для работы с файлами и директориями

Наиболее часто употребляемыми являются следующие команды:

RENAME | REN [диск/путь] исходное имя файла/каталога | конечное имя_файла
Пример: RENAME C:UsersдомашнийDesktoptost.txt test.txt

DEL | ERASE [метод обработки] [имя_файла]
Пример: Del C:UsersдомашнийDesktoptest.txt/P

Под методом обработки имеется в виду специальный флаг, позволяющий реализовать определенное условие при осуществлении удаления файла. В нашем примере флаг « P » включает вывод диалога разрешения на удаления каждого файла:

MD [диск:] [путь]
Пример:
MD C:UsersдомашнийDesktoptest1test2

RD | RMDIR [ключ_обработки] [диск/путь]
Пример:
rmdir /s C:UsersдомашнийDesktoptest1test2

Команды для работы с сетью

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

Пример реализации команды:
ping example.microsoft.com
ping –w 10000 192.168.239.132

В последнем примере cmd ping команды запрос посылается адресату с указанным IP адресом. Интервал ожидания между пакетами составляет 10 000 (10 сек). По умолчанию этот параметр установлен на 4 000:

В примере прослеживается маршрут к указанному ресурсу. При этом увеличивается скорость совершения операции за счет применения параметра d, который предотвращает попытки команды получить разрешение на чтение IP адресов. Количество переходов ( прыжков ) ограничено 10 с помощью установленного значения параметра h. По умолчанию, количество прыжков равно 30:

shutdown [<-l|-s|-r|-a>] [-f] [-m [\имя_ПК]] [-t xx] [-c «сообщения»] [-d[u][p]:xx:yy]
Пример:
shutdown /s /t 60 /f /l /m \191.162.1.53

Произойдет выключение ( s ) удаленного ПК ( m ) с указанным IP адресом ( 191.162.1.53 ) через 60 секунд ( t ). При этом принудительно будет выполнен выход из всех приложений ( f ) и сеанса текущего пользователя ( l ).

Еще несколько нужных команд

format том [/fs: Файловая_Система] [/v: метка] [/q] [/a: размер] [/c] [/x]

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

Это подтверждает следующий пример написания команды:
format e : — будет отформатирован носитель в дисководе E;

set [[/a [выражение]] [/p [имя_переменной=]] строка]
Пример:
set include=c:inc

Пример:
start notepad

Источник

Тяжкое наследие прошлого. Проблемы командной строки Windows

Предисловие от автора, Рича Тёрнера из Microsoft. Это статья о командной строке: от её появления и эволюции до планов капитального ремонта Windows Console и командной строки в будущих версиях Windows. Будь вы опытным профессионалом или новичком в IT, надеемся, что вы найдёте статью интересной.

Давным-давно в далёкой-далёкой серверной.

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

Одним из первых по-настоящему эффективных человеко-машинных интерфейсов стал Tele-Typewriter или «телетайп». Это электромеханическая машина с клавиатурой для ввода данных и каким-нибудь устройством вывода — сначала использовался принтер, позже экран.

Вводимые оператором символы локально буферизуются и отправляются с телетайпа на соседний компьютер или мейнфрейм в виде серии сигналов по электрическому кабелю (например, RS-232) со скоростью 10 символов в секунду (110 бод, бит в секунду, bps):


Телетайп Model 33 ASR

Примечание: Дэвид Гессвейн ведёт отличный сайт по PDP-8, где можно найти больше информации об ASR33 (и соответствующей технологии PDP-8), в том числе фотографии, видео и др.

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

Затем технология улучшилась, скорость передачи выросла до 19200 bps, а шумные и дорогие принтеры заменили ЭЛТ-дисплеями (широко распространённый тип дисплеев в 80-е и 90-е годы), как на популярном терминале DEC VT100:


Терминал DEC VT100

Хотя технология улучшилась, но эта модель — терминал отправляет символы программе на компьютере, а он выдаёт текст для пользователя — осталась и сегодня как фундаментальная модель взаимодействия всех командных строк и консолей на всех платформах!


Архитектура терминала и командной строки

Модель по-своему элегантна. Одна из причин — в сохранении простоты и цельности каждого компонента: клавиатура выдаёт символы которые буферизуются как электрические сигналы. Устройство вывода просто выдаёт на дисплей (бумагу/экран) символы, полученные с компьютера.

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

Кодировка текста

Важно помнить, что терминалы и компьютеры обмениваются данными через потоки символов. При нажатии клавиши на клавиатуре терминала на подключенный компьютер отправляется значение, представляющее введённый символ. Нажмите клавишу ’A’ — и отправляется значение 65 (0x41). Нажмите ’Z’ — и отправляется 90 (0x5a).

7-битная кодировка ASCII

Список символов и их значений определён в стандарте American Standard Code for Information Interchange (ASCII), он же стандарт ISO/IEC 646 / ECMA-6 — «7-битный кодированный набор символов», который определяет:

Когда 7 бит недостаточно: кодовые страницы

Однако 7 бит не обеспечивают достаточно места для кодирования многих диакритических знаков, знаков препинания и символов, используемых в других языках и регионах. Так что с добавлением дополнительного бита можно расширить таблицу символов ASCII дополнительными наборами «кодовых страниц» для символов 128−255 (и возможного переопределения нескольких непечатаемых символов ASCII).

Например, IBM ввела кодовую страницу 437 с несколькими графическими символами вроде ╫ (215) и ╣(185) и математическими, включая π (227) и ± (241), а также переопределила печатные символы для обычно непечатаемых символов 1−31:


Кодовая страница 437

Кодовая страница Latin-1 определяет множество символов, используемых языками на основе латиницы:


Кодовая страница Latin-1

Во многих окружениях командной строки и оболочках можно изменять текущую кодовую страницу, чтобы терминал отображал различные символы (в зависимости от доступных шрифтов), особенно для символов со значением 128−255. Но неправильно указанная кодовая страница приведёт к отображению кракозябр. И да, «кракозябры» — это настоящий термин! Кто бы мог подумать? 😉

Когда 8 бит недостаточно: Юникод

Кодовые страницы временно решили проблему, но у них много недостатков, например, они не позволяют отображать текст одновременно из нескольких кодовых страниц/языков. Таким образом, пришлось ввести новую кодировку, которая точно отображает каждый символ и алфавит для всех языков, известных человечеству, оставляя ещё много свободного места! Представляем Юникод.

Юникод — это международный стандарт (ISO/IEC 10646), который в данный момент определяет 137 439 символов из 146 современных и исторических письменностей, а также многие символы и глифы, в том числе многочисленные смайлики, которые широко используются практически в каждом приложении, платформе и устройстве. Юникод регулярно обновляется дополнительными системами письменности, новыми/исправленными смайликами, символами и т. д.

Юникод также определяет «непечатаемые» символы форматирования, которые позволяют, например, соединить символы и/или повлиять на предыдущие или последующие символы! Это особенно полезно в письменностях вроде арабской, где лигатура конкретного символа определяется окружающими. Эмодзи могут использовать соединительный символ нулевой ширины (zero width joiner), чтобы объединить несколько символов в один визуальный глиф. Например, эмодзи кота-ниндзя Microsoft формируются путём соединения кота с другими эмодзи:


Эмодзи кота-ниндзя Microsoft

Когда байтов слишком много: UTF-8!

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

Поэтому для экономии было разработано несколько новых кодировок Юникода. Среди самых популярных — UTF-32 (4 байта на символ), UTF-16/UCS-2 (2 байта) и UTF-8 (1−4 байта на символ).

Во многом благодаря обратной совместимости с ASCII и экономии места UTF-8 стала самой популярной кодировкой Юникода в интернете. Она демонстрирует взрывной рост с 2008 года, когда обогнала по популярности ASCII и другие популярные кодировки:


Рост популярности кодировки UTF-8 (источник: Википедия)

Таким образом, поначалу терминалы поддерживали 7-битный, а затем 8-битный текст ANSI, но большинство современных терминалов поддерживают текст Unicode/UTF-8.

Итак, что такое командная строка и что такое оболочка?

«Командная строка» или CLI (интерфейс/интерпретатор командной строки) описывает самый фундаментальный механизм, через который человек управляет компьютером: CLI принимает введённый оператором ввод и выполняет требуемые команды.

Например, echo Hello отправляет текст «Hello» на устройство вывода (например, на экран). dir (Cmd) или ls (PowerShell/*NIX) перечисляет содержимое текущего каталога и т.д.

Раньше доступные команды были относительно простыми, но операторы требовали всё более изощрённых команд и возможности писать скрипты для автоматизации повторяющихся или сложных задач. Таким образом, процессоры командной строки стали сложнее и превратились в то, что теперь называют «оболочкой» командной строки (shell).

В Unix/Linux оригинальная оболочка Unix (sh) породила множество оболочек, включая Korn shell (ksh), C shell (csh) и Bourne Shell (sh). В свою очередь, на их основе создан Bourne Again Shell (bash) и т.д.

Современная командная строка

Современные компьютеры значительно мощнее «тупых терминалов» прошлого и обычно работают под управлением десктопной ОС (например, Windows, Linux, macOS) с графическим пользовательским интерфейсом (GUI). Такое окружение GUI позволяет нескольким приложениям работать одновременно в отдельных окнах на экране и/или невидимо в фоновом режиме.


Cmd, PowerShell и Ubuntu Linux под WSL работают на независимых инстансах консоли

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

Аналогично и приложения командной строки, к которым подключены терминалы, работают как и раньше: получают входные символы, решают, что делать с этими символами, (необязательно) выполняют работу — и могут выдать текст для отображения пользователю. Только вместо связи по медленным каналам TTY терминальные приложения и приложения командной строки на одной машине общаются по очень скоростным каналам Pseudo Teletype (PTY) в памяти.


Современная командная строка

Современные терминалы в основном взаимодействуют с приложениями командной строки, запущенными локально. Но конечно, они также могут взаимодействовать с приложениями командной строки, запущенными на других машинах в той же сети или даже с удалёнными машинами на другой стороне света через интернет. Это «удалённое» взаимодействие с командной строкой — мощный инструмент, который популярен на каждой платформе, особенно на *NIX.

Эволюция командной строки

Скромное начало: MS-DOS

На заре компьютерной индустрии управление большинством компьютеров осуществлялось путём ввода команд в командной строке. За рыночную долю боролись компьютеры под Unix, CP/M, DR-DOS и других. В итоге система MS-DOS стала стандартом де-факто для IBM PC и всех совместимых компьютеров:


MS-DOS 6.0

Как и большинство основных операционных систем того времени, интерпретатор командной строки или «оболочка» в MS-DOS предоставляла простой, но относительно эффективный набор команд и синтаксис командных скриптов для написания batch-файлов (.bat).

Предприятия крупного и малого бизнеса очень быстро взяли на вооружение MS-DOS и в совокупности создали многие миллионы скриптов, некоторые из которых всё ещё используются сегодня! Batch-скрипты применяются для автоматизации настройки ПК, установки/изменения параметров безопасности, обновления программного обеспечения, сборки кода и т.д.

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

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

Требуется более удобный и ориентированный на производительность пользовательский интерфейс.

Графический интерфейс идёт в мейнстрим

Вскоре после изобретения появилось много конкурирующих GUI на компьютерах Lisa и Macintosh от Apple, Commodore Amiga (Workbench), Atari ST (DRI GEM), Acorn Archimedes (Arthur/RISC OS), Sun Workstation, X11/X Windows и многих других, в том числе Microsoft Windows.

Windows 1.0 вышла в 1985 году и являлась по сути приложением MS-DOS, которое предоставляло простое окружение GUI с плиточным окном, позволяя пользователям запускать несколько приложений бок о бок:


Windows 1.01 на MS-DOS

Windows 2.x, 3.x, 95 и 98 работали на базе MS-DOS. Более поздние версии Windows начали заменять некоторые функции MS-DOS альтернативами Windows (например, операции с файловой системой), но все они полагались на фундамент MS-DOS.

Примечание: Windows ME (Millennium Edition) стала интересным гибридом. В ней наконец-то заменили поддержку MS-DOS и поддержку реального режима из предыдущих версий Windows несколькими новыми функциями (особенно технологии Gaming & Media). Некоторые функции позаимствованы из Windows 2000 (например, новый стек TCP/IP), но настроены для работы на домашних ПК, которым трудно запустить полноценную NT.

Но Microsoft понимала, что не может бесконечно растягивать архитектуру и возможности MS-DOS и Windows. Требовалась новая операционная система с прицелом на будущее.

Microsoft — лидер рынка Unix! Да, серьёзно!

Разрабатывая MS-DOS, Microsoft также занималась поставкой Xenix — фирменного порта Unix версии 7 — для различных процессорных и машинных архитектур, включая Z8000, 8086/80286 и 68000.

К 1984 году Xenix от Microsoft стал самым популярным вариантом Unix в мире!

Тем временем распад Bell Labs — родины Unix — привёл к появлению AT&T, которая начала продавать Unix System V производителям компьютеров и конечным пользователям.

Microsoft понимала, что отсутствие собственной ОС ставит под угрозу её способности для развития. Поэтому было принято решение отказаться от Xenix: в 1987 году Microsoft передала Xenix своему партнёру Santa Cruz Operation (SCO), с которым работала над несколькими проектами по портированию и улучшению Xenix на различных платформах.

Microsoft + IBM == OS/2… ненадолго

В 1985 году Microsoft начала работать с IBM над новой операционной системой OS/2. Она изначально планировалась как «более функциональная DOS» для некоторых современных 32-битных CPU и с учётом других технологий, которые быстро порождались в IBM и у других OEM.

Но история OS/2 оказалась слишком бурной. В 1990 году Microsoft и IBM прекратили сотрудничество. Это было обусловлено рядом факторов, в том числе значительными культурными различиями между разработчиками IBM и Microsoft, проблемами планирования, а также взрывным успехом и ростом внедрения Windows 3.1. IBM продолжала разработку и поддержку OS/2 до конца 2006 года.

К 1988 году Microsoft убедилась, что будущий успех требует более масштабного, смелого и амбициозного подхода. Такой подход потребует новой, современной операционной системы, которая будет поддерживать амбициозные цели компании.

Большая ставка Microsoft: Windows NT

В 1988 году Microsoft пригласила Дэйва Катлера, создателя популярной и уважаемой операционной системы VAX/VMS в компании DEC. Его задача — создать новую, современную, независимую от платформы операционную систему, которой Microsoft будет владеть, контролировать и на которой во многом построит своё будущее.

Этой новой операционной системой стала Windows NT: фундамент, на котором построены Windows 2000, Windows XP, Windows Vista, Windows 7, Windows 8 и Windows 10, а также во все версии Windows Server, Windows Phone 7+, Xbox и HoloLens!

Windows NT изначально спроектирована как кроссплатформенная система. Сначала она поддерживала Intel i860, затем MIPS R3000, Intel 80386+, DEC Alpha и PowerPC. С тех пор семейство ОС Windows NT портировали для поддержки процессорных архитектур IA64 Itanium, x64 и ARM/ARM64, среди прочих.

Windows NT предоставляет интерфейс командной строки через терминальное приложение Windows Console и командную строку Command Prompt (cmd.exe). Cmd разработан на максимальную совместимость с пакетными скриптами MS-DOS, чтобы помочь бизнесу перейти на новую платформу.

Мощь PowerShell

Cmd сохраняется в Windows по сей день (и, вероятно, сохранится в течение многих десятилетий). Поскольку его основная задача — обеспечить максимальную обратную совместимость, Cmd редко улучшается. Даже «исправление ошибок» зачастую затруднено, если эти «баги» существовали в MS-DOS или более ранних версиях Windows!

В начале 2000-х оболочка Cmd уже устарела: Microsoft и её клиенты срочно нуждались в более мощной и гибкой командной строке. Из этой потребности появился PowerShell (который возник из «Манифеста Монады» Джеффри Сновера).

PowerShell — это объектно-ориентированная оболочка, в отличие от оболочек на основе файлов/потоков, которые принято использовать в мире *NIX: вместо потоков текста PowerShell обрабатывает потоки объектов. Он предоставляет авторам скриптов возможность прямого доступа и манипуляций с объектами и их свойствами вместо написания множества скриптов для анализа и обработки текста (как sed/grep/awk/lex/др.).

Чтобы узнать больше о PowerShell, рекомендую прочитать книгу «PowerShell в действии» (Manning Press), написанную Брюсом Пайеттом — разработчиком синтаксиса и языка PowerShell. В частности, первые несколько глав содержат подробное обоснование структуры языка.

PowerShell был принят для использования многими технологиями на платформе Microsoft, включая Windows, Exchange Server, SQL Server, Azure и многими другими. Он предоставляет очень согласованные команды для администрирования и управления практически всеми аспектами Windows и/или среды.

PowerShell Core — это PowerShell с открытым исходным кодом, доступное для Windows и различных версий Linux, BSD и macOS.

POSIX для NT, Interix и служб UNIX

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

Когда в 1993 году вышла первая Windows NT версии 3.1, она поддерживала несколько подсистем: МЅ-DOS, Windows, OS/2 и POSIX v1.2. Эти подсистемы позволяли на одной машине и базовой ОС запускать приложения, нацеленные на несколько платформ операционной системы без виртуализации или эмуляции — это внушительная разработка даже по меркам сегодняшнего дня!

Оригинальная реализация POSIX в Windows NT была приемлемой, но для неё требовались значительных улучшения. Поэтому Microsoft приобрела Softway Systems и её POSIX-совместимую подсистему Interix для NT. Изначально Interix поставлялась как отдельное дополнение, а затем её объединили с несколькими полезными утилитами и инструментами и выпустили в виде Services For Unix (SFU) в Windows Server 2003 R2 и Windows Vista. Однако поддержку SFU пришлось прекратить после Windows 8, в основном, из-за недостаточной популярности.

А потом произошла забавная вещь…

Windows 10 — новая эра для командной строки Windows!

В начале разработки Windows 10 компания открыла страницу UserVoice с вопросом, какие функции люди хотят реализовать в различных областях ОС. Сообщество разработчиков особенно громко требовало от Microsoft две вещи:

Подсистема Windows для Linux (WSL)

Основанные на GNU/Linux «дистрибутивы» (сочетания ядра Linux и коллекций инструментов пользовательского режима) становятся всё популярнее, особенно на серверах и в облаке. Хотя в Windows имелась POSIX-совместимая среда выполнения, но SFU не мог запускать многие инструменты и двоичные файлы Linux из-за дополнительных системных вызовов и различий в поведении по сравнению с традиционной Unix/POSIX.

После анализа обратной связи от разработчиков и технически подкованных пользователей Windows, а также в связи с растущим спросом внутри самой Microsoft, компания изучила несколько вариантов, и в конечном итоге решила позволить на Windows запуск оригинальных немодифицированных бинарных файлов Linux!

В середине 2014 года Microsoft сформировала группу разработки того, что станет подсистемой Windows для Linux (WSL). WSL впервые анонсировали в сборке Build 2016, а вскоре предварительная версия вышла на канале Windows 10 Insider.

С тех пор WSL обновляется в большинстве инсайдерских сборок и в каждом крупном выпуске ОС с момента Anniversary Update осенью 2016 года. В каждой новой версии увеличивается функциональность, совместимость и стабильность WSL: в первой версии это был интересный эксперимент, который мог запускать лишь несколько распространённых программ Linux. При активной помощи сообщества (всем спасибо!) разработчики быстро дорабатывали WSL, так что вскоре она получила много новых возможностей и научилась запускать всё более сложные бинарники Linux.

Сегодня (середина 2018 года) WSL запускает большинство двоичных файлов Linux, программы, компиляторы, компоновщики, отладчикии т.д. Многие разработчики, IT-специалисты, инженеры DevOps и многие другие, кому необходимо запускать или создавать инструменты, приложения, службы Linux и т. д., получили резкое повышение производительности и возможность запускать свои любимые инструменты Linux вместе с любимыми инструментами для Windows на одном компьютере, без загрузки двух операционных систем.

Команда WSL продолжает улучшать WSL в части выполнения задач Linux, повышения производительности и интеграции с Windows.

Перезагрузка и капитальный ремонт Windows Console

В конце 2014 года проект по созданию подсистемы Windows для Linux (WSL) шёл полным ходом, и на фоне взрыва оживлённого интереса пользователей к командной строке стало очевидно, что консоль Windows явно нуждается в некотором апгрейде.

В частности, консоли не хватало многих функций, привычных для современных *NIX-совместимых систем, таких как возможность парсинга и вывода последовательностей ANSI/VT, широко используемых в мире *NIX для вывода насыщенного и подсвеченного текста и текстовых UI.

В чём тогда смысл разработки WSL, если пользователь не сможет корректно использовать инструменты Linux?


Сравнение консоли Windows 7 и Windows 10

Так, в 2014 году была сформирована небольшая «группа Windows Console». На неё возложили задачу распутать, понять и улучшить кодовую базу Windows Console… которой к этому времени было около 28 лет — больше, чем программистам, которые работают над этим проектом.

Как подтвердит любой разработчик, которому когда-либо приходилось брать старый, грязный, плохо поддерживаемый код, улучшение такого кода представляет собой сложную задачу. Ещё сложнее не нарушить существующее поведение. Для обновления самой часто запускаемой программы в Windows, не нарушив работу миллионов клиентских скриптов, инструментов, скриптов авторизации, систем сборки, производственных систем, систем анализа и прочих, требуется немало «внимания и терпения». 😉

Для разработчиков проблема усугубилась, когда они поняли всю строгость требований к консоли со стороны клиентов. Например, если производительность консоли изменялась на 1−2% от сборки к сборке, то срабатывали сигналы тревоги в группе Windows Build, что приводило… гм… к «быстрой и прямой обратной связи», то есть требованию немедленного исправления.

Итак, когда мы будем обсуждать улучшения консоли и новые функции, помните, что есть несколько незыблемых принципов, которым должно соответствовать каждое изменение, в том числе:

К чему был этот урок истории?

Я надеюсь, вы поняли, что командная строка остаётся ключевым компонентом стратегии, платформы и экосистемы Microsoft.

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

На самом деле Microsoft буквально не смогла бы создать ни Windows, ни любой другой из своих программных продуктов без быстрой, эффективной, стабильной и безопасной консоли!

На протяжении эпох MS-DOS, Unix, OS/2 и Windows командная строка оставалась, пожалуй, самым важным инструментом в наборе инструментов каждого технического пользователя. Даже многие пользователи, которые никогда не вводили команды в окно, в реальности используют консоль каждый день! Даже сборка кода в Visual Studio (VS) происходит в скрытом окне консоли. При использовании Exchange Server или средств администрирования SQL Server многие из этих команд выполняются с помощью PowerShell в скрытой консоли.

Механика Windows Console

Во время начала разработки Windows NT в 1989 году не было ни графического интерфейса, ни рабочего стола. Была только полноэкранная командная строка, которая визуально напоминала MS-DOS. Когда появилась реализация графического интерфейса Windows, потребовалось создать приложение консоли для GUI — и таким образом родилась Windows Console! Это одно из первых приложений Windows NT с графическим интерфейсом и, безусловно, одно из старейших приложений Windows, которое по-прежнему используется повсеместно!

Кодовой базе консоли Windows в настоящее время (июль 2018 года) почти 30 лет… по сути, больше, чем разработчикам, которые сейчас над ней работают!

Что делает консоль?

Как мы узнали ранее, у терминала относительно простой алгоритм работы:

Механика Windows Console

Консоль Windows — обычный исполняемый файл Win32. Изначально он написан на C, но большая часть кода сейчас переносится на C++ по мере того, как разработчики модернизируют и разбивают на модули кодовую базу.

Так что внутри консоли Windows?

До Windows 7 инстансы консоли Windows размещались в критически важной подсистеме Client Server Runtime Subsystem (CSRSS)! Но в Windows 7 из соображений безопасности и надёжности консоль переместили из CSRSS в следующие бинарники:

Ядро консоли состоит из следующих компонентов (снизу вверх):

Windows Console API

Как видно из схемы архитектуры, в отличие от терминалов NIX, консоль отправляет/получает вызовы API и/или данные в виде сообщений IO Control (IOCTL), а не текста! Даже встроенные в текст последовательности ANSI/VT из приложений командной строки (в основном Linux), извлекаются, анализируются и преобразуются в вызовы API!

Это различие раскрывает ключевое фундаментальное философское различие между *NIX и Windows: в *NIX «всё является файлом», а в Windows «всё является объектом»!

У обоих подходов есть преимущества и недостатки, которые мы перечислим, но не будем подробно обсуждать. Просто помните, что это ключевое различие в философии объясняет многие фундаментальные различия Windows и *NIX!

В *NIX всё является файлом

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

Эта философия работает на самом глубоком уровне: можно даже перемещаться и опрашивать большую часть конфигурации ОС и компьютера под *NIX, перемещаясь по псевдо/виртуальным файловым системам, которые показывают то, что кажется «файлами» и папками, но на самом деле представляет собой конфигурацию машины и оборудование.

Например, в Linux можно исследовать свойства процессоров, изучая содержимое псевдофайла /proc/cpuinfo :

Но простота и согласованность этой модели могут дорого стоить: извлечение/анализ конкретной информации в псевдофайлах часто требует специальных инструментов, таких как sed, awk, perl, python и т.д. Эти инструменты используются для написания команд и скриптов парсинга текстового содержимого, поиска определённых шаблонов, полей и значений. Некоторые из скриптов могут быть довольно сложными, часто трудными в обслуживании и хрупкими — если структура, шаблон и/или формат текста изменятся, многие скрипты, вероятно, потребуется обновить.

В Windows всё является объектом

Когда проектировалась Windows NT, «объекты» рассматривались как будущее в разработке программного обеспечения: «объектно-ориентированные» языки программирования появлялись быстрее, чем тараканы: Simula и Smalltalk уже зарекомендовали себя, а C++ набирал популярность. За ними последовали другие объектно-ориентированные языки, в том числе Python, Eiffel, Objective-C, ObjectPascal/Delphi, Java, C# и многие другие.

Результат предсказуем. Созданная в те пьянящие, объектно-ориентированные дни (около 1989 года) Windows NT разработана с философией, что «всё является объектом». На самом деле одной из самых важных частей ядра NT является Менеджер объектов!

Windows NT предоставляет богатый набор Win32 API для получения и/или управления объектами ОС. Разработчики используют Win32 API для сбора и представления информации, похожей на данные из псевдофайлов и инструментов *NIX, только через объекты и структуры. А поскольку парсеры, компиляторы и анализаторы понимают структуру объектов, то многие ошибки кодирования часто проявляются на ранней стадии, что помогает проверить синтаксическую и логическую правильность намерений программиста. Со временем это может привести к уменьшению сбоев, волатильности и лучшему порядку.

Итак, возвращаясь к основной дискуссии о консоли Windows: команда NT решила построить «консоль», отличную от традиционного терминала *NIX в нескольких ключевых областях:

Проблемы с консолью Windows

Хотя консольные API стали очень популярны в инструментах и сервисах командной строки, но ориентированная на API модель имеет определённые недостатки, перечисленные ниже.

Только для Windows

Многие средства командной строки и приложения широко используют Console API.

В чём проблема? Они работают только под Windows.

Таким образом, в сочетании с другими различиями (например, в жизненном цикле и т.д.), приложения командной строки Windows не всегда легко переносятся под *NIX и наоборот.

Из-за этого в экосистеме Windows распространены свои собственные, часто похожие, но обычно отличающиеся средства командной строки и приложения. Это означает, что при использовании Windows пользователям приходится изучать один набор приложений и инструментов командной строки, оболочек, языков сценариев и т.д., а при использовании *NIX — другой набор.

У этой проблемы нет простого решения: консоль Windows и командную строку нельзя просто выбросить и заменить на bash и iTerm2 — существуют сотни миллионов приложений и сценариев, которые зависят от консоли Windows и оболочек Cmd/PowerShell.

Сторонние инструменты, такие как Cygwin, отлично переносят многие основные инструменты GNU и библиотеки совместимости в Windows, но не могут запускать непортированные, неизменённые бинарники Linux. Это очень важно, так как многие пакеты и модули Ruby, Python, Node зависят от бинарных файлов Linux и/или зависят от поведения *NIX.

Эти причины привели к тому, что Microsoft расширила совместимость с Windows, разрешив запуск аутентичных двоичных файлов и средств Linux в подсистеме Windows для Linux (WSL). С помощью WSL пользователи теперь могут загружать и устанавливать один или несколько дистрибутивов Linux бок о бок на одной машине, а также использовать apt/zypper/npm/gem/др. для установки и запуска подавляющего большинства инструментов командной строки Linux вместе с их любимыми приложениями и инструментами Windows.

Тем не менее, у нативной консоли остаётся функциональность, которая отсутствует в сторонних терминалах: в частности, Windows Console предоставляет сервисы command-history и command-alias, чтобы каждой оболочке (в частности) не пришлось повторно реализовать одинаковую функциональность.

Сложности с удалённой работой

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

На *NIX-платформах парадигма изолированности терминалов и приложений командной строки с простым обменом символами привела к тому, что там легко получить доступ и работать с удалённого компьютера/устройства. Если терминал и приложение командной строки обмениваются потоками символов по какой-то упорядоченной инфруструктуре (TTY, PTY и т.д.), то очень легко работать удалённо.

Но в Windows многие приложения командной строки зависят от вызова API консоли и предполагают выполнение на той же машине, что и сама консоль. Это затрудняет удалённое управление. Как приложению командной строки удалённо обратиться к API на консоли локального компьютера? Хуже того, как удалённое приложение обратится к Console API, если доступ к нему осуществляется через терминал на Mac или Linux?!

Извините, что дразню вас, но более подробно мы вернёмся к этой теме в следующей статье.

Запуск консоли… или нет!

Когда пользователь *NIX хочет запустить инструмент командной строки, то сначала запускает терминал. Тот затем запускает оболочку по умолчанию или может быть настроен для запуска определённого приложения/инструмента. Терминал и приложение командной строки взаимодействуют потоками символов через Pseudo TTY (PTY).

Однако в Windows всё работает иначе: пользователи Windows никогда не запускают консоль (conhost.exe) — они сразу запускают оболочки командной строки и приложения, например, Cmd.exe, PowerShell.exe, wsl.exe и прочее. Windows подключает запущенное приложение к текущей консоли (если оно запущено из командной строки) или к вновь созданному экземпляру консоли.

Да, в Windows пользователи запускают приложение командной строки, а не саму консоль.

Немного занудства: многие говорят, что «приложения командной строки запускаются в консоли». Это не так и приводит к большой путанице относительно того, как в реальности работает консоль и приложения командной строки! Приложения командной строки и их консоли запускаются в независимых процессах Win32. Помогите исправить это заблуждение. Всегда говорите, что «средства командной строки/приложения выполняются с подключением к консоли». Спасибо!

Звучит неплохо, правда? На самом деле… нет. Есть некоторые проблемы:

Увы, ситуация тут не очень хорошая. Есть отличные сторонние консоли и серверные приложения для Windows (например, ConEmu/Cmder, Console2/ConsoleZ, Hyper, Visual Studio Code, OpenSSH и т. д.), но им приходится прибегать к изощрённым трюкам, чтобы работать как обычная консоль!

Какое-то безумие, верно?! Тот факт, что эти приложения вообще работают — лишь доказательство изобретательности и целеустремленности их создателей.

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

Windows Console и VT

Как описано выше, консоль Windows предоставляет богатый API. С помощью Console API приложения и инструменты командной строки пишут текст, изменяют его цвет, перемещают курсор и т.д. И благодаря этим API не нужно было поддерживать последовательности ANSI/VT, которые обеспечивают похожую функциональность на других платформах.

Фактически, до Windows 10 в консоли Windows была реализована только минимальная поддержка последовательностей ANSI/VT:

Всё изменилось в 2014 году, когда Microsoft сформировала новую группу разработки Windows Console. Одним из её главных приоритетов стало реализовать всестороннюю поддержку последовательностей ANSI/VT для визуализации выходных данных приложений *NIX, работающих в подсистеме Windows для Linux (WSL) и на удалённых машинах *NIX.

Группа быстро внедрила в консоль Windows 10 всестороннюю поддержку последовательностей ANSI/VT, что позволило пользователям использовать и наслаждаться огромным набором инструментов и приложений командной строки Windows и Linux.

Команда продолжает улучшать поддержку VT с каждым выпуском ОС и будет благодарна за любые проблемы, которые вы упомянете в нашем трекере на GitHub. 😉

Обработка Юникода

К сожалению, консоль Windows и её API появились до изобретения Юникода!

Консоль Windows хранит текст (который впоследствии выводится на экран) как символы кодировки UCS-2 с двумя байтами на символ. Эта кодировка поддерживает кодирование первых 65536 позиций символов, что известно как плоскость 0 или основная многоязычная плоскость (Basic Multilingual Plane, BMP).

Приложения командной строки выводят текст в консоли с помощью Console API. Обрабатывающие текст интерфейсы, бывают двух видов: функции с суффиксом А обрабатывают однобайтовые/символьные строки, функции с суффиксом W обрабатывают двухбайтовые (wchar)/символьные строки.

Примечание: каждый W API поддерживает UCS-2, потому что это всё, что существовало в момент разделения на A/W, и мы думали, что так будет хорошо. Но многие W API уже обновились для поддержки ещё и UTF-16 на том же канале.

Не все W API понимают UTF-16, но все они знают хотя бы UCS-2.

Кроме того, консоль не поддерживает некоторые новые функции Юникода, включая соединительные символы нулевой ширины (zero width joiner), которые используются для объединения отдельных символов в арабских и индийских письменностях, а также для объединения символов эмодзи в один визуальный глиф.

Как же ввести эмодзи кота-ниндзя или сложные многобайтовые китайские/арабские символы в консоль? К сожалению, никак!

Мало того что консольный API не поддерживает символы Юникод больше двух байт на глиф (эмодзи NinjaCat требует 8 байт!), но внутренний буфер UCS-2 консоли тоже не может хранить дополнительные байты данных. Что ещё хуже, текущий GDI-рендерер консоли не сможет отрисовать глиф, даже если тот поместится в буфер!

Эх… Таковы радости legacy-кода.

Здесь опять я намерен прервать рассказ — вернёмся к этой теме в следующей статье. Оставайтесь с нами!

Итак, на чём мы остановились?

Дорогой читатель, если вы прочитали всё вышенаписанное, спасибо вам, и примите поздравления — теперь вы знаете больше о консоли Windows, чем большинство ваших друзей, и, вероятно, даже больше, чем вы сами хотели узнать! Какая удача!

Источник

Операционные системы и программное обеспечение