(點選上方公眾號,可快速關註)
來源:暗無天日 ,
lujun9972.github.io/blog/2018/05/14/使用logsave將命令輸出儲存起來/
如果想要把命令的輸出儲存到檔案中,你會怎麼做?
一個常用的方法就是使用IO重定向吧
ls >/tmp/ls.txt 2>&1
如果需要在將命令輸出儲存到檔案中的同時還需要將內容也輸出到螢幕中的話,那麼我們可以使用 tee 命令
ls |tee /tmp/ls.txt
不過,我今天發現還有一個 logsave 的命令,也可以做到將命令輸出儲存到檔案的同時將內容頁輸出到螢幕中。
logsave 的語法非常簡單:
logsave [ -asv ] logfile cmd_prog [args … ]
logsave 會執行 cmd_prog args… 並將命令輸出的副本儲存到 logfile 中. 而它厲害的地方在於 即使logfile所在的目錄不存在,logsave也會將輸出儲存到記憶體中,等到logfile所在的目錄建立後再將內容寫入到日誌檔案中
logsave 的這個特性使得它很適合用於系統啟動指令碼中,將輸出的內容儲存到記憶體中,直到 /var/ 目錄掛載後再將內容寫入 /var/log/ 中
比如下麵這個例子
# 刪除存放logfile的目錄
rm -rf /tmp/logdir
# 使用logsave儲存logfile
logsave /tmp/logdir/logfile bash -c “sleep 2;date”
# 建立logdir
mkdir /tmp/logdir
echo 檢視logfile是否生成:
ls -l /tmp/logdir
echo 等待2s後:
sleep 2
echo 再次檢視logfile是否生成:
ls -l /tmp/logdir
echo 檢視logfile的內容:
cat /tmp/logdir/logfile
2018年 05月 14日 星期一 16:31:44 CST
檢視logfile是否生成:
總用量 0
等待2s後:
再次檢視logfile是否生成:
總用量 4
-rw-r–r– 1 lujun9972 lujun9972 141 5月 14 16:31 logfile
檢視logfile的內容:
Log of bash -c sleep 2;date
Mon May 14 16:31:42 2018
2018年 05月 14日 星期一 16:31:44 CST
Mon May 14 16:31:44 2018
—————-
從中可以看到:
-
雖然一開始logfile由於logdir不存在而無法生成,但是在建立logdir後, logsave 最終依然成功的生成了logfile,並將 date 命令的執行結果寫入其中。
-
logsave 不僅僅將命令的輸出內容寫入logfile中,而且還包括了執行的命令,命令執行的開始時間和命令執行結束的時間.
logsave 中的 cmd_prog 可以是一個特殊的 – ,這表示 logsave 從標準輸入中獲取要記錄日誌的內容,這使得 logsave 可以像 tee 一樣被使用
ls |wc -l |logsave /tmp/1.txt – >/dev/null
cat /tmp/1.txt
看完本文有收穫?請轉發分享給更多人
關註「ImportNew」,提升Java技能