本地/遠端
我想實時從 SNMP 記錄器中獲取相關行並將它們移動到我的應用程序伺服器進行檢查。下半場很好,
scp
正在做戲。前半段讓我有些悲傷。我想要做的是檢查三個最新的日誌文件中的相關消息。所以我會這樣做:
[user@SNMPServer]$ cd /var/opt/OV/log/nnm/; files=
ls -t | grep -m 3 trap.csv; echo $files
trap.csv trap.csv.2019-05-31_07_00_01 trap.csv.2019-05-31_06_00_01
這很好,因為我隨後計劃:
[user@SNMPServer]$ grep $ipAddress $files
當我在 SNMP 伺服器上執行它時,它再次執行良好。
當我從我的虛擬機執行此操作時,
admin@alarmux:~$sudo ssh p210243@192.75.110.40 "cd /var/opt/OV/log/nnm/; files=
ls -t | grep -m 3 trap.csv; echo $files"
我得到這個輸出:
assets bash: testerlog: command not found bash: count.txt: command not found
這些是
ls -t
我的虛擬機主目錄的結果,而不是遠端的。我在某處缺少轉義字元嗎?
反引號並
$( … )
在雙引號內插入。使用單引號,它會工作。sudo ssh p210243@192.75.110.40 'cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files'
或者使用 xargs 完全避免子外殼:
sudo ssh p210243@192.75.110.40 'ls -td /var/opt/OV/log/nnm/* | grep -m 3 trap.csv | xargs grep '$ipAddress
使用
zsh
shell,具有最近修改時間戳的三個文件,文件名*trap.cvs
在/var/opt/OV/log/nnm
目錄中匹配,將具有模式/var/opt/OV/log/nnm/*trap.cvs(.om[1,3])
where
(...)
修改前面模式的行為。.
僅選擇正常文件(不是目錄名稱等)並om
通過減少修改時間戳來排序。[1,3]
僅返回前三個匹配項(如果匹配項較少,則返回更少)。因此,如果您
zsh
在遠端機器上安裝了 shell,您就可以做到ssh p210243@192.75.110.40 zsh -c 'grep -wF "$1" /var/opt/OV/log/nnm/*trap.cvs(.om[1,3])' zsh "$ipAddress"
這將啟動
grep
以查找保存在$ipAddress
遠端系統上三個最近修改的文件中的 IP 地址。with 使用的標誌
grep
使它使用字元串比較而不是正則表達式匹配(that’s-F
),並且它要求匹配的字元串是一個完整的單詞(that’s-w
; 所以 that123.123.123.123
不匹配23.123.123.1
)。