여기에 초보자 질문이 있습니다.
여러 리눅스 머신을 관리하려고 하는데 비슷해 보여도 어쩐지 너무 다릅니다. 예를 들어, 한 서버의 mysql 로그 파일은 /var/log/mysql/backups/thelog에 저장되고, 다른 서버의 mysql 로그 파일은 /var/log/에 저장될 수 있습니다. 이제 점점 더 많은 서버가 있다고 상상해보십시오. 좋은 소식은 예를 들어 99%의 서버에서 로그 파일 확장자가 .log이므로 로그만 저장된 위치를 검색하는 데 많은 시간을 소비할 때마다 발생한다는 것입니다. dmesg는 이러한 모든 서버에서 작동하지 않으며 그다지 도움이 되지도 않습니다. 그럼 저를 도와주시고 어떤 종류의 명령/스크립트를 알려주실 수 있나요? 예를 들어, 모든 .log 파일을 검색하고 유용할 수 있는 항목을 grep하는 데 사용할 수 있습니까? 미리 감사드립니다!
답변1
을 위한 grep
:
-r
각 디렉토리를 보는 데 사용됩니다.-R, -r, --recursive
각 디렉터리의 모든 파일을 반복적으로 읽습니다. 이는 -d recursive 옵션과 동일합니다.옵션을 사용하여
--include
파일 제한--include=GLOB
기본 이름이 GLOB와 일치하는 파일만 검색합니다(--exclude에 설명된 대로 와일드카드 일치 사용).
.log
컴퓨터의 하위 디렉토리에 있는 파일에서 "텍스트"를 검색하려면 /var
명령은 다음과 유사합니다.
grep -r --include \*.log 'text' /var
SSH를 통해 각 서버에 연결한 후 grep
명령을 실행하면 다음과 같습니다.
for server in $(cat servers.txt); do ssh "$server" "grep-command"> "output-$server"; done
인용된 문서여기.
답변2
find
스스로 할 수 있는 일이 많이 있습니다:
find . -name "*.log" -exec grep -l "pattern" {} +
현재 디렉터리 안이나 아래에 패턴이 포함된 로그 파일이 표시됩니다.
답변3
파일을 찾고 내용을 파악해야 합니다.
for f in $(find -name "*.log"); do grep -n "PATTERN" $f; done