linux bash 重定向,Linux bash中I/O重定向及管道

我们知道,在Linux中一切皆文件。这就意味着,任何一个设备在系统中都有一个文件与之对应。因此我们就可以通过文件来访问设备。对于用户来讲,访问文件就是通过文件名来进行的,用户看到就是一个文件名,但对于内核来说,看到的只能是数字,这个数字就叫做文件描述符,内核就是通过利用文件描述符fd(file descriptor)来访问文件。打开现存文件或者新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

在Linux系统中,默认有三种标准输入输出情况

标准输入:键盘,0

标准输出:显示器,1

标准错误输出:显示器,2

但是如果我们不想实现标准的输入输出怎么办,因此我们可以利用I/O重定向这种机制来实现改变标准位置。下面来说下I/O重定向的具体用法:

IO重定向:

输出重定向:>

特性:覆盖输出

输出重定向:>>

特性:追加输出

# set -C

禁止覆盖输出重定向至已存在的文件;

此时可使用强制输出覆盖:>

# set +C

关闭上述特性

错误输出流重定向:2>,2>>

合并正常输出流和错误输出流:

(1) &>,&>>

(2) COMMAND > /path/to/somefile 2>&1

COMMAND >> /path/to/somefile 2>&1

特殊设备:/dev/null

输入重定向:<

tr命令:

tr [OPTION]... SET1 [SET2]

把输入的数据当中的字符,凡是在SET1定义范围内出现的,统统对位转换成SET2出现的字符;

用法1:

tr SET1 SET2 < /PATH/FROM/SOMELIFE

用法2:

tr SET1 -d < /PATH/FROM/SOMELIFE

注意:不修改原文件

Here Document: <<

cat << EOF

cat >/PATH/TO/SOMELIFE << EOF

管道:连接程序,实现将前一个命令的输出直接定向后一个程序当做输入数据流;

COMMAND1 | COMMOND2 | COMMAND3 |...

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

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

tee命令:

COMMAND | tee /PATH/TO/SOMELIFE

练习题:

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

ee7316e787380f51130b4d5e8028c1f6.png

2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中

a700fbe36086a59e08657a2f5d359f1b.png

3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:

Hello, I am 用户名,the system version is here,pleasehelp me to check it ,thanks!

操作系统版本信息

0e0d8df5f4fe7011d46c966313143c70.png

8a92e1aa6acb0da2d57fe65a184631d1.png

4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开

c1f680e91d51fe689026b4c1d2839dcb.png

5、file1文件的内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和

63baac9b36a01c0a81730c2d9e7c1051.png

51671b86374011ee1b8382b0b5146848.png

6、处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格

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

a52a7f3d9f219f61677964ecfb0b66cd.png

8、删除指定文件的空行

0641141613f311788b5c34663a5ee265.png

9、将文件中每个单词(字母)显示在独立的一行,并无空行

39430c85198407212d86369882d97f87.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值