我发现如果我通过管道在两个进程之间传输大量数据,Linux 会在 /tmp 目录中创建一些临时文件。如果管道操作成功,操作系统会自动删除相应的临时文件。但如果操作失败,tmp 文件会保留在那里。
出于某种原因,我不希望用户有机会获取我通过管道传输的数据,所以即使我的程序崩溃,我也不希望在硬盘上留下任何东西。我怎样才能做到这一点?
Pet*_*des 12
管道不在磁盘上存储数据。/bin/echo foo | grep bar 不会创建任何文件。尝试 strace -f sh -c '/bin/echo foo | grep bar' 查看运行管道时外壳程序进行的所有系统调用。 echo是一个内置的 shell,所以我建议/bin/echo让 shell 运行一个可执行文件。
/tmp不必在磁盘上。它可以安装在 tmpfs 上(即由虚拟内存支持)。请注意,/tmp在这种情况下,重新启动将清空,因此请/var/tmp用于您想要留下的任何内容。
如果您正在做的是将数据放入文件中,那么它没有使用管道。如果文件是fifo,而不是普通文件,那么它只是一个命名的集合点,不包含数据。使用 ls -l 找出。
请注意,如果您希望阻止用户看到他们拥有的进程中正在通过管道的内容,那么您几乎就是 SOL,因为strace可以检查进程所做的与进程外任何事物交互的所有事情,除了读/写 mmapped shared记忆。 ltrace甚至更具侵略性。如果您的程序将在本地用户具有 root 用户的系统上运行,则您根本无法阻止它们。在 Unix 上,root 可以做任何事情,并且为此拥有强大的工具。
| 归档时间: |
|
| 查看次数: |
7873 次 |
| 最近记录: |