> >> < << :基础重定向
管道是两个进程之间通信用的,而重定向是需要有文件作为中间连接。更直白一点:
管道两段直连进程,重定向有一端必定是文件(可能是隐含的,先经过文件中转)
&:操作文件描述符
自己的领悟,感觉可能有错:
不过也是好理解,因为自己写代码有时候也会用到
python xxx.py > record.log 2>&1
其实就是因为运行python进程会有stdout和stderror同时显示在terminal,而 >
应该确实只能把stdout的内容重定向到文件,stderror需要用2>&1
额外指定
###
果然,后面的实验支持了我的猜想:
这里 1
指的就是stdout,这和我猜的 stdin\stdout\stderror分别对应0\1\2 是一样的
tee: 多重重定向:
exec: 永久重定向
# 先开启一个子 Shell
zsh
# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件
exec 1>somefile
# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向(后面将告诉你怎么做)
ls
exit
cat somefile
很好理解,因为我们之前学过 -
本来就是上一层目录的意思,这里就是上一次重定向文件的描述符
/dev/null: 黑洞文件
我们可以利用 /dev/null 屏蔽命令的输出:
cat Documents/test.c 1>/dev/null 2>&1
上面这样的操作将使你得不到任何输出结果。
xargs: 分割参数列表
这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。
cut -d: -f1 < /etc/passwd | sort | xargs echo
上面这个命令用于将 /etc/passwd 文件按 : 分割取第一个字段排序后,使用 echo 命令生成一个列表。
其实说白了就是把很多一行行的东西(如上述cut的stdout,ternimal一个page塞不下)变成参数列表,一列显示: