실시간으로 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 [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
에서 마지막으로 수정된 타임스탬프와 파일 이름이 일치하는 세 개의 파일이 /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"
그러면 원격 시스템에서 가장 최근에 수정된 세 개의 파일에 보관된 IP 주소 grep
조회가 시작됩니다 .$ipAddress
사용된 플래그는 grep
정규식 일치(예:; ) 대신 문자열 비교를 사용하도록 하며 일치하는 문자열은 완전한 단어(즉; 따라서 일치하지 않음 ) -F
여야 합니다 .-w
123.123.123.123
23.123.123.1