最近笔试遇到一道题,关于Linux命令的,题目如下

下面两条命令分别会有怎样的输出

echo hello 1>&2 |grep aaa

echo hello 2>&1 |grep aaa

A、两个均输出hello B、第一个无输出,第二个输出 hello C、第一个输出hello,第二个无输出 D、两个均输出hello

思考了几分钟,选了C。正所谓参差不齐就选C,emmm其实是瞎选的,1>&2这个知识点博主忘了,所以今天就来复习一下

echo

功能:显示器上显示一段文字,一般起到一个提示的作用。

参数:-b 表示删除前面的空格

-n 表示换行

-t 表示水平制表符

-v 表示垂直制表符

-c 后面的字符将不会输出,同一时候,输出完毕后也不会换行

-r 输出回车符(可是你会发现\r前面的字符没有了)

-a 表示输出一个警告声音

1

2

[chen@localhost media]$ echo hello

hello

1

2

[chen@localhost media]$ echo $PATH

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/chen/.local/bin:/home/chen/bin

grep

功能:文本过滤工具,是 Linux 系统中最重要的命令之一,其功能是从文本文件或管道数据流中筛选匹配的行及数据

参数 :-n : 显示匹配的行号及行

-i : 不区分大小写

-c : 只输出匹配的行数

-h : 查询多文件时不显示文件名

-l : 查询多文件时, 只输出包含匹配字符的文件名

-v : 显示不包含匹配文本的所有行

[chen@localhost media]$ grep int new1.c

int data;

