>和>>
- >符号: cmd > file (将cmd得到的结果,覆盖写入file)
重定向字符“this is a sample”到文件 temp.txt
zion6135@zion6135-VirtualBox:~/Desktop$ echo "this is a sample" > temp.txt zion6135@zion6135-VirtualBox:~/Desktop$ ls temp.txt zion6135@zion6135-VirtualBox:~/Desktop$ cat temp.txt this is a sample
>会先将目标文件清空,在写入,如下例子
# >会先将目标文件清空,在写入。 zion6135@zion6135-VirtualBox:~/Desktop$ echo "this is second sample" > temp.txt zion6135@zion6135-VirtualBox:~/Desktop$ cat temp.txt this is second sample zion6135@zion6135-VirtualBox:~/Desktop$
- >>符号,其他都与>符号类似,最大不同是它是把输入的内容加在文件末尾,比如下面的例子( cmd >> file (将cmd得到的结果,追加写入file))
zion6135@zion6135-VirtualBox:~/Desktop$ echo "this is 3 sample" >> temp.txt zion6135@zion6135-VirtualBox:~/Desktop$ cat temp.txt this is second sample this is 3 sample zion6135@zion6135-VirtualBox:~/Desktop$
- > 和 >>默认是输出到stdout,>等同与1 >,>>等同于1>>。比如下面的例子 > 不会输入到temp.txt文件
zion6135@zion6135-VirtualBox:~/Desktop$ ls + ls: cannot access '+': No such file or directory zion6135@zion6135-VirtualBox:~/Desktop$ cat temp.txt zion6135@zion6135-VirtualBox:~/Desktop$ ls + > temp.txt ls: cannot access '+': No such file or directory zion6135@zion6135-VirtualBox:~/Desktop$ cat temp.txt zion6135@zion6135-VirtualBox:~/Desktop$
原因也很简单:打印的错误是输出到stderr,而屏幕上对应的是stdout,stdout没有输入,那么自然重定向到的文件也没有内容。那如果我们想要将stderr输入到文件,可以这样操作。
zion6135@zion6135-VirtualBox:~/Desktop$ ls + 2> temp.txt zion6135@zion6135-VirtualBox:~/Desktop$ cat temp.txt ls: cannot access '+': No such file or directory zion6135@zion6135-VirtualBox:~/Desktop$
- 当然如果对于同一个命令,希望stdout输入到一个文件,stderr输入到另外的文件们可以如下这样操作。
zion6135@zion6135-VirtualBox:~/Desktop$ ls + 1>>stdout.txt 2>>stderr.txt zion6135@zion6135-VirtualBox:~/Desktop$ cat stdout.txt zion6135@zion6135-VirtualBox:~/Desktop$ cat stderr.txt ls: cannot access '+': No such file or directory zion6135@zion6135-VirtualBox:~/Desktop$ ls 1>>stdout.txt 2>>stderr.txt zion6135@zion6135-VirtualBox:~/Desktop$ cat stdout.txt stderr.txt stdout.txt zion6135@zion6135-VirtualBox:~/Desktop$ cat stderr.txt ls: cannot access '+': No such file or directory zion6135@zion6135-VirtualBox:~/Desktop$
- 将stderr和stdout输入到一个文件
- /dev/null:称为黑洞/位桶,指向这个特殊的设备文件,所有的输出都会被清除,那么所有sederr 2 的输出都不会打印,如下。
zion6135@zion6135-VirtualBox:~/Desktop$ ls + 2>>/dev/null zion6135@zion6135-VirtualBox:~/Desktop$
类似的/dev/stderr对应stderr, /dev/stdout对用stdout.....
<:用于从文件中读取到stdin
- 将文件重定向到命令
|:管道
- 当需要在ls的内容过滤时,可用 "|" 比如:
zion6135@zion6135-VirtualBox:~/Desktop$ ls output.txt temp.txt zion6135@zion6135-VirtualBox:~/Desktop$ ls | grep -Ei "out" output.txt zion6135@zion6135-VirtualBox:~/Desktop$