符号 && 和 &
java -jar test.jar > info.log &
& 表示后台运行与nohup 命令功能差不多
cd /opt/test && java -jar test.jar
符号&& 表示前一条命令执行成功时,才执行后一条命令。
符号| 和 ||
ps -ef | grep java
符号 | 表示管道,上一条命令的输出,作为下一条命令参数(输入)。
test -das || ls
|| 表示上一条命令执行失败后,才执行下一条命令。
符号> 和 >>
java -jar test.jar > info.log 2>&1 &
符号 > 表示将java 日志重定向输入到info.log
- 0 – stdin (standard input) 标准输入
- 1 – stdout (standard output) 标准输出
- 2 – stderr (standard error) 标准错误输出
2>&1 将标准错误追加到info.log
符号 >>表示stdout标准输出信息重定向输出,覆盖写。
&> 表示stdout标准输出和stderr错误输出信息,重定向输出,覆盖写。
2>&1 表示把标准错误的输出重定向到标准输出1,&指示不要把1当做普通文件,而是fd=1即标准输出处理。
2>1 表示把标准错误的输出重定向到1,但这个1不是标准输出,而是一个名为1的文件。
- 空设备文件/dev/null
- 标准输入(stdin) 代码为0,实际映射关系:/dev/stdin -> /proc/self/fd/0
- 标准输出(stdout)代码为1,实际映射关系:/dev/stdout -> /proc/self/fd/1
- 标准错误输出(stderr)代码为2,实际映射关系:/dev/stderr ->/pro/self/fd/2
command>a 2>1 、command>a 2>a 与 command>a 2>&1的区别
- command>a 2>&1 等价于 command 1>a 2>&1
- 意思为执行command产生的标准输入重定向到文件a中,标准错误也重定向到文件a中。
- command>a 2>a 不等价于 command 1>a 2>&1,其区别如下:
- command>a 2>a打开文件两次,而command 1>a 2>&1只打开文件一次;
- command>a 2>a由于打开文件两次,导致stdout被stderr覆盖;
- 从IO效率上来讲,command 1>a 2>&1比command 1>a 2>a的效率更高。
- command>a 2>1 等价于 command 1>a 2>1
- 意思为执行command产生的标准输入重定向到文件a中,标准错误重定向到文件1中。