整理自《快乐的linux命令行一书》。

linux系统版本: Ubuntu 17.04

本章,我们将介绍命令行最酷的特性,叫做I/O重定向,通过这个工具,可以重定向命令的输入输出,命令的输入来自文件,而输出也存到文。也可以把多个命令连接起来组成一个强大而命令管道。我们将介绍以下命令:

cat:连接文件

sort : 排序文本行

uniq : 报到或省略重复行

grep : 打印匹配行

wc : 打印文件中的换行符,字和字节个数

head : 输出文件第一部分

tail : 输出文件最后一部分

1、标准输入、输出和错误

程序,比方说ls,实际上把他们的运行结果输送到一个叫做标准输出(stdout)的特殊文件,而他们的状态信息则送到另一个叫做标准错误的文件(stderr)。默认情况下,标准输出和标准错误都连接到屏幕,而不是保存到磁盘文件。除此之外,许多程序从一个叫做标准输入(stdin)的设备得到输入,默认情况下,标准输入连接到键盘。

2、重定向标准输出

重定向标准输出到另一个文件除了屏幕,我们使用“>”重定向符,其后跟文件名,例如:

重定向输出.png

我们将ls的输出重定向到ls-output.txt文件中。现在 ,我们把目录换成一个不存在的目录:

重定向2.png

可以看到,我们输出了一个错误信息,这条错误信息没有重定向到文件中而是输出到了屏幕上,因为“>”只是重定向了标准输出,而没有重定向标准错误,所以错误出现在了屏幕上,但此时我们的文件已经变了:

重定向3.png

可以发现文件大小变为了0.因为使用“>”重定向符重定向输出结果时,目标文件总是从开头被重写。所以导致文件内容删除,那么我们怎么能把重定向结果追加到文件内容后面呢,使用“>>”重定向符:

重定向4.png

可以看到,即使出现错误,我们的文件大小仍然没有变为0.

3、重定向标准错误

我们使用如下的方式重定向标准错误:

重定向错误.png

可以看到,我们的错误被写入了文件:

重定向错误.png

4、重定向标准输出和错误到同一个文件

如果说2代表标准错误,那么我们可以用1代表标准输出,比如:

重定向5.png

如果我们希望捕捉一个命令的所有输出到一个文件,即同时重定向标准输出和标准错误,有两种方法来完成任务,首先是传统的方法:

重定向5.png

我们在最后添加了2>&1参数,根据大小文件大小可以看出,输出和错误都被重定向到ls-output.txt文件中了。

第二种方法更加精简:

重定向输出和错误2.png

5、处理不需要的输出

有时候我们不想要一个命令的输出结果,我们只想把它扔掉,我们只需要重定向输出结果到一个特殊的叫做“dev/null”的文件。这个文件是系统设备,叫做位存储桶,它可以接受输入,并且对输入不做任何处理:

处理不需要的输出.png

6、cat --连接文件

cat命令读取一个或多个文件,然后复制他们到标准输出:

cat命令1.png

cat还可以用来连接文件,比如我们下载了一个大型文件,这个文件被分为好多部分,我们想把他们连接起来,用如下的命令:

cat连接文件.png

如果cat命令没有接受任何参数,它会从标准输入读入数据,而标准输入默认是键盘,所以它会等待我们输入数据:

cat命令2.png

使用快捷键ctrl+d结束我们的输入,由于没有重定向输出,所以它会将原话输出到屏幕上,如下图:

cat输出.png

我们也可以将cat接受的输入重定向到文件中,并用cat查看:

cat输出2.png

7、管道线

命令可以从标准输入读取数据,然后再把数据送到标准输出,命令的这种能力被一个shell特性所利用,这个特性叫做管道线,一个命令的标准输出可以管道到另一个命令的标准输入:

command1 | command2

比如我们将ls的的输出结果当做标准输入输送到less命令:

管道线1.png

8、过滤器

管道线经常用来对数据完成复杂的操作,有可能会把几个命令放在一起组成管道线。通常,以这种方式使用的命令称为过滤器。过滤器接受输入,以某种方式改变它,然后输出它。比如sort过滤器,把目录/bin和/usr/bin中的可执行程序联合在一起,再把它们排序:

过滤器.png

另一个过滤器是uniq,可以报道或者忽略重复行,默认情况下,从数据列表中删除任何重复行,如果我们想得到重复的数据列,在uniq命令上加上“-d ”选项:

uniq.png

9、wc--打印行、字和字节数

wc命令用来显示文件所包含的行,字和字节数:

wc命令1.png

10、打印匹配行

grep是个很强大的程序,用来找到文件中的匹配文本。这样使用grep命令:

grep pattern [file...]

这里的pattern指匹配模式,grep能够匹配的模式很复杂, 可以是正则表达式,不过这里只展示一个基本的文本匹配,找到文件名中包含zip的所有文件:

grep.png

11、head/tail 打印文件的开头结尾

head命令默认打印文件的前10行,也可以用-n指定打印的行数

而tail命令默认打印文件的后10行,也可以用-n指定打印的行数

head-tail.png

12、tee命令

linux提供了一个tee命令,允许我们保存管道线中的中间结果,并且使数据继续顺着管道线流动:

tee.png

上面的命令使我们在进行grep匹配之前,首先将中间结果,即ls的结果保存到ls.txt中。

