ローカル/リモートls

ローカル/リモートls

リアルタイムで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なければなりません。-w123.123.123.12323.123.123.1

関連情報