Linux命令学习(重定向)

1.重定向概念

标准输入,输出,和错误到目前为止,我们用到的许多程序都会产生某种输出。这种输出,经常由两种类型组成。 第一,程序运行结果;这是说,程序要完成的功能。第二,我们得到状态和错误信息, 这些告诉我们程序进展。如果我们观察一个命令,像 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

过滤器
几个命令放在一起组成一个管道线,通常,以这种方式使用的命令被称为过滤器

ls /bin  /usr/bin | sort | less //将两个文件中的文件或文件夹排序输出

uniq 报道或忽略重复行
通常和sort一起使用,来删除重复的行

ls /bin /usr/bin | sort | uniq | less  //uniq -d 可以看到重复的行

wc 打印行, 字 和字节数 (按照顺序打印)

wc a.txt 

如果不带参数, wc接受标准输入 -l 属性表示 只打印行数

 ls /bin /usr/bin | sort | uniq | wc -l

grep 打印匹配行
在文档中找到匹配的文本,打印出包含该这个类型的行,

grep pattern [file...]

在这里匹配的模式可以很复杂,可以是正则表达式.同时它也接受标准输入

ls /bin /usr/bin |sort | uniq | grep zip 

grep 有两个方便的选项 -i 导致grep在执行搜索忽略大小写(通常,搜索大小写是敏感的),
“-v” 只打印不匹配的行
head / tail 打印文件开头部分 / 结尾部分
一般是打印文章的开头 / 结尾的十行, 可以使用 ” -n ” 属性来规定打印的行数,没有参数的时候也接受标准输入

ls /usr/bin | head -n 5   //打印前五行

tail 有一个选项 ” -f “, 可以实时的浏览文件,当文件有更新的时候,就显示出来, 比如/var/log下的信息文件,

tail -f /var/log/messages 

tee 从stdin 读取数据, 并同时输出到stdout和文件
为了和管道的隐喻保持一个, linux提供一个tee的命令,tee 程序从标准输入读入数据,并且同事复制数据到标准输出(允许数据继续随着管道线流动) 和一个或多个文件,当需要从某个中间处理阶段来捕捉一个管道线的内容的时候,很有帮助.即将标准输入中的内容在中间的时候放在文件中,并且保证数据继续随着管道继续流动.

  ls  /usr/bin | tee ls-out.txt | grep zip  
  //将ls出来的数据先存放在ls-out.txt中,在进行grep zip

总结: 上面说到用到标准输入的程序有 sort , uniq , less ,wc, grep , head, tail ,tee
重定向,总结为 就是将输入或者输出不直接显示在屏幕上,而是其他的文件或者命令中.(这个总结可能片面,在刚学时候的简单理解)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值