трубы не хранят данные на диске. /bin /echo foo | grep bar не создает файлов. попробуйте strace -f sh -c '/bin/echo foo | grep bar'
чтобы увидеть все системные вызовы, сделанные оболочкой при запуске конвейера. echo
- встроенная оболочка, поэтому я предложил /bin/echo
чтобы оболочка работала.
/tmp
не обязательно должен быть на диске. Он может быть смонтирован на tmpfs (т.е. поддерживается виртуальной памятью). Обратите внимание, что перезагрузка опустошит /tmp
в этом случае, поэтому используйте /var/tmp
для всего, что вы хотите оставить.
Если то, что вы делаете, это помещает данные в файл, тогда он не использует канал. Если файл представляет собой fifo, а не обычный файл, то это просто именованное рандеву и не содержит данных. Используйте ls -l, чтобы узнать.
И обратите внимание, что если вы надеетесь не дать пользователям увидеть, что происходит через каналы в процессах, которыми они владеют, вы в значительной степени SOL, потому что strace
может проверять все, что делает процесс, взаимодействующий с чем-либо вне процесса, кроме чтения / записи mmapped. Общая память. ltrace
еще более агрессивен. Если ваша программа будет работать в системах, где у локального пользователя есть root, вы не сможете остановить их вообще. В Unix root может делать все что угодно и имеет для этого мощные инструменты.