Как я могу передать вход по каналу от одной сессии SSH до другого? Используя FIFO?

Я думаю, что Unix является достаточно неоднозначным термином, что мы должны определить его в целях этого вопроса.

Unix (System V и производные) используется в качестве операционной системы на нескольких собственных аппаратных платформах '"Большой железяки"', в особенности IBM pSeries, Oracle (урожденный Sun) и Fujitsu серверы SPARC и HP Superdome и другие серверы. В этом случае Unix является операционной системой поставщика, которую они продают с машиной. Ни один из этих поставщиков не поставляет ванильную сборку System V; они все в большой степени настроили ядра, разработанные для типа рабочей нагрузки, для которой используются эти машины.

Люди используют эти машины для рабочих нагрузок, где приложение удовлетворяет крупной архитектуре общей памяти, качеству сборки и поддержке платформ или других причин, где они хотят чрезвычайно собственную платформу "большой железяки". Обычно предложения O/S на этих платформах намного более консервативны и стабильны, чем Linux. IIRC можно все еще выполнить двоичные файлы SunOS4 на текущих версиях Соляриса. Существует также тело программного обеспечения для этих машин, которые могут или не могут быть портированы на другие платформы.

Unix BSD получен из Unix, но имел весь исходный код AT&T, которым, удаленный и заменяют с необремененными заменами. BSD является альтернативой Linux для многих приложений и имеет определенные преимущества и недостатки по Linux. Обычно кодовой базой BSD больше управляют и консерватор, и платформа намного лучше документируется и более безопасна и стабильная. Много пользователей BSD цитирует это в качестве главной причины для выбора. Условия лицензионного соглашения также отличаются от Linux, который влияет на выбор для другой большой группы его пользователей.

Linux подобен Unix, и большая часть программного обеспечения, записанного для подобных Unix платформ, портирует между Linux, BSD и другими платформами Unix относительно легко. Это имеет долю ума и работает на потребительском оборудовании, таким образом, это приняло большую часть низко-средних из рынка серверов. Это имеет долю завоеванного внимания и таким образом поставщика, приложение и поддержку драйвера. Модель разработки намного более децентрализована, чем BSD или SysV получили Unix, таким образом, это развивается более быстро за счет устойчивости.

Обычно люди выбирают Linux в качестве 'основной' подобной Unix платформы с поддержкой поставщика. Это является лучшим для настольных приложений и имеет большую часть поддержки от сторонних поставщиков и платформы.

3
12.11.2011, 01:53
2 ответа

Когда именованный канал создается через mkfifo (или однако еще можно сделать это), он создает канал "файл", который остается на месте, пока он не удален (или, в некоторых случаях, до перезагрузок машины, если Вы забываете удалять его). Можно создать собственный именованный канал с mkfifo просто, поскольку требуется очень немного аргументов, как так:

host # mkfifo -m 777 /tmp/corncob

Это - все, что требуется для создания именованного канала/tmp/corncob. Флаг-m, который используется для установки полномочий, не необходим. Обычно, если Вы не включаете его, набор полномочий по умолчанию для нового именованного канала - то, чем было бы значение по умолчанию для Вашей системы. Как другое примечание стороны, можно также передать флаг-m и установить альфа-полномочия, а не восьмеричный, как:

host # mkfifo -m a=rwx /tmp/corncob

создать ту же самую вещь. Можно удалить именованный канал точно так же, как Вы удаляете файл. комната, и это пошло.

Одна вещь, которую необходимо отметить об именованных каналах, состоит в том, что они обычно (насколько я видел) только могут полностью передать один поток ввода/вывода через себя за один раз. То есть, если у Вас будет один вход отправки процесса к именованному каналу и двум процессам, читающим из него, то только один из процессов считывания получит вывод. Нужно отметить, также, что, если такая ситуация должна была существовать, однажды исходный процесс, который получал выходные выходы, другой процесс начал бы получать вывод от именованного канала (если бы это все еще пыталось читать из него). Это было действительно длинным предложением, или я просто ввожу быстро?;)

Пример того, что я имею в виду ниже:

host-term1 # while :;do echo a b c d e >/tmp/corncob;sleep 15;done

host-term2 # tail -f /tmp/corncob
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e

host-term3 # tail -f /tmp/corncob

host-term2 # ^C

host-term3 #
^C
a b c d e
a b c d e
a b c d e
a b c d e

через

6
27.01.2020, 21:10

Используйте mkfifo команда для создания очереди FIFO передайте вывод по каналу к нему (использование tee вместо перенаправления, если Вы хотите вывод на обоих), и просто cat это на другом терминале. Просто обратите внимание, что блоки FIFO, таким образом, необходимо будет удостовериться путь, Вы используете его, не остановит программу.

3
27.01.2020, 21:10
  • 1
    , как у меня может быть один терминал просто непрерывно, отображает новые соответствия, не прокручивая пустые строки? фильтр –  cwd 11.11.2011, 05:58
  • 2
    @cwd с чем-то как grep, возможно. –  jw013 11.11.2011, 06:03
  • 3
    Куда пустые строки прибывают из? cat на FIFO только распечатает, когда там будет введен к нему. Если это находится в выводе, можно добавить |sed '/^\W*$/d' вынуть его. –  Kevin 11.11.2011, 06:04
  • 4
    что относительно какой цикл? –  Kevin 11.11.2011, 06:08
  • 5
    , как я могу сохранить канал открытым и продолжить получать новые данные? это было бы кошкой цикличное выполнение или является там лучшим путем? –  cwd 11.11.2011, 06:21

Теги

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