文章目录
- 一. 标准输入和标准输出
- 二、重定向
- 1. 定义
- 2. 输出的重定向
- 3. 对标准错误输出重定向
- 4. 输入的重定向
一. 标准输入和标准输出
linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,文件描述符分别是 0、1、2。
当运行命令时,命令启动的进程就会自动打开这三个保留的文件描述符。
如下图
在 Linux中 一切都是文件,包括输入和输出,其中:
- 0 表示标准输入,对应的文件描述符是 /proc/self/fd/0。
- 1 表示标准输出,对应的文件描述符是 /proc/self/fd/1。
- 2 标准错误,对应的文件描述符是 /proc/self/fd/2。
可以使用这些文件描述符来控制命令程序或者脚本的输入和输出。
我们常用的命令
2>&1
的含义是标准错误重新定向到标准输出,即指将标准输出、标准错误指定为同一输出路径。
二、重定向
1. 定义
shell在执行命令时可以修改标准输入的输入源和标准输出的目标位置,这个功能称为重定向。
在重定向时,n> file这种语法表示将文件描述符n的输出重定向到file文件。如果省略n,文件描述符则默认为1,因此>会对标准输出重定向。
2. 输出的重定向
标准输出的目标位置通常指向的是终端屏幕。可以使用 > 符号修改标准输出的目标位置。
例子1:
比如下面的示例就会将ps命令的输出重定向到result.txt文件。
$ ps > result.txt ←----- 由于已经重定向到 result.txt 文件,所以屏幕上不会输出任何内容
$ cat result.txt
PID TTY TIME CMD
10745 pts/0 00:00:00 bash
10873 pts/0 00:00:00 ps
例子2:
echo命令的执行结果将被重定向到hello.txt文件。
$ echo hello > hello.txt
$ cat hello.txt
hello
注:
只要命令能将执行结果输出到标准输出,就可以实现重定向。
3. 对标准错误输出重定向
要想对标准错误输出的错误信息进行重定向,可以使用2>符号。
例子:ls命令的标准错误输出会被重定向到error.txt文件。
$ ls /xxx 2> error.txt
$ cat error.txt
ls: 无法访问'/xxx': 没有那个文件或目录
4. 输入的重定向
对标准输入也可以像对标准输出一样进行重定向操作。
以tr命令为例:
tr命令是用于替换字符串的命令,其语法为tr 待替换的字符串 被替换后的字符串
。
tr b B
abc'
aBc'
my book
从键盘输入一些内容后,tr命令会以行为单位替换输入内容,并输出替换后的结果。要想退出tr命令,可以使用Ctrl + D结束输入状态。