标准输入和输出

程序是由指令+数据组成
程序的数据流有三种:

输入数据流:<–标准输入(stdin),一般默认是键盘
输出数据流:–>标准输出(stdout),一般默认到终端窗口
错误输出流:–>标准错误(stderr),一般默认到终端窗口

标准输入:0
标准输出:1
错误输出:2

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

输出重定向将标准输出(stdout)和标准错误(stderr)重定向到指定位置

格式: 命令 操作符号 文件名

支持的操作符号:
> :把标准输出(stdout)重定向到文件,会覆盖原文件内容
>> :把标准输出(stdout)重定向到文件,会在原有内容基础上,追加内容

说明:上面是讲ll显示的结果输出重定向到文件file中,使用>时,file文件被覆盖了,使用>>时,原文件file和重定向的内容都显示了,是追加内容

2> :把标准错误(stderr)重定向到文件,会覆盖原内容
2>>:把标准错误(stderr)重定向到文件,会在原内容基础上,追加内容

说明:将命令执行的错误结果显示在file文件中,使用2>时,覆盖了原文件file输出的,使用2>>时,原文 件内容和标准错误都显示了,是追加内容

&>:把所有的输出重定向到文件,不管对错都输出到指定位置,覆盖输出
&>>:把所有的输出重定向到文件,不管对错都输出到指定位置,追加输出

说明:使用&>或者&>>时,执行ll时,是标准输出,lls是标准错误,但是不管是哪个的输出都重定向到file 文件中,2>&1和&>,&>>效果一样,2>&1是老版本使用,要在最后使用,才有效果。

command >/path/toshmefile 2>&1
command>>/path/to/somefile 2>&1
理解:A和B,将A输出到B上,如果对了,就正常输出到B上,如果错误了,内容还是输出在B上

set -C:禁止将内容覆盖已有的文件,但是可以追加强制覆盖 :
set +C:允许覆盖

合并多个程序的标准输出
(command ;command)>file

说明:将ll和echo shell的标准输出一起重定向到file文件中,此法只能用于标准输出,
标准错误不能使用

tr:转换和删除字符

tr [option] .. SET1 [SET2]==>[]非必选

选项:
-c:取字符的补集==>取代所有不属于第一字符集的字符
-d:删除所有属于第一个字符集的字符
-s:把连续重复的字符以单独一个字符表示
-t:将第一个字符集对应字符转换为第二字符集对应的字

管道使用符号|来连接命令
command1 |command2 |command3…
1.将命令1的标准输出发送给命令2,作为命令2的标准输入,命令2的标准输出发给command3,作为command3 的标准输入….
2.标准错误默认不能通过管道转发,但是可以利用2>&1或者|&实现
3.最后一个命令会在当前shell 进程的子shell 进程中执行
4.可以组合多种工具

tee命令:

command1 |tee filename | command2
把command1的标准输出保存在文件中,然后管道输入给command2

特点:

1.保存不同阶段的输出
2. 复杂管道的故障排除
3.同时查看和记录输出

练习
、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
ls /etc/issue |tr "a-z" "A-Z" </tmp/issue.out
、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
who am i |tr "a-z" "A-Z"
、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
ls /root/ |tr '\n' ' '
、计算1+++..++100的总和
echo {..}|tr ' ' '+' |bc
、处理字符串“xt.,l jr#!$mn c*/fe uz ”,只保留其中的数字和空格
echo "xt.,l 1 jr#-dmn 2 c*/fe 3 uz 4" |tr -dc '0-9'' '
、将PATH变量每个目录显示在独立的一行
echo $PATH |tr ":" "\n"
、将指定文件中0-9分别替代成a-j
cat /etc/issue | tr '0-9' 'a-j'
、将文件/etc/centos-release中每个单词(由字母组成)显示在独立的一行,并无空行
cat /etc/centos-release | tr " " "\n"
 
 

