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

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

Введение в OC Linux. Перенаправление ввода-вывода. Программные каналы (конвейеры).

Читайте также:
  1. I Введение
  2. I. ВВЕДЕНИЕ
  3. I. Введение
  4. I. ВВЕДЕНИЕ
  5. I. ВВЕДЕНИЕ
  6. I. ВВЕДЕНИЕ
  7. I. ВВЕДЕНИЕ
  8. I. ВВЕДЕНИЕ
  9. I. Введение
  10. I. Введение

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

Варианты:

  1. Посчитать количество пользователей в системе и записать информацию о них в файл.
  2. Отсортировать список файлов текущей директории в обратном порядке и записать его в файл.
  3. Отсортировать список текстовых файлов текущей директории в алфавитном порядке и записать его в файл.
  4. Подсчитать количество файлов текущей директории, имена которых начинаются на букву «а».
  5. Пронумеровать строки файла f1.txt содержащие слово result и записать в файл f2.txt.
  6. Подсчитать количество файлов и каталогов текущей директории с правом доступа для владельца – на чтение и запись, для группы – на запись, для остальных - на чтение.
  7. Записать в файл f2.txt список файлов директорий cat1 и cat2 с правами доступа для всех только на чтение.
  8. Сравнить файлы f1.txt и f2.txt и подсчитать количество расхождений в них.
  9. Записать в файл f1.txt список подкаталогов текущего каталога, подсчитать их количество и дописать в файл.
  10. Вывести на экран список исполняемых файлов текущей директории, в имени которых содержится буква f.
  11. Записать в файл f1.txt информацию обо всех файлах текущей директории, подсчитать и дописать туда же количество текстовых файлов.
  12. Пронумеровать строки файла f1.txt содержащие слово result, отсортировать их в обратном порядке и записать в файл f2.txt.

 

Контрольные вопросы:

· Какие стандартные потоки поддерживаются в Linux?

· Для чего используется перенаправление потоков, каким образом указывается в команде?

· Что такое фильтр?

· Как перенаправить сообщение об ошибке в файл?

· Что такое конвейер? Для чего предназначен?

 

Введение в OC Linux. Перенаправление ввода-вывода. Программные каналы (конвейеры).

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

 

Теоретические сведения

 

1. Перенаправление потоков и программные каналы

В ОС UNIX существует три стандартных потока: поток ввода, поток вывода и поток стандартного протокола (поток ошибок).

Перенаправление потоков позволяет изменить стандартный ввод/вывод: < - изменение источника стандартного ввода; >, >> - изменение приемника стандартного вывода.

Примеры:

cat > filename - перенаправление вывода программы cat в файл filename (если этот файл существует, то его прежнее содержимое будет утеряно);

cat >> filename - добавить содержимое вывода программы cat к содержимому файла filename;

cat < filename - сформировать стандартный ввод программы cat из содержимого файла filename.

Стандартные потоки - поток ввода, поток вывода и поток ошибок (поток протокола) имеют фиксированную нумерацию - 0, 1 и 2 соответственно. Эти номера (номера дескрипторов потоков) можно использовать в явном виде. Например, запись

prog 1>file

эквивалентна записи

prog >file

Для того, чтобы отличить имя потока от имени файла, перед номером потока ставится символ ‘&’:

prog >file 2>&1

Здесь происходит перенаправление стандартного потока вывода в файл file (>file). А кроме того, сообщения об ошибках также будут перенаправлены в файл file: запись 2>&1 означает перенаправление потока ошибок на стандартный поток вывода, который, в свою очередь, был перенаправлен в файл.

Замечание: анализ команды осуществляется интерпретатором справа налево: сначала происходи слияние потоков (2>&1), а затем перенаправляется стандартный поток вывода (1) в файл file.

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

 

Канал - это программное средство, связывающее процессы ОС UNIX буфером ввода/вывода. Запуск процессов в виде

$ процесс_1 | процесс_2 |... | процесс_n

означает, что стандартный вывод процесса _1 будет замкнут на стандартный ввод процесса _2, стандартный вывод процесса _2 будет замкнут на стандартный ввод процесса _3 и т.д. При этом сначала создается канал, а потом на выполнение одновременно запускаются все процессы, и общее время их выполнения определяется более медленным процессом.

Пример: ls | wc -l

Те же действия можно организовать так:

ls > buffer

wc -l < buffer

rm -f buffer

