Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Потоки ввода-вывода

Читайте также:
  1. Введение в OC Linux. Перенаправление ввода-вывода. Программные каналы (конвейеры).
  2. Введение в OC Linux. Перенаправление ввода-вывода. Программные каналы (конвейеры).
  3. Ввод-вывод чисел, символов и строк на консоль. Переключение ввода-вывода, работа с файлами.
  4. Взаимовлияние потребителей и ПС через ИП, их потоки и ИПК И-П и П.
  5. Взаимодействие человека со средой обитания может быть позитивным или негативным, характер взаимодействия определяют потоки веществ, энергий и информации.
  6. Где отражаются финансовые потоки банка за определенный период времени ?
  7. Денежные потоки предприятия как объект управления. Методы их оценки.
  8. За джерелами походження (або за ознакою власності на капітал)міжнародні потоки капіталу поділяються на державні (офіційні) і недержавні (приватні).
  9. ИСПОЛЬЗОВАНИЕ НЕСКОЛЬКИХ ШИН ДЛЯ ВВОДА-ВЫВОДА
  10. Использование стандартного ввода-вывода.

Если Вы не можете пропинговать шлюз, используемый по умолчанию, то сначала проверьте журнал ошибок ядра. Если в файле /var/log/messages ошибок нет, но Вы не можете пропинговать ваш шлюз или получить IP адрес, то проверьте конфигурационные файлы /etc/sysconfig/network-scripts/ на предмет правильной конфигурации IP и проверьте таблицу маршрутизации с тем, чтобы убедиться, что там все правильно. С помощью команды iwconfig Вы можете также проверить, не выходит ли ваш Linux компьютер из диапазона адресов, обслуживаемых точкой доступа WAP.

Зачет по UNIX

1. командный интерпретатор, внешние и внутренние команды, интерпретация командной строки.

Shell

Наша работа в Linux будет полностью (за исключением, возможно, редактирования исходных текстов программ) происходить в командной строке (или, что то же самое, — в консоли или в терминале). Команды в консоли вводятся с клавиатуры в одну строку, после чего следует Enter, передающий комнаду для обработки командному интерпретатору (часто называемому shell — оболочка).

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

$ help

; просмотреть список команд shell

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

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

Действие, когда какая либо команда или сама командная оболочка инициирует (порождает) новый подпроцесс, что бы выполнить какую либо работу, называется ветвлением (forking) процесса. Новый процесс называется "дочерним" (или "потомком"), а породивший его процесс -- "родительским" (или "предком"). В результате и потомок и предок продолжают исполняться одновременно -- параллельно друг другу.

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

2. формат команды linux, ключи, параметры, ключи с параметрами, длинные и короткие ключи

Большинство команд Linux имеют следующую структуру:

$ команда флаги параметры

Параметры задают необходимые файлы, пути, и т.п. в зависимости от команды. Флаги изменяют поведение команды, например изменяют режим вывода, включают рекурсивный обход папок и т.п. Флаги могут иметь две формы записи - короткую (-f), где вместо f может стоять любая другая буква, и длинную (--flag), где вместо flag может стоять любое название флага. Флаги могут иметь параметры. В этом случае параметр пишется после флага. В короткой форме - через пробел или сразу за буквой флага без разделителей. В длинной - через знак равенства (=).

Пример:

$ ls -h -w60 --sort=time /etc

; Команда ls (список содержимого каталога) получает параметр /etc (какой каталог вывести), и три флага - -h без параметра, -w с параметром 60 и --sort с параметром time.

Флаги в коротком формате могут быть записаны друг за другом (если у них нет параметров). Например вышеприведённая команда может выглядеть так: $ ls -hw60 --sort=time /etc.

Пробелы являются разделителями между командой, флагами и параметрами. Если параметр содержит пробел, он будет проинтерпретирован как два разных параметра, разделённых пробелом. Чтобы заставить интерпретатор считать пробел обычным символом (а не специальным символом-разделителем), необходимо этот пробел экранировать, это можно сделать взяв параметр в кавычки ($ ls "Рабочий стол") или лучше поставив обратный слэш (\) перед экранируемым символом ($ ls Рабочий\ стол).

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

3.история команд, дополнение команд, справка по командам (внешним, внутренним), другие источники информации.

4. работа с файловой системой - просмотр и смена каталога, операции над файлами и каталогами (создание, удаление, перемещение и т.п.)

5. псевдонимы (alias), файловые псевдонимы... ~

Псевдонимы в Bash — это ни что иное, как "горячие клавиши", средство, позволяющее избежать набора длинных строк в командной строке. Если, к примеру, в файл ~/.bashrc вставить строку alias lm="ls -l | more", то потом вы сможете экономить свои силы и время, набирая команду lm, вместо более длинной ls -l | more. Установив alias rm="rm -i" (интерактивный режим удаления файлов), вы сможете избежать многих неприятностей, потому что сократится вероятность удаления важных файлов по неосторожности.

Псевдонимы в сценариях могут иметь весьма ограниченную область применения. Было бы здорово, если бы псевдонимы имели функциональность, присущую макроопределениям в языке C, но, к сожалению, Bash не может "разворачивать" аргументы в теле псевдонима. [54] Кроме того, попытка обратиться к псевдониму, созданному внутри "составных конструкций", таких как if/then, циклы и функции, будет приводить к появлению ошибок. Практически всегда, действия, возлагаемые на псевдоним, более эффективно могут быть выполнены с помощью функций.

