Linux Shell重定向Linux管道
Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向;从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思。
标准的输入输出方向
- 输入方向就是数据从哪里流向程序。数据默认从键盘流向程序,如果改变了它的方向,数据就从其它地方流入,这就是输入重定向。
- 输出方向就是数据从程序流向哪里。数据默认从程序流向显示器,如果改变了它的方向,数据就流向其它地方,这就是输出重定向。
硬件设备和文件描述符
Linux 中一切皆文件,包括标准输入设备(键盘)和标准输出设备(显示器)在内的所有计算机硬件都是文件。
在 Linux 中,标准输入设备指的是键盘,标准输出设备指的是显示器。
为了表示和区分已经打开的文件,Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。
文件描述符 | 文件名 | 类型 | 硬件 |
---|---|---|---|
0 | stdin | 标准输入文件 | 键盘 |
1 | stdout | 标准输出文件 | 显示器 |
2 | stderr | 标准错误输出文件 | 显示器 |
stdin、stdout、stderr 默认都是打开的,在重定向的过程中,0、1、2 这三个文件描述符可以直接使用。
Linux Shell 输出重定向
在输出重定向中,>代表的是覆盖,>>代表的是追加。
bash shell : > 输出的内容会覆盖已有文件的内容
bash shell : >> 输出的内容追加到已有的文件中
输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。Bash 支持的输出重定向符号如下表所示。
类 型 | 符 号 | 作 用 |
---|---|---|
标准输出重定向 | command >file | 以覆盖的方式,把 command 的正确输出结果输出到 file 文件中。 |
command >>file | 以追加的方式,把 command 的正确输出结果输出到 file 文件中。 | |
标准错误输出重定向 | command 2>file | 以覆盖的方式,把 command 的错误信息输出到 file 文件中。 |
command 2>>file | 以追加的方式,把 command 的错误信息输出到 file 文件中。 | |
正确输出和错误信息同时保存 | command >file 2>&1 | 以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。 |
command >>file 2>&1 | 以追加的方式,把正确输出和错误信息同时保存到同一个文件(file)中。 | |
command >file1 2>file2 | 以覆盖的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。 | |
command >>file1 2>>file2 | 以追加的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。 |
注意事项
- 输出重定向的完整写法其实是fd>file或者fd>>file,其中 fd 表示文件描述符,如果不写,默认为 1,也就是标准输出文件。
- 当文件描述符为 1 时,一般都省略不写,如上表所示;当然,如果你愿意,也可以将command >file写作command 1>file,但这样做是多此一举。
- 当文件描述符为大于 1 的值时,比如 2,就必须写上。
- 需要重点说明的是,fd和>之间不能有空格,否则 Shell 会解析失败;>和file之间的空格可有可无。为了保持一致,我习惯在>两边都不加空格。
- 这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。
把正确结果和错误信息都保存到一个文件中
ls -l >out.log 2>&1
正确结果和错误信息分开保存到不同的文件
ls -l >>out.log 2>>err.log
执行下面的 who 命令,它将命令的完整的输出重定向在用户文件中(users)
who > users
cat users
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null
command > /dev/null
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
如果希望屏蔽 stdout 和 stderr
command > /dev/null 2>&1
Linux Shell 输入重定向
输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。
和输出重定向类似,输入重定向的完整写法是fd<file,其中 fd 表示文件描述符,如果不写,默认为 0,也就是标准输入文件。
符号 | 说明 |
---|---|
command <file | 将 file 文件中的内容作为 command 的输入。 |
command <<END | 从标准输入(键盘)中读取数据,直到遇见分界符 END 才停止(分界符可以是任意的字符串,用户自己定义)。 |
command file2 | 将 file1 作为 command 的输入,并将 command 的处理结果输出到 file2。 |
统计文档中有多少行文字
wc -l <users
tee 命令
把 标准输入 的 数据 复制到 每一个 文件 FILE, 同时 送往 标准输出.
tee [OPTION]... [FILE]...
-a :以累加 (append) 的方式,将数据加入 file 当中
# 这个范例可以让我们将 last 的输出存一份到 last.list 文件中;
last | tee last.list | cut -d " " -f1
# 这个范例则是将 ls 的数据存一份到 ~/homefile ,同时屏幕也有输出信息!
ls -l /home | tee ~/homefile | more
# 要注意! tee 后接的文件会被覆盖,若加上 -a 这个选项则能将信息累加。
ls -l / | tee -a ~/homefile | more
Linux Shell管道
将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。
Linux 管道使用竖线|连接多个命令,这被称为管道符。管道符|与两侧的命令之间也可以不存在空格。Linux 管道的具体语法格式如下:
command1 | command2 [ | commandN... ]
将 ls 命令的输出发送到 grep 命令
ls | grep mysqlmysql-community-client-8.0.30-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.30-1.el7.x86_64.rpm
mysql-community-common-8.0.30-1.el7.x86_64.rpm
mysql-community-debuginfo-8.0.30-1.el7.x86_64.rpm
mysql-community-devel-8.0.30-1.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.30-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.30-1.el7.x86_64.rpm
mysql-community-libs-8.0.30-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.30-1.el7.x86_64.rpm
mysql-community-server-8.0.30-1.el7.x86_64.rpm
mysql-community-server-debug-8.0.30-1.el7.x86_64.rpm
mysql-community-test-8.0.30-1.el7.x86_64.rpm
管道与输入重定向
输入重定向操作符<可以在管道中使用,以用来从文件中获取输入,其语法类似下面这样:
command1 < input.txt | command2
command1 < input.txt | command2 -option | command3
使用 tr 命令从 os.txt 文件中获取输入,然后通过管道将输出发送给 sort 或 uniq 等命令
tr a-z A-Z <os.txt | sort
管道与输出重定向
使用 mount 命令显示当前挂载的文件系统的信息,并使用 column 命令格式化列的输出,最后将输出结果保存到一个文件中
mount | column -t >mounted.txt
Linux Shell重定向Linux管道相关推荐
- 输出重定向Linux命令,Linux Shell重定向(输入输出重定向)精讲
Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向:从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思. 那么,什么是输入输出方向呢?标准的输入输出方向又是什么呢? ...
- Linux Shell脚本 Linux C程序 获取指定的范围内 or 系统可用端口
Linux Shell脚本 && Linux C程序 获取指定的范围内 or 系统可用端口 一.源代码及其运行 1. Linux C程序getPort.c 源码 运行示例 2. 脚本文 ...
- Linux Shell重定向 管道命令 grep搜索 awk编程 sed文件操作高阶函数
在编程中如果能够熟悉shell高阶语法,将对我们进阶为高级程序员有很大的帮助,本文将从Shell重定向 管道命令 awk编程 sed等方面展开介绍. 作者:有勇气的牛排 文章目录 1 shell重定向 ...
- linux 的重定向、管道、xargs 命令
原文地址:http://blog.csdn.net/lucky_liuxiang/article/details/70597755 重定向.管道和xargs命令都是在命令之间传递数据的方式.Linux ...
- linux shell重定向(输入输出重定向)讲解
文章目录 文件描述符 输出重定向 输入重定向 写在后面 linux shell的重定向是个什么东西呢,顾名思义就是重新定位方向,定位什么方向呢,那就是输入和输出的方向,也就是说linux shell的 ...
- linux错误日志重定向,Linux shell 重定向标准错误输出
文件描述符文件描述符是程序发送输出和获取输入的地方.当执行一个程序时,运行该程序的进程打开了3个文件描述符,分别是:0(标准输入).1(标准输出)和2(标准错误输出).重定向输出符号(>)是1& ...
- linux shell 原理,linux下shell的工作原理
linux下shell的工作原理 2009-12-8 10:19:53 出处:https://www.yqdown.com shell是用户和Linux操作系统之间的接口.Linux中有多种she ...
- linux shell概述,Linux学习 -- Shell基础 -- 概述
Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串 双引号 ...
- linux shell zsh,Linux终极shell Z Shell 用强大的zsh oh-my-zsh把Bash换掉
Bash确实是不错的Shell,但仍有用不少不尽人意的地方,如自动补全的功能不够强大,定位较长路径不够方便,命令历史管理不够完善等.javascript 介绍使用zsh,功能十分强大-推荐给你们!ja ...
最新文章
- OpenStack Keystone架构一:Keystone基础
- 从linux和ucos的比较中来看进程这个概念
- Lesson 7(12)神经网络的诞生与发展机器学习基本概念
- Jupyter Notebook 快速入门(上)
- 优酷播控实践:基于规则引擎的投放管控模型
- WebLogic启动失败:java.lang.AssertionError: Could not obtain the localhost address.
- 动手做个DialoGPT:生成式多轮对话模型
- Redis 实用技术——消息发布和订阅
- mysql数据库在什么程序操作_MySQL数据库基本操作(一)
- jmeter+ant+jenkins接口自动环境搭建
- paip.JS的调试--DOM元素的属性与事件绑定
- 安卓和php开发融云聊天室,聊天室
- linux运行Windows模拟器,如何安装和使用Wine,以便在Linux上运行Windows应用程序?...
- 【机器学习】十大 Java 机器学习工具和库
- MySQL实现跨库join查询
- 西南航空创始人:82岁,我心依旧狂野
- 【语义分割】2021-PVT ICCV
- python 来实现文件复制操作
- 电脑能上qq,不能上网,打不开网页---问题分析
- 阿里云王坚“骗”马云10个亿,被骂四年都忍了,最后还回4500亿
热门文章
- SwiftUI模仿微信 聊天list
- 开发无法复现是什么意思_你只写了两行代码,为什么要花两天时间?
- HDU 5265 pog loves szh II(二分)
- selenium4.3 网页长截屏
- web前端期末大作业 基于HTML+CSS+JavaScript绿色的在线教育平台网站响应式企业网站模板
- 用Python一键修改上万个文件名(大哥,别右键重命名了好吗???)
- Audio: 虚拟环绕声技术
- ssh远程登陆阿里云服务器ECS
- 5个简单小技巧为16G的iPhone“扩容”
- Guava ListenableFuture实现异步非阻塞调用