내가 달성하고 싶은 것 :
날짜별로 시스템 로그 파일을 필터링하고 싶습니다.
$ cat /var/log/syslog | grep -i "error\|warn\|kernel"
마지막 3 일 동안 다음과 같이 행을 인쇄합니다.
(...)
Apr 3 06:17:38 computer_name kernel: [517239.805470] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
(...)
Apr 4 19:34:21 computer_name kernel: [517242.523165] e1000e: enp0s25 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
(...)
Apr 5 09:00:52 computer_name kernel: [517242.523217] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s25: link becomes ready
잡는 방법 (선택 또는 필터링) :
- 날짜별로?
- 날짜 + 시간?
내가 시도한 것 :
$ cat /var/log/syslog | grep -i "Apr 5" | grep -i "error\|warn\|kernel"
syslog
파일에서 예상대로 작동 하지만 kern.log
예를 들어 파일에서만 작동 하지는 않습니다 Binary file (standard input) matches
. 그리고이 tail
특정 파일을 파일에서와 동일한 시작 날짜 형식을 볼 수 있습니다 syslog
.
질문:
kern.log
파일 과 같은 다른 로그에서 동일한 결과를 얻는 방법은 무엇입니까?
또한 다음을 필터링 할 수 있습니다.
- 기간별로?
- 날짜 + 시간 범위별로?
힌트 : 가능하면 “기억하기 쉬운 명령”을 사용하십시오.
답변
systemd를 사용하면 다음과 같이 세밀한 필터링을 쉽게 허용하는 journalctl이 있습니다.
sudo journalctl --since "2 days ago"
sudo journalctl --since "2019-03-10" --until "2019-03-11 03:00"
sudo journalctl -b # last boot
sudo journalctl -k # kernel messages
sudo journalctl -p er # by priority (emerg|alert|crit|err|warning|info|debug)
sudo journalctl -u sshd # by unit
sudo journalctl _UID=1000 # by user id
예를 결합 할 수 있습니다!
답변
일반적으로 kern.log
는 텍스트 파일입니다. 그러나 때로는 시스템에 충돌이 발생하여 시스템이 파일을 제대로 닫을 수없는 경우 일부 바이너리 데이터 가 포함되는 경우가 있습니다 . 그런 다음 텍스트 ^@^@^@^@^@^@^@^@^@
등이 포함 된 줄을 볼 수 있습니다 .
경우 grep
통지는 입력되는 이진 , 보통 추가 처리 및 인쇄를 중지 ... binary file ...
하는 대신. 그러나이 동작을 바꾸는 스위치가 있습니다. 로부터 맨 :
[...] File and Directory Selection -a, --text Process a binary file as if it were text; this is equivalent to the --binary-files=text option. [...]
다음을 시도 할 수 있습니다.
$ grep -a -i "Apr 5" /var/log/kern.log | grep -i "error\|warn\|kernel"
(그러나 실제로 journalctl
다른 대답으로 주어진 솔루션을 선호합니다 .)