数据流重定向到文件(正常文件和移除(到/dev/null))
> standard output
2> standard error output
> filename 2>&1 或 &> filename stdout and stderr
>> append
< standard input
数据流双重定向(到屏幕及文件)
tee
例:
[root@localhost /data/mysql/mysql3306]#find / -name mysql
find: ‘/run/user/42/gvfs’: Permission denied
/etc/rc.d/init.d/mysql
/usr/lib64/perl5/vendor_perl/auto/DBD/mysql
/usr/lib64/perl5/vendor_perl/DBD/mysql
/usr/lib64/mysql
/usr/include/mysql
/usr/local/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/bin/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/include/mysql
/opt/mysql
[root@localhost /data/mysql/mysql3306]#find / -name mysql 2>/dev/null
/etc/rc.d/init.d/mysql
/usr/lib64/perl5/vendor_perl/auto/DBD/mysql
/usr/lib64/perl5/vendor_perl/DBD/mysql
/usr/lib64/mysql
/usr/include/mysql
/usr/local/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/bin/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/include/mysql
/opt/mysql
# 2代表标准错误输出(报错信息),重定向 > 到/dev/null意即不显示这部分信息到屏幕
[root@localhost /data/mysql/mysql3306]#find / -name mysql >/dev/null
find: ‘/run/user/42/gvfs’: Permission denied
# >/dev/null默认为标准输出重定向到/dev/null,所以屏幕上只显示了报错信息
[root@localhost /data/mysql/mysql3306]#find / -name mysql >000000
find: ‘/run/user/42/gvfs’: Permission denied
[root@localhost /data/mysql/mysql3306]#cat 000000
/etc/rc.d/init.d/mysql
/usr/lib64/perl5/vendor_perl/auto/DBD/mysql
/usr/lib64/perl5/vendor_perl/DBD/mysql
/usr/lib64/mysql
/usr/include/mysql
/usr/local/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/bin/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/include/mysql
/opt/mysql
# 同上,错误信息默认显示到了屏幕,标准输出到000000。
[root@localhost /data/mysql/mysql3306]#find / -name mysql &>/dev/null
[root@localhost /data/mysql/mysql3306]#find / -name mysql &>000000
[root@localhost /data/mysql/mysql3306]#cat 000000
find: ‘/run/user/42/gvfs’: Permission denied
/etc/rc.d/init.d/mysql
/usr/lib64/perl5/vendor_perl/auto/DBD/mysql
/usr/lib64/perl5/vendor_perl/DBD/mysql
/usr/lib64/mysql
/usr/include/mysql
/usr/local/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/bin/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/include/mysql
/opt/mysql
# &> 表示将标准输出和标准错误输出,同时放到/dev/null屏幕没有显示,放置到000000,之后可以查看到原本应该显示到屏幕的信息()
[root@localhost /data/mysql/mysql3306]#find / -name mysql >000000 2>&1
[root@localhost /data/mysql/mysql3306]#cat 000000
find: ‘/run/user/42/gvfs’: Permission denied
/etc/rc.d/init.d/mysql
/usr/lib64/perl5/vendor_perl/auto/DBD/mysql
/usr/lib64/perl5/vendor_perl/DBD/mysql
/usr/lib64/mysql
/usr/include/mysql
/usr/local/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/bin/mysql
/opt/mysqlmysql/mysql-5.7.18-linux-glibc2.5-x86_64/include/mysql
/opt/mysql
#作用同上。
即将标准输出和标准错误输出可以使用 > filename 2>&1 或者 &> filename 二者等效。
同理还可以将stdout和stderr分别保存到不同文件中:
[root@localhost /data/mysql/mysql3306]#find / -name mysql >000000 2>111111
>到文件默认为新建文件或覆盖文件原来内容,>>可以追加内容到原文件内
[root@localhost /data/mysql/mysql3306]#cat >> abcd
afternoon
[root@localhost /data/mysql/mysql3306]#cat abcd
today
morning
afternoon
[root@localhost /data/mysql/mysql3306]#find /data -name mysql >>abcd
[root@localhost /data/mysql/mysql3306]#cat abcd
today
morning
afternoon
/data/backup/zst.sql/2017-07-05_20-05-41/mysql
/data/mysql
/data/mysql/mysql3306/olddata/mysql
/data/mysql/mysql3306/data/mysql
/data/mysql/mysql3307/data/mysql
/data/mysql/mysql3308/data/mysql
cat 命令可以查看文件内容,还可以通过数据流重定向获取键盘输入呢^_^
[root@localhost /data/mysql/mysql3306]#cat > abc
happy day
#输入happy day后按ctrl+d结束输入
[root@localhost /data/mysql/mysql3306]#cat > abc
happy day
[root@localhost /data/mysql/mysql3306]#cat >> abc
today
#将today加到刚的abc内容之后
[root@localhost /data/mysql/mysql3306]#cat abc
happy day
today
从其他文件获取数据
[root@localhost /data/mysql/mysql3306]#cat >abcd <111111
[root@localhost /data/mysql/mysql3306]#cat abcd
find: ‘/run/user/42/gvfs’: Permission denied
<< 用来指定结束输入字符
[root@localhost /data/mysql/mysql3306]#cat > abcd << 00
> today
> morning
> 00
#上三行中的>为系统提示符,不是键盘输入的内容
[root@localhost /data/mysql/mysql3306]#cat abcd
today
morning
#文件内容也不包含结束字符
tee双重定向
[root@localhost /data/mysql/mysql3306]#last | tail -5 | tee last.list | cut -d ' ' -f1
stone
(unknown
reboot
wtmp
[root@localhost /data/mysql/mysql3306]#cat last.list
stone :0 :0 Sun May 7 14:02 - 14:06 (00:03)
(unknown :0 :0 Sun May 7 14:01 - 14:02 (00:01)
reboot system boot 3.10.0-327.el7.x Sun May 7 14:00 - 14:35 (00:35)
wtmp begins Sun May 7 14:00:07 2017
#将last命令的输出:截取末5行放置到文件中,同时将输出到屏幕部分只提取第一列
[root@localhost /data/mysql/mysql3306]#ls -l | tee test
total 16
drwxr-xr-x 8 mysql mysql 4096 Jul 12 23:13 data
-rw-r--r-- 1 root root 269 Jul 27 18:49 last.list
drwxr-xr-x 2 mysql mysql 143 Jul 12 23:13 logs
-rw-r--r-- 1 mysql mysql 2789 Jul 12 10:15 my3306.cnf
drwxr-xr-x 7 mysql mysql 4096 Jul 5 20:29 olddata
-rw-r--r-- 1 root root 0 Jul 27 18:52 test
drwxr-xr-x 2 mysql mysql 6 Jul 12 13:11 tmp
[root@localhost /data/mysql/mysql3306]#cat test
total 16
drwxr-xr-x 8 mysql mysql 4096 Jul 12 23:13 data
-rw-r--r-- 1 root root 269 Jul 27 18:49 last.list
drwxr-xr-x 2 mysql mysql 143 Jul 12 23:13 logs
-rw-r--r-- 1 mysql mysql 2789 Jul 12 10:15 my3306.cnf
drwxr-xr-x 7 mysql mysql 4096 Jul 5 20:29 olddata
-rw-r--r-- 1 root root 0 Jul 27 18:52 test
drwxr-xr-x 2 mysql mysql 6 Jul 12 13:11 tmp
#ls -l 运行结果同时保存到文件test中及在屏幕显示
[root@localhost /data/mysql/mysql3306]#ls | tee -a test
data
last.list
logs
my3306.cnf
olddata
test
tmp
[root@localhost /data/mysql/mysql3306]#cat test
total 16
drwxr-xr-x 8 mysql mysql 4096 Jul 12 23:13 data
-rw-r--r-- 1 root root 269 Jul 27 18:49 last.list
drwxr-xr-x 2 mysql mysql 143 Jul 12 23:13 logs
-rw-r--r-- 1 mysql mysql 2789 Jul 12 10:15 my3306.cnf
drwxr-xr-x 7 mysql mysql 4096 Jul 5 20:29 olddata
-rw-r--r-- 1 root root 0 Jul 27 18:52 test
drwxr-xr-x 2 mysql mysql 6 Jul 12 13:11 tmp
data
last.list
logs
my3306.cnf
olddata
test
tmp
#参数-a 将数据追加到test中,否则会覆盖原有数据
用cat filea fileb >> fileab 或 cat file* >>fileab 还可以实现文件合并,原文件依然存在。