Linux——标准I/O以及管道

标准I/O以及管道



目录

一、什么是I/O

二、什么是管道

三、三种I/O设备

四、把I/O输出错误重定向入文件

五、tr

六、从文件中导入STDIN

七、使用管道链接命令

八、tee



一、什么是I/O

I/O(input/output),即输入/输出端口。

每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信息。CPU与外部设备、存储器的连接和数据交换都需要通过接口设备来实现,前者被称为I/O接口,而后者则被称为存储器        接口。存储器通常在CPU的同步控制下工作,接口电路比较简单;而I/O设备品种繁多,其相应的接口电路也各不相同,因此,习惯上说到接口只是指I/O接口。

二、什么是管道

管道是Linux支持的最初UnixIPC形式之一,管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有        管道所具有的功能外,它还允许无亲缘关系进程间的通信。

具有以下特点:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);单独构成一种独立        的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。数据的读出        和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。

三、三种I/O设备

1、标准输入(STDIN)-0

输入设备:键盘、鼠标、麦克风、摄像头、扫描仪

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

输出设备:显示器、打印机、音响、耳机

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

四、把I/O输出错误重定向入文件

1、STDOUT和STDERR可以被重定向到文件:

command  操作符号  file

2、支持的操作符号包括:
        >    把STDOUT重定向到文件
        2>   把STDERR重定向到文件
        &>  把所有输出重定向到文件
    3、> 文件内容会被覆盖
        set -C: 禁止将内容覆盖已有文件,但可追加
        >| file:强制覆盖
        set +C: 允许覆盖

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

5、2>: 覆盖重定向错误输出数据流
    6、2>>: 追加重定向错误输出数据流
   7、 标准输出和错误输出各自定向至不同位置
        COMMAND > /path/to/file.out2> /path/to/error.out
    8、合并标准输出和错误输出为同一个数据流进行重定向
        &>覆盖重定向
        &>> 追加重定向
        COMMAND > /path/to/file.out2>&1 (顺序很重要)
        COMMAND >> /path/to/file.out2>&1
    9、():合并多个程序的STDOUT
        (cal2007;cal2008)> all.txt

五、tr

1、tr转换和删除字符
    2、tr[OPTION]... SET1 [SET2]
    3、选项:
        -c–C --complement:取字符集的补集
        -d--delete:删除所有属于第一字符集的字符
        -s--squeeze-repeats:把连续重复的字符以单独一个字符表示
        -t--truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
    4、通配符

[:alnum:]:字母和数字

[:alpha:]:字母

[:cntrl:]:控制(非打印)字符

[:digit:]:数字

[:graph:]:图形字符

[:lower:]:小写字母

[:print:]:可打印字符

[:punct:]:标点符号

[:space:]:空白字符

[:upper:]:大写字母

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

六、从文件中STDIN

1、使用<来重定向标准输入
    2、某些命令能够接受从文件中导入的STDIN
        tr‘a-z’‘A-Z’</etc/issue
        该命令会把/etc/issue中的小写字符都转换成写写字符
    3、 tr–d abc< /etc/fstab删除fstab文件中的所有abc中任意字符
    4、cat > file
        mage
        wangxiaochun
        按ctrl+d离开,可以使用文件来代替键盘的输入

5、cat > filea< fileb

六、使用管道链接命令

1、管道(使用符号“|”表示)用来连接命令
        命令1 | 命令2 | 命令3 | …
            将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
            STDERR默认不能通过管道转发,可利用2>&1 或|& 实现
            最后一个命令会在当前shell进程的子shell进程中执行用来
            组合多种工具的功能
            ls | tr 'a-z' 'A-Z'

2、less :一页一页地查看输入
        ls-l/etc|less

3、mail:通过电子邮件发送输入
        echo"testemail"|mail-s "test"[email protected]

4、lpr:把输入发送给打印机
        echo"testprint"|lpr-Pprinter_name

5、- 符号

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

tar -cvf-/home | tar -xvf-

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

1、命令1 | tee[-a ] 文件名| 命令2
        把命令1的STDOUT保存在文件中,做为命令2的输入
        -a 追加

2、使用:
        保存不同阶段的输出
        复杂管道的故障排除
        同时查看和记录输出

原文地址:http://blog.51cto.com/13572742/2060740

时间: 2024-10-16 05:43:01

Linux——标准I/O以及管道的相关文章

LINUX的文件链接,管道和用户组

