重定向与管道

一、解读重定向

程序必须能够读入输入然后经过加工来显示结果,程序获取的数据也多种多样,程序生产出来的结果也是多种多样的。也就是说程序要有读入也要有输出。

读入数据:Input

输出数据:Output

在linux中一切接文件。这就意味着,任何设备在系统中都有一个与之对应的文件。所以我们就可以通过文件来访问设备。对于用户来说,访问文件就是通过文件名来进行的,用户看到的是文件名,但是,对于内核来说,所有都是数字,这个数字就是文件描述符来访问文件。打开现存文件或新的文件时,内核返回一个fd。读写文件都需要使用fd来制定读写的文件。fd:file descriptor(文件描述符)

linux给程序提供三种I/O设备

标准输入(STDIN) -0 默认接受来自键盘的输入

标准输出(STDOUT)-1 默认输出到终端窗口

标准错误(STDERR)-2 默认输出到终端窗口

I/O重定向:改变默认位置

当执行重定向时我们看到 ls显示的结果被输出到一个新的文件中,如果testdir中没有该文件,那么将自动创建该文件。

 而我又将ll结果重定向到文件中,那么我们会发现,之前的结果没有了,都被覆盖了,所以文件的创建方法是。

1:该文件若不存在,系统会自动建立该文件。

2:当这个文件存在,系统会将这个文件的内容清空,让后将数据写入。

3:如果以>输出到一个已存在的文件,文件会被覆盖。

 如果我们不想覆盖该文件使用>>(累加)就可以了

二、重定向具体用法

STDOUT和TDERR可以被重定向到文件:

命令  操作符号  文件名

支持的操作符号有:

> 把STDOUT重定向到文件

2> 把STDERR重定向到文件

&> 把所有输出重定向到文件

>文件内容会被覆盖

#set -C:禁止将内容覆盖已有文件,但可追加强制覆盖:>|

#set+C:允许覆盖

>>  原有内容基础上,追加内容

把输出和错误重新定向到文件

2>:覆盖重定向错误输出数据流;

2>>:追加重定向错误输出数据流;

标准输出和错误输出各自定向至不同位置:

COMMAND > /path/to/file.out > /path/to/error.out

合并标准输出和错误输出为同一个数据流进行重定向

&>:覆盖重定向

&>>:追加重定向

COMMAND > /path/to/file.out 2>&1(顺序重要)

COMMAND >> /path/to/file.out 2>>&1(顺序重要)

find /etc -name passwd  2> /dev/null

/dev/null垃圾桶黑洞的用法

如果我们知道会出现大量的错误信息而又不想让它显示出来,这个时候使用黑洞设备/dev/null。它可以吃掉导向它的所有信息

():合并多个程序的STDOUT

(cal 2007;cal2008)>all.txt

standard input:<与<<

<就是讲原本需要由键盘输入的数据改由文件内容来替代。如下图所示。

<很有帮助,尤其是在发邮件mail这种命令中。那么<<又是什么意思呢,它代表结束输入的意思。如下图

可以看出end就是结束输入,他并没有显示在文件中。

使用<来重定向标准输入

某些命令能够接受从文件中导入的STDIN:

$tr ‘a-z‘  ‘A-Z‘< /etc/issue

将文件中的小写字母转换为大写字母。

tr -d abc</etc/issue

删除issue文件中所有abc中任意字母。

#cat > filea

按ctrl+d离开,可以使用文件来代替键盘的输入

#Cat > filea < fileb




tr-转换和删除字符

tr[OPTION]...SET1[SET2]

选项:

-c或--complerment:取字符集的补集

-d或--delete:删除所有属于第一字符集的字符

-s或-squeeze-repeats:把连续重复的字符以单独一个字符表示

-t或--truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符

管道

管道(使用符号“|”表示)用来连接命令

命令1 | 命令2 | 命令3 | …

将命令1的STDOUT发送给命令2的STDIN,命令2的 STDOUT发送到命令3的STDIN

STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现

最后一个命令会在当前shell进程的子shell进程中执行用来

组合多种工具的功能

ls | tr ‘a-z‘ ‘A-Z‘

less :一页一页地查看输入:

$ ls -l /etc | less

mail: 通过电子邮件发送输入:

$ echo "test email" | mail \ -s "test" [email protected]

时间: 2024-12-31 17:51:37

重定向与管道的相关文章

Linux基础入门--IO重定向及管道

IO重定向及管道 一直都提到,程序:指令+数据 其实程序也有IO,数据的来源有多个地方:文件.外部 可用于输入的设备:文件(linux一切皆文件) 键盘设备.文件系统上的常规文件加载内容.网卡等: 可用于输出的设备:文件(linux一切皆文件) 显示器.文件系统上的常规文件输出保存.网卡等: 程序的数据流有三种: 输入的数据流:<-- 标准输入(stdin),是键盘: 输出的数据流:--> 标准输出(stdout),显示器: 错误输出流:  --> 错误输出(stderr),显示器: f

