在linux命令中我们经常用到>、>>、<、& 、&&、 |等,但你都知道它们的具体用法吗?
接下来带童鞋们一起来认识这些符号的用法和含义
一、符号’>’的含义
- 属于输出重定向
- 会覆盖目标的原有内容。当文件存在时会先删除原文件,再重新创建文件,然后把内容写入该文件;否则直接创建文件。
- 实例
// 将test1的内容覆盖到test2中(test2中的内容会全部变成test1)
[root@xn test]# cat test1 > test2
等同于:
[root@xn test]# cat test1 1> test2
二、符号’>>’的含义
- 属于输出重定向
- 会在目标原有内容后追加内容。当文件存在时直接在文件末尾进行内容追加,不会删除原文件;否则直接创建文件。
- 实例
// 将test1的内容添加到test2文件的末尾,并不会覆盖掉test2的内容
[root@xn test]# cat test1 >> test2
三、符号'<‘的含义
- 表示的是输入重定向的意思
- 就是把 < 后面跟的文件取代键盘作为新的输入设备
输出test.txt内容
[root@xn test]# cat < test.txt
等价于
[root@xn test]# cat test.txt
四、符号’|’的含义
- 表示一个管道的意思,可以理解为东西从管道的一边流向另外一边。
- 将上一条命令的输出当作下一条命令的输入参数
// 在ps打印出的进程中查找名字为java的进程
[root@xn ~]# ps -aux | grep java
五、符号’||’的含义
- 表示上一条命令执行失败后,才执行下一条命令
// 在切换root失败后进入本用户下的/data/test/目录
[root@xn test]# su root || cd /data/test/
六、符号’&’的含义
- 表示将任务放后台运行
//表示把java程序后台运行,并把相关信息输出到log.txt文件中
[root@xn test]# nohup java -jar xxx.jar & > log.txt
七、符号’&&’的含义
- 表示当上一条命令执行成功时,才会执行下一条命令
- 如果上一条命令未执行成功,下一条命令则不会进行
//进入/data/test目录后创建test.txt
[root@xn test]# cd /data/test && vi test.txt
八、标准输出输入
先介绍下几个常用基本符号及其含义
- 0 表示stdin标准输入
- 1 表示stdout标准正确输出(标准输出)
- 2 表示stderr标准错误输出
- 1> 将正确的输出重定向到某个文件,1是可以省略的
- 2> 将错误的输出重定向到某个文件
- 2>&1 标准错误重新定向到标准输出
- 1>&2 标准输出重新定向到标准错误
- /dev/null 表示空设备文件,可以理解为无底洞,既不保存也不输出打印
- 1>>将正确的输出追加到某个文件中
- 2>>将错误的输出追加到某个文件中
怎么理解表示上述含义呢?
比如:linux中data/test目录下只要一个文件 test.txt
[root@xn test]# ls test.txt
test.txt
[root@xn test]# ls test.txt test2.txt
ls: cannot access test2.txt: No such file or directory
--由于没有test2.txt这个文件,于是返回错误值,这就是所谓的2标准错误输出
test.txt
-- 这个test.txt就是1标准正确输出
- ‘1>’和’2>’解释
[root@xn test]# ls test.txt test2.txt 1>file.out 2>file.err
//执行后,没有任何返回值。
//原因是:返回值都重定向到相应的文件中了,而不再前端显示
[root@xn test]# cat file.out file.err
test.txt
ls: cannot access test2.txt: No such file or directory
一般来说:
“1>” 通常可以省略成 “>”
上述命令可以更改成:ls test.txt test2.txt >file.out 2>file.err
注意:
‘1>’ 和 ‘2>’ 必须要紧密一起,不然会报错
- 2>&1解释
上述我们已经知道,可以把标准正确输出和标准错误输出分别保存到指定文件,那么怎么把错误输出和正确输出保存到同一个文件呢?命令如下:
[root@xn test]# ls test.txt test2.txt 1> a.txt 2>&1
[root@xn test]# cat a.txt
ls: test2.txt: No such file or directory
test.txt
或者写作:
[root@xn test]# ls test.txt test2.txt > a.txt 2>&1
说明:标准正确输出到a.txt文件中,那么2>&1如何理解呢?
2>表示标准错误输出,而&1可以理解为表示1输出通道,也就是1的引用,即代表a.txt文件。整体概述就是:错误返回值传递给1输出
- 1>&2
此命令也是将错误输出和正确输出保存到同一个文件中,命令如下
[root@xn test]# ls test.txt test2.txt 2> a2.txt 1>&2
[root@xn test]# cat a2.txt
ls: test2.txt: No such file or directory
test.txt
区别:
2>&1是将标准错误输出到标准正确输出指定的文件;
1>&2是将标准正确输出到标准错误输出指定的文件。
- /dev/null
如果我们只保存正确的结果,错误的结果直接丢向垃圾站,既不保存为文件,也不在标准输出打印又该怎么做呢?
command 1>> right.txt 2> /dev/null
如果把标准正确输出和标准错误都丢到垃圾站呢,既不保存为文件,也不在标准输出打印又该怎么做呢?
command > /dev/null 2>&1 和 command &> /dev/null 是一样的
看到这里,如下命令就知道具体含义了
nohup /data/bin/java -Xmx200m -Xms200m -jar
/data/test/test-1.0-SNAPSHOT.jar
--spring.profiles.active=test2 >/dev/null 2>&1 &
// 解释:项目启动的标准输出和标准错误输出都放进垃圾站里,并在后台执行
- 1>> 和 2>>的解释
1>> 2>>是追加数据到文件中。如果我们想将错误的和正确的信息重定向追加到同一个文件应该怎么做呢?
command 1>> a.txt 2>&1 和 command &>>文件 两个命令作用相同。
看到这里细心的童鞋该问了,为啥2>&1,不写成2>>&1呢?因为并没有这个语法。。。
九、看图自行体会了


转载请注明:XAMPP中文组官网 » Linux符号>、>>、<、& 、&&等用法