- •Введение
- •Лабораторная работа 1.
- •Регистрация пользователя в системе
- •Выход из системы
- •Выполнение простых команд
- •Группирование команд
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Литература
- •5.3. Задание для самостоятельной работы
- •5.4. Контрольные вопросы
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Задание для самостоятельной работы
- •Формат файла /etc/passwd
- •Формат файла /etc/shadow
- •Формат файла /etc/group
- •Создание нового пользователя
- •Переключение между пользователями
- •Файлы инициализации пользователей
- •Файлы, регламентирующие работу пользователей
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •9.3. Права доступа к каталогам
- •9.4. Смена прав доступа на файлы
- •9.5. Маска на вновь создаваемые файлы
- •9.6. Дополнительные атрибуты файла
- •9.7. Списки управления доступом
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •10.3. Метасимволы или шаблоны
- •10.4. История команд
- •10.5. Псевдонимы
- •10.6. Перенаправление ввода и вывода
- •10.7. Конвейеры
- •10.8. Приглашение ко вводу
- •10.9. Сценарии оболочки
- •10.10. Задания для самостоятельной работы
- •10.11. Контрольные вопросы
- •11.3. Системный вызов open()
- •11.4. Системный вызов read()
- •11.5. Системный вызов write()
- •11.6. Системный вызов lseek()
- •11.7. Системный вызов close()
- •11.8. Задания для самостоятельной работы
- •11.9. Контрольные вопросы
- •12.3. Системный вызов fork
- •12.4. Системный вызов exit
- •12.5. Системный вызов wait
- •12.6. Системный вызов exec
- •12.7. Системные вызовы наследования пользовательских дескрипторов файла
- •12.8. Задания для самостоятельной работы
- •12.9. Контрольные вопросы
- •13.3. Системный вызов signal
- •13.4. Системный вызов pause
- •13.5. Системный вызов alarm
- •13.6. Управление непредусмотренными событиями
- •13.7. Неименованные каналы
- •13.8. Именованные каналы
- •13.9. Задания для самостоятельной работы
- •13.10. Контрольные вопросы
- •Литература
- •Заключение
- •Учебное издание
- •Системное программирование Лабораторный практикум
10.6. Перенаправление ввода и вывода
Помимо стандартных ввода и вывода Linux позволяет перенаправлять ввод и вывод в файлы и программы. Для изменения направления ввода используется знак “<” (меньше). Так, при использовании команды rm необходимо задать параметр – имя файла, который должен быть удален. Перенаправление позволяет вместо ввода данных с клавиатуры использовать ввод из файла.
Пример. При использовании команды wc, предназначенной для подсчета количества слов и символов в тексте, следует ввести: $ wc < mine. Данная запись означает ввод данных для этой команды из файла mine. Пусть файл mine имеет следующее содержимое: студент хорошо учится. Тогда результат выполнения команды $ wc < mine следующий: 1 3 19 mine. Таким образом, в файле - 1 строка, 3 слова и 19 символов.
Перенаправление ввода позволяет, в частности, программам, не воспринимающим файлы в качестве входных параметров, организовать ввод исходных данных из файлов.
Перенаправление вывода позволяет вывести результаты выполнения команды не на экран, а в определенный файл. Это особенно удобно в том случае, если результаты команды не помещаются на одном экране. При выполнении вывода результатов команды в файл, их можно просмотреть позже в любом текстовом редакторе. Для перенаправления вывода используется символ “>” (больше).
Пример. $ ls > newfile. Результат выполнения команды ls, то есть список файлов будет сохранен в файле newfile.
При выполнении команд иногда происходят ошибки. Когда возникает ошибка, система выдает специальное сообщение. Как правило, такие сообщения отображаются на экране вместе со стандартным выводом. Linux, однако различает стандартный ввод и сообщения об ошибках. Для переадресации стандартного потока ошибок предусмотрена специальная возможность. Все стандартные байтовые потоки в операциях переадресации можно обозначать номерами. Номера 0, 1 и 2 обозначают соответственно стандартный ввод, вывод и поток ошибок. Чтобы перенаправить стандартный поток ошибок, нужно поставить перед оператором переадресации вывода цифру 2.
Например, $ cat nofile 2 > myerrors. Чтобы переадресовать и стандартный вывод и поток ошибок, нужны две операции переадресации и два файла: $ cat nofile 1 > myfile 2 > myerrors.
Если требуется сохранять сообщения об ошибках в том же файле, нужно переадресовать стандартный поток ошибок на стандартный вывод. В bash ссылаться на стандартный поток по его номеру со знаком “&”: &1 обозначает стандартный вывод. Операция переадресации 2>&1 переадресует стандартный поток ошибок на стандартный вывод. В результате стандартный вывод становится файлом назначения для стандартного потока ошибок.
Пример. $ cat nofile 1 > myfile 2 > &1. В данном примере стандартный вывод переназначается в файл myfile, туда же переназначается и стандартный поток ошибок. По умолчанию входным потоком операции >& является стандартный поток ошибок, а выходным потоком - стандартный вывод.
10.7. Конвейеры
Конвейер – это еще одно свойство shell, позволяющее связывать последовательность нескольких команд, введенных в одной строке, воедино. Другими словами конвейер – это механизм межпроцессорного взаимодействия, который позволяет двум или более процессам посылать информацию друг другу. Вывод первой команды используется в качестве ввода (входных данных) для второй команды и так далее, вывод последней команды в конвейере осуществляется на экран, либо перенаправляется в файл. Символом конвейера является “|”.
Пример. $ cat mine | wc. Результат выполнения команды следующий: 1 3 19 mine.