linux中>表示覆盖原文件内容(文件的日期也会自动更新),>>表示追加内容(会另起一行,文件的日期也会自动更新)
1 将history命令执行的结果保存到history.log文件中
[root@gxzs-solr1 ~]# history > history.log (history.log 文件 会自动生成)
[root@gxzs-solr1 ~]# cat history.log
2 执行命令 curl 'xxx' ,将其返回结果保存到 log.log 中
[root@gx-solr1 ~]# curl 'http://192.168.0.110:8983/solr/scan_detail/admin/file?_=1544066402749&contentType=text/plain;charset=utf-8&file=managed-schema&wt=json' > log.log
3 执行命令 cat /etc/hosts , 将其返回结果保存到 hosts.log 中
[root@slave1 ~]# cat /etc/hosts > hosts.log [root@slave1 ~]# more hosts.log 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
注意:
使用 > ,执行命令时,每次都会新生成一个 > 后面的文件,将之前生成的文件替换掉(文件创建时间也会跟着改变)。
4 使用 >> 向 hosts.log中追加 当前日期
[root@slave1 ~]# echo "当前日期是 `date`" >> hosts.log
[root@slave1 ~]# ls -l hosts.log -rw-r--r--. 1 root root 11 Dec 13 16:04 hosts.log # 查看hosts.log 的日期 [root@slave1 ~]# cat hosts.log # 查看hosts.log 文件的内容 I am OK! [root@slave1 ~]# echo "当前日期是 `date`" >> hosts.log # 向hosts.log中追加 当前日期 [root@slave1 ~]# cat hosts.log # 再次查看hosts.log 文件的内容 I am OK! 当前日期是 Thu Dec 13 16:05:18 CST 2018 [root@slave1 ~]# ls -l hosts.log # 再次查看hosts.log 的日期 -rw-r--r--. 1 root root 56 Dec 13 16:05 hosts.log [root@slave1 ~]#
1 和 2 在 Linux 中代表什么
在Linux系统中0 1 2是一个文件描述符
从上表看的出来,我们平时使用的
echo "hello" > t.log
其实也可以写成
echo "hello" 1> t.log
为什么2>&1要放在后面
考虑如下一条shell命令
nohup java -jar app.jar >log 2>&1 &
我们不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:
本来1----->屏幕 (1指向屏幕) 执行>log后, 1----->log (1指向log) 执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log) `` 再来分析下
nohup java -jar app.jar 2>&1 >log &
本来1----->屏幕 (1指向屏幕) 执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕) 执行>log后, 1----->log (1指向log,2还是指向屏幕)
java代码如下:
public class Htest { public static void main(String[] args) { System.out.println("out1"); System.err.println("error1"); } }
javac编译后运行下面指令:
java Htest 2>&1 > log
你会在终端上看到只输出了"error1",log文件中则只有"out1"
每次都写">log 2>&1"太麻烦,能简写吗?
有以下两种简写方式
&>log
>&log
比如上面小节中的写法就可以简写为:
nohup java -jar app.jar &>log &
上面两种方式都和">log 2>&1"一个语义。
那么 上面两种方式中&>和>&有区别吗?
语义上是没有任何区别的,但是第一中方式是最佳选择,一般使用第一种。