10-IO重定向、管道及文本处理工具

bash的快捷键 Ctrl+l : 清屏 相当于clear命令: Ctrl+a:跳转至命令开始处: Ctrl+e:跳转至命令结尾处: ctrl+c :取消命令的执行 ctrl+u:删除命令行首至光标所在处的所有内容: Ctrl+k:删除光标所在处至命令行尾部的所有内容: 4 .bash的的I/O重定向及管道 程序: 指令+数据 读入数据:Input 输出数据:output 打开的文件都有一个fd: file descriptor (文件描述符) 标准输入:keyboard ,0 标准输出:mon

重定向、管道和用户管理练习题

一.重定向.管道的用法练习 1.将/etc/issue文件的内容转换为大写保存到/tmp/issue.out文件中 [[email protected] ~]# tr [a-z] [A-Z] < /etc/issue > /tmp/issue.out  [[email protected] ~]# cat /tmp/issue.out  \S KERNEL \R ON AN \M 或者 [[email protected] ~]# tr '[:lower:]' '[:upper:]' <

linux的输入输出重定向和管道

1. 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux为了跟踪打开文件,而分配的一个数字,(人是根据文件名追踪文件,系统则是根据文件描述符),这个数字有点类似c语言操作文件时候的指针,通过指针就可以实现文件的读写操作. 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值. linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出st

linux重定向和管道的使用

bash的I/O重定向及管道 程序是由程序+指令组成:或者是数据结构+算法 程序数据来自哪里,处理的结果又存放于哪里? 程序必须能够读入输出然后经过加工来产生结果:程序获取的数据可以使数据也可以hi变量.数据.列表文件等等,程序生产出来的结果可以是变量.数据.列表.文件等.也就是说,程序都有读入数据和输入数据的需求. 读入数据:Input 输出数据:Output 通常对于程序来说,输入输出数据可以是键盘.鼠标.显示器等:当然有时候输入的数据是程序自身内部所具有的,但我们认为这些数据应该是通过外部

linux重定向及管道

1.bash的的I/O重定向及管道        程序:指令+数据            读入数据:Input            输出数据:Output        打开的文件都有一个fd: file descriptor (文件描述符) 标准输入:keyborad, 0        标准输出:monitor, 1        标准错误输出:monitor, 2 I/O重定向:改变标准位置 输出重定向:COMMAND > NEW_POS, COMMAND >> NEW_POS 

Linux目录结构、bash的基础特性、I/O重定向及管道

Linux目录结构 LSB(Linux StandardsBase)是一套核心标准,它保证了LINUX发行版同LINUX应用程序之间的良好结合规定了一系列标准,其中包括文件系统层级结构标准(FHS Filesystem Hierarchy Standard) Linux系统根目录下有众多子目录,这些目录都参照了FHS协定 / ├── bin ├── boot ├── dev ├── etc ├── home ├── lib ├── lib64 ├── lost+found ├── media ├

Linux基础概念-----Linux I/O重定向 ,管道

标准输入:键盘 标准输出:显示器 错误输出:显示器 FD:文件描述符:让程序可以文件交互,并且便于内核识别文件,打开的每一个文件都有一个描述符 程序在和文件交互式,通过文件描述符来进行交互,而非文件名,文件名是方便用户分别文件. Linux一切皆文件,所以标准输入,标准输出都有各自的文件描述符 标准输入描述符:0 标准输出描述符:1 标准错误输出描述符:2 将其默认数据流改为其他设备:IO重定向 输出重定向 > 覆盖重定向 >> 追加重定向 /dev/null  黑洞 只针对当前Shel

Linux 重定向以及管道讲解

1.I/O重定向:input输入,output输出,我们先来看一下那些是输入那些是输出: 输入的数据流:<----标准输入(stdin)    键盘: 输出的数据流: ---->标准输出(stdout) 显示器: 错误的输出流: ---->错误输出 (stderr)显示器: 2.在shell里面标准输入和标准输出以及错误输出都分别有一个代号. 标准输入:0 标准输出:1 错误输出:2 3.重定向 从标准输入读入,标准输出输出,异常报告到标准错误. 以 > 改变标准输出 Comman

Linux中重定向、管道和grep命令总结

今天我们来讲下Linux中的重定向.管道和grep命令.由于重定向和管道知识点比较少,但是又比较重要所以和grep命令一起讲. 在将重定向我们先讲下系统的标准输入和输出.在Linux中标准输入(STDIN 0)对应设备:键盘:标准输出(STDOUT 1)和标准错误输出(STDERR 2)对应设备:显示器.重定向就是将标准输入输出重新定位到指定位置或者设备中(比如:文件). I/O重定向 set –C 禁止对已存在的文件进行覆盖重定向 强制覆盖>| set +C 关闭上述功能 输出重定向: >: