Для чего программы оболочки

Что такое оболочка?

Взаимодействие оболочки и ядра

Функции и свойства оболочки

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

Для удовлетворения различных потребностей в UNIX существуют различные оболочки. В настоящей главе рассматриваются следующие темы:

р Способ взаимодействия оболочек с пользователями и с UNIX

р Свойства оболочки

р Управление средой оболочки

Взаимодействие ядра и оболочки

Программатор Громова и оболочка Uniprof.

Когда система UNIX переводится в интерактивный режим, программа unix (ядро системы) загружается в основную память компьютера, где остается до выключения компьютера. Во время процесса загрузки программа init выполняется в качестве фоновой задачи и продолжает выполняться до выключения. Эта программа сканирует файл /etc/inittab, в котором перечисляются порты, имеющие терминалы, и их характеристики. Когда эта программа активна и открытый терминал найден, init вызывает программу getty, которая вызывает на монитор терминала приглашение login:. Когда этот процесс вызван и выполняется, пользователь может начинать взаимодействовать с системой.

Вызовы оболочки UNIX при входе в систему

На рис. 8.1 показано протекание процесса от загрузки ядра до входа в оболочку. С этого момента пользователь находится в активной оболочке и готов к вводу команд в систему.

Во время входа в систему после ввода имени пользователя программа getty выводит на монитор приглашение password:. После ввода пароля программа getty вызывает программу login, которая просматривает файл /etc/passwd на предмет соответствующих записей. Если соответствие установлено, login осуществляет переход к начальному каталогу пользователя и передает управление программе начального запуска сеанса; и имя пользователя, и пароль определяются записью в файле /etc/passwd. Хотя это может зависеть от программы приложения, например, после проведения пароля может загрузится конкретное приложение, управляемое меню, обычно программа начального запуска сеанса является командным интерпретатором, как /bin/sh оболочки Bourne.

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

При выходе из оболочки ядро возвращает управление программе init, которая перезапускает процесс входа в систему. Прерывание может выполняться одним из двух способов: посредством команды exit или когда ядро вызывает команду kill применительно к процессу оболочки. При прерывании ядро освобождает все ресурсы, использовавшиеся пользователем и программой оболочки.

#37 Программы-оболочки. Информатика.

Оболочка и дочерние процессы

В системе UNIX существует много уровней программ, начиная с ядра и заканчивая конкретным приложением или командой. Взаимосвязь между этими уровнями показана на рис. 8.2.

После завершения процесса входа в систему уровень программы оболочки (уровень командного интерпретатора) непосредственно взаимодействует с ядром, как показано на рис. 8.2. При вводе команды, например, $ ls, оболочка находит файл программы /bin/ls и передает его ядру для исполнения. Ядро выделяет память для нового дочернего процесса, загружает программу и выполняет инструкции, содержащиеся в /bin/ls. По завершении программы ядро освобождает выделенную процессу память и возвращает управление родительской программе оболочки. Для ознакомления с примером такого процесса введите следующую команду:

В результате выводится перечень выполняющихся в данный момент команд: профамма оболочки и программа ps. Теперь введите следующее:

$sleep 10 Обработка файлов: переназначение ввода/вывода и каналы».

Функции и свойства оболочки

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

Интерпретация командной строки

Метасимволы оболочки (шаблоны)

Доступ к командам программы и их исполнение

Обработка файлов: переназначение ввода/вывода и каналы

Интерпретация командной строки

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

команда аргументы

Команда р это исполняемая команда UNIX, программа, утилита или программа оболочки. Аргументы передаются исполняемому модулю. Большинство программ утилит UNIX ожидают, что аргументы будут иметь следующую форму:

опции имена файлов Например, в командной строке

$ 1з -1 filel file2

имеется три аргумента команды ls; первый является опцией, а последние два ~ именами файлов.

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

$ echo Part a Part В Part С

Part A Part В Part С

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

$ echo ‘Part A Part В Part С’

