Linux 使用的小细节
1. && 和 &
&&
表示前一条命令执行成功时,才执行后一条命令。
ls -l && cd ..
&
表示任务后台执行,与 nohup 命令功能相似。
java -jar test.jar > log.txt &
# 运行 jar 包,并置于后台执行,执行的日志重定向到 log.txt 文件中。
2. | 和 ||
|
表示管道,上一条命令的输出作为下一条命令的输入。
ps -aux | grep aux
# 查询全部进程后,过滤包含 "aux" 的进程。
||
表示上一条命令执行失败时,才执行下一条命令。
xxx -l || pwd
3. > 和 >>
>
表示标准输出信息重定向输出,内容覆盖写。
echo 'World' > test.txt
>>
表示标准输出信息重定向,内容追加写。
echo 'World' >> test.txt
4. &>、2>&1 和 2>1
&>
表示标准错误(stderr)和标准输出(stdout)信息重定向输出,覆盖写。
# 示例:
lll &> test.txt
cat test.txt
# 输出:
-bash: lll: command not found
2>&1
将标准错误(stderr)输出重定向到标准输出(stdout)。
command 2>&1
& 指示不要把 1 当作普通文件,而是文件描述符(fd=1,即标准输出)处理。
2>1
将标准错误输出重定向到名为 1 的文件,而不是标准输出。
command 2>1
Linux 重定向设备代码:
- 空设备文件:
/dev/null - 标准输入(stdin):代码为
0,实际映射/dev/stdin -> /proc/self/fd/0 - 标准输出(stdout):代码为
1,实际映射/dev/stdout -> /proc/self/fd/1 - 标准错误输出(stderr):代码为
2,实际映射/dev/stderr -> /proc/self/fd/2
5. command>a 2>1、command>a 2>a 与 command>a 2>&1 的区别
1. command>a 2>&1
等价于:
command 1>a 2>&1
含义:标准输出重定向到文件 a,标准错误也重定向到文件 a。
2. command>a 2>a
与 command 1>a 2>&1 不等价,区别如下:
command>a 2>a打开文件两次,而command 1>a 2>&1只打开文件一次。command>a 2>a会导致标准输出(stdout)被标准错误(stderr)覆盖。- 从 I/O 效率上看,
command 1>a 2>&1更高效。
3. command>a 2>1
等价于:
command 1>a 2>1
含义:标准输出重定向到文件 a,标准错误重定向到文件 1。
