目的

掌握错误输出、标准输出、标准输入使用;重定向和管道的使用方法。

前提

linu系统中的三种I/O设备所代表的编号分别是:标准输入(STDIN),文件描述符为0,默认从键盘获取输入;标准输出(STDOUT),文件描述符为1,默认输出到显示屏;标准错误(STDERR),文件描述符为2,默认输出到显示屏。

I/O重定向就是为了改变默认输入、输出的位置:

:表示标准输出覆盖重定向;

:表示标准输出追加重定向;

2>:表示错误输出覆盖重定向;

2>>:表示错误输出追加重定向;

&>:表示合并标准输出和错误输出覆盖重定向;

&>>:表示合并标准输出和错误输出追加重定向;

2>&1:表示意义同&>即合并标准输出和错误输出覆盖重定向;

<:输入重定向;

<<:多行输入;

set -C命令:禁止覆盖重定向;

|:强制覆盖重定向(与set -C相反);

set +C命令:解除禁止覆盖重定向的设置;

​ 管道符(|)作用是把前一个命令的执行结果当做后一个命令的输入。

使用方式

1、重定向

【例1】把/etc/fstab文件内容重定向到/tmp目录下文件名为fstab.out

[root@Magedu ~]# cat /etc/fstab > /tmp/fstab.out

【例2】把hello world追加到/tmp/fstab.out文件尾部

[root@Magedu ~]# echo "hello world" >>/tmp/fstab.out 

【例3】禁止覆盖重定向和强制重定向

[root@Magedu ~]# set -C

[root@Magedu ~]# echo "hello magedu" >/tmp/fstab.out

-bash: /tmp/fstab.out: cannot overwrite existing file

设置禁止覆盖重定向后,可强制覆盖重定向

[root@Magedu ~]# echo "hello magedu" >| /tmp/fstab.out

[root@Magedu ~]# cat /tmp/fstab.out

hello magedu

【例4】解除禁止覆盖重定向设置

[root@Magedu ~]# set +C

[root@Magedu ~]# echo "www.magedu.com" > /tmp/fstab.out

【例5】把标准错误覆盖重定向到which.out文件

先看下只重定向标准输出的情况:

[root@Magedu ~]# whch cat  > /tmp/which.out

bash: whch: command not found...

[root@Magedu ~]# cat /tmp/which.out

再看把标准错误重定向的情况:

[root@Magedu ~]# whch cat  2> /tmp/which.out

[root@Magedu ~]# cat /tmp/which.out

bash: whch: command not found...

【例6】把标准错误和标准输出分别重覆盖定向到不同的文件里,即标准错误重定向到falt.txt文件,标准输出重定向到correct.txt

[root@Magedu ~]# which cat 2> falt.txt > correct.txt

[root@Magedu ~]# cat correct.txt 

/usr/bin/cat

[root@Magedu ~]# cat falt.txt 



[root@Magedu ~]# wih cat 2> falt.txt > correct.txt

[root@Magedu ~]# cat falt.txt 

bash: wih: command not found...

[root@Magedu ~]# cat correct.txt 

【例7】合并标准输出和标准错误覆盖重定向到out.txt文件里

[root@Magedu ~]# which cat &> out.txt

[root@Magedu ~]# cat out.txt

/usr/bin/cat

[root@Magedu ~]# hich cat &>> out.txt

[root@Magedu ~]# cat out.txt

/usr/bin/cat

bash: hich: command not found...

【例8】&>等价于2&>1,功能同上例

[root@Magedu ~]# which cat > out.txt 2>&1 

[root@Magedu ~]# cat out.txt 

/usr/bin/cat

[root@Magedu ~]# wich cat >> out.txt 2>&1 

[root@Magedu ~]# cat out.txt 

/usr/bin/cat

bash: wich: command not found...

2、输入重定向和tr命令

tr命令是把字符集1转换为字符集2

【例9】用输入重定向的方式,把所有小写字母转换为大写

[root@Magedu ~]# cat /etc/issue

\S

Kernel \r on an \m



[root@Magedu ~]# tr a-z A-Z </etc/issue

\S

KERNEL \R ON AN \M

从文件导入标准输入

【例10】把out.txt文件里的内容,写到file.txt文件里

[root@Magedu ~]# cat >file.txt <out.txt

[root@Magedu ~]# cat file.txt 

/usr/bin/cat

bash: wich: command not found...

多行输入:<<终止词

【例11】屏幕随便输入几行内容,遇到END字样结尾后,屏幕内容自动保存在f1.txt里

[root@Magedu ~]# cat > f1.txt <<END

> first

> scond

> third

> END

[root@Magedu ~]# cat f1.txt 

first

scond

third

【例12】使用mail命令root给lsj普通用户发邮件,要求邮件标题为”help”,邮件正文如下:

Hello, I am 用户名,The system version is here,please help me to check it thanks!

操作系统版本信息

[root@Magedu ~]# mail -s "help" lsj <<EOF

> Hello, I am `who`,The system version is here,please help me to check it thanks!

> `cat /etc/redhat-release`

> EOF

[root@Magedu ~]# su - lsj

Last login: Thu May 31 00:29:49 EDT 2018 on pts/0

[lsj@Magedu ~]$ mail

Heirloom Mail version 12.5 7/5/10.  Type ? for help.

"/var/spool/mail/lsj": 7 messages 1 new 2 unread

    1 root                  Mon May 21 06:37  20/598   "ha"

    2 root                  Mon May 21 06:39  19/591   "ha"

    3 root                  Mon May 21 06:39  19/592   "ha"

    4 root                  Mon May 21 07:41  22/810   "he"

U  5 root                  Tue May 22 05:24  23/654   "he"

    6 root                  Tue May 22 05:25  22/648   "he"

>N  7 root                  Thu May 31 02:47  20/798   "he"

& 7

Message  7:

From root@Magedu.localdomain  Thu May 31 02:47:53 2018

Return-Path: <root@Magedu.localdomain>

X-Original-To: lsj

Delivered-To: lsj@Magedu.localdomain

Date: Thu, 31 May 2018 02:47:53 -0400

To: lsj@Magedu.localdomain

Subject: help

User-Agent: Heirloom mailx 12.5 7/5/10

Content-Type: text/plain; charset=us-ascii

From: root@Magedu.localdomain (root)

Status: R



Hello, I am root     pts/0        2018-05-30 21:20 (172.18.116.232)

root     pts/1        2018-05-31 00:25 (172.18.116.232),The system version is here,please help me to check it thanks!

CentOS Linux release 7.5.1804 (Core) 



& q

Held 7 messages in /var/spool/mail/lsj

[lsj@Magedu ~]$ 

3、管道符:|

【例13】把echo输出的内容,传递给tr命令,实现小写字母转换为大写字母

[root@Magedu ~]# echo "this is test line" | tr a-z A-Z

THIS IS TEST LINE

【例14】一页一页的查看输入

[root@Magedu ~]# ls -l /etc |less

total 1560

drwxr-xr-x.  3 root  root      101 May 14 11:29 abrt

-rw-r--r--.  1 root  root       16 May 14 11:44 adjtime

-rw-r--r--.  1 root  root     1518 Jun  7  2013 aliases

-rw-r--r--.  1 root  root    12288 May 14 11:46 aliases.db

...(省略)

-rw-r--r--.  1 root  root      524 Apr 12 15:23 auto.misc

:

文章来源于网络,侵删!