Part A PartB Part С

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

Зарезервированные слова

Все версии оболочек имеют слова, обладающие специальным значением. При программировании оболочек такие слова, как do, done, for и while обеспечивают управление циклом, a if, then, else fi — условиями. Каждая версия оболочки обладает различными зарезервированными словами, присущими именно ей.

Читайте также:
Apple play что это за программа

Метасимволы оболочки (шаблоны)

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

Шаблоны Описание

* Соответствие любой части

? Соответствие любому символу

[] Соответствие диапазону приведенных символов

Шаблоны могут быть удобны при обработке ряда специфичных файлов. Ниже приведен ряд примеров:

$ ls t* Эта команда выводит перечень всех файлов, чьи имена начинаются с t.

Эта команда выводит перечень всех файлов, имена которых начинаются с test, далее следует любой одиночный символ, а затем р 5*dat.

$ls [a-c]* Эта команда выводит перечень всех файлов, имена которых начинаются с символов от а до с.

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

Команды программ

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

Обработка файлов: переправления ввода/вывода и каналы

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

$ls > myfiles

выводит список файлов текущего каталога и помещает его в файл, названный myfiles. Аналогично можно переназначить ввод с помощью символа

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

Для направления вывода одной команды во ввод следующей можно использовать символ | (канал). Например, команда

$1s -s | -nr I pg

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

Подстановка команд

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

$ grep ‘wc -l myfiles’ *

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

Поддержка переменных

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

В этой строке оболочка устанавливает LOOKUP в качестве переменной и присваивает ей значение /usr/ mydir. В дальнейшем можно использовать значение, сохраненное в LOOKUP, в командной строке, предваряя имя переменной знаком доллара ($). Рассмотрите следующие примеры:

Чтобы сделать переменную доступной дочерним процессам, можно использовать команду export, например:

Присвоение значений переменным в оболочке С отличается от выполнения этого в оболочках Во urn и Ко rn . Для присвоения переменной в оболочке С используется команда set

% set LOOKUP= /usr/mydir

Обратите внимание , что знак равенства с обеих сторон выделяется пробелами

Подобно подстановке имени файла подстановка имени переменной происходит до вызова программы. Во втором примере знак доллара ($) опущен. Следовательно, оболочка просто передает строку команде echo в качестве аргумента. При подстановке имени переменной значение переменной замещает имя переменной.

Например, в строке

программа ls вызывается с единственным аргументом /usr/mydir/filcname.

Запуск оболочки р управление средой

Когда пользователь начинает сеанс работы с UNIX и запускается оболочка, оболочка создает для пользователя специфичную среду. Этот процесс описывается в последующих разделах.

Переменные среды оболочки

Когда программа login вызывает оболочку, она устанавливает переменные среды, которые считываются из файлов инициализации оболочки /etc/profile и .profile. Обычно эти файлы устанавливают тип терминала в переменной $TERM и путь по умолчанию для исполняемых файлов р в переменной SPATH. Посмотрите следующие примеры:

$ echo $TERM $

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

Оболочка С присваивает значения переменным среды посредством команды setenv

% setenv TERM vt100

Файлы начального запуска оболочки

Файл .profile р локальный файл начального запуска для оболочки Bourne. Оболочка Ко rn использует файл .kshrc, а оболочка С р файл .cshrc. Для манипулирования средой начального запуска эти файлы можно редактировать. При необходимости можно добавлять дополнительные переменные. Можно также добавлять программирование оболочки для получения установок среды, зависящих от различных условий.

Опции начального запуска оболочки

При вызове оболочки из /etc/passwd или из командной строки, несколько опций можно устанавливать в качестве аргументов программы оболочки. Например, оболочка Bourne имеет опцию -х, которая перед исполнением отображает команды и их аргументы. Это удобно при отладке программы оболочки. Все эти опции подробно описываются в последующих главах.

Программирование оболочки

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

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

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