Команда ls выводит на экран (стандартный поток вывода) список файлов текущего каталога, а команда wc -l считает количество строк во входном потоке (в файле, а если файл не указан - в стандартном входном потоке). Таким образом, объединение этих двух команд программным каналом позволяет посчитать количество файлов в текущем каталоге.

 

Итоговая таблица:

 

> file Перенаправление стандартного потока вывода в файл file
>> file Добавление в файл file данных из стандартного потока вывода
< file Получение стандартного потока ввода из файла file
p1 | p2 Передача стандартного потока вывода программы p1 в поток ввода программы p2
n > file Переключение потока вывода из файла с дескриптором n в файл file
n >> file Добавление записей потока вывода из файла с дескриптором n в файл file
n > &m Слияние потоков с дескрипторами n и &m

 

2. Справочные команды.

grep - поиск шаблона (подстроки) в файлах:

$ grep [-ключи] подстрока список_файлов

Найденные строки выводятся на стандартный вывод в формате, определяемом ключами. Если файлов несколько, то перед каждой строкой выводится имя соответствующего файла. Ключи:

-c - вывод имен всех файлов с указанием количества строк, содержащих шаблон;

-i - игнорирование регистра (различия строчных и заглавных латинских букв);

-n - вывод перед строкой ее относительного номера в файле;

-v - вывод строк, не содержащих шаблона (инверсия вывода);

-l - вывод только имен файлов, содержащих шаблон.

 

wc - подсчет количества строк, слов и символов в файлах:

$ wc [-lwc] [список_файлов]

Подсчет строк - ключ -l, слов - ключ -w и символов - ключ -c (по умолчанию -lwc). Если список файлов пуст, то подсчет ведется в стандартном потоке ввода.

 

sort - сортировка файлов:

$ sort [-ключи] список_файлов

Эта команда сортирует входные файлы по строкам в соответствии с увеличением кодов символов. Ключи:

-r - обратный порядок сортировки;

-f - не учитывать различие строчных и прописных латинских букв

-n - числовой порядок сортировки и т.д.

 

cmp - вывод места первого расхождения:

$ cmp файл_1 файл_2

Выводит номер символа и номер строки (в текстовых файлах), в которой впервые встречается расхождение во входных файлах. Работает с любыми файлами.

 

diff - вывод всех расхождений в файлах:

$ diff файл_1 файл_2

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

 

find -поиск файлов в поддереве каталогов:

find список_каталогов условия_поиска

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

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

! условие отрицание условия;

пробел соответствует операции «И»;

-o операция «ИЛИ»;

\(выражение \) булевское выражение в скобках

 

Перечислим некоторые опции, задающие условия (при этом условимся обозначать через n положительное десятичное число, +n - любое положительное число, строго большее n, -n - любое положительное число, строго меньшее n):

· -name имя_файла истинно для файлов с именем имя_файла; в задаваемом имени допускается использование метасимволов;

· -perm 8-ричный_код истинно для файлов с указанным кодом прав доступа;

· -type {f|d|b|c|p} истинно для файлов указанного типа (f - обычный файл, d - каталог, b - блок-ориентированный специальный файл, c - байт-ориентированный специальный файл, p - именованный канал);

· -print всегда истинно; вызывает печать маршрутного имени файла;

· -size n[c] истинно для файлов с длиной n. По умолчанию длина задается в блоках по 512 байт, а если после длины ставится символ c, то в байтах;

· -exec команда истинно, если команда, выполняющаяся при наличии данного условия, возвращает нулевой код завершения. Если в тексте команды должно быть указано имя текущего проверяемого файла, то вместо него пишут {}. В конце команды должна стоять экранированная точка с запятой: ‘\;’;

· -links n истинно для файлов с числом ссылок n.

 

Примеры:

$find / -type f -links +1 -print

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

$find / -type f -size +2 -exec ls -l {}\;

Выводятся листинги с указанием длины в блоках (по 1024 байта) для файлов корневого каталога, длина которых в блоках по 512 байт превышает 2.

$find /dev \(-type d -o -type b \) -print

Выводятся имена каталогов или специальных файлов устройств блок-ориентированного типа из каталога /dev и его подкаталогов

find / -name ‘*.a’ -exec ar -t {} \; |grep console

В этой сложной команде ищутся файлы с расширением ‘.a’ (архивы или библиотеки), происходит просмотр их содержимого (-exec ar -t {}) и выводятся строки, содержащие подстроку ‘console’ (grep console)

 




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




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