Работа в Bash
Процессы
Основной задачей любой операционной системы является управление процессами. Операционная система должна распределять между ними ресурсы, предоставлять им возможность совместно использовать информацию и обмениваться ею, защищать ресурсы, используемые одним процессом, от их использования другими процессами, а также обеспечивать возможность синхронной работы процессов. Для этого операционная система должна поддерживать для каждого процесса свою структуру данных, в которой задается состояние данного процесса и указываются ресурсы, которыми он владеет. Это позволяет операционной системе осуществлять управление процессами.
Процесс - это в выполняемая в данный момент программа.
Выполнение процесса должно осуществляться последовательно. Процесс определяется как сущность, представляющая основную единицу работы, которая должна быть реализована в системе.
Операционная система контролирует следующую деятельность, связанную с процессами:
- создание и удаление процессов
- планирование процессов
- синхронизация процессов
- коммуникация процессов
- разрешение тупиковых ситуаций
Создание процесса
Простейшей ОС не требуется создание новых процессов, так как внутри них работает всего одна программа, запускаемая во время включения устройства. В более сложных системах надо создавать новые процессы. Обычно они создаются:
- При запуске ОС;
- При появлении запроса на создание процесса.
Маски файлов
Маской имени файла называется комбинация специальных символов, позволяющая легко производить массовый отбор файлов по каким-то общим признакам. Например, файлов одного типа или с похожим именем. Возможен также одновременный отбор по названным критериям.
Для чего это нужно?
Во времена MS-DOS и подобных ей операционных систем, маски имен файлов использовались повсеместно. Это сегодня мы просто выделяем нужные файлы и копируем их, куда нужно. Тогда же для каждого действия вручную вбивалась соответствующая команда и применение масок имен позволяло значительно облегчить этот рутинный труд.
С появлением и развитием первых файловых менеджеров потребность в использовании масок сильно сократилась, но они используются и сегодня. Например, с помощью масок легко осуществлять поиск необходимых файлов. Несмотря на то, что поиск в Windows и так неплохо ищет файлы хоть по типу, хоть по имени, с помощью маски можно задать более конкретные условия, что сделает поиск более точным.
Также возможность отбор файлов по маскам используется в некоторых приложениях.
Ну и конечно же эти маски используются при работе с командной строкой в консоли.
Для отбора файлов по маске используются символы "?" и "* ", где
"* " - набор произвольных символов, а "? " - один произвольный символ.
Работа с потоками ввода-вывода
Существуют stdout, stdin, stderr потоки для ввода-вывода. Ввод-вывод использует механизм перегрузки операций, гарантирующий вызов нужной функции-операции для указанного типа данных.
Классы потоков
Класс streambuf управляет буфером потока, обеспечивая базовые операции заполнения, опорожнения, сброса и прочих манипуляций с буфером.
Класс ios является базовым классом потоков ввода-вывода.
Классы istream и ostream - производные от ios и обеспечивают работу потоков соответственно ввода и вывода.
Класс iоstream является производным от двух предыдущих и предусматривает функции как для ввода, так и для вывода.
Классы ifstream, of stream и f stream предназначены для управления файловым вводом-выводом.
Классы istrstream и ostrstream управляют резидентными потоками (форматированием строк в памяти). Это устаревшая методика, оставшаяся в C++Builder в качестве пережитка.
Каждый процесс открывает потоки (помните, что в UNIX файл - это и есть поток данных?) для ввода и вывода данных, а также вывода сообщений об ошибках и другой диагностической информации. Эти потоки:
- ? 0 - стандартный ввод (stdin),
- ? 1 - стандартный вывод (stdout),
- ? 2 - стандартный поток сообщений об ошибках (stderr).
Ссылаться на эти потоки можно по их файловым дескрипторам. 0, 1 и 2 - это и есть такие дескрипторы.
По умолчанию потоки ввода-вывода связываются с консолью, с которой запущен процесс: стандартный ввод - с клавиатурой, другие два потока - с экраном.
Все потоки можно перенаправить в другой файл. Это может быть файл на диске, файл устройства (например, принтер или /dev/null) или стандартный поток другого процесса.
Для перенаправления стандартного вывода команды используется символ >("больше"). Если местом назначения служит файл, то можно его не перезаписывать, а присоединить (append) выводимые данные в его конец. Для такого перенаправления применяется символ >>.
Стандартный ввод перенаправляется символомc< ("меньше").
Для перенаправления стандартного потока ошибок используется конструкция 2>. Чтобы присоединить stderr к stdout и перенаправить их вместе, пользуйтесь переадресацией 2>l&1.
Для направления стандартного вывода одной команды на стандартный ввод другой применяется символ |
Перенаправление стандартных потоков ввода вывода
Перенаправление обычно осуществляется вставкой специального символа > между командами.
Обычно синтаксис выглядит так: команда1 > файл1 - выполняет команду1, помещая стандартный вывод в файл1; команда1 < файл1 выполняет команду1, используя в качестве источника ввода файл1 (вместо клавиатуры).
На каждый запрос ввода программы считывается одна строка текста из файла. Конструкция команда1 < файл1 > файл2 совмещает два предыдущих варианта:
выполняет команду1 ввода из файла1 и вывода в файл2.
Создание конвейеров
Конвейеры - это возможность нескольких программ работать совместно, когда выход одной программы непосредственно идет на вход другой без использования промежуточных временных файлов. Синтаксис: команда1 | команда2, выполняет команду1 используя её поток вывода как поток ввода при выполнении команды2, что равносильно использованию двух перенаправлений и временного файла:
команда1 > ВременныйФайл
команда2 < ВременныйФайл
rm ВременныйФайл
Хороший пример командных конвейеров - это объединение echo с другой командой для получения интерактивности в неинтерактивных средах, к примеру:
echo -e "ИмяПользователя\nПароль" | ftp localhost
Здесь запускается ftp-клиент, который подключается к локальному узлу (localhost). На запрос программы водит первую строку ИмяПользователя, затем на следующий запрос ввода считывает строку Пароль. Строки в команде echoразделены через \n.
Редакторы
vi/vim- серия текстовых редакторов операционных систем семейства UNIX.
gedit - поставляется по умолчанию в окружении рабочего стола GMOME.
Nano- простой и удобный консольный текстовый редактор Linux.
История vi
Первая версия была написана Биллом Джоем в 1976 году. В то время наиболее распространённым был редактор ed.
Поскольку он был довольно сложным для "простого смертного", George Coulouris разработал редактор em (editor for mortals - редактор для смертных). Билл Джой модифицировал редактор em и назвал его en, а позже на его основе создал ex, в котором появился визуальный режим, вызывавшийся командой vi. Так как пользователи больше времени проводили в визуальном режиме, ex 2.0, ставший частью 2BSD, сразу запускался уже в нём.
Так появился vi, бывший в то время всего лишь жёсткой ссылкой на ex.
Режимы редактора vi
Редактор vi имеет три режима:
- Командный - в этом режиме можно перемещаться по файлу и выполнять редактирующие команды над текстом. Команды вызываются ОБЫЧНЫМИ ЛАТИНСКИМИ БУКВАМИ.
- Ввода текста - в этом режиме обычные латинские буквы будут вставляться в текст.
- Режим строчного редактора ED используется для управления файлами (типа сохранить файл, зачитать файл и т.д.)