文件描述符
在我们开始学习重定向之前,我们先来了解一下文件描述符(fd:file descriptor)
一切皆文件,大家应该都听过这句话吧,linux的哲学思想。当我们对这些文件进行处理的时候,系统对会对每个打开的文件分配一个文件描述符。
文件描述符是一个数字。不同数字代表不同的含义,默认情况下,系统占用了3个,分别是0标准输入(stdin),1标准输出(stdout), 2标准错误(stderr), 另外3-9是保留的标识符,可以把这些标识符指定成标准输入,输出或者错误作为临时连接。通常这样可以解决很多复杂的重定向请求。我们可以在/proc/1/fd目录下查看文件通配符,如下:
[root@centos7 ~]# ll /proc/1/fd
total 0
lrwx——. 1 root root 64 Jul 22 08:00 0 -> /dev/null
lrwx——. 1 root root 64 Jul 22 08:00 1 -> /dev/null
lr-x——. 1 root root 64 Jul 22 11:49 10 -> anon_inode:inotify
lr-x——. 1 root root 64 Jul 22 11:49 11 -> /proc/swaps
I/O重定向是什么呢?
简单的来讲,I/O重定向就是一个过程,将命令、程序或脚本的输出,作为输入发送到另外一个程序、文件、或命令。
我们在Linux执行命令,它的过程如下图:
- 我们先通过键盘或者文件,进行指令输入
- 指令执行完成后,如果正确,会把结果输出到屏幕(因为默认标准输出到屏幕)
- 指令执行完成后,如果错误,会把结果输出到屏幕(因为默认标准输出到屏幕)
为何要使用输出重定向呢?
1.当屏幕输出信息较为重要,而我们也需要将信息存下来时
2.当 执行脚本时,我们不希望看到一些命令的输出结果,可以将它输出到/dev/null(俗称黑洞)丢掉
3.当执行命令时,需要把错误与正确讯息分别输出时
标准输出和标准错误输出
标准输出(stdout):代码为 1 ,使用 > 或 >>
示例:
1.查看命令执行结果的默认输出
[root@centos7 app]# ls # 我们可以看到默认输出是屏幕
a.txt b.txt c.txt d.txt
2.将命令的执行结果输出到文件中
[root@centos7 app]# ls > output.txt # 将ls命令的执行结果重定向到output.txt中
[root@centos7 app]# cat output.txt # 查看output.txt,ls命令的执行结果已经被重定向到output.txt
a.txt
b.txt
c.txt
d.txt
output