使用tee同时输出多个命令到同一文件是否安全?

Sanjay prajapat

我正在使用终端将多个命令的输出同时传送到同一文件中:

cmd1 | tee -a /tmp/file
cmd2 | tee -a /tmp/file
cmd3 | tee -a /tmp/file

使用安全吗?此方法是否存在任何数据丢失或读/写权限问题?

编辑:我可以混合输出,我只想确保所有内容都写入文件中。如果两个命令尝试将输出完全准确地写入文件怎么办,它会崩溃还是不会崩溃?

安迪·道尔顿

如果您在append-a)模式下使用tee ,则没有数据丢失的风险,但没有附加操作的文件系统(例如NFS)除外。append模式下,tee打开带有O_APPEND标志的文件

$ echo 1 | strace tee -a /tmp/file 2>&1 | grep open | grep /tmp/file
openat(AT_FDCWD, "/tmp/file", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3

来自man 2 openat

O_APPEND
     The file is opened in append mode.  Before each write(2), the
     file offset is positioned at the end of the file, as if with
     lseek(2).  The modification of the file offset and the write
     operation are performed as a single atomic step.

其中的关键句是文件偏移量的修改和写操作是作为单个原子步骤执行的保证write()从哪个实例进行的每次调用tee都将原子偏移量自动定位到文件末尾,然后写入数据。

openat手册页呢注意,使用的这种模式是不安全的NFS文件系统中(正如我前面提到的):

     O_APPEND may lead to corrupted files on NFS filesystems if more
     than one process appends data to a file at once.  This is be‐
     cause  NFS does not support appending to a file, so the client
     kernel has to simulate it, which can't be done without a race
     condition.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在单个文件上运行多个Shell命令,然后将输出重定向到同一文件

将多个命令的输出保存到同一文件

通过多个FileInputStream访问同一文件是否安全?

BASH:将多个bash后台进程写入同一文件是否安全?

多个进程使用>重定向到同一文件

使用SED从文件中删除一行,然后将输出重定向到同一文件

是否可以在同一文件中的同一名称空间下使用多个类

多个可执行文件同时访问同一文件夹

同时在同一文件上运行几个sed命令

多个Java进程可以同时读取同一文件吗?

我们可以同时打开多个FileWriter流到同一文件吗?

同时下载同一文件多次

将文件的目录输出重定向到同一文件

将同一文件复制到多个不同的文件夹 PowerShell

同一文件的多个文件句柄

使用C ++同时读取和写入同一文件

多个>>通过2个脚本重定向到同一文件,中途断句

反应同一文件的多个导入

从同一文件中绘制多个系列

同一文件的多个副本

同一文件系统的多个挂载点

多个`FILE`附加到同一文件

如何使用针对同一文件运行的命令来更新文件?

在文件上使用粘贴命令,并将结果保存到同一文件

在没有文件描述符副本的情况下将stdout和stderr重定向到同一文件是否安全?

多个用户使用PHP一次写入同一文件

在主要位置上传文件,同时将同一文件读写到多个次要位置

使用BufferWriter从多个类写入同一文件

如何使用ArduinoJson从同一文件中检索多个NDJSON对象?