标准输入,输出,和错误到目前为止,我们用到的许多程序都会产生某种输出。这种输出,经常由两种类型组成。 第一,程序运行结果;这是说,程序要完成的功能。第二,我们得到状态和错误信息, 这些告诉我们程序进展。如果我们观察一个命令,像 ls,会看到它的运行结果和错误信息 显示在屏幕上。与 Unix 主题“任何东西都是一个文件”保持一致,程序,比方说 ls,实际上把他们的运行结果 输送到一个叫做标准输出的特殊文件(经常用 stdout 表示),而它们的状态信息则送到另一个 叫做标准错误的文件(stderr)。默认情况下,标准输出和标准错误都连接到屏幕,而不是 保存到磁盘文件。除此之外,许多程序从一个叫做标准输入(stdin)的设备得到输入,默认情况下, 标准输入连接到键盘。I/O 重定向允许我们可以更改输出走向和输入来向。一般地,输出送到屏幕,输入来自键盘, 但是通过I/O 重定向,我们可以改变输入输出方向。
2.标准输出
使用 ” > ” 进行标准的输出,将命令的结果输出到一个文件中, 但是这个重定向符进行输出将会将原文件中的内容清除 ,并且如果 命令的输出不是标准输出,而是产生了错误信息,这个错误信息不会输入到文件中,而是显示在屏幕上.
如果想在进行标准输出的时候不是将文件重写,而是在文件内容的后面添加,就是用>> 重定向符
上面提到 使用上面的重定向符不能将错误信息输出到文件,可以使用shell提供的一种表示方式,shell内部为标准输入,标准输出和错误的文件描述符为0,1,2, 使用文件描述符来重定向错误信息
ls -l /bin/usr 2> ls-error.txt
要想将标准输出和错误信息都输出到一个文件,在bash中提供了两种方法,这里主要介绍第二种新的方法.
ls -l /bin/usr &> ls-output.txt
处理不需要的输出
有时候,不想要一个命令的输出结果,想把他们扔掉,,系统提供了一个方法,将信息重定向到一个特殊的叫做 “/dev/null” 的文件,这个是个系统设备,叫做位存储桶,可以接受输入,并且对输入不做任何处理.为了隐瞒命令错误信息可以这么做:
ls -l /bin/usr 2> /dev/null
3.标准输入
3.1cat 连接文件
cat [file] //显示文件的内容,一般用来显示简短的文本文件
cat可以接受不止一个文件作为参数,将这些文件的内容连接起来
cat movie*.txt > movie.txt //将多个文件内容链接起来,重新定向到另一个文件,通配符总是按照有序的循序展开,所以会按照循序正确安排.
如果cat 没有给出任何参数,它会从标准输入读入数据,因为标准输入,默认情况下,连接到键盘。它正在等待我们输入数据! 使用Ctrl + d 告诉cat 在标准输入中已经到了结尾.
可以用这个来创建个简单的文本文件
cat > a.txt // 回车
i am a boy.//这一行输入想要输入的内容,然后使用ctrl + d 告诉cat到了标准输入的结尾
cat < a.txt //使用< 重定向符将标准输入源从键盘改到文件a.txt,结果和使用只文件名一样,
4.管道线
使用管道操作符 “|” ,一个命令的标准输出可以管道到另一个命令的表追输入.
command1 | command2
如:
ls -l /usr/bin | less
过滤器
几个命令放在一起组成一个管道线,通常,以这种方式使用的命令被称为过滤器