文章目录

  • 一:标准输入,标准输出和标准错误
    • (1):标准输出重定向
      • A:`>`重定向
      • B:`>>`重定向
    • (2):标准错误重定向
    • (3):将标准输出和标准错误重定向到同一个文件中
    • (4):标准输入重定向
  • 二:管道
    • (1)less命令
    • (2)过滤器
    • (3)uniq-去除重复行
    • (4)wc-打印行数,字数和字节数
    • (5)grep
    • (6)head/tail-只看开头或结尾
    • (7)tee-从stdin读取数据,同时输出到stdout(没有文件参数)或文件

要说命令行中最酷的内容是什么,我觉得是 重定向管道

重定向可以把命令行的输入重定向为从文件中获取内容,也可以把命令行的输出结果重定向到文件中

管道可以将多个命令行关联起来

一:标准输入,标准输出和标准错误

一个命令或程序,按下回车键后,要么会显示程序运行的结果,要么会显示状态和错误信息。

以ls为例,当按下ls命令后,它会把其运行结果发送到一个称为标准输出(stdout) 的特殊文件中,其状态信息则会发送到一个称为 标准错误(stderr) 的文件中。标准输出和标准错误都将会被链接到屏幕上,然后输出,它不会保存在磁盘中
我们都知道命令是通过键盘输入给电脑的,这个键盘叫做的标准输入(stdin)

在默认情况下,标准输入和标准输出都是按照这样的逻辑进行的,而I/O重定向功能可以改变输出内容的发送目的(也就是不让你发送到屏幕上),也可以改变输入内容的来源地(也就是说甚至可以来自于文件)

总之,通常来说输出内容在屏幕上,而输入内容来自于键盘,但是重定向可以改变这种逻辑

(1):标准输出重定向

标准输出重定向符号是>’或>>,它表示把左面的内容重定向到右面。

A:>重定向

如下,使用ls命令,把ls命令输出的内容重定向到a.txt

刚才的指令是正确的的,因为ls命令的列出的目录是存在的,但是现在我们改变一下。我们将一个根本不存在的目录,进行重定向

结果在意料之内,它的确是不存在的,但是还有一个很奇怪的问题,既然这个目录是不存在的,那么为什么最终这个a.txt还是生成了?

接着我们利用长列表显示这个文件

更奇怪的事情发生了,这个文件的大小竟然是0。使用重定向“>”,进行重定向时,目的文件会从文件开头部分进行重写,但是上面咋们ls了一个根本不存在的目录,所以当重定向重写这个文件时,在出现错误的情况下停止了操作,因此文件内容被删除,而文件没有删除

  • 因此,这给我们一个启发,需要创建新的空文件或者删除文件内容时可以使用这种方法

B:>>重定向

上面的>重定向只能从文件头部开始重写,有时会导致文件内容被删除,而使用>>重定向可以实现从文件的尾部开始添加输出内容

为了验证这一点,我们先用刚才的>重定向,将正确的内容重定向三次

可以发现即便正确重定向了三次,最终文件的大小也只能是54个字节

但是同样方式利用>>完成,依然正确重定向三次,可以发现大小变为原来的三倍,也就是162个字节

  • 从某种方面理解,你可以将>重定向理解为覆盖重定向,而把>>重定理解为追加重定向

(2):标准错误重定向

前面,我们在故意错误重定向时,还发现了一个奇怪的地方

这个错误信息为什么被输出到了屏幕上,难道它不应该作为一种日志类的信息添加到文件中吗?

其实这个问题在前面也能的到解答,ls命令不会把它的错误信息发送到标准输出文件中,而重定向到了标准错误文件中,这里我们只干了一件事情那就是重定向了标准输出,所以自然而然它就输出到了屏幕上

冲向标准错误时和前面的有所不同,简单点来说:重定向时要加对应索引,0表示标准输入,1表示标准输出,2表示标准错误,所以要重定向标准错误时可以这样做

(3):将标准输出和标准错误重定向到同一个文件中

