tail -f
파일에서 (또는 유사한) 작업을 수행 할 수 grep
있습니까? 나는 그런 종류의 행동을 찾는 다른 명령을 신경 쓰지 않을 것입니다.
tail -f
파일에서 (또는 유사한) 작업을 수행 할 수 grep
있습니까? 나는 그런 종류의 행동을 찾는 다른 명령을 신경 쓰지 않을 것입니다.
답변:
잘 작동합니다. 더 일반적으로 grep
프로그램이 출력되지 않을 때까지 기다렸다가 출력이 들어 오면 계속 읽습니다.
$ (echo foo; sleep 5; echo test; sleep 5) | grep test
5 초 동안 아무 일도 일어나지 않으면 grep은 일치하는 "test"를 출력 한 다음 5 초 후에 파이프 프로세스가 종료 될 때 종료됩니다.
추가 --line-buffered
로 grep
, 그것은 당신을 위해 지연을 줄일 수 있습니다. 어떤 경우에는 매우 유용합니다.
tail -f foo | grep --line-buffered bar
grep
터미널로 이동하지 않을 때 유용합니다 (다른 유형의 파일로 리디렉션 됨). 라인 버퍼링은 출력이 터미널로 갈 때의 기본값이므로 차이가 없습니다. 이 옵션은 GNU 전용입니다.
의 출력을 grep
로 파이프tail -f
할 수 있습니다 . tail -f
기능과 필터링 및 색상, 특히 멀티 테일 ( 예 :) 을 결합한 프로그램도 있습니다 .
나는이 모든 사람들이 사용 tail -f
하려고하는 것을 보았지만 그 한계를 좋아하지 않는다! 새로운 줄을 보면서 파일을 검색하는 가장 좋아하는 방법은 다음과 같습니다 (예를 들어, 일반적으로 cron 작업을 통해 주기적으로 실행되는 프로세스의 리디렉션 출력에 추가되는 로그 파일을 사용합니다).
tail -Fn+0 /path/to/file|grep searchterm
이것은 GNU tail과 grep을 가정합니다. 꼬리 맨 페이지 (GNU coreutils, 내 버전은 v8.22)에서 지원되는 세부 정보 [ https://www.gnu.org/software/coreutils/manual/coreutils.html] :
-F same as --follow=name --retry -n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output starting with the Kth. If the first character of K (the number of bytes or lines) is a '+', print beginning with the Kth item from the start of each file, otherwise, print the last K items in the file. K may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail'ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descriptor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.
따라서 내 명령의 꼬리 부분은에 해당합니다 tail --follow --retry --lines=+0
. 여기서 마지막 인수는 시작 부분에서 시작하여 0 줄을 건너 뛰도록 지시합니다.
tail -f access | awk '/ADD/{print $0}'
위의 것을 사용하면 보통 사용합니다.
netcat을 사용하면 새로운 결과가 쉽게 나오기 때문에 tail -f의 결과를 grep 할 수 있습니다.
sudo nc -s localhost -l -p 1337 | grep ssh
tail -f /var/log/file.log | nc 127.0.0.1 1337
그러면 grep이 포트 1337에서 오는 입력에 대한 결과를 수신하도록 설정합니다.
두 번째 명령은 tail -f의 출력을 netcat로 파이프하여 로컬 호스트 1337로 전송합니다. 로컬로 수행하려면 두 명령 세트 각각에 대해 tty를 전환해야합니다. 또는 화면과 같은 것을 사용하십시오.
작동합니다. 그러나 출력이 더 이상 순간적이지 않도록주의하십시오. 파이프를 통해 버퍼링됩니다.
tail -f
한 창과 tail -f logfile | grep pattern
다른 창에서 실행하십시오 . 포함 된 줄이 pattern
항상 두 창에 동시에 나타나는 것은 아닙니다. 드문 경우지만 30 초 간격으로 선이 나타나는 것을 보았습니다.
tee
나 다른 것입니다.