Читайте также:
Abbyy finereader 8 что это за программа

Источник: rus-linux.net

5. Программы-оболочки

Программы-оболочки – весьма популярный класс системных программ. Они обеспечивают более удобный и наглядный способ общения с ПК , чем с помощью командной строки DOS. Это как бы промежуточное звено между DOS и пользователем. В основном весь набор действий, осуществляемый программой-оболочкой, можно реализовать и средствами самой ОС.

Тем не менее, многие пользователи предпочитают использовать оболочки. Основная причина состоит в следующем. Взаимодействие пользователя с ОС DOS осуществляется по принципу диалога: пользователь набирает команду, нажимает клавишу [Enter], и ОС выполняет эту команду. Такой способ не нагляден и недостаточно удобен.

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

Можно сказать, что оболочка выполняет тройную функцию, обеспечивая:

  1. наглядное отображение файловой системы на экране и удобные средства для перемещений по этой системе;
  2. простой и гибкий механизм диалога с MS DOS;
  3. всевозможные служебные функции (манипуляции с файлами и др.).

Примеры программ-оболочек: Norton Commander, Volkov Commander, FAR, Windows Commander и др. В верхней части экрана размещаются две синих панели, каждая из которых содержит оглавление одного из каталогов файловой системы. Ниже располагается командная строка с обычным приглашением MS DOS и мерцающим курсором, в которой можно набирать обычные команды DOS. В последней строке экрана находится список функциональных клавиш [F1]-[F10] с кратким обозначением их функций.

NC одновременно на двух панелях демонстрирует оглавление двух неких каталогов файловой системы (в частном случае на обеих панелях может демонстрироваться один и тот же каталог). Имя логического диска и имя каталога указаны в заголовке каждой панели.

Оглавление каждой панели содержит строки трех типов:

  1. строку “..”, обозначающую выход в “родительский ” каталог данного каталога;
  2. строки с именами подкаталогов данного каталога (высвечены прописными буквами);
  3. строки с именами отдельных файлов данного каталога (высвечены строчными буквами).

Строки любого типа могут отсутствовать в оглавлении данной панели: строка 1 отсутствует, если на панели представлен корневой каталог (выходить некуда); строки 2 отсутствуют, если в данном каталоге нет подкаталогов; строки 3 отсутствуют, если в данном каталоге не зарегистрированы отдельные файлы.

Одна из строк рабочей панели (т.е. панели с выделенным заголовком) выделена рамкой серо-зеленого цвета (как и заголовок). Можно перемещать курсорную рамку по строкам панели, как в обычном меню: стрелками курсора – вниз, вверх, влево, вправо; клавишами [End] и [Home] – на последнюю строку и на первую строку оглавления; клавишами [PgDn] и [PgUp]- на страницу вверх или вниз.

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

Перемещение между левой и правой панелями осуществляется нажатием клавиши [Tab].

Для возврата в «родительский» каталог необходимо переместить курсорную рамку панели на верхнюю строку (..) и нажать клавишу [Enter]. Для входа в каталог следующего уровня (т.е. в каталог, для которого текущий каталог является «родительским») необходимо переместить курсорную рамку на имя каталога и нажать [Enter].

Если необходимо переместиться в каталог, который находится на другом логическом диске (не показанном на панелях NC), то для смены логического диска левой панели надо нажать клавиши [Alt]-[F1], а для смены диска правой панели – клавиши [Alt]-[F2]. Появится диалоговое окно – меню из имен логических дисков, которые доступны компьютеру. Курсорную рамку следует переместить на нужное имя и нажать [Enter] или просто нажать клавишу с изображением соответствующей буквы. Если вы передумали менять диск, надо нажать [Esc]. Менять диск можно в любой панели – в рабочей и нерабочей.

Управляющее меню вызывается нажатием клавиши [F9]. Вверху экрана появляется строка, содержащая 5 пунктов:

Left Files Commands Options Right

