Каналы UNIX — это монументальный шаг в развитии UNIX и UNIX-подобных операционных систем. Это позволило пользователям выполнять сложные вычислительные задачи, связывая ввод и вывод базовых программ. Эта статья расширяет эту тему и показывает, как использовать канал UNIX в Linux по сети с протоколом SSH.
Совет. Если вам нужно освежить знания, узнайте, как это сделать работа канала и перенаправления в Linux .
Понимание конвейера Unix
Кайпы в Unix (и, соответственно, в Linux) используются для объединения программ и обеспечения их совместной работы. Например, используя cat
, вы можете показать содержимое файла, но если вы использовали канал (|
), вы можете связать cat
к команде more
, чт
Contents
- 1 Понимание конвейера Unix
- 2 Автоматическая передача сжатых каталогов
- 3 Отправка и получение файлов с удаленных хостов
- 4 Удаленное резервное копирование и восстановление дисков
- 5 Перенаправление аудиовхода на удаленный компьютер
- 6 Потоковое видео с удаленной веб-камеры
- 7 Печать текста на удаленной консоли
- 8 Передача удаленных данных в локальный буфер обмена
Понимание конвейера Unix
div>cat file1 | more
Основная идея здесь такова: program1 fileX | program2
. Однако дело не ограничивается одним файлом и двумя программами. Трубопроводы можно сделать настолько продвинутыми, насколько вам нужно, используя столько модификаторов, сколько вы только можете придумать.
Вот несколько способов эффективного использования канала (|
) в ситуациях SSH.
Кстати : изучите некоторые из лучших приемов для защиты вашего SSH-сервера .
Автоматическая передача сжатых каталогов
Один из наиболее распространенных способов использования каналов UNIX — сохранение вывода программы в файл где-нибудь в локальной системе. Например, при запуске echo "Hello, MakeTechEasier!" | tee Hello
будет запущена программа echo
, а также сохранена строка «Hello, MakeTechEasier!» внутри файла «Привет».
![Терминал, показывающий базовое перенаправление каналов UNIX на локальном компьютере.](https://saintist.ru/wp-content/uploads/2024/05/use-ssh-pipes-linux-01-sample-unix-pipe-file-redirection.png)
Тем не менее, вы можете использовать эту идею для переноса каталогов между двумя хостами Linux. Для этого прочитайте папку, которую вы хотите отправить, используя tar
, а затем передайте ее вашему демону SSH:
tar czf - "~/Documents/myfolder" | ssh ramces@remote.host "tar xzf - -C ~/Documents/"
Эта команда объединит вашу папку в tar-архив и отправит его на стандартный вывод команды. Затем канал UNIX прочитает эти данные и отправит их на удаленный хост Linux с помощью
Автоматическая передача сжатых каталогов
, чтобы получить файлы с удаленных хостов:ssh ramces@remote.host "tar czf - ~/Documents/myfolder" | tar xzf - -C "~/Documents/"
Полезно знать: узнайте, как можно создавать зашифрованные облачные резервные копии с помощью rclone .
Отправка и получение файлов с удаленных хостов
Вы также можете использовать каналы и SSH для отправки отдельных файлов по сети. Это работает с использованием cat
как способа загрузки содержимого файла и отправки его через SSH:
cat < my.local.file | ssh ramces@remote.host "cat > my.remote.file"
Удаленный хост получит выходной поток от локального процесса cat и восстановит файл как есть.
Чтобы получить файл с удаленного хоста, вам необходимо изменить порядок выполнения команды и указать путь к удаленному файлу:
ssh ramces@remote.host "cat < my.remote.file" | cat > my.local.file
![Терминал, показывающий передачу отдельных файлов с использованием канала SSH в Linux.](https://saintist.ru/wp-content/uploads/2024/05/use-ssh-pipes-linux-02-copy-remote-files-to-local-system-1.png)
Удаленное резервное копирование и восстановление дисков
Подобно отправке файлов и каталогов, в Linux можно удаленно создавать резервные копии целых дисков с помощью канала UNIX и SSH. Это может быть полезно, если вы хотите быстро создать удаленные резервные копии и в данный момент у вас нет запасного физического диска.
Чтобы создать резервную копию всего диска, запустите dd
, указав в переменной if=» диск, резервную копию которого вы хотите создать, а затем передайте ее демону SSH:
sudo dd if=/dev/sda | ssh ramces@remote.host "dd of=sda.img"
Отмена этой команды также позволяет восстановить образ диска с удаленного компьютера на физический диск:
ssh ramces@remote.host "dd if=sda.img" |<Отправка и получение файлов с удаленных хостов
>=/dev/sda
Кроме того, этот синтаксис канала SSH также будет работать с дискретными разделами диска. Например, если в вашей системе есть раздел /home в «/dev/sda4», вы можете запустить следующую команду, чтобы создать его резервную копию:
sudo dd if=/dev/sda4 | ssh ramces@remote.host "dd of=home.img"
К вашему сведению: узнать больше об истории вы сможете используйте команду dd для создания образов дисков .
Перенаправление аудиовхода на удаленный компьютер
Одним из преимуществ каналов SSH является то, что они позволяют взаимодействовать с удаленными компьютерами, как если бы они были локальным ресурсом. Это включает в себя возможность подключаться к файлам устройства, например к аудиовходу системы.
Для этого запустите удаленную подоболочку ALSA с помощью SSH и отправьте ее выходные данные локальному демону ALSA:
ssh ramces@remote.host "arecord -f cd" | aplay
Это позволит прослушивать устройство ввода звука по умолчанию на удаленном компьютере и воспроизводить
Удаленное резервное копирование и восстановление дисков
команд перенаправит аудиовход вашего локального компьютера на аудиовыход удаленного хоста:![Терминал, показывающий активный аудиопоток с использованием каналов SSH.](https://saintist.ru/wp-content/uploads/2024/05/use-ssh-pipes-linux-06-sample-remote-audio-stream.png)
arecord -f cd | ssh ramces@remote.host "aplay"
Канал ALSA SSH также будет работать, если вы объедините его с другими инструментами воспроизведения звука. Например, вы можете отправить вывод arecord из канала SSH в ffmpeg:
ssh ramces@remote.host "arecord -f cd" | ffplay -nodisp -
Потоковое видео с удаленной веб-камеры
Еще одно замечательное применение каналов SSH в Linux — потоковая передача видео с веб-камеры в реальном времени. Как и в случае со звуком, это позволяет вам воспользоваться устройством удаленного хоста и воспроизвести его вывод на локальном компьютере.
Для потоковой передачи с веб-камеры удаленного хоста запустите SSH с подоболочкой ffmpeg, а затем передайте его клиенту воспроизведения видео на локальном компьютере:
ssh ramces@remote.host "ffmpeg -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | mpv --demuxer=mkv /dev/stdin
Эта команда будет транслировать необработанное видео с первой веб-камеры на вашем удаленном компьютере.
![Снимок экрана, показывающий активный видеопоток с веб-камеры, проходящий через канал SSH в Linux.](https://saintist.ru/wp-content/uploads/2024/05/use-ssh-pipes-linux-05-remote-webcam-view-sample-800x600-1.jpg)
Также можно записать кадры с удаленной веб-камеры в отдельный файл. Вы можете сделать это, отправив данные из канала SSH на tee перед перенаправлением их на видеоплеер:
ssh ramces@remote.host "ffmpeg -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | tee my_recording.mkv | mpv --demuxer=mkv /dev/stdin
Печать текста на удаленной консоли
Помимо аудио и видео, вы также можете использовать SSH-каналы для отправки необработанного
Перенаправление аудиовхода на удаленный компьютер
хотите отправлять сообщения о состоянии в систему без графического интерфейса.Для начала создайте канал FIFO на своем локальном компьютере:
mkfifo my-fifo
Запустите команду прослушивания tail
с помощью FIFO и отправьте ее вывод демону SSH:
tail -f my-fifo | ssh root@remote.host "cat > /dev/tty0"
Проверьте, работает ли ваш новый канал FIFO по сети, отправив текстовые данные с помощью команды echo:
echo "Hello, MakeTechEasier!" > my-fifo
![Терминал, отображающий произвольный текст в консоли TTY устройства.](https://saintist.ru/wp-content/uploads/2024/05/use-ssh-pipes-linux-04-sample-console-tty-message.png)
Примечание. Отправка текста на TTY вашего компьютера будет работать только в том случае, если вы вошли в систему под учетной записью root этого компьютера.
Передача удаленных данных в локальный буфер обмена
Самым большим недостатком системного буфера обмена является то, что он работает только с локальным компьютером. Это проблема, если вы работаете с несколькими компьютерами и хотите передавать данные без создания временных файлов.
Один из способов исправить это — создать канал SSH, который сможет читать и отправлять удаленный файл непосредственно в буфер обмена локальной системы:
ssh ramces@remote.host "cat < ~/ramces.txt" | xclip -sel clipboard
Эта команда подключится к вашему удаленному компьютеру, запустит утилиту cat и начнет читать файл «ramces.txt». После этого он отправит удаленные данные обратно на ваш локальный компьютер и перенаправит их в системный буфер обмена.
![Терминал, показывающий буфер обмена локального компьютера после канала SSH.](https://saintist.ru/wp-content/uploads/2024/05/use-ssh-pipes-linux-07-sample-clipboard-remote-import.png)
Вы также можете отправить текущий буфер обмена вашей системы в в
Потоковое видео с удаленной веб-камеры
дующую команду:xclip -sel clipboard -o | ssh ramces@remote.host "cat > ~/clip.txt"
Изучение того, как отправлять данные по сети с помощью каналов UNIX и SSH, — это лишь первый шаг к пониманию того, как работают компьютерные сети. Узнайте больше о своей сети от отслеживание того, куда идут ваши пакеты, с помощью Traceroute .
Изображение предоставлено: Михаил Фесенко через Unsplash . Все изменения и скриншоты Рамсеса Реда.