Клиентские и браузерные онлайн игры

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

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

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

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

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

Руководство bash

Какое-то время назад мне понадобилось что-то найти в мануале bash. Что мне понадобилось, уже сейчас точно и не вспомню там, но обратил внимание на то что в моей операционной системе, по крайней мере мануал bash еще не переведен. Вот я решил исправить этот недостаток. За точность не ручаюсь

Bash название, синтаксис, описание, параметры

 

Аргументы и вызов Bash

 

Определения, зарезервированные слова в shell

 

Грамматика команд shell

 

Комментарии и маскировка в Bash

 

Параметры в shell

 

Переменные shell

 

Массивы bash

 

Расширения в bash

 

Расширения фигурных скобок и расширения тильды

 

Расширения параметров в bash

 

Подстановка команд, Арифметические расширение и Процесс замены в bash

 

Разбиение на слова, Подстановка имен файлов, Соответствия шаблонов и Удаление кавычек в bash

 

Перенаправление в bash

 

Псевдонимы в bash

 

Функции shell

 

Арифметическая оценка в bash

 

Условные выражения в bash

 

Простое расширение команд в bash

 

Выполнение команд в bash

 

Среда выполнения команд в shell

 

Окружающая среда Bash

 

Статус выхода в bash

 

Сигналы bash

 

Управление заданиями в bash

 

Приглашения в bash

 

Библиотека READLINE в bash

 

История в bash

 

Расширение истории в bash

 

Встроенные команды в bash

 

Ограничения и файлы bash

Приглашения в bash

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

\a символы сигнала ASCII (07)

\d дата в формате «День недели, месяц, дата» (например «Пт Май 26»)

\D{format} формат передается strftime(3) и результат выставляется в строку приглашения: пустой результат в формате локального представления времени. Необходимы фигурные скобки

\e ASCII управляющий символ (033)

\h имя хоста до первого символа ‘.

\H имя хоста

\j количество заданий в настоящее время управляемых оболочкой shell

\l базовое имя устройства имя терминала оболочки

\n перевод строки

\r возврат каретки

\s имя оболочки, базовое имя $0(часть полного имени следующий за последним слеш)

\t текущее время в 24-часовом формате ЧЧ:ММ:СС

\T текущее время в 12-часовом формате ЧЧ:ММ:СС

\@ текущее время в 12-часовом формате am/pm

\A текущее время в 24-часовом формате ЧЧ:ММ

\u имя текущего пользователя

\v версия bash(например 2.00)

\V версия релиза bash, версия + уровень патча(например, 2.00.0)

\w текущий рабочий каталог, $HOME сокращенно тильда(использует значение переменной PROMPT_DIRTRIM)

\W базовое имя текущего рабочего каталога, $HOME сокращенно тильда

\! номер данной команды в истории

\# номер данной команды

\$ если эффективный UID равен 0 то #, иначе $

\nnn символ соответствующий восьмеричному числу nnn

\\ обратная косая черта

\[ начало последовательности непечатанных символов, которые могут быть использованы для внедрения в управление терминалом в приглашении

\] конец последовательности непечатных символов

Номер команды и номер команды в истории, как правило отличаются, номер в истории вяляется номером его положения в списке истории команд, которая может включать команды прочитанные из файла истории(Историю команд я буду описывать в дальнейшем), в то время как номер команды является положением в последовательности команд выполняемых текущий сеанс работы с оболочкой shell. После того как строка декодируется в ней выполняется расширения с помощью параметров расширений, подстановка команд, арифметическое расширение и удаление кавычек, в зависимости от значения опции оболочки promptvars(детальней будет писаться в одной из будущих статей в описании встроенной команды shopt при описании ВСТРОЕННЫХ КОМАНД ИНТЕРПРИТАТОРА)

Управление заданиями в bash

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

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

[1] 25647

Здесь показывается что это задание под номером 1 и что идентификатор последнего процесса конвейера, связанный с этим заданием 25647. Все процессы в одном конвейере являются членами одного и того же задания. Bash использует работу абстракции в качестве основы управления заданиями.

Для облегчения реализации пользовательского интерфейса, для управления заданиями, операционная система поддерживает понятие текущий идентификатор группы процессов терминала. Члены этой группы процессов(процессы, идентификатор группы процессов, равен текущему ID группы процессов терминала) получают сигналы с клавиатуры, например сигнал SIGINT. Это так называемые процессы на переднем плане или приоритетные процессы. Фоновые процессы чей идентификатор группы процесса отличается от терминала: такие процессы не воспринимают сигналы генерируемые при помощи клавиатуры. Только интерактивные процессы разрешают чтение или пользователь указывает с помощью stty -tostop выводить данные на экран. Фоновые процессы которые пытаются читать(записывать используя stty -tostop) с терминала, отправляют SIGTTIN (SIGTTOU) сигнал драйвера ядра терминала, который если не перехвачен приостанавливает работу процесса.

Если операционная система, на которой работает bash поддерживает управление заданиями, bash содержит средства для его использования. При вводе приостановки процесса(обычно это ^Z, Control-Z) во время работы процесса, этот процесс останавливается и управление возвращается к командному интерпритатору bash. При нажатии клавиши задержанной приостановки(обычно ^Y, Control-Y) процесс останавливается когда пытается читать ввод с терминала и управление возвращается командному интерпритатору bash. Потом пользователь может манипулировать состоянием этой работы используя команду «bg» для продолжения работы в фоновом режиме, команда «fg» продолжит работу на переднем плане, или же используется команда «kill» для того чтобы уничтожить процесс. Нажатие ^Z срабатывает немедленно, и имеет дополнительный побочный эффект, в виде сброса данных в виде ввода или вывода.

Существует несколько способов для обращения к заданию в shell. Символ «%» вводит спецификацию задания(jobspec). Номер задания «n» может упоминатся как «%n». Также на задание можно сослаться с помощью префикса названия команды, используещегося для его запуска или подстроки, входящей в сообветствующую командную строку. Например, «%ce» ссылается на остановленное задание «ce». Если же префикс соответствует более чем одному заданию, bash выдаст сообщение об ошибке. Использование же «%?ce» в свою очередь, относится к любому заданию содержащему подстроку «ce» в командной строке. Если подстрока соответствует более чем одному заданию, bash выдаст сообщение об ошибке. Символы «%%» и «%+» означают текущее задание командного интерпритатора последнее остановленное задание на переднем плане либо запущенное в фоновом режиме. На предыдущее задание можно сослаться при помощи «%-». Если существует лишь одно задание то оба варианта «%+» и «%-» можно использовать для обозначения этого задания. К выводу относящемуся к заданиям(например вывод команды jobs) текущее задание всегда помечается «+», а предыдущее «». При указании одного символа «%»(без спецификации прилагаемой работы) также ссылается на текущее задание.

Для того чтобы перевести задание в приоритетный режим, достаточно ввести только его имя, «1%» является синонимом «»fg %1»», переводящей задание 1 из фонового режима на передний план, в приоритетный режим. Аналогичным образом команда «»%1 &»», продолжает задание в фоновом режиме и эквивалентна команде «»bg %1»».

Shell сразу узнает когда задание изменяет состояние. Как правило bash пишет о изменениях в состоянии задания при выдаче очередного приглашения, чтобы не прерывать этой инфомацией иные выводы результатов. Если для встроенной команды set включена опция -b, bash информирует о таких изменениях немедленно. Любой обработчик сигнала SIGCHLD выполняется для каждого дочернего процесса который выходит.

Если происходит попытка выхода bash в то время как задания не остановлены(или если опция checkjobs включена с использованием встроенной команды shopt) shell выдаёт предупреждение, и если включена опция checkjobs, список рабочих заданий и их состояние. Задания команд может быть использовано для проверки их состояния. Если вторая попытка выхода также производится без промежуточной команды, shell не печатает ещё одно предупреждение и любые остановленные задания завершаются.

Сигналы bash