一般情况下,我们重定向时要同时重定向标准错误和标准输出(毕竟是日志信息嘛)
只需借助&>就可以同时重定向标准错误和标准输出

(4):标准输入重定向

这里先介绍一下cat命令,后序会有更好的标准输入命令,因为cat命令其实很模糊,有的时候使用并不详细,但是有一个作用一定要记得,对于函数不是太长的文件,可以使用它查看

cai命令命令准确点将是用来合并的文件。举个例子,在互联网上下载电影,并不是把这个电影一次性全部搞下来,而是分段下载,这些文件可能较movie.avi1,movie.av2,movie.av3·········,如果使用cat命令,则利用通配符可以一次性把这些文件全部合并

cat movie.avi* >movie.avi

上面的cat带有参数,如果这里直接只输入一个cat命令,会发现光标闪烁,正在等待我的输入

此时随便输入一些文字

然后按下ctrl+D,告知cat已经到达了文件尾了

由于缺少文件名,因此cat会把标准输入内容复制到标准输出文件(此时的标准输出文件就是屏幕),因此你会看到重复。

现在我们加上文件名,再利用输出重定向,于是我们就做出了世界上最简单的文字处理器

再次使用cat查看文件(这里可就可以解释为什么cat具有查看文件内容的作用了,它会把文件复制到标准输出中)

到现在我们知道了,cat默认的标准输入来源键盘,因此如果我在这里使用<,右面跟上文件名,那么标准输入源就成为了该文件。

二:管道

从第一部分的叙述我们可以得知:命令从标准输入获取数据,然后把数据再发送到标准输出,这个过程本质其实是两个过程,但是为什么感觉执行的时候感觉是一瞬间的呢?这其实利用了管道。

使用管道操作符“|”可以把一个命令的标准输出发送到另一个命令的标准输入中 Command 1 | Command2

(1)less命令

less命令可以接受标准输入,使用less命令可以分页显示任意命令的输入,该命令可以分页显示任意命令的输入,并将其结果发送到标准输出(屏幕)

如下输入ls -l /usr/bin | less

你可以把上述理解为这样:ls -l /usr/bin > test.txt,然后less test.txt

(2)过滤器

管道可以完成复杂的操作,管道左侧的内容发送到管道,然后右侧进行操作,右侧操作完成之后,再传递给更右侧,有点像过滤的感觉,所以称为过滤器

如下ls /usr/bin | sort | less,表示将/usr/bin的内容发送到管道,然后sort处理管道内容,再交给less,接着less把内容发送到屏幕,所以你看到的将是一个排序好的文件

(3)uniq-去除重复行

uniq命令可以去除一些重复的行,比如下面的文件中我故意设置了一些很多行

首先使用cat命令,将其发送到屏幕,此时内容将作为标准输入发送到管道,接着uniq对管道内容进行处理,然后交给less查看。

  • 注意uniq -d表示只查看重复行

(4)wc-打印行数,字数和字节数

wc在没有任何文件参数时,默认以键盘作为标准输入源。
下面是wc和管道的配合使用

(5)grep

grep功能非常强大,你可把它简单的理解为抓取某些字符,grep不止可以匹配简单的字符,配合正则表达式,将会达到你意想不到的结果,但是本节只是展现一下其基本的用法
如下,配合管道,我可以将文件中具有包含zip行的文本列出来

如果在输入加上选项-n,就可以打印出文本所在行行号

还有其他常用选项,读者可以进行尝试

(6)head/tail-只看开头或结尾

有些文件,你可只需要查看的前几行或者后几行,这里head和tail命令可以帮助你完成,head和tail默认会输出文件的前10行和后10行

如果需要改变行数,在后面只需要加上-n即可,n代表行数


其中tail有一个-f选项十分有用,可以查看正在被写入的日志文件的进展状态
比如,/var/log下的message文件包含安全信息,它会时常更新,所以可以用tail -f进行监视(可能要提高用户等级才能操作),如sudo tail -f /var/log/messages

(7)tee-从stdin读取数据,同时输出到stdout(没有文件参数)或文件

