linux中 > 、>> 的用法


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"一個語義。

那么 上面兩種方式中&>和>&有區別嗎?

語義上是沒有任何區別的,但是第一中方式是最佳選擇,一般使用第一種。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM