34.重定向+管道符

重定向

输出重定向

定义

将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上。

操作符号

> 文件名:表示将标准输出的内容,写到后面的文件中。如果此文件名已存在,将会覆盖原文件中的内容。

 

>> 文件名:表示将标准输出的内容,追加到后面的文件中。如果重定向输出的文件不存在,将会新建该文件

 

举例

命令 > 文件名

在文件中添加内容,并覆盖原内容

[root@bogon Desktop]# cat /proc/cpuinfo > cpu.txt

 

命令 >> 文件名

在文件后追加内容

[root@bogon Desktop]# cat /etc/mime.types >> cpu.txt

 

> 文件名

清空一个文件

[root@bogon Desktop]# > cpu.txt

 

输入重定向

例一 查询文件中的内容

将命令中接收输入的途径,由默认的键盘输入改为其他文件,而不是等待键盘输入。

解释:

将/etc/passwd文件中的内容重定向输入给grep命令。

[root@bogon Desktop]# grep root < /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

 

等价于:

[root@bogon Desktop]# cat /etc/passwd | grep root

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

 

例二 数据库导入

解释:

将test.sql导入mysql数据库中。最典型的、最常用的输入重定向。

[root@bogon Desktop]# mysql -uroot -p123456 < test.sql

 

EOF文件追加

介绍

执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数几行,可以使用echo进行追加,如果是多行内容,再用echo追加就不合适了。所以出现了EOF文件追加。

 

EOF是END OF FILE的缩写,表示自定义终止符。既然是自定义,那么EOF就不是固定的,可以随意设置别名,在Linux中按ctrl+d就可以代表EOF。

用法

cat > 文件名 <<EOF

[root@bogon Desktop]# cat > a.txt <<EOF

> 你好

> python

> linux

> mysql

> mongodb

> redis

> EOF

[root@bogon Desktop]# cat a.txt

你好

python

linux

mysql

mongodb

redis

 

cat > 文件名 <<BBB

[root@bogon Desktop]# cat > b.txt <<BB

> eof

> EOF

> sldk

> linux

> python

> BB

[root@bogon Desktop]# cat b.txt

eof

EOF

sldk

linux

python

 

脚本中使用

[root@bogon Desktop]# vim c.sh

#!/bin/bash

 

cat <<EOF

===================

1.mysql

2.python

3.linux

4.mongodb

5.redis

===================

EOF

 

[root@bogon Desktop]# chmod +x c.sh

[root@bogon Desktop]# ./c.sh

===================

1.mysql

2.python

3.linux

4.mongodb

5.redis

===================

 

错误重定向

定义

将命令执行过程中出现的错误信息 (选项或参数错误) 保存到指定的文件,而不是直接显示到显示器

 

作用是将错误信息保存到文件中。

 

在实际应用中,错误重定向可以用来收集执行的错误信息,为排错提供依据。

对于shell脚本还可以将无关紧要的错误信息重定向到空文件/dev/null中,以保持脚本输出的简洁。

操作符

2>:错误重定向,将覆盖原内容

2>>:错误重定向,将在原内容后追加

1<或<:标准输入

0>或>:标准输出

 

将显示错误的内容加入文件

覆盖原有内容

将显示错误信息的内容,重定向至b.txt文件中。(并覆盖原有内容)

[root@localhost Desktop]# ls a.txt xxx 2> b.txt

a.txt

[root@localhost Desktop]# cat b.txt

ls: cannot access xxx: No such file or directory

 

原内容后追加

将显示错误信息的内容,重定向至b.txt文件中。(在原内容后追加)

[root@localhost Desktop]# ls yyy c.sh 2> b.txt

c.sh

[root@localhost Desktop]# cat b.txt

ls: cannot access yyy: No such file or directory

 

将显示正确的内容加入文件

覆盖原有内容

将显示正确信息的内容,重定向至b.txt文件中。(覆盖原有内容)

[root@localhost Desktop]# ls a.txt ccc > b.txt

ls: cannot access ccc: No such file or directory

[root@localhost Desktop]# cat b.txt

a.txt

 

原内容后追加

将显示正确信息的内容,重定向至b.txt文件中。(在原内容后追加)

[root@localhost Desktop]# ls /etc/passwd yyy >> b.txt

ls: cannot access yyy: No such file or directory

[root@localhost Desktop]# cat b.txt

a.txt

/etc/passwd

 

