linux中输出重定向,python 输出重定向到文件
Linux shell重定向有两种类型:输入重定向和输出重定向。顾名思义,I/O重定向意味着“改变输入和输出的方向”。
那么,输入输出方向是什么呢?的标准输入输出方向是什么?
通常我们从键盘上读取用户输入的数据,并将数据带入程序(C语言程序,shell脚本程序等。)使用。这是标准的输入方向,从键盘到程序。
反过来,程序中也产生数据。这些数据通常直接显示在显示器上。这是从程序到显示器的标准输出方向。
尝试提取想法。实际上,输入和输出方向就是数据的流动方向:
输入方向是指数据流向程序的方向。默认情况下,数据从键盘流向程序。改变方向后,数据从其他位置流出。这是输入重定向。
输出方向是指数据从程序流向何处。默认情况下,数据从程序流向监视器,但是当方向改变时,数据流向其他位置。这是输出重定向。
和硬件描述符。
有很多硬件设备。常见的输入设备包括键盘、鼠标、麦克风和平板电脑,而输出设备包括显示器、投影仪和打印机。但是,在Linux上,标准输入设备指的是键盘,而标准输出设备指的是显示器。
Linux上的所有文件,包括标准输入设备(键盘)和标准输出设备(显示器),都是文件。
为了指示和区分打开的文件,Linux给每个文件分配一个ID。ID是一个称为文件描述符的整数。
表1:输入和输出的文件描述符
文件描述符
文件名
类型
五金器具
0
标准输入设备
标准输入文件
键盘
一个
标准输出
标准输出文件
班长
2
标准错误
标准错误输出文件
班长
Linux程序在执行任何I/O操作时都会读取或写入文件描述符。文件描述符只是一个与打开的文件相关的整数。接下来可能是硬盘上的常规文件、FIFO、管道、终端、键盘、显示器甚至网络连接。
默认情况下,选择stdin、stdout和stderr,并且在重定向期间可以保留三个文件描述符:0、1和2。
Linux shell输出重定向
输出重定向是将命令的结果输出到另一个位置(通常是一个文件),而不是显示它。这样做最大的好处就是保存命令的结果,以便在需要的时候随时查询。下表显示了Bash支持的输出重定向符号。
表2:2:Bash支持的输出重定向符号
类型
标志
功能
标准输出重定向
命令文件
将命令的正确输出结果输出到要覆盖的文件file。
命令文件
此外,将命令的正确输出结果输出到文件file。
标准错误输出重定向
2命令文件
将命令错误信息输出到要覆盖的文件file。
2命令文件
此外,命令错误消息会输出到文件中。
同时保存正确的输出和错误消息
命令文件21
通过覆盖,正确的输出和错误消息同时保存在同一个文件中。
命令文件21
使用其他方法将正确的输出和错误消息同时保存在同一文件中。
命令1 2文件2
以覆盖的方式,正确的输出结果输出到file1文件,错误信息输出到file2文件。
命令1 2文件2
另外,正确的输出结果输出到文件1文件,错误消息输出到文件2文件。
命令文件2文件
【推荐】这两个写方法文件打开两次,会造成资源竞争,所以stdout和stderr互相覆盖。《结合Linux文件描述符谈重定向,彻底理解重定向的本质》段进行详细分析。
命令文件2文件
在输出重定向中,表示封面,表示添加。
注意
输出重定向的完整格式其实是fdfile或者fdfile,其中fd表示文件描述符,否则默认为1,这是标准的输出文件。
如果文件描述符为1,则为1。
全部省略不写,如上表所示;当然,如果你愿意,你也可以把命令文件写成command 1file,但没必要这样做。
当文件描述符是一个大于1的值时,例如2,它必须被写入。
需要注意的是,fd和之间不能有空格,否则Shell将无法解析;和文件之间的空格是可选的。为了一致性,我习惯两边不加空格。
下面的陈述是一个反面例子:
echo c.biancheng.net 1 log.txt
请注意1和之间的空格。echo命令的输出结果是c.biancheng.net。我们的初衷是将输出结果重定向到log.txt,然而辛苦的汕头打开log.txt文件后,发现文件内容是c.biancheng.net 1,这是多余空格导致的解析错误。也就是说,Shell将该语句理解为以下形式:
echo c.biancheng.net 1 1log.txt
输出重定向示例
【例1】用附加的方式将echo命令的输出结果写入demo.txt文件。
#!/可爱的小懒虫/狂欢
对于 C语言中文网站 3358c.biancheng.net/has成立7年 日均数万IP 中的str
做
Echo $str demo.txt #将输入结果作为追加重定向到文件
完成的
运行上述脚本并使用cat demo.txt查看文件内容,如下所示:
c语言中文网
http://c.biancheng.net/
已经成立七年了。
日IP数万
[示例2]将ls -l命令的输出结果重定向到一个文件。
[c.biancheng.net]$ ls -l #先预览输出
总剂量16
DRWXR-XR-X.2根根2016年7月1日abc
-RW-R-R-. 1 mozhi Yan mozhi Yan 399 3月11日17:12 demo.sh
-RW-RW-R-.1莫之言莫之言67年3月22日17:16 demo.txt
-RW-RW-R-.1莫之言莫之言278年3月16日17:17 main.c
-RWXR-XR-X.1莫之言莫之言187 3月22日17:16 test.sh
[c.biancheng.net]$ ls-ldemo . txt #重定向
[c.biancheng.net]$ cat demo.txt #查看文件内容
总剂量12
DRWXR-XR-X.2根根2016年7月1日abc
-RW-R-R-. 1 mozhi Yan mozhi Yan 399 3月11日17:12 demo.sh
-RW-RW-R-.1莫之言莫之言0年3月22日17:21 demo.txt
-RW-RW-R-.1莫之言莫之言278年3月16日17:17 main.c
-RWXR-XR-X.1莫之言莫之言187 3月22日17:16 test.sh
输出重定向错误示例
正确执行命令时,没有错误消息。我们必须故意使命令执行错误,如下所示:
[c.biancheng.net]$ ls java #先预览错误信息
Ls:无法访问java:没有这样的文件或目录。
[c.biancheng.net]$ ls Java 2 err . log #重定向
[c.biancheng.net]$ cat err.log #查看文件
Ls:无法访问java:没有这样的文件或目录。
同时保存正确的输出和错误消息
[示例1]将正确的结果和错误信息保存在文件中,例如:
[c . biancheng . net]$ ls-l out . log 21
[c . biancheng . net]$ ls Java out . log 21
[c.biancheng.net]$ cat out.log
总剂量12
DRWXR-XR-X.2根根2016年7月1日abc
-RW-R-R-. 1 mozhi Yan mozhi Yan 399 3月11日17:12 demo.sh
-RW-RW-R-.1莫之言莫之言278年3月16日17:17 main.c
-RW-RW-R-.1 Mozhiyan Mozhiyan 0年3月22日17:39 out.log
-RWXR-XR-X.1莫之言莫之言187 3月22日17:16 test.sh
Ls:无法访问java:没有这样的文件或目录。
out.log的最后一行是错误消息,其他所有行都是正确的输出结果。
【例2】上面的例子把正确的结果和错误的信息都写到同一个文件里,会造成视觉上的混乱,不利于以后的检索,所以我建议把正确的结果和错误的信息分别保存在不同的文件里,也就是按照下面的形式写:
ls -l out.log 2err.log
这样,正确的输出结果将被写入out.log,而错误的信息将被写入err.log
/dev/null文件
如果您不想将命令的输出保存到文件或显示在屏幕上,这将干扰命令的执行,您可以将命令的所有结果重定向到/dev/null文件。如下所示:
ls -l /dev/null
你可以把/dev/null想象成Linux系统的垃圾箱。任何放入垃圾箱的数据都将被丢弃,并且无法恢复。
Linux外壳输入重定向
输入重定向意味着改变输入的方向。它不使用键盘作为命令输入的来源,而是使用文件作为命令的输入。
表3:3:Bash支持的输出重定向符号
标志
解释
命令
使用文件file的内容作为命令的输入。
命令
从标准输入(键盘)读取数据,直到遇到分隔符(分隔符可以是用户定义的任何字符串)。
命令文件2
File1作为命令的输入,命令的处理结果输出到file2。
与输出重定向类似,输入重定向的完整写入是fd。
输入重定向的示例
[例1]统计文档中有多少行文本。
Linux wc命令可以用来统计文本,包括字数,行数和字节数。其用法如下:
WC[选项][文件名]
其中-c选项统计字节数,-w选项统计字数,-l选项统计行数。
计算readme.txt文件中有多少行文本:
[c.biancheng.net]$ cat readme . txt #预览文件的内容
c语言中文网
http://c.biancheng.net/
已经成立七年了。
日IP数万
$ wc -l
四
【例2】逐行读取文件内容。
#!/可爱的小懒虫/狂欢
在读取字符串时;做
echo $str
完成的
运行结果:
c语言中文网
http://c.biancheng.net/
已经成立七年了。
日IP数万
这种编写方法称为代码块重定向,意思是将一组命令同时重定向到一个文件。我们会在《Shell代码块重定向》部分详细讲解。
【例3】统计用户在终端输入的文本行数。
这里我们使用输入重定向符号。
$ wc -l
123
789
字母表
坐标
结束
四
wc命令将等待输入,直到它遇到分隔符结尾。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。