명령은 서로 다른 디렉터리에 있지만 비슷한 파일 확장자를 가진 파일을 검색합니다.

명령은 서로 다른 디렉터리에 있지만 비슷한 파일 확장자를 가진 파일을 검색합니다.

여기에 초보자 질문이 있습니다.

여러 리눅스 머신을 관리하려고 하는데 비슷해 보여도 어쩐지 너무 다릅니다. 예를 들어, 한 서버의 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

관련 정보