1、标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/sdtout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准错误输出 |
linux中一切皆文件,键盘、显示器都是文件,文件名如上
文件描述符:0代表标准输入设备,1代表标准输出设备,2代表标准错误输出设备
2、输出重定向
把显示在屏幕中的内容保存到文件中
2.1 标准输出重定向
命令 > 文件:以覆盖的方式,把命令的正确输出输出到指定的文件或设备中。
##文件不存在则创建,文件存在则覆盖
命令 >> 文件:以追加方式,把命令的正确输出输出到指定的文件或设备中。
2.1.1 练习:ll命令重定向到ll.log文件中
[root@catyuan ~]# ll > ll.log
[root@catyuan ~]# cat ll.log
total 12
-rw-------. 1 root root 2084 Nov 13 2018 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 13 2018 Desktop
drwxr-xr-x. 2 root root 6 Nov 13 2018 Documents
drwxr-xr-x. 2 root root 6 Nov 13 2018 Downloads
-rw-r--r--. 1 root root 62 Jun 5 04:49 hello.sh
-rw-r--r--. 1 root root 2177 Nov 13 2018 initial-setup-ks.cfg
-rw-r--r--. 1 root root 0 Jun 5 06:34 ll.log
drwxr-xr-x. 2 root root 6 Nov 13 2018 Music
drwxr-xr-x. 2 root root 6 Nov 13 2018 Pictures
drwxr-xr-x. 2 root root 6 Nov 13 2018 Public
drwxr-xr-x. 2 root root 6 Nov 13 2018 Templates
drwxr-xr-x. 2 root root 6 Nov 13 2018 Videos
2.2 标准错误输出重定向
错误命令 2> 文件:以覆盖的方式,把错误的输出输出到指定的文件或设备中
错误命令 2>> 文件:以追加的方式,把错误的输出输出到指定的文件或设备中
2.2.1 练习:记录输入错误的命令的信息,比如:la
[root@catyuan ~]# la > la.log
bash: la: command not found... #由于la这个命令是错误的所以不能重定向
[root@catyuan ~]# la 2> la.log #此时想要重定向这个错误信息就需要使用2>
[root@catyuan ~]# cat la.log
bash: la: command not found...
2.3 正确输出和错误输出同时保存
命令 > 文件 2>&1:覆盖,把正确输出和错误输出都保存在同一个文件中
命令 >> 文件 2>&1:追加,把正确输出和错误输出都保存在同一个文件中
命令 &> 文件:覆盖,把正确输出和错误输出都保存在同一个文件中
命令 &>> 文件:追加,把正确输出和错误输出都保存在同一个文件中
命令>>文件1 2>>文件2:把正确的输出追加到文件1中,把错误的输出追加到文件2中
2.3.1 练习:把ll的正确输出和la的错误输出写入同一个文件test.log中
[root@catyuan ~]# ll >> test.log 2>&1
[root@catyuan ~]# cat test.log
total 20
-rw-------. 1 root root 2084 Nov 13 2018 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 13 2018 Desktop
drwxr-xr-x. 2 root root 6 Nov 13 2018 Documents
drwxr-xr-x. 2 root root 6 Nov 13 2018 Downloads
-rw-r--r--. 1 root root 62 Jun 5 04:49 hello.sh
-rw-r--r--. 1 root root 2177 Nov 13 2018 initial-setup-ks.cfg
-rw-r--r--. 1 root root 31 Jun 5 06:36 la.log
-rw-r--r--. 1 root root 633 Jun 5 06:34 ll.log
drwxr-xr-x. 2 root root 6 Nov 13 2018 Music
drwxr-xr-x. 2 root root 6 Nov 13 2018 Pictures
drwxr-xr-x. 2 root root 6 Nov 13 2018 Public
drwxr-xr-x. 2 root root 6 Nov 13 2018 Templates
-rw-r--r--. 1 root root 0 Jun 5 07:06 test.log
drwxr-xr-x. 2 root root 6 Nov 13 2018 Videos
[root@catyuan ~]# la >> test.log 2>&1
[root@catyuan ~]# cat test.log
total 20
-rw-------. 1 root root 2084 Nov 13 2018 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 13 2018 Desktop
drwxr-xr-x. 2 root root 6 Nov 13 2018 Documents
drwxr-xr-x. 2 root root 6 Nov 13 2018 Downloads
-rw-r--r--. 1 root root 62 Jun 5 04:49 hello.sh
-rw-r--r--. 1 root root 2177 Nov 13 2018 initial-setup-ks.cfg
-rw-r--r--. 1 root root 31 Jun 5 06:36 la.log
-rw-r--r--. 1 root root 633 Jun 5 06:34 ll.log
drwxr-xr-x. 2 root root 6 Nov 13 2018 Music
drwxr-xr-x. 2 root root 6 Nov 13 2018 Pictures
drwxr-xr-x. 2 root root 6 Nov 13 2018 Public
drwxr-xr-x. 2 root root 6 Nov 13 2018 Templates
-rw-r--r--. 1 root root 0 Jun 5 07:06 test.log
drwxr-xr-x. 2 root root 6 Nov 13 2018 Videos
bash: la: command not found...
2.3.2 练习:把正确的命令(ll)输出到test1.log中,错误(la)的输出到test2.log中
[root@catyuan ~]# ll >> test1.log la 2>> test2.log
[root@catyuan ~]# cat test1.log
[root@catyuan ~]# cat test2.log
ls: cannot access la: No such file or directory
[root@catyuan ~]# rm -rf test1.log
[root@catyuan ~]# rm -rf test2.log
[root@catyuan ~]# la >> test1.log 2>> test2.log
[root@catyuan ~]# cat test1.log
[root@catyuan ~]# cat test2.log
bash: la: command not found...
[root@catyuan ~]# ls >> test1.log 2>> test2.log
[root@catyuan ~]# cat test1.log
total 28
-rw-------. 1 root root 2084 Nov 13 2018 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 13 2018 Desktop
drwxr-xr-x. 2 root root 6 Nov 13 2018 Documents
drwxr-xr-x. 2 root root 6 Nov 13 2018 Downloads
-rw-r--r--. 1 root root 62 Jun 5 04:49 hello.sh
-rw-r--r--. 1 root root 2177 Nov 13 2018 initial-setup-ks.cfg
-rw-r--r--. 1 root root 31 Jun 5 06:36 la.log
-rw-r--r--. 1 root root 633 Jun 5 06:34 ll.log
drwxr-xr-x. 2 root root 6 Nov 13 2018 Music
drwxr-xr-x. 2 root root 6 Nov 13 2018 Pictures
drwxr-xr-x. 2 root root 6 Nov 13 2018 Public
drwxr-xr-x. 2 root root 6 Nov 13 2018 Templates
-rw-r--r--. 1 root root 0 Jun 5 07:13 test1.log
-rw-r--r--. 1 root root 31 Jun 5 07:11 test2.log
-rw-r--r--. 1 root root 764 Jun 5 07:06 test.log
drwxr-xr-x. 2 root root 6 Nov 13 2018 Videos
[root@catyuan ~]# cat test2.log
bash: la: command not found...
2.4 特殊文件:/dev/null
命令 &>/dev/null
黑洞,垃圾站。不想看到命令的结果,就把命令重定向到/dev/null中
3、输入重定向
一般输入设备总是键盘,如果把文件的内容作为输入,这个就是“输入重定向”
3.1 wc命令
命令
wc 【选项】【文件名】
选项
无 输入字符,ctrl+d结束,最后会统计你输入了多少行,单词,字符
-c 统计字节数
-w 统计单词数
-l 统计行数
3.1.1 练习 :不加选项
[root@catyuan ~]# wc
hello
hehe
ha
ll
ls
5 5 20
3.2 输入重定向
命令 < 文件:把文件作为命令的输入
命令 << 标识符:把标识符直接内容作为命令的输入
3.2.1 练习:wc统计test.log文件
[root@catyuan ~]# wc < test.log
16 133 764
3.2.2 练习:wc统计,遇到t字符则停止
[root@catyuan ~]# wc << t
> afasdf
> sdfa
> c
> d
> tdf
> t
5 5 20