Когда bash находится в интерактивном режиме, при отсутствии каких-либо обработчиков сигналов, она игнорирует сигнал SIGTERM (так что kill 0 не уничтожает интерактивную оболочку), а SIGINT перехватывается и обрабатывается (так что встроенная команда wait не прерывается). В любом случае bash игнорирует SIGQUIT. Если работает управление заданиями, bash игнорирует SIGTTIN, SIGTTOU и SIGTSTP.

Помимо запущенных встроенных команд bash имеют установленные значения обработчиков сигналов наследуемые из родительского процесса. Когда управление заданиями не действует, асинхронные команды игнорируют также SIGINT и SIGQUIT. Когда выполняются команды для подстановки команд, игнорируются сигналы управления заданиями SIGTTIN, SIGTTOU и SIGTSTP введённые с клавиатуры.

Командная оболочка по умолчанию завершает работу при получении сигнала SIGHUP. Перед выходом интерактивная оболочка посылает сигнал SIGHUP всем заданиям, работающим или остановленным. Остановленным работам направляется сигнал SIGCONT для подтверждения того что они получили SIGHUP. Чтобы избежать отправки сигнала определённому заданию, оно должно быть удалено из таблицы заданий при помощи встроенной команды disown (встроенные команды будут описываться в дальнейшем) или же отметить задание чтобы не получать SIGHUP используя disown -h.

Если опция huponexit оболочки установлена при помощи команды shopt, bash посылает SIGHUP всем заданиям при выходе из командного интерпретатора.

Если bash ожидает завершения команды и получает сигнал для которого установлен обработчик, обработчик не будет выполнен, пока команда не завершится. Когда bash ожидает асинхронную команду с помощью встроенной команды wait, получение сигнала для которого установлен обработчик, приводит к завершению встроенной команды wait со статусом выхода больше 128, сразу после чего обработчик выполняется.

Статус выхода в bash

Статусом выхода выполненной команды является значение возвращаемое системой ожидания вызова PID либо эквивалентные функции. Статус выхода выпадает от 0 до 255, хоть как описано ниже shell оболочка может искпользовать значения которые превышают 125 специально. Выход статусов из встроенных команд shell и составные команды также ограничены этим диапазоном.

Для shell оболочки команда которая выходит с нулевым статусом выхода, сработала успешно. Нулевой статус выхода указывает на успех. Ненулевой статус выхода, указывает на ошибку. Когда команда прерывается сигналом N, bash использует значение 128+N в качестве выхода.

Если команда не найдена, дочерний процесс созданный для выполнения возвращает статус 127. Если команда найдена, но не является исполняемой, возвращается статус 126.

Если команда не выполняется из-за ошибки в процессе расширения или перенаправления, статус выхода больше нуля.

Встроенные команды shell возвращают статус выхода 0 (истина), если команда успешна, и не равный нулю (ложь), если ошибка происходит во время выполнения команды. Все встроенные команды возвращают код завершения 2, чтобы указать неправильное использование.

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

Окружающая среда Bash

Когда программа вызывается она создаёт массив строк называемый окружением. Это список пар имя-значение, в формате имя=значение.

Оболочка обеспечивает несколько способов управления окружающей средой. Во время вызова оболочка просматривает свою собственную среду и создаёт параметр для каждого найденного имени, автоматически помечая её для экспорта в дочерние процессы. Выполненные команды наследуют окружающую среду. Команды export и declare -x позволяют добавить или удалить параметры и функции из окружающей среды в bash. Если значение параметра окружающей среды меняется, новое значение становящееся частью окружающей среды заменяет старое. Окружающая среда, унаследованная каждой выполняемой командой состоит из начальной окружающей среды оболочки, значений которые могут быть изменены в окружающей среде за исключением пар удалённых с помощью команды unset с учётом изменений добавленных при помощи команд export и declare -x.

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

Если установлена опция «-k» то все назначения параметров помещаются в окружающую среду для команды, а не только предшествующие имени команды.

Когда bash вызывает внешнюю команду, переменная «_» устанавливается равной полному имени файла команды и передаётся этой команде в окружающей среде.