6. шаблоны? *, экранирование \ ' ", поиск файлов

* используется для обозначения любого объекта. Например, просто * обозначает любой файл каталога; *.txt - все имена файлов с расширением txt; gorilla.* - все имена файлов, начинающиеся со слова gorilla.

? обозначает любой (но только один) символ. Например, source.? обозначает source.h, source.c, source.y и т.д.

Кавычки, ограничивающие строки с обеих сторон, служат для предотвращения интерпретации специальных символов, которые могут находиться в строке. (Символ называется "специальным", если он несет дополнительную смысловую нагрузку, например символ шаблона — *.)

Вообще, желательно использовать двойные кавычки (" ") при обращении к переменным. Это предотвратит интерпретацию специальных символов, которые могут содержаться в именах переменных, за исключением $, ` (обратная кавычка) и \ (escape — обратный слэш). [14] То, что символ $ попал в разряд исключений, позволяет выполнять обращение к переменным внутри строк, ограниченных двойными кавычками ("$variable"), т.е. выполнять подстановку значений переменных (см. Пример 4-1, выше).

Двойные кавычки могут быть использованы для предотвращения разбиения строки на слова. [15] Заключение строки в кавычки приводит к тому, что она передается как один аргумент, даже если она содержит пробельные символы - разделители.

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

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

7. стандартные потоки, операторы перенаправления потоков, подстановка команд

Потоки ввода-вывода

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

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

Для каждого запущенного в Unix процесса, существует три специальных потока, с которыми ассоциированы специальные дескрипторы. Это стандартный поток ввода (дескриптор 0), вывода (1) и ошибок (2). Поток ввода доступен только для чтения, потоки вывода и ошибок — только для записи. По-умолчанию, данные считанные из стандартного потока ввода (дескриптор 0), считываются с клавиатуры. Данные, записанные в потоки вывода и ошибок, выводятся в терминал, ассоциированный с процессом (обычно терминал, из которого процесс был запущен). При этом данные потока ошибок выводятся немедленно, в то время как для данных потока вывода возможны задержки при выводе (система выводит эти данные "когда удобно").

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

 

 

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

Стандартные потоки привязаны к файловым дескрипторам с номерами 0, 1 и 2.

Стандартный поток ввода (stdin) — 0;

Стандартный поток вывода (stdout) — 1;

Стандартный поток ошибок (stderr) — 2.

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

< файл

Использовать файл как источник данных для стандартного потока ввода.

> файл

Направить стандартный поток вывода в файл. Если файл не существует, он будет создан; если существует — перезаписан сверху.

2> файл

Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан; если существует — перезаписан сверху.

>>файл

Направить стандартный поток вывода в файл. Если файл не существует, он будет создан; если существует — данные будут дописаны к нему в конец.

2>>файл

Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан; если существует — данные будут дописаны к нему в конец.

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

8. работа с текстовыми файлами - вывод, фильтрация, конвейеры

Последний из приведенных выше примеров (с командой grep) можно использовать для иллюстрации еще одного важного понятия, а именно, программы-фильтра. Фильтры — это команды (или программы), которые воспринимают входной поток данных, производят над ним некоторые преобразования и выдают результат на стандартный вывод (откуда его можно перенаправить куда-то еще по желанию пользователя). К числу команд-фильтров относятся уже упоминавшиеся выше команды cat, more, less, wc, cmp, diff, а также следующие команды.

В Юникс -подобных операционных системах, конвейеры соответствуют оригинальным конвейерам программ: набор процессов, связаны своими стандартными потоками ввода-вывода таким образом, что выходной поток каждого процесса (stdout) непосредственно связывается со стандартным потоком ввода (stdin) следующего. Каждый связь реализуется как анонимный конвейер. Программы-фильтры часто используются в подибнх комбинациях. Этой концепции было предложено Дугласом Мак-Илроем (англ. Douglas McIlroy) для оболочек Юникс и дано название по аналогии с настоящими конвейерами.

9. параметры, подстановка параметров, позиционные параметры

Параметр - это сущность, хранящая значение. Это может быть имя, число или один из специальных символов, перечисленных ниже в разделе "Специальные параметры". В контексте интерпретатора, переменная - это параметр, обозначаемый именем.

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

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

Выражения в фигурных скобках могут быть вложенными. Результаты каждой замены не сортируются; порядок слева направо сохраняется. Например, конструкция a{d,c,b}e заменяется на 'ade ace abe'.

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

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

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

mkdir /usr/local/src/bash/{old,new,dist,bugs}

или

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Замена выражений в фигурных скобках вносит небольшое рассогласование с историческими версиями sh. Командный интерпретатор sh не рассматривает открывающую и закрывающую фигурные скобки в слове специальным образом и просто сохраняет их. Командный интерпретатор bash удаляет фигурные скобки из слова при замене. Например, слово, введенное в sh как file{1,2}, остается без изменений. Это же слово заменяется парой слов file1 file2 после замены выражения в фигурных скобках в bash. Если требуется полная совместимость с sh, командный интерпретатор bash надо запускать с опцией +B или отключать с помощью опции +B команды set




Дата добавления: 2014-12-19; просмотров: 28 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав