Вариант использования этого двойного отношения аналогичен отношению «обеспечивает». systemd-timesyncd
предоставляет услугу синхронизации времени, поэтому она удовлетворяет любой зависимости устройства от time-sync.target
. Он должен запускаться до time-sync.target
, потому что он необходим для любой службы, которая зависит от синхронизации времени, и ему требуется time-sync.target
, потому что любой модуль, полагающийся на синхронизацию времени, должен запускаться вместе со службой systemd-timesyncd
.
Я думаю, что непонимание исходит из вашей интерпретации «хочет». Отношение «хочет» в systemd не является зависимостью :systemd-timesyncd
, ему не нужно time-sync
для работы. Это отношение «начать вместе с» :, оно говорит о том, что конфигурирующий блок(systemd-timesyncd.service
)хочет, чтобы перечисленные блоки(time-sync.target
)запускались вместе с ним.
См. также Какой сервис предоставляет время -sync.target в systemd?
$ cat | sed -e 's/foo/bar/' > output.txt foo ^C $ cat output.txt [nothing]
но:
$ cat | sed -e 's/foo/bar/' > output.txt foo ^D $ cat output.txt bar
Записи в файлы --, но не в терминал --, обычно буферизуются библиотекой C (функциями stdio )в блоки размером в несколько килобайт. Если вы нажмете Ctrl -C, чтобы остановить конвейер, sed
не успеет записать буферы до того, как он умрет, поэтому результирующий выходной файл будет пуст.(Можно сказать, что это ошибка в библиотеке C, которая не перехватывает сигнал завершения для этого, но так оно и есть.)
Plain cat
вероятно, не использует stdio,так как он не имеет дело с чем-то сложным, например, с линиями. Что-то вроде cat -n
может отличаться или нет.
Вы можете сделать так, чтобы вам не нужно было завершать канал с помощью Ctrl -C, а он завершался сам по себе. По крайней мере, в моем nc
параметр -qN
говорит ему выйти через N секунд после закрытия stdin, поэтому, например.:
$ printf '' | nc -q0 localhost 22 | sed 's/SSH/FOO/' > output.txt
$ cat output.txt
FOO-2.0-OpenSSH_7.4p1 Debian-10+deb9u7
Кроме того, есть по крайней мере несколько способов отключить буферизацию, см., например, Отключить буферизацию в канале и`unbuffer `или `stdbuf `для удаления буферизации stdout?
Также GNU sed имеет переключатель -u
/ --unbuffered
на
load minimal amounts of data from the input files and flush the output buffers more often