linux 管道 重定向 区别,Linux重定向和管道的基础学习

重定向和管道

本章节内容:

三种I/O设备

把I/O频道重定向入

使用管道链接命令

一、标准输入和输出:

程序:指令+数据

读入数据:Input;输出数据:Output

打开的文件都有一个fd:file descriptor (文件描述符)

Linux给程序提供三种I/O设备:

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

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

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

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

不是所有的标准输入都有标准输出;标准输出是默认的当前终端窗口。

三种合并正常输出流和错误输出流的方法:

a3e156785ed002e654382d61387529ef.png

02dfb55d2214f7fd7e57e28fd3e4bca2.png

二、将输出和错误输出重新定向到文件:

标准输出和错误输出可以被重定向到文件:

命令操作符号文件名

支持的操作符号包括:

标准输出和错误输出可以各自定向至不同位置;

了解重定向的使用:

1、>把标准输出重定向到文件(文件内容会被覆盖);>>原有内容基础上,追加内容;

8f506f937b5e0121e3c9827280157871.png

e8fbbcafea73e93f812b066e88253b13.png

2、2>把错误输出重定向到文件;2>>:追加重定向错误输出数据流;

20158e25d2645161c306bf5646bf502b.png

3、&>把合并所有输出重定向到文件;&>>:追加重定向

COMMAND > /path/to/file.out2> &1(顺序很重要)

COMMAND >> /path/to/file.out2>> &1

新的写法(&>),入下图:

59f09be461bbcf83502ba3359955f743.png

以前旧的写法(2>&1),入下图:

41afe72636f5f255e1441b20d5d601cb.png

禁止覆盖:(针对当前终端有效)

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

445688efb3c88cbc40d1604cede2c7e2.png

强制覆盖:>|

1a87af24b71357cd296a4a009e0bc8db.png

# set +C:允许覆盖

4、合并多个程序执行的结果重定向,命令格式为:(COMMAND;COMMAND)> /path/filename

3c61da47c41a3afca9ddb61107bb9698.png

5、使用字符给系统用户写邮件,格式:# mail –s标题用户名

回车后,等待内容的输入,结束以“.”,切记.的前面不能够空格。

dc6dd582caa8066e9866d78a7983322c.png

用户chesfer查看来自root用户发给其的邮件,如下图:

4e09b59a8d775e5a7087184b0cabe001.png

6、多行输入重定向的开始/结束符:<EOF

e220c2d3feee56375a31eb70ff6ccdf3.png

三、认识和使用tr命令:

tr–转换和删除字符

使用格式: tr[OPTION]...SET1 [SET2]

使用选项:-c或——complerment:取字符集的补集

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

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

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

0770bb5c182d3c0e8087b03a725efb28.png

tr –c使用:如下图,将不是a和b的字母全部给转换成n

3c48d13f49ae13911d91f775a5f2e781.png

四、管道:只能接收标准输出,而不能接收错误输出。

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

命令1 |命令2 |命令3 |…:将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN;

STDERR默认不能通过管道转发,可利用2>&1 | 或|& 实现(无法判断前面的COMMAND是否成功);

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

1、组合多种工具的功能使用,如下:

eg: ls /etc/ | tr 'a-z' 'A-Z'

cb41969153c92329dd1e4ac1f604d740.png

2、# who | tee | tr 'a-z' 'A-Z'

8dd71e7940ef3f1f16c0538ab43bd02e.png

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

489a72d62409bec6d1d27c2824ed6e15.png

练习与作业:

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

tr [[:lower:]] [[:upper:]] < /etc/issue >//tmp/issue.out

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

# w | tr [[:lower:]] [[:upper:]] > /tmp/who.out

3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:Hello,I am 用户名,the system version is here,pleasehelp me to check it ,thanks!

操作系统版本信息

mail help root <

cb6f7439f25a4f7d61c38ae16daa47bf.png

874492432e238840790ed81865c8beba.png

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

# ls/root/ | tr ‘\n’ ‘ ’

ebae86cf60fc4aeb06a392940a1b9f39.png

作业:

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

b09e03368e7822b83d02fbe91568e4fd.png

# cat file1 |tr  " " "+ " | bc

121029a87b7192154af5f917714e8317.png

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

#cat-A f11.ext

#dos2unix f11.txt

33d84d2470ba744927a797da8502c30f.png

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

# catfiles | tr -d [[:alpha:]][[:punct:]]

4071f9e5939a68cbdb1d33b0a6c5ca88.png

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

#echo $PATH | tr ":" "\n"

e3bfc445f55e01e90547a50176eb812c.png

9、删除指定文件的空行

e46427d72e4fba1145d520d33765397b.png

# #cat fs | tr -s [[:space:]]

784bc3449a146688bdbe21baadadeef5.png

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

d3a53264dc3b26641747bb434156f5b1.png

#cat fs | tr [[:space:]] '\n' | tr -s [[:space:]]

e7fb4e1cf1d42f568aeef898f369cf72.png

11、软、硬链接区别

软链接:两个文件名拥有两个不同的inode节点号;指向两块不同的数据块;两个文件名是一个“主 从”的关系;其中任何一个删除,对另外的文件名没有任何的影响;每增加一个文件名,inode节点号上的链接数增加一个,反之,删除一个文件名,链接数减一,直至为零,inode节点号和数据块才会被回收;链接的文件名数据块上只是存放源文件名的访问路径;可以对目录进行软链接;可以跨分区创建链接;可以对不存在的文件名创建链接;链接方式上为ln -s 源文件 链接名

硬链接:两个/多个文件名只能拥有同一个inode节点号;指向同一块的数据块;两个或多个文件名是一个“平等”的关系;其中任何的一个删除掉,另外的一个虽然存在,但其指向的链接是一个无效的链接;不能够对目录进行链接;不能跨分区创建链接;不能够对不存在的文件名创建链接;链接方式上为ln 源文件 链接名