- •Командный интерпретатор, внешние и внутренние команды, интерпретация командной строки.
- •2. Формат команды linux, ключи, параметры, ключи с параметрами, длинные и короткие ключи
- •Большинство команд Linux имеют следующую структуру:
- •7. Стандартные потоки, операторы перенаправления потоков, подстановка команд
- •Потоки ввода-вывода
- •8. Работа с текстовыми файлами - вывод, фильтрация, конвейеры
- •9. Параметры, подстановка параметров, позиционные параметры
- •Замена тильды
- •Подстановка значений параметров
- •12. Пользователи и группы, понятие владельца, группы-владельца, реальные и эффективные идентификаторы
- •13.Права на файлы, смена прав, биты suid и sticky
- •16. Циклы for in, генерация последовательностей
- •17. Работа со строками и столбцами, особенности и применение команд cut, awk, read, head, tail
- •10.1.1. Структура программы
- •10.1.2. Поля
7. Стандартные потоки, операторы перенаправления потоков, подстановка команд
Потоки ввода-вывода
В UNIX-системах широко используется концепция потока. Поток это буферизованный обмен данными. Проще выражаясь, при обмене данными (например, между клавиатурой и прикладной программой) посредством потока, данные не передаются напрямую в программу в момент их прибытия, а помещаются в выделенный для этого блок (буфер) памяти. Затем, программа, работающая с потоком, в "удобный" момент считывает данные из буфера. Таким образом у программиста нет необходимости синхронизировать поступление данных и их обработку.
Потоки используются при чтении/записи данных из/в файл, а также при обмене данными с устройствами. Для работы с файлом, небходимо его открыть и затем, по окончании работы, закрыть. При открытии файла, операционная система ассоциирует с ним целое число — дескриптор. В дальнейшем, обращение к файлу происходит по дескриптору.
Для каждого запущенного в Unix процесса, существует три специальных потока, с которыми ассоциированы специальные дескрипторы. Это стандартный поток ввода (дескриптор 0), вывода (1) и ошибок (2). Поток ввода доступен только для чтения, потоки вывода и ошибок — только для записи. По-умолчанию, данные считанные из стандартного потока ввода (дескриптор 0), считываются с клавиатуры. Данные, записанные в потоки вывода и ошибок, выводятся в терминал, ассоциированный с процессом (обычно терминал, из которого процесс был запущен). При этом данные потока ошибок выводятся немедленно, в то время как для данных потока вывода возможны задержки при выводе (система выводит эти данные "когда удобно").
Процесс взаимодействия с пользователем выполняется в терминах записи и чтения в файл. То есть вывод на экран представляется как запись в файл, а ввод — как чтение файла. Файл, из которого осуществляется чтение, называется стандартным потоком ввода, а в который осуществляется запись — стандартным потоком вывода.
Стандартные потоки — воображаемые файлы, позволяющие осуществлять взаимодействие с пользователем как чтение и запись в файл. Кроме потоков ввода и вывода, существует еще и стандартный поток ошибок, на который выводятся все сообщения об ошибках и те информативные сообщения о ходе работы программы, которые не могут быть выведены в стандартный поток вывода.
Стандартные потоки привязаны к файловым дескрипторам с номерами 0, 1 и 2.
Стандартный поток ввода (stdin) — 0;
Стандартный поток вывода (stdout) — 1;
Стандартный поток ошибок (stderr) — 2.
Вывод данных на экран и чтение их с клавиатуры происходит потому, что по умолчанию стандартные потоки ассоциированы с терминалом пользователя. Это не является обязательным — потоки можно подключать к чему угодно — к файлам, программам и даже устройствам. В командном интерпретаторе bash такая операция называется перенаправлением.
< файл
Использовать файл как источник данных для стандартного потока ввода.
> файл
Направить стандартный поток вывода в файл. Если файл не существует, он будет создан; если существует — перезаписан сверху.
2> файл
Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан; если существует — перезаписан сверху.
>>файл
Направить стандартный поток вывода в файл. Если файл не существует, он будет создан; если существует — данные будут дописаны к нему в конец.
2>>файл
Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан; если существует — данные будут дописаны к нему в конец.
Особым вариантом перенаправления вывода является организация программного канала (иногда называет трубопроводом или конвейером). Для этого две или несколько команд, таких, что вывод предыдущей служит вводом для следующей, соединяются (или разделяются, если вам это больше нравится) символом вертикальной черты — "|". При этом стандартный выходной поток команды, расположенной слева от символа |, направляется на стандартный ввод программы, расположенной справа от символа |.