
リアルタイムでSNMPロガーから関連ラインを取得し、チェックのために私のアプリケーションサーバーに移動したいと思います。後半は大丈夫でscp
効果がありました。前半戦はちょっと残念でした。
私がやりたいことは、3つの最新のログファイルで関連メッセージを確認することです。だから私はそうします:
[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 [email protected] "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
リモートではなく、私の仮想マシンのホームディレクトリの結果です。どこかにエスケープ文字がありませんか?
答え1
バックティックを使用して$( … )
二重引用符内に挿入します。一重引用符のみを使用してください。
sudo ssh [email protected] 'cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files'
または、サブシェルを完全に使用したくない場合は、xargs を使用します。
sudo ssh [email protected] 'ls -td /var/opt/OV/log/nnm/* | grep -m 3 trap.csv | xargs grep '$ipAddress
答え2
zsh
シェルを使用すると、ディレクトリ*trap.cvs
で最後に変更されたタイムスタンプとファイル名が一致する3つのファイルには、次の/var/opt/OV/log/nnm
パターンがあります。
/var/opt/OV/log/nnm/*trap.cvs(.om[1,3])
これ(...)
により、前のパターンの動作が修正されます。 .
通常のファイルのみを選択し(ディレクトリ名などを除く)、om
修正タイムスタンプを減らしてソートします。最初の3つの一致のみ[1,3]
が返されます(または一致が少ない場合は少ない)。
したがって、リモートシステムにシェルがインストールされている場合は、zsh
次のことができます。
ssh [email protected] zsh -c 'grep -wF "$1" /var/opt/OV/log/nnm/*trap.cvs(.om[1,3])' zsh "$ipAddress"
これにより、リモートシステムが最後に変更した3つのファイルに保存されているIPアドレスのgrep
検索を開始します。$ipAddress
使用されるフラグはgrep
正規表現の一致(例:;)の代わりに文字列比較を使用し、一致する文字列は完全な単語(つまり、一致しない)で-F
なければなりません。-w
123.123.123.123
23.123.123.1