로컬/원격 ls

로컬/원격 ls

실시간으로 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여야 합니다 .-w123.123.123.12323.123.123.1

관련 정보