inode节点: inode node 索引节点表中包含文件系统所有文件列表 inode文件的编号,类似与用户的id,在同一个分区上唯一标示一个文件 inode包含文元数据: 文件的字节数 文件的UID,GID 文件的读写执行权限 文件的时间戳 链接数 文件数据block的位置 ls -i 查看文件节点编号,第一列数据即是文件的inode号 stat:命令可以查看文件的inode信息 硬链接: 每个目录引用相同的 inode 号 创建时链接数递增 链接文件和原文件元数据保持不变,数据保持不变 删

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

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

Linux程序设计学习笔记----进程间通信——管道

转载请注明出处: http://blog.csdn.net/suool/article/details/38444149, 谢谢! 进程通信概述 在Linux系统中,进程是一个独立的资源管理单元,但是独立而不孤立,他们需要之间的通信,因此便需要一个进程间数据传递.异步.同步的机制,这个机制显然需要由OS来完成管理和维护.如下: 1.同一主机进程间数据交互机制:无名管道(PIPE),有名管道(FIFO),消息队列(Message Queue)和共享内存(Share Memory).无名管道多用于亲

linux入门基础——linux多命令协作:管道及重定向

linux多命令协作:管道及重定向 不要重复发明轮子 开源文化的核心理念之一就是不要重复发明轮子,很多的开源软件都是现有软件.代码.功能的重新组合,就好像通过零件装配机器一样,源代码的开发和共享让这成为了可能,同时也大大的提供了效率和生产力. 管道和重定向 在linux系统中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现一个或者多个很简单的功能,可以通过将不同功能的命令组合在一起使用,以达到完成某个复杂功能的目的.组合命令的技术是管道和重定向. linux中,几乎所有命令的返回

Linux文件管理、重定向和管道

文件的通配符: * 匹配零个或多个字符 ?匹配任何单个字符 是1个字符 ~ 当前用户的家目录 ~username 用户家目录 ~+ 前一个工作目录 [0-9] 匹配这个范围数字 [a-z] [A-Z] [wxc] 匹配列表中的任何一个字符 [^wxc] 匹配列表中的所有字符以外的字符 可以man 7  帮助 glob 更精确: [[:digit:]] 任意数字,相当于0-9 [[:lower:]] 任意小写字母 [[:upper:]] 任意大写字母 [[:alpha:]] 任意大小写字母 [[:

标准I/O与管道;用户、组和权限;文件处理工具及正则表达式总结

四.标准I/O与管道标准输入和输出程序:指令+数据读入数据:Input输出数据:Output?打开的文件都有一个fd: file descriptor (文件描述符)?Linux给程序提供三种I/O设备?标准输入(STDIN)-0 默认接受来自键盘的输入?标准输出(STDOUT)-1 默认输出到终端窗口?标准错误(STDERR)-2 默认输出到终端窗口?I/O重定向:改变默认位置把输出和错误重新定向到文件?STDOUT和STDERR可以被重定向到文件命令 操作符号 文件名支持的操作符号包括: 把

标准I/O与管道

标准I/O与管道 标准输入和输出 读入数据:Input 输出数据:Output Linux给程序提供三种I/O设备 标准输入(STDIN)-0 默认接受来自键盘的输入 标准输出(STDOUT)-1 默认输出到终端窗口 标准错误(STDERR)-2 默认输出到终端窗口 I/O重定向:改变默认位置 把输出和错误重新定向到文件 STDOUT和STDERR可以被重定向到文件 命令 ~ 操作符号 ~ 文件名 支持的操作符号包括: 把STDOUT重定向到文件> 2> 把STDERR重定向到文件 &

Linux 标准目录结构

Linux 标准目录结构 初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp --- 用户所有服务 httpd samba user1 user2 bin --- 系统启动时需要的执行文件(二进制) sbin --- 可执行程序的目录,但大多存放涉及系统管理的命令.只有root权限才能执行 proc --- 虚拟,存在linux内核镜像:保存所有内核

linux 标准输入输出

转:linux 标准输入输出 文件描述符是一个简单的正整数,用以标明每一个被进程所打开的文件和socket.最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应 0表示标准输入1表示标准输出2表示标准错误输出 >默认为标准输出重定向,与 1>相同 2>&1意思是把 标准错误输出 重定向到 标准输出. &>file意思是把 标准输出 和 标准错误输出 都重定向到文件file中 2>&1