初学Linux之标准I/O和管道的更多相关文章

  1. 5-1 标准I/O和管道

    标准I/O和管道 程序:指令+数据 读入数据:Input 输出数据:Output 打开的文件都有一个fd: file descriptor (文件描述符) Linux给程序提供三种 I/O 设备 标准 ...

  2. linux的IPC进程通信方式-匿名管道(一)

    linux的IPC进程通信-匿名管道 什么是管道 如果你使用过Linux的命令,那么对于管道这个名词你一定不会感觉到陌生,因为我们通常通过符号"|"来使用管道,但是管道的真正定义是 ...

  3. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

    Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...

  4. Linux IPC(Inter-Process Communication,进程间通信)之管道学习

    1.标准流管道 管道操作支持文件流模式,用来创建链接还有一个进程的管道,通过函数popen和pclose popen的详细介绍在本blog:Linux 多进程学习中有具体介绍 2.无名管道(PIPE) ...

  5. Linux:Day4(上) 文件管理、管道

    文件管理:cp.mv.rm 复制命令:cp cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION] ...

  6. 初学Linux系统最应该做对的4件事情[长文]

    “闲来无事,逛逛贴吧”已经是本人无事消磨时间的最佳选择了.五花八门的问题,各式各样的回答,总能给自己带来无限的欢乐.当然也有些问题值得自己去思考或者回答.之前就有人在贴吧里问到“Linux好难啊!该怎 ...

  7. linux下的进程通信之管道与FIFO

    概念:管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条.管道的一端连接一个进程的输出.这个进程会向管道中放入信息.管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息. 优点:不需 ...

  8. 标准 I/O 和管道

    1.标准输入和输出1>程序:指令+数据(指令服务于数据) 读入数据:input 输出数据:output 2>三种 I/O 设备 Linux 给程序提供三种 I/O 设备 标准输入(STDI ...

  9. linux初学 :linux 常用命令(二)

    压缩和解压命令 gzip/guzip   zip/unzip   tar gzip和gunzip一般可用参数是-r,例: gzip test.txt 压缩文件 gzip -r test 压缩所有tes ...

随机推荐

  1. Cascader 级联选择器无法赋值

    问题: html: <el-cascader v-model="addform.qxvalue" :options="options" :props=&q ...

  2. clipboard兼容各个浏览器,不需要设置权限

    解决方案:用clipboard.js插件 注意要引用clipboard.js文件 案例: 将文本赋值给剪切板 <button class="btn">Copy</ ...

  3. 08_Azkaban案例实践1_Command单一job示例

    1.Azkaban实战 Azkaba内置的任务类型支持command.java 2.Command类型单一job示例 1.创建job描述文件:vi command.job #command.job t ...

  4. FreeRTOS编程风格

    数据类型 基本使用的是标准C里面的数据类型,但是针对不同的处理器,对标准C的数据类型又进行了重定义: 在FreeRTOS中详细的数据类型重定义在portmacro.h这个文件中,具体如下: /* Ty ...

  5. java实战(一)-------jdk环境在windows安装及配置

    1.jdk官方下载 http://www.oracle.com/technetwork/java/javase/downloads/index.html 点击下载windows的版本:jdk-13.0 ...

  6. n诺挑战赛5题解

    Drinking 题意:就是给你n瓶酒的初始伤害值,第几天喝这瓶酒伤害值就是这瓶酒的初始伤害值第几倍,而且他每天喝的瓶数不超过m.要你输出所有的情况,就是他喝(1~n)瓶的伤害值的最小, 思路:就是这 ...

  7. IIS搭建ASP站点

    1. 进入控制面板悬着打开或者关闭Windows功能. 2. 手工选择需要的功能进行安装. 3. 打开运行Internet信息服务(IIS)管理工具. 4. 展开左侧栏看到“Default Web S ...

  8. Sonya and Exhibition

    http://codeforces.com/group/1EzrFFyOc0/contest/1004/problem/B #include<iostream> #include<c ...

  9. flask参数传递

    一. 参数传递两种方式: 1.get请求 request.args.get("key") 获取get请求参数 2.post请求request.form.get("key& ...

  10. 阿里云服务器搭建gitlab

    参考这位大神的博客 https://blog.csdn.net/zhaoyanjun6/article/details/79144175 安装邮件通知服务系统时,报了如下错误:send-mail: f ...