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

浙公网安备 33010602011771号