head는 파일의 앞부분을, tail은 뒷부분을 출력한다. 로그의 끝, 설정 파일의 처음, 명령 결과의 일부만 볼 때 쓴다. 리눅스의 head와 tail은 대부분 GNU coreutils다. `head --version`으로 확인할 수 있다.
인자를 주지 않으면 10줄이다.
head file.txt
tail file.txt
head -n 20 file.txt
tail -n 30 app.log`-n 0`은 줄을 한 줄도 출력하지 않는다. 예전 문법 `head -20`도 GNU head는 받아들인다. 새 스크립트에는 `-n`을 쓴다.
앞에서 몇 줄, 뒤에서 몇 줄
tail의 `+`는 시작 줄 번호다. `tail -n +11`은 11번째 줄부터 끝까지다. 앞의 10줄을 건너뛴다는 뜻이다.
tail -n +11 file.txt
head -n 10 file.txtGNU head는 음수 줄 수를 받는다. `head -n -5`는 끝 5줄을 빼고 나머지를 출력한다. 이 음수 문법은 GNU 확장이다. macOS에 기본으로 들어 있는 head에는 없다.
바이트 단위도 같다.
head -c 100 file.bin
tail -c 64 file.bin`head -c -20`은 끝 20바이트를 뺀 나머지다. 줄 중간에서 잘릴 수 있다.
파일이 여러 개일 때
파일을 여러 개 주면 각 파일 앞에 머리글이 붙는다.
head -n 5 a.txt b.txt출력은 다음처럼 나뉜다.
==> a.txt <==`-q`는 머리글을 끈다. `-v`는 파일이 하나여도 머리글을 붙인다.
head -q -n 5 a.txt b.txt표준입력도 읽는다. 파이프 뒤에서 앞이나 뒤만 남길 때 쓴다.
dmesg | tail -n 20head는 필요한 만큼 읽고 멈출 수 있다. 아주 큰 파일의 앞부분만 볼 때 파일 전체를 출력하는 것보다 낫다.
늘어나는 로그 보기
`tail -f`는 파일이 커지면 새 줄을 이어서 보여 준다. 멈출 때는 Ctrl-c를 누른다.
tail -f /var/log/syslog
tail -n 0 -f app.log`-n 0 -f`는 이미 있는 내용은 건너뛰고, 명령 이후에 추가된 줄만 보여 준다.
`-f`는 연 파일 자체를 따라간다. 로그 순환으로 이름이 바뀌고 새 파일이 같은 이름으로 생기면, tail은 옛 파일을 계속 보고 있을 수 있다. 이름 기준으로 다시 열려면 `-F`를 쓴다.
tail -n 50 -F /var/log/nginx/access.log`-F`는 그 이름이 잠시 사라져도 다시 나타날 때까지 재시도한다. `-s`는 확인 간격(초)이다. 기본은 1초 근처다.
`--pid`를 주면 그 프로세스가 끝났을 때 tail도 끝난다. 한 작업의 로그만 붙잡고 있을 때 쓴다.
tail -f --pid=1234 app.log화면 단위로 검색까지 하면서 보려면 less가 맞다. less 글의 `+F`가 tail -f에 해당한다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.