开发者社区> 学堂小助手> 正文

重定向和管道 | 学习笔记

简介: 快速学习重定向和管道。
+关注继续查看

开发者学堂课程【Linux文件管理命令:重定向和管道】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/591/detail/8347


重定向和管道

 

内容介绍

一、课前回顾

二、重定向

三、管道

四、课后练习

 

一、课前回顾

掌握文件的结构,节点编号,节点表等概念

1.文件的各种操作命令

创建的文件管理工具,创建文件,创建空文件 touch

其他常见工具 cp mv rm

2.软连接,硬链接

链接文件的创建,有软链接和硬链接之分,链接与软链接的根本区别在于,硬链接本身是一个文件,因为它的节点标号是相同的,软链接与原始文件不是一个文件,因为它的节点编号不一样,软链接不会增加链接数,软连接支持目录硬链接不支持目录,软链接支持文件夹,硬链接不支持文件夹。

把一个文件从一个目录移动到另一个目录mv/root/f1/data/f2

如果创建硬链接底层 In/root/f1/root/f2, 在不同的分区中,将一个数据迁移到新的分区中,在迁移时,把数据复制过去的前提要在新的分区中分配一个空闲的节点编号,同时,在节点表里增加一条新的记录,这个新的文件属性是什么,例如他的权限,所有者时间等等,称为文件的源数据,节点表增加完之后,给数据找一个空闲的空间块,将数据填入进去。

创建硬链接是在节点表里不会增加新的记录,节点编号是 10000,后面跟文静的其他属性,权限 root,时间 time 等等,指针指向存放路径,除此之外,文件名不放在此处,文件名放在 root 对应的节点表目录中。

 

二、重定向

1.文件的重定向

包括标准输入重定向,标准输出重定向,以及错误的重定向。

用数字0表示输入,1表示输出,2表示错误

一个命令,如果有标准输出,想要标准重定向在一个别的文件中

 cmd >file

错误信息想要重定向 cmd 2>file,

输入的重定向 cmd<file,

如果想保留原来的旧内容 cmd >>file,cmd 2>>file, 此外,还可以把标准输出和错误统一定向到一个文件中 cmd &>file 或者 cmd >file 2>&1

2. 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:]:十六进制字符

3.从文件中导入 STDIN

使用<来重定向标准输入

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

tr 'a-z' I 'A-Z' </etc/issue

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

tr-d abc</etc/fstab 删除fstab文件中的所有 abc 中任意字符

cat> file

mage

wangxiaochun

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

Cat> filea <fileb

cat 命令是读取键盘输入的内容,同时并在屏幕上输出出来,既有标准输入,拥有标准输出的命令

[root@centos7 data] #cat

aabcef

aabcef

^C

4.单行重定向和多行重定向

输入 [root@centos7 data] #cat> f1 回车后键盘输入内容 aa ,正常要标准输出结果,因为大于号,重定向到 f1 ,回车输入 bb ,f1 中有内容:

单行重定向一会车就重定向,

一下子写很多行统一重定向多行重定向

[root@centos7 data] #cat > f1 <<b

>123

>abc

>xyz

>b

> b

>aaa

>b

[root@centos7 data] #cat f1

123

abc

xyz

b

b

aaa

多行重定向比单行重定向效率高,这种写法经常用于创造一些文件用,编写程序,编写脚本,通过程序自动生成一些文件。

用多行重定向通常用约定俗成的符号,EOF 是文件结束的意思

[root@centos7 data] #cat> f1 <<EOF

>AAA

>BBB

>f1

>XXX

>EOF

[root@centos7 data] #cat f1

AAA

BBB

f1

XXX

多行重定向还有一个好处,还可以,把以前学的变量放入里面,我的主机名是,主机名可以用一个命令来生成,用户信息用一个变量 user 来实现

[root@centos7 data] #cat <f1 <<EOF

>My hostname is ‘hostname‘

My username is $USER

>EOF

My hostname is centos7.localdomain

My username is root

[root@centos7 data] #cat> f1 <<EOF

My hostname is hostname

My username is $USER

EOF

[root@centos7 data] #cat f1

My hostname is centos7.localdomain

My username is root

5.把多行发送给 STDIN

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

直到 终止词 位置的所有文本都发送给STDIN有时被称为就地文本(heretext)

mail -s "Please Call" admin@magedu.com < <END

>Hi Wang,

>Please give me a call when you get in. We may need

>to do some maintenance on server1.

>Details when you're on-site>Zhang

>END

 

三、管道

1.管道

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

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

将命令1的 STDOUT 发送给命令2的 STDIN ,命令2的 STDOUT 发送到命令3的STDIN

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

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

组合多种工具的功能 Is|tr 'a-z''A-Z'

2.管道中-符号

less:一页一页地查看输入 Is-1/etc|less

mail: 通过电子邮件发送输入

echo "test email"|mail -s "test" user@example.com

lpr: 把输入发送给打印机

echo "test print"|lpr|-Pprinter_name

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

tar-cvfF/home|tar-xvf -

3.重定向到多个目标(tee)

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

使用:

保存不同阶段的输出

复杂管道的故障排除

同时查看和记录输出

 

四、练习

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

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

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

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

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

6、删除Windows文本文件中的'^M' 字符

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

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

9、将指定文件中0-9分别替代成 a-j

10、将文件/etc/centos-release 中每个单词(由字母组成)显示在独立一行,并无空行

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
文件重定向 | 学习笔记
快速学习文件重定向。
26 0
重定向和管道 | 学习笔记
快速学习重定向和管道。
12 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
13863 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
13801 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18397 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24952 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20111 0
1783
文章
0
问答
来源圈子
更多
技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载