重定向
什么是标准输入、标准输出、标准异常重定向?
- 一般的标准输入输出都是从键盘中获得输入,
一般的标准输出表示命令执行正确,并把结果在屏幕上显示
一般的标准异常表示命令执行不正确,把异常的情况在屏幕上显示。
[huang@localhost ~]$ ls -al
total 16
drwx------. 2 huang huang 83 Jan 18 11:55 .
drwxr-xr-x. 3 root root 19 Jan 17 22:49 ..
-rw-------. 1 huang huang 87 Jan 18 11:55 .bash_history
-rw-r--r--. 1 huang huang 18 Apr 11 2018 .bash_logout
-rw-r--r--. 1 huang huang 193 Apr 11 2018 .bash_profile
-rw-r--r--. 1 huang huang 231 Apr 11 2018 .bashrc
[huang@localhost ~]$ ls -zz
ls: invalid option -- 'z'
Try 'ls --help' for more information.
- 那么输入的源头可以改变吗,可以是一个文件中的内容吗?输出的目的地可以改变吗,可以是一个文件吗?异常情况的目的地可以改变吗,可以是一个文件吗?当然可以。
这种以特定的方向获取命令的输入,发送输出和异常的方法就叫重定向。这个方向可以是一个文件的内容。
如何重定向到文件
1.输入重定向,在许多需要提供文件名的命令中,都把文件的内容作为输入流中的数据,因此可以通过输入重定向符<把实现和直接提供文件名相同的结果。
符号 | 作用 |
---|---|
命令 < 文件 | 把文件的内容作为命令的标准输入 |
命令<<分割符 | 从屏幕读入字符,直到遇见分界符才执行命令 |
命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
2.输出,异常重定向
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 >>文件 | 将标准输出追加到一个文件中 |
命令 2> 文件 | 将标准异常重定向到一个文件中(清空原有文件的数据) |
命令 2>>文件 | 将标准异常追加到一个文件中 |
命令&> 文件 或 命令 >> 文件 2>&1 | 将标准输出和标准异常重定向到一个文件中(清空原有文件的数据) |
命令 &>> 文件 或 命令 >> 文件 2>&1 | 将标准输出和异常追加到一个文件中 |
3.应用:以后需要输入文件名的地方都可以使用重定向来进行设置了。
(1)输入重定向。
[root@localhost ~]# wc -l < /etc/selinux/config
[root@localhost ~]# wc -l << over
(2)输出重定向
[root@localhost ~]# echo Hello > readme.txt
[root@localhost ~]# echo Linux >> readme.txt
管道符
1.命令1 |命令2,把命令1的标准输出作为命令2的标准输入。最终屏幕显示的是命令2的输出。
管道符与重定向符有所不同:
重定向符,通过文件名把文件内容传递给命令。
管道符,命令1把输出内容传递给命令2.
例检查当目录下所有文件的权限,ls -al显示当前目录下所有文件的信息,并传给cut。cut获得第一列的字符。
[huang@localhost ~]$ ls -al | cut -d" " -f1
total
drwx------.
drwxr-xr-x.
-rw-------.
-rw-r--r--.
-rw-r--r--.
-rw-r--r--.
drwxrwxr-x.
drwxrwxr-x.
-rw-rw-r--.
drwxr-xr-x.
-rw-------.
2.最常用的就是管道符命令和grep命令连起来使用。
便于寻找符合条件的行,grep
grep的一般用法 :gerp 关键字 文件名
grep的特殊用法:命令1 | grep 关键字 用于在命令1的输出中寻找符合关键字条件的行。
[huang@localhost ~]$ ls -al | grep test
-rw-rw-r--. 1 huang huang 0 Jan 22 11:58 test