前面我们用管道时,管道后面的命令直接可以操作管道里的内容,但是现在我需要把管道里的东西保存到某个文件中(如果tee后面不加任何参数,那么默认就到标准输出文件,也就是屏幕)该怎么办呢?可以使用tee命令完成

1-6:学习shell之重定向相关推荐

  1. linux shell数据重定向(输入重定向与输出重定向)详细分析

    转载自: linux shell数据重定向(输入重定向与输出重定向)详细分析 - 程默 - 博客园 http://www.cnblogs.com/chengmo/archive/2010/10/20/ ...

  2. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

  3. Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  4. 《Linux命令行大全》学习笔记1——学习 Shell

    文章目录 前言 一.什么是Shell 二.导航 三.探索 Linux 系统 ls file less 四.操作文件和目录 通配符 mkdir cp mv rm ln 五.和命令打交道 六.重定向 标准 ...

  5. 《Linux命令行大全》重点笔记——第一部分 学习shell

    <Linux命令行大全>重点笔记 第一部分 学习shell 第一章 shell是什么 1.3 简单命令 1.date:系统时间.日期. 2.cal:当月日历. 3.df:磁盘可用空间. 4 ...

  6. 「学习笔记-Linux」学习Shell Script

    学习Shell Script Table of Contents 1 什么是Shell Scipt 1.1 程序书写 1.2 程序执行 2 简单Shell练习 2.1 例1 接收用户输入 2.2 例2 ...

  7. 通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本...

    通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本   版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 ...

  8. 今天开始学习shell编程!!!

    已经入职一个月了. 经过这一个月重复的工作每天都是做一些环境配置的事. 对环境配置已经很熟练了.也不需要再通过每一步的安装来学习新的知识了. 所以我想写一个shell脚本让程序自己安装. 昨天晚上都凌 ...

  9. linux shell概述,Linux学习 -- Shell基础 -- 概述

    Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串  双引号 ...

最新文章

  1. CQOI2019(十二省联考)游记
  2. 开发环境中实现Lombok消除Java冗余
  3. Python 技术篇-不使用os模块判断指定路径是文件还是文件夹,使用pathlib库判断文件和文件夹
  4. java 中类的加载顺序
  5. centos rpm 安装 perl_Linux【常用软件安装篇】
  6. 绑定dictionary 给定关键字不再字典中_对字典嵌套的理解及二级下拉菜单的制作...
  7. excel切片器_如何在Excel表格中使用切片器
  8. MySQL数据库的常用命令语句记录——安全用户语句及函数
  9. 北科大计算机顺德,北京科技大学顺德研究生院2020考研预调剂信息
  10. 彩虹战队waf测试工具(测试数据)
  11. 使用Visual Studio 2010 Team System中的架构师工具(设计与建模)
  12. 宋宝华《Linux设备驱动开发详解》
  13. 黑客帝国里的酷炫蓝光屏幕
  14. visio 2003 问题
  15. Linux性能测试(UnixBench)(bench)一键脚本
  16. 联想入选恒生指数成分股
  17. 芯片工程师常用英文黑话
  18. oracle 计算标准差函数,Oracle数据库之使用oracle来计算方差及标准差
  19. 海康威视摄像头rtsp推流至H5总结
  20. 详讯:微软宣布446亿美元收购雅虎

热门文章

  1. 第六节:教你如何在html中绑定数据
  2. 第八节:ES6为数组做了哪些扩展?
  3. php下拉上滑分页,Flutter实现下拉刷新 上拉分页加载更多
  4. php实现mysql 数据迁移_php实现redis数据库指定库号迁移的方法
  5. ftpclient读取服务器文件能获得文件名文件大小0_Spring WEB工程整合使用FTP,ftp文本文件解析入库,文件上传下载
  6. PyPDF2 | 利用 Python 实现 PDF 分割
  7. 带你走进和声搜索算法(Harmony search )的世界!
  8. Python中两个浮点数的简单运算
  9. 快速学习R语言的经验分享
  10. PS Raw增效工具:Adobe Camera Raw13 for mac