0
点赞
收藏
分享

微信扫一扫

#导入Word文档图片# Linux下输入输出重定向

当我们使用shell执行命令、或者执行C语言程序,每个进程会默认打开三个文件,并使用文件描述符来引用这些文件。

1.1 Linux标准文件描述符

文件描述符

缩写

描述

0

STDIN

标准输入

1

STDOUT

标准输出

2

STDERR

标准错误输出

  1. 什么时候会用到标准错误?#导入Word文档图片# Linux下输入输出重定向_文件描述符
  2. 什么时候会用标准输出?

#导入Word文档图片# Linux下输入输出重定向_重定向_02

1.2 文件重定向

在执行命令时,可以指定命令的标准输入、输出和错误,要实现这一点就需要使用文件重定向。

在对标准错误进行重定向时,必须要使用文件描述符,但是对于标准输入和输出来说,这不是必需的。

  • 符号:>表示覆盖 >>表示追加

1.2.1重定向输出

标准输出的文件描述符是1,默认是重定向到屏幕。

  • 示例1: 标准输出重定向

# ls >log.txt //将ls输出的内容重定向到log.txt文件,屏幕上不会显示信息


//错误信息不会输出到log.txt,还是输出到屏幕上

[root@wbyq test]# ls 66 >log.txt

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

  • 示例2:创建长度为0的文件

# >123.c

  • 示例3: C语言程序

#include <stdio.h>

int main()

{

printf("hello world!\n");

return 0;

}


[root@wbyq test]# ./a.out >log.txt //编译上面程序,运行可执行文件时,将标准输出重定向到log.txt

1.2.2 标准错误

标准错误的文件描述符是2,默认重定向到屏幕。

为了重定向标准错误,可以指定文件描述符2

  • 示例1: 默认错误信息是输出到屏幕上的,重定向之后可以输出到文件

[root@wbyq test]# ls 666.c

ls: 无法访问666.c: 没有那个文件或目录

[root@wbyq test]# ls 666.c 2> log.txt

[root@wbyq test]#

  • 示例2: C语言程序


#include <stdio.h>

int main()

{

perror("hello world!"); //输出错误信息

return -1;

}

# ./a.out 2>log.txt //错误重定向到log.txt

如果不需要错误信息,可以将错误信息重定向到/dev/null文件,该文件相当于系统的垃圾箱。

# ./a.out 2>/dev/null //错误重定向到/dev/null

1.2.3 标准输入

标准输入的文件描述符是0,默认从重定向到键盘。

  • 示例1: 从键盘读取读取到123.c ,遇到A字母就结束读取。 cat命令再将读取到的数据写入到123.c

[root@wbyq test]# cat >123.c<<A

> 123

> 456

> 789

> A

[root@wbyq test]# cat 123.c

123

456

789

  • 示例2:

[root@wbyq test]# cat <<A //遇到A字母结束读取

> 12

> 34

> 45

> A

12

34

45

  • 示例3: 从键盘输入数据排序

sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

[root@wbyq test]# sort >>log.txt<<A

> 67

> 34

> 68

> 34

> 56

> A

[root@wbyq test]# cat log.txt

34

34

56

67

68

示例3:

# sort 123.c //顺序输出文件内容

1.2.4 重定向合并

示例1: //将ls的标准错误与标准输出一追加的方式重定向到log.txt文件

# ls >> log.txt 2>&1

& 表示等同于的意思,2>&1,表示2的输出重定向等同于1,即和1重定向的文件系统上的位置是一样的


示例2:

command < filename >filename2 把文件filename中的内容作为command的输入,把标准输出重定向到filename2文件中


command 0< filename 1> filename2 同上


举报

相关推荐

0 条评论