如果你喜欢我写的文章,可以帮忙给小编点个赞或者加个关注,我一定会互粉的!

如果大家对linux感兴趣,欢迎跟小编进行交流,小编微信为sxw2251,加我要写好备注哟!

我的微信

linux tee 重定向_快乐的linux命令行-重定向相关推荐

  1. linux 垃圾桶命令,linux下的一些好用的命令行

    linux下的一些好用的命令行 添加环境变量 Linux 中需要将 libjakaAPI.so 和 jkrc.so 放在同一个文件夹下,并添加当前文件夹路径到环境变量, 使用命令 export LD_ ...

  2. linux快捷命令补齐,Linux Shell简介——自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式.doc...

    Linux Shell简介--自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式 Unix (及后继者 Linux)在命令行下面诞生,因此,Unix 中的命令行有许多非常实用的功能. ...

  3. Linux 下五个顶级的开源命令行 Shell

    这个世界上有两种 Linux 用户:敢于冒险的和态度谨慎的. 其中一类用户总是本能的去尝试任何能够戳中其痛点的新选择.他们尝试过不计其数的窗口管理器.系统发行版和几乎所有能找到的桌面插件. 另一类用户 ...

  4. 快乐的shell命令行

    快乐的shell命令行 PART1--基础 1.权限 #超级用户权限 $普通用户 2.复制粘贴 复制:鼠标左键沿着文本拖动高亮的文本被复制到X管理的缓冲区(或者双击一个单词) 粘贴:鼠标中键 3.简单 ...

  5. Linux学习记录-----《快乐的Linux命令行》.

    之前自学python的时候一直用的Win7,没想过,也有点怕使用Linux,可能人对未知的东西都有点恐惧,但是,但是,学了4个多月,退无可退了,不管是网站的部署,还是基于后端工作的需求,Linux的学 ...

  6. linux apache设置web访问重定向_从零开始学Linux运维|30.Linux的目录结构

    1.tree命令 linux下目录结构跟一个倒过来的树一样的,最顶层就是根目录 / tree这个命令就很形象 它够很方便的查看目录结构 使用"yum install tree -y" ...

  7. linux tee 日志输出_25 个 Linux 下最炫酷又强大的命令行神器,你用过其中哪几个呢?...

    众所周知,我们在 Linux 下大多数时候是使用命令行来处理任务的.这样不但操作起来效率比较高,而且界面也比较炫酷.下面,我们就给大家推荐一些不但炫酷又好用的 Linux 命令行神器. 1. exa ...

  8. linux混合命令_十多个命令行混合

    这是"口语UNIX"系列的第十三期:我想这是一个不祥的数字,直到我在Internet上扫描了该数字的危害性来源. 事实证明,十三个方面的"好"和"坏& ...

  9. linux npm安装_怎样在Linux上开发vue项目

    怎样在Linux上开发vue项目 一.开发环境搭建:安装node.js环境以及vue cli工具 (1)安装node.js 从官网下载对应的二进制压缩包,如下图: 解压到程序安装目录 xz -d no ...

最新文章

  1. opencv4 c++ 提取图片中的白色区域_修正!【从零学习OpenCV 4】分割图像——分水岭法...
  2. linux线程堆分配,如何在Linux中的相同进程下为线程分配堆栈或内存
  3. 常考数据结构与算法:实现二叉树先序,中序和后序遍历
  4. linux 路径名长度限制,linux下 如何修改命令行提示符路径提示符路径长度
  5. 计算机换用户无法启动软件,Windows无法启动. 原因可能是最近更改了硬件或软件故障的处理方法...
  6. php loading效果,利用CSS3打造十种Loading效果
  7. leetcode刷题之树(1)
  8. Codeforces Round FF(Div. 2)
  9. JavaScript-基础入门.0014.JavaScript内置对象
  10. js:插入节点appendChild insertBefore使用方法
  11. 【java】Java内省Introspector
  12. 风控贷中环节应该监控哪些风险指标
  13. php面试题 mysql 主从_php面试题之五——MySQL数据库(基础部分)
  14. 第十五章 第十五章 异步A3C(Asynchronous Advantage Actor-Critic,A3C)-强化学习理论学习与代码实现(强化学习导论第二版)
  15. 七年级上册数学计算机教学视频,人教版初中数学七年级上册
  16. C++:vector的初始化(5种)
  17. 古龙奇侠传java6_华人最著名的20位武侠小说家,梁羽生排不进前6,古龙屈居第5...
  18. 等保2.0:这些等保测评要求,你都知道吗?
  19. Linux预处理功能,ZABBIX4.2预处理新功能---数据节流THROTTLING
  20. 教你如何用Python部署QQ频道机器人

热门文章

  1. oracle 自动表分析,Oracle自动分析索引,表
  2. java替换list中元素,Java 实例 - List 元素替换
  3. CSS3 pointer-events的应用
  4. macbook不能进系统 备份数据_不基于备份和表,生产系统数据误删就能完全恢复?!...
  5. cat命令详解_好程序员Python培训之详解eval好与坏
  6. can通讯bdc_宝马总线K-CAN3和K-CAN4常见案例
  7. hssfcolor 不建议使用_不建议使用微信双开的真正原因!
  8. linux新的API signalfd、timerfd、eventfd使用说明——eventfd
  9. html中怎么写jq,用jQuery替换HTML页面中的文本
  10. Mapgis图转换为可导入软件的shp