数据流重定向到文件(正常文件和移除(到/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 还可以实现文件合并,原文件依然存在。