.gnu/linux サーバー経由でログインし、次のコマンドの出力を収集する必要がありますSSH
。パスワードのない認証をしてみましたSSH
。 bashスクリプトを使用してこれを実行したいと思います。
df -lh | awk '{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
以下のコマンドを試しましたが、「コマンド」を引用するのでdf
はなく、単一のコマンドが与えられたように動作しますが、次のような長いコマンドを提供します。
df -lh | awk '{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
動作しません。
答え1
答え2
ステップ1:スクリプトを書く
cat script.sh
df -lh | awk '{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
ステップ2:scp
ホストに送信します。 (scp は安全なコピーです。) ホストは次の場所にあります。$h
scp script.sh $h:/tmp
ステップ3:実行
ssh $h bash /tmp/script.sh
出力をリダイレクトすることもできます。
ssh $h bash /tmp/script.sh > result-$h.txt
答え3
別のスクリプトファイルを作成せずにこの行を実行するには、コマンドを二重引用符で囲み、競合する可能性があるすべての文字をエスケープする必要があります。たとえば、
ssh your-host "
df -lh | awk '{if (\$5 >= 20) { print \$6 \" \" \$2 \" \" \$3 \" \" \$5 }}'
top -b -n1 | grep \"Cpu(s)\" | awk '{print 100 - \$5}'"
または一重引用符を使用してください。
ssh your-host'
df -lh | awk '"'"'{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'"'"'
top -b -n1 | grep "Cpu(s)" | awk '"'"'{print 100 - $5}'"'"
またはこちらの記事を使用してください。
ssh your-host "$(cat << 'END'
df -lh | awk '{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
END
)"
最後のオプションは、より多くの行を使用するという欠点がありますが、コマンドで何も変更する必要はありません。