Linux下的I/O与管道

阅读目录

  • 1. 标准输入输出
  • 2.输入输出重定向
  • 3.tr命令
  • 4. 管道和tee
  • 5.练习

 1、标准输入输出

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

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

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

标准错误 :(STDEER)  — 2   默认输出到终端窗口

(2)输入设备有:键盘、鼠标、扫描仪、摄像头等

输出设备有:打印机、显示器、投影仪等

2、输入输出重定向

〉正确输出

2〉错误输出

&〉全部输出(覆盖重定向)

>文件内容会被覆盖

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

>| file :强制覆盖

set +C 允许覆盖

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

文件不存在时,>和>> 都能创建新文件,文件已存在时 >表示覆盖,>>表示追加

2>&1 把错误的结果转成正确的结果

1>&2 把正确的结果转成错误的结果

():合并多个程序的STDOUT

cal 2007;cal 2008

(cal 2007 ; cal 2008 ) >all.txt

** 3、tr命令   

tr 转换和删除字符

tr  [OPTION] ....SET1[SET2]

选项:

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

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

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

 

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

从文件中导入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离开,可以使用文件来代替键盘的输入

使用“<<终止词”把多行重导向给STDIN

4、管道和tee

使用符号“|”表示,用来连接命令

命令1 | 命令2 | 命令3 ...

组合多种工具的功能:

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

less : 一页一页的查看输入     ls -l /etc | less

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

tee:从标准输入读取,写入到标准输出,并保存到文件中

5、练习

1、计算1+2+3+..+99+100的总和

echo 1+2|bc  echo {1..100}  echo {1...100} |tr " "+|bc

2、 一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:Hello, I am 用户名,The system version is here,please help me to check it ,thanks操作系统版本信息

echo -e Hello,I am `whoami`,The system version is here,Please help me to check it,Thanks."\n"`cat /etc/redhat-release` | mail -s help root

3、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
    who | tr [a-z] [A-Z] > /tmp/who.out

4、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中

cat /etc/issue |tr a-z A-Z > /tmp/issue.out

6、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格

echo "xt.,l 1 jr#hat-releasemn 2 c*/fe 3 uz 4" | tr -cd [:digit:][:blank:]

7、将PATH变量每个目录显示在独立的一行

echo $PATH |tr : "\n"

原文地址:http://blog.51cto.com/13572399/2060869

时间: 2024-11-05 18:43:16

Linux下的I/O与管道的相关文章

linux下的IO重定向与管道相关的知识简析

一.bash重定向部分简单翻译 1.1.bash手册关于重定向短短的注解(因为过于经典,所以摘录出来) 我的翻译要开始毁经典啦... 参考:https://blog.csdn.net/spch2008/article/details/51433353/ https://www.cnblogs.com/lqminn/archive/2013/05/30/3108283.htmlhttps://bash.cyberciti.biz/guide/Here_stringshttps://bbs.csdn

谈谈Linux下的数据流重定向和管道命令

一.标准输入.标准输出.错误输出概述 1.标准输入(stdin)是指令数据的输入,代码为0,使用<或者<<,默认是键盘. 2.标准输出(stdout)是指令执行成功返回的结果,代码为1,使用>或者>>,默认在屏幕显示. 3.标准错误输出(stderr)是指令执行失败返回的错误信息,代码为2,使用2>或者2>>,默认是屏幕. 二.数据流重定向的使用      1."<":指定输入的数据媒介来源(tr 'a-z' 'A-Z' &l

linux下的进程通信之管道

概念:管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条.管道的一端连接一个进程的输出.这个进程会向管道中放入信息.管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息. 优点:不需要加锁,基于字节流不需要定义数据结构 缺点:速度慢,容量有限,只能用于父子进程之间,使用场景狭窄 基本原理: 一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循环利用.当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息.当管道被放满信息的时候,尝试放入信息的进程

在Linux下的进程间通信之匿名管道

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到.所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2 在从内核缓冲区把数据读走. 管道是一种最基本的IPC机制,由pipe函数创建: 调用pippe函数时在内核中开辟一块缓冲去(称为管道)用于通信,它有一个读端,一个写端,然后通过fileds参数传出给用户程序两个文件描述符,fileds[0]指向管道的读端,fileds[1]指向管道的写端,所以管道在用户程序看起来

Linux下进程间通信之命名管道(FIFO)

匿名管道的一个不足之处是没有名字,因此,只能用于具有亲缘关系的进程间通信.在命名管道(FIFO)提出后,该限制得到了克服.FIFO不同于pipe在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中.命名管道是一个设备文件,因此,即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够相互通信. FIFO总是按照先进先出的原则工作,第一个被写入的数据将首先从管道中读出. Linux下有两种方式创建FIFO,一是在shell下交互的建立一个命名管道,二是在程序中使用系统函

【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)

在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通信,在一个进程之中,只能单一的对其写或者是读,而不可以及执行写操作又执行读操作.这一点,我们可以将其想象成我们的水管,分别连着不同的两端,在有水流的时候,一端只能进行输入,另一端只能进行输出,而不可以同时输入和输出. 管道又分为有名管道和匿名管道,两者的区别在于对于匿名管道,其只能在具有亲缘关系的父

对于linux下system()函数的深度理解(整理)

对于linux下system()函数的深度理解(整理) (2013-02-07 08:58:54) 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为是其他的代码影响到这个,或是内核驱动文件系统什么的异常导致,昨天有出现了这个问题,就随手百了一下度,问题出现了,很多人都说system()函数要慎用要少用要能不用则不用,system()函数不稳定?

Linux下模拟多线程的并发并发shell脚本

分享一个在Linux下模拟多线程的并发脚本,使用这个脚本可以同时批量在定义数量的服务器上执行相关命令,比起普通for/while循环只能顺序一条一条执行的效率高非常多,在管理大批服务器时非常的实用.     以下脚本功能是通过scp(也可选rsync)向上千台服务器传更新包,脚本运行后同时在后台有50个scp进程向服务器传包.#!/bin/baship=`cat iplist.txt|grep -v "#"|awk '{print $1}'`   #过滤服务器IPdir='/usr/l

Linux下的多进程编程

1.进程 1.1进程的定义 <计算机操作系统>这门课对进程有这样的描述:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. 1.2进程的概念 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text