重定向的含义

输出结果除了直接被 print 到屏幕上,还可以通过重定向写入文件

基本语法如下

tree ~/ > tree.txt
#有输出的命令 > 文件路径

覆盖与追加

  • > 可以将输出覆盖进文件:如文件不存在,则创建文件;如文件存在,则覆写文件
touch xibei.md
echo "xibei we love you" > xibei.md
  • >> 可以将输出追加在文件末尾
zhoux@westnorth:~$ cat xb.md
xibei we love you
zhoux@westnorth:~$ echo "xibei you are lovely" >> xb.md
zhoux@westnorth:~$ cat xb.md
xibei we love you
xibei you are lovely
zhoux@westnorth:~$ echo "xibei is a cat" > xb.md
zhoux@westnorth:~$ cat xb.md
xibei is a cat

Warning

小心使用 >,以免文件丢失

输出内容的选择

以一个实例拓展 > 的内容

创建一个测试目录与文件,分别写入内容,并关掉其中一个文件的权限

zhoux@westnorth:~/linux_practice$ ls -lh ./xibei.dir/
total 8.0K
---------- 1 zhoux zhoux 15 Dec  4 20:56 xibei.1.txt
#可见xibei.1.txt没有读取权限
-rw-r--r-- 1 zhoux zhoux 16 Dec  4 20:56 xibei.2.txt

读取所有文件,可见一个能被读取,另一个不行

  • 有权限的:标准输出 1
  • 没有权限的:标准错误信息 2
zhoux@westnorth:~/linux_practice$ cat ./xibei.dir/*
cat: ./xibei.dir/xibei.1.txt: Permission denied #这叫做标准错误信息(2)
xibei is lovely #这叫做标准输出(1)

将输出结果重定向至 log 文件(测试用的日志)中, 发现只有标准输出 1 被重定向,而错误信息 2 没有

zhoux@westnorth:~/linux_practice$ cat ./xibei.dir/* > ./xibei.dir/log
cat: ./xibei.dir/xibei.1.txt: Permission denied
zhoux@westnorth:~/linux_practice$ cat ./xibei.dir/log
xibei is lovely

对同样的 cat 输出结果,可通过在 > 前加入 1,2 作以下操作

cat ./xibei.dir/* &> log4 #将1和2重定向到一个文件
cat ./xibei.dir/* 1> log1 #同上,只重定向1(正常)
cat ./xibei.dir/* 2> log2 #只重定向2(错误)
cat ./xibei.dir/* 1> std.out 2>std.erro #分别将1和2重定向到两个文件
cat ./xibei.dir/* > log3 2>&1 #将1和2重定向到一个文件(麻烦的方法)

Tips

数字与 > 不能有空格