Linux深度攻略
上QQ阅读APP看书,第一时间看更新

2.6 重定向

希望将命令的输出结果保存到文件中,或者以文件内容作为命令的参数,这时就需要用到重定向。重定向不使用系统的标准输入端口、标准输出端口或是标准错误端口,而是进行重新的指定。

重定向有4种方式,分别是:输出重定向、输入重定向、错误重定向以及同时实现输出和错误的重定向。

2.6.1 输出重定向

输出重定向,即将某一命令执行的输出保存到文件中,如果已经存在相同的文件,那么覆盖源文件中的内容。

命令语法:

[命令] > [文件]

例2.33:使用输出重定向将/boot目录的内容保存到/root/abc文件中。

[root@rhel ~]# ls /boot > /root/abc

[root@rhel ~]# cat /root/abc

config-3.10.0-327.el7.x86_64

extlinux

grub2

initramfs-0-rescue-695707d564a94beba0e784062566b7e0.img

initramfs-3.10.0-327.el7.x86_64.img

initramfs-3.10.0-327.el7.x86_64kdump.img

initrd-plymouth.img

symvers-3.10.0-327.el7.x86_64.gz

System.map-3.10.0-327.el7.x86_64

vmlinuz-0-rescue-695707d564a94beba0e784062566b7e0

vmlinuz-3.10.0-327.el7.x86_64

//查看/root/abc文件的内容

例2.34:使用echo命令和输出重定向创建/root/mm文件,文件内容是Hello。

[root@rhel ~]# echo Hello > /root/mm

[root@rhel ~]# cat /root/mm

Hello

//显示/root/mm文件,可以看到文件的内容是Hello

另外一种特殊的输出重定向是输出追加重定向,即将某一命令执行的输出添加到已经存在的文件中。

命令语法:

[命令] >> [文件]

例2.35:使用输出追加重定向将数据写入文件/root/ao。

[root@rhel ~]# echo Hello > /root/ao

//先创建文件/root/ao,文件内容是Hello

[root@rhel ~]# echo Linux >> /root/ao

//向文件/root/ao中追加数据Linux

[root@rhel ~]# cat /root/ao

Hello

Linux

//查看文件/root/ao,可以看到两次输入的数据都在

2.6.2 输入重定向

输入重定向,即将某一文件的内容作为命令的输入。

命令语法;

[命令] < [文件]

例2.36:使用输入重定向将文件/root/mm的内容作为输入让cat命令执行。

[root@rhel ~]# cat < /root/mm

Hello

//可以看到文件/root/mm的内容是Hello

另外一种特殊的输入重定向是输入追加重定向,这种输入重定向告诉Shell,当前标准输入来自命令行的一对分隔符之间的内容。

命令语法;

[命令] << [分隔符]

> [文本内容]

> [分隔符]

例2.37:使用输入追加重定向创建/root/bc文件。

[root@rhel ~]# cat > /root/bc << EOF

> Hello Linux

> EOF

//一般使用EOF作为分隔符

[root@rhel ~]# cat /root/bc

Hello Linux

2.6.3 错误重定向

错误重定向,即将某一命令执行的出错信息输出到指定文件中。

命令语法:

[命令] 2> [文件]

例2.38:查看根本不存在的/root/kk文件,出现报错信息,将其保存到文件/root/b中。

[root@rhel ~]# cat /root/kk 2> /root/b

[root@rhel ~]# cat /root/b

cat: /root/kk: 没有那个文件或目录

//使用cat命令查看/root/b文件,可以看到其内容就是执行命令cat /root/kk的报错信息

另外一种特殊的错误重定向是错误追加重定向,即将某一命令执行的出错信息添加到已经存在的文件中。

命令语法:

[命令] 2>> [文件]

例2.39:使用错误追加重定向,将执行命令的多次出错信息保存到/root/b文件。

[root@rhel ~]# cat /root/kk 2> /root/b

[root@rhel ~]# cat /root/kk 2>> /root/b

[root@rhel ~]# cat /root/b

cat: /root/kk: 没有那个文件或目录

cat: /root/kk: 没有那个文件或目录

2.6.4 同时实现输出和错误的重定向

同时实现输出和错误的重定向,即可以同时实现输出重定向和错误重定向的功能。

命令语法:

[命令] &> [文件]

例2.40:同时使用输出和错误重定向列出/boot目录内容到/root/kk文件中。

[root@rhel ~]# ls /boot &> /root/kk

[root@rhel ~]# cat /root/kk

config-3.10.0-327.el7.x86_64

extlinux

grub2

initramfs-0-rescue-695707d564a94beba0e784062566b7e0.img

initramfs-3.10.0-327.el7.x86_64.img

initramfs-3.10.0-327.el7.x86_64kdump.img

initrd-plymouth.img

symvers-3.10.0-327.el7.x86_64.gz

System.map-3.10.0-327.el7.x86_64

vmlinuz-0-rescue-695707d564a94beba0e784062566b7e0

vmlinuz-3.10.0-327.el7.x86_64

//因为/boot目录下有文件,所以最终使用了输出重定向

例2.41:同时使用输出和错误重定向列出/nn目录内容到/root/oo文件中。

[root@rhel ~]# ls /nn &> /root/oo

[root@rhel ~]# cat /root/oo

ls: 无法访问/nn: 没有那个文件或目录

//因为没有/nn目录,所以最终使用了错误重定向