管道的理解
管道是一种将有血缘关系的两个进程进行数据传递的一种机制。
- 管道是一个伪文件,其本质在内核的缓冲区中等待调用;
- 由两个文件的fd进行引用,一个是读端(Read),一个是写端(Wirte);
- 数据只能用管道的读端流入,在从写段流出;
- 数据在管道中是一次性的,一旦被读走,便在管道中消失;
- 进程间必须由血缘关系,且双方必须约定好数据格式。
tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。使用-a选项可以向文件中重定向时使用追加模式。
语法:命令 | tee [-a] 文件 | 命令
[root@CentOS7 ~]# ll /data | tee /data/file.txt |less
total 4
-rw-r--r--. 1 root root 0 Apr 3 04:26 file.txt
-rw-r--r--. 1 root root 8 Apr 3 04:21 tee.out
上述命令在管道中的过程大致为
重定向的文件访问与多行重定向
对于重定向中">out 2>out"的文件访问,以cat命令来实验
[root@CentOS7 data]# cat > std.in
abcd
1234
[root@CentOS7 data]# cat std.in
abcd
[root@CentOS7 data]# cat std.in
abcd
1234
所以">out 2>out"会访问out文件两次,而">out >&2"则只会访问一次out文件。