将显示正确的内容放入一个文件,将显示错误的内容放入另一个文件

覆盖原有内容

[root@localhost Desktop]# ls /etc/passwd yyy.txt > ture.file 2> false.file

[root@localhost Desktop]# cat ture.file

/etc/passwd

[root@localhost Desktop]# cat false.file

ls: cannot access yyy.txt: No such file or directory

 

原内容追加

[root@localhost Desktop]# cat /etc/shadow wangbin.txt >> ture.file 2>> false.file

[root@localhost Desktop]# cat ture.file

/etc/passwd

root:$6$09S2uqoE$RRigKnxqFPirnA82hGPVjwGMPzwRbEDgpxnX6ny9GOfNjNDZqqXQ/9RJPaokXxWqyxaW5kWqAJaGSkfKEuHsu/:18599:0:99999:7:::

[root@localhost Desktop]# cat false.file

ls: cannot access yyy.txt: No such file or directory

cat: wangbin.txt: No such file or directory

 

null黑洞和zero空文件

null黑洞

把/dev/null文件可以看作“黑洞”,所有写入它的内容都永久丢失。/dev/null对命令行和脚本都非常有用。

[root@localhost Desktop]# cat b.txt > /dev/null

[root@localhost Desktop]# cat /dev/null

 

zero空文件

/dev/zero在类似UNIX的操作系统中存在。/dev/zero是一个特殊的文件,当读取内容是,它会提供无限的空字符。典型用法:用它生成一个特点大小的空文件。

 

dd命令

参数:
if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。

of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。

bs 代表字节为单位的块大小。

count 代表被复制的块数

 

举例:

使用dd命令生成一个50M的空文件

[root@localhost Desktop]# dd if=/dev/zero of=b.txt bs=1M count=50

50+0 records in

50+0 records out

52428800 bytes (52 MB) copied, 0.279314 s, 188 MB/s

[root@localhost Desktop]# cat b.txt

 

管道符

| 表示管道符。

 

1、管道命令只处理前一个命令正确输出,不处理错误输出

2、管道右边的命令,必须能够接收标准输入的数据流命令才行

3、管道符可以把两条命令连起来,它可以链接多个命令使用

 

举例:

[root@localhost Desktop]# cat /etc/passwd | grep wang

wangbin:x:1001:1001::/home/wangbin:/bin/bash

wang:x:1002:1003::/home/wang:/bin/bash

 

tee命令

功能:

读取标准输入的数据,并将其内容输出成文件。

语法:

tee [-a] 文件名

一般用管道符拼接其他命令使用

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件

 

覆盖式

[root@localhost Desktop]# df -h | tee test.log

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3        55G  4.0G   51G   8% /

devtmpfs        3.8G     0  3.8G   0% /dev

tmpfs           3.9G     0  3.9G   0% /dev/shm

tmpfs           3.9G   13M  3.8G   1% /run

tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup

/dev/sda1       497M  166M  332M  34% /boot

tmpfs           781M  8.0K  781M   1% /run/user/42

tmpfs           781M   32K  781M   1% /run/user/0

/dev/sr0        4.2G  4.2G     0 100% /mnt

[root@localhost Desktop]# cat test.log

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3        55G  4.0G   51G   8% /

devtmpfs        3.8G     0  3.8G   0% /dev

tmpfs           3.9G     0  3.9G   0% /dev/shm

tmpfs           3.9G   13M  3.8G   1% /run

tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup

/dev/sda1       497M  166M  332M  34% /boot

tmpfs           781M  8.0K  781M   1% /run/user/42

tmpfs           781M   32K  781M   1% /run/user/0

/dev/sr0        4.2G  4.2G     0 100% /mnt

 

追加式

[root@localhost Desktop]# du -sh /dev | tee -a test.log                        

0       /dev

[root@localhost Desktop]# cat test.log

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3        55G  4.0G   51G   8% /

devtmpfs        3.8G     0  3.8G   0% /dev

tmpfs           3.9G     0  3.9G   0% /dev/shm

tmpfs           3.9G   13M  3.8G   1% /run

tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup

/dev/sda1       497M  166M  332M  34% /boot

tmpfs           781M  8.0K  781M   1% /run/user/42

tmpfs           781M   32K  781M   1% /run/user/0

/dev/sr0        4.2G  4.2G     0 100% /mnt

0       /dev

posted @ 2020-12-31 13:14  AI非AI  阅读(186)  评论(0)    收藏  举报