标准io和管道

标准I/O和管道

##一,标准输入和输出##
程序:指令+数据

读入数据:Input

输出数据:Output

打开的文件都有一个fd: file descriptor (文件描述符)

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

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

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

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

I/O重定向:改变默认位置
##二,把输出和错误重新定向到文件 ##
STDOUT和STDERR可以被重定向到文件

命令 操作符号 文件名

支持的操作符号包括:

> 把STDOUT重定向到文件

2> 把STDERR重定向到文件

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

> 文件内容会被覆盖

set -C 禁止将内容覆盖已有文件,但可追加

>| file 强制覆盖

set +C 允许覆盖

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

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

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

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

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

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

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

&> 覆盖重定向

&>> 追加重定向

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

COMMAND >> /path/to/file.out 2>&1

():合并多个程序的STDOUT

( cal 2007 ; cal 2008 ) > all.txt

#三,tr命令 #

tr 转换和删除字符

tr [OPTION]... SET1 [SET2]

选项:

-c –C --complement:取字符集的补集

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

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

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

[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符

[:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符

[:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母

[:xdigit:]:十六进制字符

四,从文件中导入STDIN

使用 < 来重定向标准输入

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

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

该命令会把/etc/issue中的小写字符都转换成大写字符

tr –d abc < /etc/fstab

删除fstab文件中的所有abc中任意字符

cat > file

mage

wangxiaochun

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

cat < file1 > file2

cat < file1 >> file1

把多行发送给STDIN

使用“<<终止词”命令从键盘把多行重导向给STDIN

直到 终止词 位置的所有文本都发送给STDIN

有时被称为就地文本(heretext)

五,管道

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

命令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" wang@example.com

六,管道中 - 符号

示例

将 /home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,
经过管道后,将 tar -cvf - /home 传送给后面的 tar -xvf - , 后面的这个 - 则是取
前一个命令的 stdout, 因此,就不需要使用临时file了

tar -cvf - /home | tar -xvf -

七,重定向到多个目标(tee)

命令1 | tee [-a ] 文件名 | 命令2

把命令1的STDOUT保存在文件中,做为命令2的输入

-a 追加

使用

保存不同阶段的输出

复杂管道的故障排除

同时查看和记录输出

原文地址:https://blog.51cto.com/13586612/2364269

时间: 2024-10-16 19:39:53

标准io和管道的相关文章

第四天标准IO和管道

1.[[email protected] ~]#cmd &> all.log(把输出与错误信息都放到all这个文件里面)[[email protected] ~]#cmd >all.log 2>&1(把错误信息都放到输出里面,这样输出就有输出与错误)[[email protected] ~]#cdm 2>all.log 1>&2(把输出信息放到错误的里面,这个错误的信息就有输出与错误)[[email protected] ~]#cmd &>

5、标准io和管道-实验手册

手册下载 下载:https://www.lanzous.com/i569qcd 密码:3vq0 重点 原文地址:https://blog.51cto.com/14012942/2424016

Linux学习之标准IO 管道 033_7

默认输入为键盘,标准输出为显示器,错误输出为显示器 把标准输出和错误输出重定向到文件: command operator filename operators: >:标准输出重定向 :把ls -R的输出重定向到文件 2>:错误输出重定向 &>:将正确和错误的输出都重定向 同时将正确和错误信息分别导入到不同文件: 以上默认覆盖,如果在文件末尾添加则用>>s 把错误输出重定向到空设备,也就是忽略错误信息 管道: 将前面一条命令执行的结果作为后面一条命令的输入 如: ls

Linux基础管理—— &quot; 标准IO及重定向及管道 &quot;

1.标准输入和输出 一般来说程序是由指令+数据组成:那么就不可避免的要读入和输出数据,即input和output. 打开的文件都有一个fd: file descriptor (文件描述符),可以在/proc/$$/fd中查看当前终端打开的文件数,一个文件描述符就是一个打开的文件. [[email protected] ~]#ll /proc/$$/fd total 0 lrwx------. 1 root root 64 Nov 26 12:27 0 -> /dev/pts/5 lrwx----

IO重定向&管道&元字符

一.glob及IO重定向 bash基础特性:命令补全,路径补全,命令引用 1.bash的其他特性 globbing:文件名统配 动态角度:运行中的内核,在内核之上,由内核支配负责管控的文件系统 静态:内核自己其实也是文件系统上的一个文件而已 2.元字符 匹配模式:元字符: *:匹配任意长度的任意字符 *pa* 包含pa pa*  pa开头 *pa pa结尾, ?:匹配任意单个字符 []:匹配指定范围内的任意单个字符 有几种特殊格式: [a-z],[A-Z],[0-9],[a-z0-9] [abc

标准IO与文件IO 的区别

1.定义 标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标 准函数包和stdio.h头中的定义,具有一定的可移植性.标准IO库处理很多细节.例如缓存分配,以优化长度执行IO等.标准的IO提供了三种类型的缓存.(1)全缓存:当填满标准IO缓存后才进行实际的IO操作.(2)行缓存:当输入或输出中遇到新行符时,标准IO库执行IO操作.(3)不带缓存:stderr就是了. 文件IO:文件IO称之为不带缓存的IO(unbuffered I/O).不带缓存指的是每个read,write都

《UNIX环境高级编程》--5 标准IO库

标准IO库 流和 FILE对象 标准IO库与文件IO区别: 标准IO库处理很多细节,如缓冲区分片.以优化的块长度执行IO等. 文件IO函数都是围绕文件描述符进行.首先打开一个文件,返回一个文件描述符:后续的文件IO操作都使用该文件描述符 标准IO库是围绕流进行的.当用标准IO库打开或者创建一个文件时,就有一个内建的流与之相关联 标准IO库的函数很多都是以 f开头,如fopen.fclose 对于ASCII字符集,一个字符用一个字节表示:对于国际字符集,一个字符可以用多个字节表示. 标准IO文件流

内核IO和标准IO

对于文件的读写操作函数在执行的空间来分,可以分为内核IO(主要在内核中运行)和标准IO(主要在用户空间中运行). 内核IO需要自己创建和管理缓存,而标准IO是自动分类缓存,一般来说,内核IO的效率高于标准IO,但是差距不是很大,考虑移植性,还是建议使用标准IO(只要是支持标准C语言就支持标准IO). 无论是标准IO还是内核IO都是对文件的信息,读写文件的指针进行记录的,调用相应的函数可以进行文件信息的读取和指针的修改. 以下为IO相关的函数的头文件,使用,参数,返回值的说明 linux C语言I

第一天20150829:标准IO 和 系统IO -----stdio and sysio

IO 的实现包括两种实现: 1.stdio标准IO 2.sysio系统IO IO的两种实现方式正常都可以使用.但是,在使用的过程中优先使用stdio标准IO. 首先要了解这两种实现的原理: 1.sysio系统IO:我们作为USER 要与内核对话,那么系统为我们提供了一个sysio,可以直接对话KERNAL. 那么问题就产生了:如果USER使用的平台环境不一样(有的人有linux,有的人用windows),那么由于KERNAL不一样,那么提供给USER的sysio也会不一样 2.所以引申出来一个标