Пример A-17. fifo: Создание резервных копий с помощью именованных каналов

Пример A-17. fifo: Создание резервных копий с помощью именованных каналов

  1. #!/bin/bash
  2. # ==> Автор:James R. Van Zandt
  3. # ==> используется с его разрешения.
  4. # ==> Комментарии, добавленные автором документа.
  5.   HERE=`uname -n`    # ==> hostname
  6.   THERE=bilbo
  7.   echo "начало создания резервной копии на $THERE, за `date +%r`"
  8.   # ==> `date +%r` возвращает время в 12-ти часовом формате, т.е. "08:08:34 PM".
  9.   # убедиться в том, что /pipe — это действительно канал, а не простой файл
  10.   rm -rf /pipe
  11.   mkfifo /pipe       # ==> Создание "именованного канала", с именем "/pipe".
  12.   # ==> 'su xyz' — запускает команду от имени порльзователя "xyz".
  13.   # ==> 'ssh' — вызов secure shell (вход на удаленную систему).
  14.   su xyz -c "ssh $THERE \"cat >/home/xyz/backup/${HERE}-daily.tar.gz\" < /pipe"&
  15.   cd /
  16.   tar -czf - bin boot dev etc home info lib man root sbin share usr var >/pipe
  17.   # ==> Именованный канал /pipe, используется для передачи данных между процессами:
  18.   # ==> 'tar/gzip' пишет в /pipe, а 'ssh' — читает из /pipe.
  19.   # ==> В результате будет получена резервная копия всех основных каталогов.
  20.   # ==> В чем состоит преимущество именованного канала, в данной ситуации,
  21.         # ==> перед неименованным каналом "|" ?
  22.   # ==> Будет ли работать неименованный канал в данной ситуации?
  23.   exit 0