[授之以渔]Linux中的 &,&&,|,||,,>>,2>&1
& 和 &&
& 指定当前任务在后台执行
例如我们启动redis
/usr/bin/redis-server /etc/redis.conf &
&& 前一条命令执行成功后才执行后一条命令
echo 'my name ' && echo 'is lily'
| 和 ||
| 管道符,前一条命令的结果传递给后一条命令作为参数
ls |grep 'php'
|| 前一条命令执行错误后才执行后一条命令
ls hnuehuneoh || echo 'is lily' #hnuehuneoh文件不存在
> 和 >>
> 输出重定向 ,覆盖原有内容
echo 'first' > b.log && cat b.log echo 'second' > b.log && cat b.log
>> 输出重定向 ,追加内容
echo 'first' >> b.log && cat b.log echo 'second' >> b.log && cat b.log
< 输入重定向
把后面指定的文件输入给运行时需要输入的程序
例如我们有一个shell程序 a.sh 内容如下
#!/bin/bash read INPUT echo "Input content \" $INPUT \" !"
准备一个写有内容的文件 input.log
[root@localhost ~]# echo 'My name is lily' > input.log
执行如下命令会发现, input.log 文件内的内容被当做了输入
[root@localhost ~]# sh a.sh < input.log Input content " My name is lily "
2>&1 和 &>file
0 表示stdin标准输入
1 表示stdout标准输出
2 表示stderr标准错误
从一个例子说起:
找一个目录,目录中有a.php 文件, 没有 b.php文件, 我们认识一下什么是”标准错误”,什么是”标准输出”
[root@localhost ~]# ls a.php b.php ls: cannot access b.php: No such file or directory #标准错误 a.php #标准输出
如下命令中 1> 表示”标准输出”输出到 output.log文件中
[root@localhost ~]# ls a.php b.php 1> output.log ls: cannot access b.php: No such file or directory [root@localhost ~]# cat output.log a.php
如下命令中 2> 表示”标准错误”输出到 output.log文件中
[root@localhost ~]# ls a.php b.php 2> output.log [root@localhost ~]# cat output.log ls: cannot access b.php: No such file or directory
下面的例子代表”标准输出”输出到 output.log , “标准错误”输出到 output2.log
[root@localhost ~]# ls a.php b.php 1> output.log 2> output2.log [root@localhost ~]# cat output.log a.php [root@localhost ~]# cat output2.log ls: cannot access b.php: No such file or directory
1> 可以简写成 >
ls a.php b.php > output.log ls a.php b.php 1> output.log
回到2>&1 , 如下例子
[root@localhost ~]# ls a.php b.php > output.log 2>&1 [root@localhost ~]# cat output.log ls: cannot access b.php: No such file or directory a.php
上例中 & 相当于”等效于”,可以理解为 [标准错误]的输出[等效于][标准输出], 换句话说”标准输出”到哪儿”标准错误”就输出到哪儿
下面的例子 &> 代表 “标准输出”,”标准错误” 都输出到 output.log
ls a.php b.php &> output.log