Статические маршруты между несколькими подсетью - маршрутизатор (WAN) + маршрутизатор WiFi Mesh

Подстановка процесса rawtopng <(tail myfile) fileout создает канал (точно так же, как tail myfile | rawtopng - fileout ) и передает имя канала программе. В Linux rawtopng увидит имя вроде / dev / fd / 42 , и если он запросит тип файла, ему сообщат, что это канал. Запись в файловую систему не требуется (это анонимный канал, а не именованный канал). Вы можете получить представление о том, что происходит, выполнив команду типа ls -ld <(echo foo)

Будет ли это работать? Это зависит от того, что требует команда rawtopng (чего я не знаю, я не знаком с этой командой). Если все, что он делает, читается из файла, ничего страшного. Если ему нужно выполнить поиск в файле (т.е.если он не считывает свой ввод линейно от начала до конца) или если ему нужно знать размер ввода, прежде чем он начнет работать, это не сработает. В таких случаях вам понадобится временный файл.

Если команде требуется ввод с возможностью поиска или ввод с заранее известным размером, тогда у вас нет выбора, вам нужно создать временный файл. Если вы хотите избежать записи на диск, вы можете разместить файл в файловой системе tmpfs , если ваши варианты Unix это предлагают (Linux делает).Вы можете использовать команду mktemp для создания временного файла:

tmp=$(TMPDIR=/tmp mktemp XXXXXXXXXXXX.raw)
rawtopng "$tmp" fileout
rm "$tmp"

В zsh вариант замещения процесса rawtopng = (tail myfile) fileout создает временный файл и удаляет его, когда команда завершена.

Другой случай, когда подстановка процесса не помогает, - это когда программа настаивает на файле с определенным расширением. В этом случае может помочь создание именованного канала:

mkfifo /tmp/foo.raw
tail myfile >/tmp/foo.raw &
rawtopng /tmp/foo.raw fileout
rm /tmp/foo.raw
1
11.01.2019, 11:41
1 ответ

Предполагая, что соединение является надежным, простой кладж будет использовать пользовательский -формирователь космического трафика. Просто настройте его так, чтобы он использовал не больше максимальной пропускной способности в день.

Пример использования trickle, большого файла foo иscp:

l=$(( (200*10**6)/(24*60**2) ))
trickle -d $l    scp foo username@remotehost:~/

И trickleзамедлит передачу до 2314 КБ в секунду, что составит не более 199 929 600 000 байтов в день. Программа передачи файлов не обязательно должна быть scp, это может быть что угодно, (даже веб-браузер -), (или dsmc), просто чтобы он запускался из командной строки.

Преимущество этого метода в том, что нет необходимости разбивать файл foo , если он превышает дневной лимит. Конечно, для отправки foo потребуется некоторое время, (, если бы foo был 1 ТБ, это заняло бы 5 дней ), но в любом случае это заняло бы столько времени.

trickleимеет демон-версию под названием trickled, которая контролирует каждый последующий запуск `trickle.Пример:

l=$(( (200*10**6)/(24*60**2) ))
trickled -d $l
trickle    scp foo username@remotehost:~/ &
trickle    scp bar username@remotehost:~/ &
trickle    scp baz username@remotehost:~/ &

Предположим, что каждый из файлов foo , bar и baz имеет размер 1 ТБ , trickledвсе равно сохранит передача в пределах 200 ГБ /день.

2
27.01.2020, 23:23

Теги

Похожие вопросы