Linux中&&、&、|、||等特殊符号的作用

符号 && 和 &

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中。

end