С помощью команд этого меню можно управлять почти всеми функциями NC: можно установить наиболее удобный вид представления информации на экране; изменить режимы работы NC; а также выполнить некоторые другие действия.

Для перемещения по пунктам меню надо использовать клавиши [®] и []. Выбрав нужный пункт меню, нужно нажать [Enter]. Под пунктом откроется соответствующее ему подменю, перемещаться по которому надо клавишами [­] и [Ї]. Для выбора конкретной команды следует нажать [Enter] (или использовать горячие клавиши). Для выхода из меню или подменю используется клавиша [Esc].

Для получения справки о пункте меню надо выделить этот пункт и нажать [F1].

Выбрав пункт Left или Right (Левая или Правая), можно управлять отображением информации на левой и правой панелях NC. Действующие режимы отмечены галочкой слева от названия. Чтобы установить/отключить режим нужно выделить его клавишами перемещения курсора и нажать [Enter].

    1-я группа опций определяет тип панелей:

В пункте Files (Файлы) собраны команды, дублирующие функции клавиш [F1] — [F8], а также команды управления группой файлов:

  • file Atributes – установка атрибутов файла.
  • Select group ([Gray +]) – выделение группы файлов по маске.
  • Deselect group ([Gray -]) – отмена выделения группы файлов по маске.
  • invert selection ([Gray *]) – обращение выделения файлов.
  • Restore selection – восстановление выделения, снятого NC. Может быть полезно для повторного выполнения действий над той же группой файлов.
  • Quit ([F10]) – выход из NC.

Пункт Commands (Команды) позволяет выдавать программе различные команды. Например:

  • NCD tree ([Alt]-[F10]) – вывод на экран дерева каталогов на диске для быстрого перехода в другой каталог.
  • Find file ([Alt]-[F7]) – поиск файла на диске.
  • Swap panels ([Ctrl]-[U]) – панели меняются местами.
  • Panels on/off ([Ctrl]-[O]) – убрать/вернуть панели с экрана.

Меню Options (Параметры) задает конфигурацию и устанавливает режимы работы NC. Например:

  • Configuration … – установка конфигурации NC.
  • Path prompt – если этот режим включен, то приглашение внизу экрана содержит информацию о текущем диске и текущем каталоге; если выключен – только о текущем диске.
  • Key bar – при включенном режиме выводятся внизу значения функциональных клавиш.
  • Mini status – если режим включен, то в нижней части каждой панели выводится строка с информацией о текущем файле (имя, размер, дата и время) или о группе помеченных файлов.
Читайте также:
Okko что это за программа

Пользователь имеет возможность создать свое индивидуальное меню, в которое включаются команды, наиболее часто им выполняемые.
Вызов пользовательского меню осуществляется нажатием клавиши [F2]. Клавишами перемещения курсора выделяют нужный пункт меню и нажимают [Enter] для его выполнения. Начиная с версии 4.0, NC позволяет использовать вложенные меню. Такие пункты меню выделяются символом «4» в правой колонке меню. При выборе такого пункта меню на экран выводится соответствующее ему подменю.

Выбор команд из подменю осуществляется аналогично.

Список команд, входящих в меню, задается пользователем в файле nc.mnu. Этот файл может находиться в текущем каталоге – это локальное меню, либо в каталоге, где находятся файлы программного пакета NC – это главное меню. Если такой файл есть и в текущем каталоге, и в каталоге NC, то используется файл из текущего каталога, т.е. локальное меню.

Файл nc.mnu имеет следующую структуру. Каждому элементу пользовательского меню соответствуют две или более строки в файле nc.mnu. В первой строке, начиная с 1-й позиции, указывается сообщение, которое будет выводиться в меню. Перед сообщением можно задать имя «горячей» клавиши с двоеточием. Тогда она будет использоваться для быстрого выбора данного пункта меню.

PR – печать файла
или 1: PR – печать файла

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

Например:
cd
Md COPY_DIR
Copy *.* COPY_DIR

(копирование всех файлов текущего каталога в каталог, который создается в корне текущего диска).

Файл nc.mnu можно редактировать любым текстовым редактором, в т.ч. редактором, встроенным в NC. Последовательность действий при этом должна быть следующая. Вызвать управляющее меню клавишей [F9], выбрать пункт Commands, подпункт Menu file edit. NC выдаст запрос: какое меню редактировать – главное или локальное? Курсорными клавишами выбрать Main или Local и нажать [Enter].

Меню выведется в середине экрана.

[F4] – редактирование пункта меню. На экран выводится бланк с полями:

  • Hot key (Назначенная клавиша) – клавиша для быстрого выбора пункта
  • Label (Название пункта меню) – описание пункта меню
  • Commands (Команды DOS)– команды, выполняемые при выборе данного пункта

Нужно заполнить поля запроса, нажать [Ctrl]-[Enter] для запоминания изменений или [Esc] для их отмены.

[F6] – вставка нового пункта меню. NC выдаст запрос: какой пункт хотите вставить – обычный (command) или вызывающий подменю ( menu)? Выбрать клавишей [ Пробел] нужный тип пункта и нажать [Enter]. На экран будет выведен пустой бланк для определения данного пункта меню.
Клавишей [F2] можно сохранить состояние меню.
[F8] – удаление текущего пункта меню.
Для выхода из пользовательского меню надо нажать [F10] или [Esc].

Источник: computer-lectures.ru

Общие сведения о программах – оболочках

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

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

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

§ создание, переименование, копирование, пересылку, удаление и быстрый поиск файла в текущем каталоге диска или на всех дисках компьютера;

§ просмотр, создание и сравнение каталогов;

§ просмотр, создание и редактирование текстовых файлов;

§ архивацию, обновление и разархивацию архивных файлов и просмотр архивов;

§ синхронизацию каталогов, расщепление и слияние файлов;

§ поддержку связи двух компьютеров через последовательный или параллельные порты;

§ форматирование и копирование дискет, смену метки дискеты и метки тома для жестких дисков, а также чистку дисков от ненужных файлов;

В таблице 5.2. приведены наиболее распространенные в настоящее время операционные оболочки.

Характеристики операционных оболочек

Наименование Среда обитания
Командные оболочки общего назначения
Norton Commander DOS
DOS Navigator DOS, Windows, OS2, UNIX
PC Shell DOS
Norton Commander for Windows Windows 95, Windows 98, 2000
Windows Commander Windows 98
Командные оболочки специального назначения
Оболочки управления программами
Dash Board for Windows Windows
Dash Board for Windows95 Windows 95
Desk Bar 95 for Windows 95 Windows 95
Оболочки архиваторов
LHA DOS
ARJ DOS
RAR DOS, OS2
WinRAR Windows 95, Windows 98
WinZip Windows 95, Windows 98
Утилиты
Norton Utilites DOS
Norton Desktop for Windows Windows

Наибольшую популярность среди пользователей получили оболочки Norton Commander[12], Windows Commander, Wolkow Commander. Этот программный продукт позволяет видеть файлы и каталоги на двух постоянно отображаемых панелях нескольких типов и удобно манипулировать файлами с помощью функциональных клавиш и мыши.

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

Графические оболочки для Windows — DashBoard for Windows, DashBoard for Windows95, DeskBar 95 for Windows 95 — позволяют пользователю быстро создавать меню для запуска программ и вызова документов, а также контролировать использование системных ресурсов.

Оболочки LHA, ARJ, RAR предназначены для управления сжатием (архивированием) и распаковкой файлов в среде MS DOS. Оболочки WinRAR и WinZip предназначены для управления сжатием (архивированием) и распаковкой файлов в операционной системе Windows.

Оболочки Norton Utilites, Norton Desktop for Windows предназначены для управления файлами.

Источник: studopedia.su

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru