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
。