Linux I/O重定向
一. 标准输入、标准输出、标准错误
有些进程都有标准输入、标准输出、标准错误这三个FD,分别为0,1,2;
文件描述符0是键盘,只能读;
文件描述符1是终端,只能写;
文件描述符2是终端,只能写;
如果这个进程打开了一个可写的文件,会有其他FD指向改文件,是可读可写的
二. 文件描述符FD
file descriptors 或 Process I/O channels
进程用文件描述符来管理打开的文件
2.1 创建文件描述符来指向一个文件(打开文件句柄)
exec 文件描述符<> 目标文件
2.2 向文件描述符中写数据就是向目标文件写数据
2.3 删除文件后,文件描述符还在
2.4 可以把文件描述符复制为一个文件
2.5 删除一个文件描述符(释放文件句柄)
exec 文件描述符<&-
三. 查看系统设置的能打开最大的文件描述符数
四. 输入重定向
标准输入重定向: < 等价于 0<
五. 输出重定向
标准输出重定向: > 等价于 1>
>> 1>>
标准错误重定向: 2>
2>>
both标准输出和标准错误重定向: &> &>>
先把标准输出重定向,再把标准错误重定向到标准输出: 1> 1.txt 2>&1
六. 创建块设备文件和字符设备文件 mknod
# mknod name type(c或b)主设备号 从设备号
mknod /dev/andy c 1 3
七. 同时把多个程序的输出重定向
(程序1;程序2) > 1.txt
[root@DTOS data]# (ll;22;date) &>1.txt
[root@DTOS data]# cat 1.txt
total 5517504
-rw-r--r-- 1 root root 2330555665 Dec 9 10:00 106b204cs.sql
-rw-r--r-- 1 root root 3544066 Dec 10 10:01 130.sql
-rw-r--r-- 1 root root 0 Dec 15 17:54 1.txt
-rw-r--r-- 1 root root 33718 Dec 14 14:08 device.sql
drwxr-xr-x. 4 root root 36 Nov 12 03:34 middleware
-rw-r--r-- 1 root root 985219913 Dec 9 22:24 oldchangsha.sql
-rw-r--r-- 1 root root 2330555665 Dec 9 10:00 现场204版本的库.sql
-bash: 22: command not found
Tue Dec 15 17:54:01 CST 2020
[root@DTOS data]#
八. 把整个while循环的所有输出重定向
可以带括号也可以不带
while [ $n -le 10 ]; do echo "11"; date; let n++; done &>2.txt
(while [ $n -le 10 ]; do echo "11"; date; let n++; done) &>2.txt
最后加个&就是扔到后台运行
(while [ $n -le 10 ]; do echo "11"; date; let n++; done) &>2.txt &
九. 只要是加了括号的就是扔到子shell中执行,不会运行本shell的环境
[root@DTOS data]# (umask 777;touch file1.txt)
[root@DTOS data]# ll file1.txt
---------- 1 root root 0 Dec 15 18:11 file1.txt
[root@DTOS data]# umask
0022