Пайпы и именованные пайпы в Linux

19
Пайпы и именованные пайпы в Linux
Пайпы и именованные пайпы в Linux

Руководство для системного администратора: Пайпы и именованные пайпы в Linux

Введение

Пайпы (pipes) и именованные пайпы (named pipes) — это мощные инструменты в Linux, позволяющие передавать данные между процессами. Их использование облегчает автоматизацию задач и обработку данных в командной строке.

1. Обычные пайпы (Anonymous Pipes)

Пайп (|) используется для передачи данных от одной команды к другой без создания промежуточных файлов.

1.1. Простейший пример

ls -l | grep "txt"

Здесь вывод команды ls -l передается на вход команде grep, которая фильтрует файлы с расширением .txt.

1.2. Передача вывода между командами

ps aux | sort -rk 3,3 | head -n 10

Этот пример сортирует процессы по загрузке процессора и выводит 10 самых ресурсоемких процессов.

2. Именованные пайпы (Named Pipes, FIFO)

Именованный пайп (FIFO) создается как файл, который процессы могут использовать для обмена данными.

2.1. Создание именованного пайпа

mkfifo mypipe

Файл mypipe теперь является каналом FIFO.

2.2. Использование FIFO

Запись в пайп

echo "Привет, мир!" > mypipe

Чтение из пайпа

cat < mypipe

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

2.3. Пример передачи данных между процессами

echo "Данные из процесса 1" > mypipe &
cat < mypipe

Это демонстрирует, как один процесс записывает данные, а другой их читает.

3. Практические примеры использования

3.1. Передача данных между процессами

Создадим именованный пайп и передадим в него данные:

mkfifo /tmp/logpipe
cat /tmp/logpipe &
echo "Запись лога" > /tmp/logpipe

3.2. Использование с сервером и клиентом

Один процесс может писать в пайп, а другой — читать:

mkfifo /tmp/pipe_server
nc -l -p 1234 < /tmp/pipe_server &
echo "Hello, Client" > /tmp/pipe_server

3.3. Использование именованных пайпов для логирования

Создаем пайп:

mkfifo /var/log/mypipe

Настроим запись логов:

tail -f /var/log/syslog > /var/log/mypipe &
cat /var/log/mypipe

Это позволяет читать системные логи в режиме реального времени.

4. Очистка и удаление пайпов

Поскольку FIFO-файл создается в файловой системе, его можно удалить:

rm mypipe

Обычные пайпы не оставляют следов, так как существуют только в памяти.

Заключение

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