로그 크기는 55GB입니다.
나는 시도했다:
cat logfile.log | tail
하지만 이 방법은 시간이 많이 걸린다. 대용량 파일을 더 빠르게 읽는 방법이나 다른 방법이 있습니까?
답변1
cat logifle.log | …
이는 중복되며 실제로 속도 저하를 유발합니다. tail logfile.log
고양이가 없으면 더 의미가 있을 것 같아요!
훨씬 빠르기 때문에입력이 되지 않을 때탐색 가능한, tail
수행해야 할 작업은 모든 stdin을 한 줄씩 읽고 마지막 10줄을 버퍼에 유지하는 것입니다.마지막10행) 입력이 cat
메커니즘을 통해 파이프에서 나오도록 하면 해당 입력을 검색할 수 없습니다.
이는 속도가 느리고 파일의 행 크기가 GB가 아닌 한 매우 어리석은 일입니다. 처음 54.9GB를 건너뛰십시오. 남은 100MB는 확실히 마지막 10줄보다 적지 않을 것입니다! 100MB에서 마지막 10개 행을 가져오는 것만으로도 충분히 빠릅니다.
tail --bytes 100M logfile.log | tail
그러나 GNU Coreutil1 구현을 사용하고 있다면 tail
이미 이 작업을 수행하고 있습니다(즉, 파일 끝에서 2.5kB를 뺀 부분을 찾고 거기서부터 찾기 시작합니다). 통과아니요여기서 남용 cat
하되 tail
파일 자체를 읽도록 놔두거나 리디렉션을 사용하면 효과는 동일합니다! 더 빠른 결과를 얻을 수 있습니다.
tail
1 GNU Coreutils, 최신 busybox는 제가 확인한 두 가지 구현입니다. Stéphane은 아래에서 원본도 마찬가지라고 지적합니다.1970년대 PWB Unix 구현완료되었습니다. 하지만 아직은 구현 세부 사항일 뿐입니다.
답변2
지금처럼 파일 전체를 읽는 tail logfile
대신 을 사용하여 파일의 마지막 10줄을 직접 가져와야 합니다 .cat logfile | tail
답변3
tail -nX path to your log file
X의 경우 읽으려는 행 수를 사용하십시오.
예
tail -n30 /var/log/syslog
내 /var/log/syslog의 마지막 30줄 표시
답변4
tac
를 거꾸로 사용할 수 있습니다 cat
. 하지만 10줄로 제한하는 것은 어렵기 때문에 하지 마세요. tail
그런 용도니까 꼭 사용해 보세요 .