С zsh и с включенной опцией mult_ios
(по умолчанию включена) в:
echo hi 2>&1 1>/dev/null | cat
The 1> / dev / null | cat
рассматривается как многократное перенаправление стандартного вывода echo
.
Итак, стандартный вывод echo
теперь перенаправлен на / dev / null
и канал на cat
(как при использовании tee
]).
Чтобы отменить это множественное перенаправление, вы можете:
echo hi 2>&1 >&- > /dev/null | cat
То есть закрыть стандартный вывод (отменить конвейер) перед перенаправлением на / dev / null
Или использовать группу команд или подоболочку, например:
{echo hi 2>&1 1>/dev/null} | cat
(echo hi 2>&1 1>/dev/null) | cat
Таким образом, стандартный вывод echo
перенаправляется явно только один раз (перенаправление канала применяется к группе / подоболочке и наследуется echo
).
Или вы можете полностью отключить multios
:
(setopt nomultios; echo hi 2>&1 > /dev/null | cat)
В качестве альтернативы вы можете использовать подстановку процесса вместо канала:
echo hi 2> >(cat) > /dev/null
Однако будьте осторожны, когда управление заданиями отключено (например, в сценариях) процесс cat
будет выполняться асинхронно (как если бы он был запущен с помощью &
).
Время ожидания нормальное. Ожидание означает, что ЦП не занят, но это могло быть, если бы программа (rsync) не ожидала ввода-вывода диска (записи в медленный синий луч). Это 25%, потому что у вас 4 процессора, и rsync мог бы использовать только один из них (1/4 = 25%), если бы он не ждал на диске.
Что касается общей пропускной способности, это связано с тем, что rsync должен сначала прочитать файл с диска, вычислить контрольные суммы, прочитать файл с жесткого диска, сравнить, выяснить, что изменилось, а затем записать любые измененные части. Время, потраченное на чтение, замедлит процесс.
rsync
действительно предназначен для перемещения данных по медленной сети между двумя быстрыми жесткими дисками, а не на оптический диск udf, установленный для чтения / записи. Лучше использовать обычную систему резервного копирования, например tar
.