int compare(const void *p, const void *q) {

int const *a = (int const *)p;

int const *b = (int const *)q;

int show(int *p, int n) {

int i = 0;

printf("%d ", p[i]);

int input(int *p, int n) {

int i = 0;

int main()

int p[100] = { 0 };

[chen@localhost media]$ grep -n int new1.c

8: int data;

13:int compare(const void *p, const void *q) {

14: int const *a = (int const *)p;

15: int const *b = (int const *)q;

25:int show(int *p, int n) {

26: int i = 0;

28: printf("%d ", p[i]);

33:int input(int *p, int n) {

34: int i = 0;

42:int main()

44: int p[100] = { 0 };

[chen@localhost media]$ grep -c int new1.c

11

重定向

定义:Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作。

重定向输入就是让程序使用文件而不是键盘来输入,重定向输出就是让程序输出至文件而不是屏幕

I/O重定向通常与 FD 有关,shell的FD通常为10个,即 0~9;

重点:常用 FD有3个,为 0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出)

用 < 来改变读进的数据信道(stdin),使之从指定的档案读进

用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;

0 是 < 的默认值,因此 < 与 0 与 1> 是一样的;

[chen@localhost media]$ vim file.c//创建一个空文件

[chen@localhost media]$ echo hello > file.c //输出hello到空文件中

[chen@localhost media]$ cat file.c //文件就存了hello

hello

[chen@localhost media]$ > file.c //快速清空文件内容的快捷键就是基于这个输出重定向来完成的 1> file.c 也是同样的作用

[chen@localhost media]$ cat file.c //文件里的hello已经被清空

[chen@localhost media]$

FD 2 错误输出,就是当输出错误时,用 2> 可以输出错误的返回值

[chen@localhost media]$ cat file.c

[chen@localhost media]$ hello 2> file.c //将错误信息重定向输出到file.c文件,而不是显示在屏幕上

[chen@localhost media]$ cat file.c

bash: hello: 未找到命令...

[chen@localhost media]$

&是文件描述符,&2 表示错误通道2,echo hello 1>&2 表示hello 重定向输出到错误通道2

回忆一下,我们在终端敲命令错误屏幕就会报错,我们把屏幕报错显示的地方当成错误通道2就容易理解了

如果不加&2 直接 echo hello 1>2 就变成hello 重定向输出到2这个文件里去了,如果没有2,系统就自动创建一个2

[chen@localhost file]$ ls

file.c

[chen@localhost file]$ echo hello 1>&2 //hello 重定向输出到错误通道2,也就是终端屏幕

hello

[chen@localhost file]$ echo hello 1>2 //hello 重定向输出到2这个文件中去

[chen@localhost file]$ ls

2 file.c

[chen@localhost file]$ cat 2

hello

[chen@localhost file]$

讲到这里相信对重定向也有一定的理解了吧,下面回到开头那道题

下面两条命令分别会有怎样的输出

echo hello 1>&2 |grep aaa

echo hello 2>&1 |grep aaa

答:第一个输出hello,第二个无输出,解析如下

1>&2 将正确输出重定向到标准错误2通道

2>&1 将错误输出重定向到标准输出1通道

echo hello 1>&2 后面跟了一个 | grep aaa

| 是管道,意思就是将第一条指令的结果放到第二条指令中,管道命令右边只处理左边的标准正确输出,也就是通道1

echo hello 1>&2 将结果输出到错误2通道,也就是在终端屏幕上显示hello,而标准输出1通道没有值,| grep aaa 搜素左边传来的标准输出通道1的结果,发现没有aaa,所以没有输出,最终屏幕只显示一个hello

echo hello 2>&1 将错误返回值输出到标准1通道,不过该语句正确,没有错误,通道2也就为空,屏幕没有显示,| grep aaa 搜素左边传来的标准输出通道1的结果,通道1有hello 但是没有 aaa 所以没有输出,所以屏幕没有显示

再帮大家加深一下,如果换一下,改成 echo hello 1>&2 | grep e 和 echo hello 2>&1 | grep e 呢?

echo hello 1>&2 将正确结果hello输出到错误2通道,也就是在终端屏幕上显示hello,而标准输出1通道没有值,| grep aaa 搜素左边传来的标准输出通道1的结果,发现没有hello,所以没有输出,最终屏幕只显示一个hello

echo hello 2>&1 将错误返回值输出到标准1通道,不过该语句正确,没有错误,通道2也就为空,屏幕没有显示,| grep aaa 搜素左边传来的标准输出通道1的结果,发现有e,所以输出hello

通道2会在屏幕上显示,通道1不会在屏幕上显示,记住这句话,这句话是针对管道的第一个命令,大家别误解了,把管道命令左边命令的通道1的值给右边命令,右边命令再输出,如果正确,输出通道1,错误,输出通道2

这就是我对重定向 ,1>&2 , 2>&1 的理解,有什么不对的大家也可以提出来一起讨论

鸣谢作者:陈佳乐

原文:https://www.cnblogs.com/cyyz-le/p/11305004.html

linux 重定向 2 gt gt,Linux命令- echo、grep 、重定向、1gt;amp;2、2gt;amp;1的介绍相关推荐

  1. linux后台运行符号、nohup命令、输出重定向等使用方法

    linux后台运行&符号.nohup命令.输出重定向等使用方法 https://blog.csdn.net/zjc/article/details/51484114 在命令最后加上&符 ...

  2. (转载)linux下的find文件查找命令与grep文件内容查找命令

    linux下的find文件查找命令与grep文件内容查找命令 转载于和感谢:linux下的find文件查找命令与grep文件内容查找命令 目录 1.前言 1.1 find命令和grep命令的区别 2. ...

  3. linux下的find文件查找命令与grep文件内容查找命令

    在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访 ...

  4. linux下的find文件查找命令与grep文件内容查找命令(转)

    在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区别的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空, ...

  5. linux查看当前间命令,Linux系统查看当前时间的命令

    转自:https://www.cnblogs.com/redfire/p/7702213.html 一.查看和修改Linux的时区 1. 查看当前时区 命令 : "date -R" ...

  6. linux 的重定向、管道、xargs 命令

    原文地址:http://blog.csdn.net/lucky_liuxiang/article/details/70597755 重定向.管道和xargs命令都是在命令之间传递数据的方式.Linux ...

  7. linux tee 重定向_快乐的linux命令行-重定向

    整理自<快乐的linux命令行一书>. linux系统版本: Ubuntu 17.04 本章,我们将介绍命令行最酷的特性,叫做I/O重定向,通过这个工具,可以重定向命令的输入输出,命令的输 ...

  8. linux命令echo的实现,Linux echo命令的使用及三种实现方式

    先给大家介绍下linux中echo命令的使用 echo是打印变量的值或者给定的字符串, 比如,输入echo hello或者echo "hello"都是在控制台打印出hello单词 ...

  9. Linux中重定向的实验总结,Linux中重定向命令行的总结

    1. 标准输入的控制 语法:命令< 文件将文件做为命令的输入. 例如: mail -s "mail test" < file1 将文件file1 当做信件的内容,主 题 ...

最新文章

  1. esp32摄像显示时间_TinyPICO-比拇指还小的ESP32开发板- 国外创客众筹发现第二期
  2. Windows10编译源码安装Aleth(Ethereum C++ client, tools and libraries)
  3. c++稀疏表sparse table的实现算法(附完整源码)
  4. 如何根据jar包的名称找到包含对应源代码的jar包
  5. Java 中接口 interface 实例介绍
  6. python 股票数据_从互联网获取股票数据(历史数据,Python + MySQL)
  7. 网页抓取工具火车头如何采集关键词
  8. 中兴软件测试过往面试题汇总
  9. ESPRESSIF AT指令集
  10. 贴片发光二极管/LED灯正负极判断
  11. 准确测量模型预测误差
  12. OpenCV鼠标修改图片透明度
  13. Python爬虫项目实战(欧美音乐网站)
  14. java双层list扁平化,浅谈java8 stream flatMap流的扁平化操作
  15. 难译 | windbg 乐趣之道(下)
  16. 阿里云栖大会100位顶级大咖演讲PPT+视频全分享!
  17. 浅谈IC卡与ID卡重大区别
  18. arm64 blr指令
  19. 全面理解-Flutter(万字长文,【性能优化实战】
  20. Maven 手工上传JAR包到私有仓库

热门文章

  1. The number of method references in a .dex file cannot exceed 64K. Error 解决方案
  2. 《生物化学与分子生物学》----酶促反应动力学----听课笔记(九)
  3. 哪位有没有reportbuilder的教程?共享一下。万分感谢!
  4. 【101】NLP 自然语言处理14种分类算法】
  5. lightoj1278
  6. JPA中could not insert: 的解决办法
  7. 如何使用自己的云服务器做代理服务器
  8. springboot实现微信小程序二维码生成
  9. 漂亮的带搜索框蓝黄拼色网站404页面源码
  10. staged changes