cat > file.txt로 키보드 입력 내용을 파일로 저장.pi@pi-222:~/project/0130 $ cat > file.txt
file check
EOF
^C
pi@pi-222:~/project/0130 $ ls
file.txt
pi@pi-222:~/project/0130 $ nano file.txt

cat file1 file2 > file3 리다이렉션으로 파일 병합.pi@pi-222:~/project/0130 $ nano file1.txt
pi@pi-222:~/project/0130 $ nano file2.txt
pi@pi-222:~/project/0130 $ cat file1 file2 > file3
cat: file1: No such file or directory
cat: file2: No such file or directory
pi@pi-222:~/project/0130 $ ls
file1.txt file2.txt file3 file.txt
pi@pi-222:~/project/0130 $ cat file1.txt file2.txt > file3.txt
pi@pi-222:~/project/0130 $ ls
file1.txt file2.txt file3 file3.txt file.txt
pi@pi-222:~/project/0130 $ nano file3.txt

nl 명령어로 소스 코드 파일에 줄 번호 붙여서 출력해보기.pi@pi-222:~/project/0130 $ nl file1.txt file2.txt > file4.txt
pi@pi-222:~/project/0130 $ ls
file1.txt file2.txt file3 file3.txt file4.txt file.txt
pi@pi-222:~/project/0130 $ nano file4.txt

tac으로 로그 파일 역순(최신 내용부터) 출력해보기.pi@pi-222:~/project/0130 $ tac file3.txt
file2.txt
file1.txt
Ubuntu 24.04 (그리고 최신 라즈베리파이 OS)부터는 /var/log/syslog 파일을 만드는 rsyslog 패키지가 기본 설치되지 않습니다.
대신 systemd-journald 가 로그를 관리하며, 텍스트 파일이 아닌 바이너리(DB) 형태로 저장합니다.
파일을 열지 않고 전용 명령어로 확인합니다. 기능은 똑같습니다.
tail -f 대체):Bashjournalctl -fcat 대체):Bashjournalctljournalctl -b /var/log/syslog 패키지를 설치하면 바로 생성됩니다.
설치:Bash
sudo apt update
sudo apt install -y rsyslog
확인:
설치 직후부터 /var/log/syslog 파일이 생성되고 로그가 쌓이기 시작합니다.
결론: 그냥 journalctl -f 명령어를 쓰는 습관을 들이는 것이 좋습니다. (더 보기 편함)
실습을 위해 터미널을 2개 띄우고 진행하세요.
먼저 로그가 들어오는지 실시간으로 지켜봅니다.
Bash
journalctl -f
(커서가 깜빡거리며 대기 상태가 됩니다.)
logger) - 가장 추천터미널 2에서 아래 명령어를 치면, 터미널 1에 즉시 뜹니다.
Bash
logger "안녕하세요, 로그 테스트 중입니다."

Jan 29 21:00:00 ubuntu user: 안녕하세요, 로그 테스트 중입니다.빨간색이나 강조된 로그를 보고 싶다면 -p (priority) 옵션을 씁니다.

Bash
logger -p user.err "심각한 에러 발생! (테스트임)"
sudo)sudo 명령어를 쓸 때마다 보안 로그가 남습니다.
Bash
sudo ls

sudo: ubuntu : TTY=pts/1 ; PWD=... ; USER=root ; COMMAND=/usr/bin/ls라즈베리파이 USB 포트에 마우스나 키보드, USB 메모리를 꽂았다 빼보세요.
커널(kernel)이 하드웨어를 인식하는 과정이 주루룩 올라옵니다.
⇒ 라즈베리파이에 USB-TTL을 꼽습니다.
Syslog도 커널(printk)과 동일한 표준 8단계 레벨(0~7)을 사용합니다.
사실 printk의 레벨 시스템 자체가 Syslog 표준을 따온 것입니다.
숫자가 낮을수록 심각하고, 높을수록 단순 정보입니다.
| 번호 | 이름 (Keyword) | 설명 | 비고 |
|---|---|---|---|
| 0 | emerg | Emergency | 시스템이 완전히 멈춤 (사용 불가) |
| 1 | alert | Alert | 즉시 조치 필요 (DB 손상 등) |
| 2 | crit | Critical | 치명적 오류 (하드웨어 에러) |
| 3 | err | Error | 일반적 기능 오류 (가장 흔함) |
| 4 | warning | Warning | 경고 (문제 될 소지 있음) |
| 5 | notice | Notice | 정상이지만 중요한 알림 |
| 6 | info | Info | 일반적인 정보 (로그인, 시작 등) |
| 7 | debug | Debug | 개발용 디버깅 정보 |
sudo systemd-analyze set-log-level debug
# 원상복구:
sudo systemd-analyze set-log-level info
# 확인
systemctl show -p LogLevel
pi@pi-222:~ $ sudo systemd-analyze set-log-level debug
pi@pi-222:~ $ systemctl show -p LogLevel
LogLevel=debug
pi@pi-222:~ $ sudo systemd-analyze set-log-level info
pi@pi-222:~ $ systemctl show -p LogLevel
LogLevel=info
Syslog는 레벨(Severity) 외에 "누가 보냈냐(Facility)"라는 꼬리표가 하나 더 붙습니다.
이 둘을 합쳐서 카테고리.레벨 형식으로 사용합니다.
facility.levelkern.err: 커널에서 발생한 에러auth.notice: 보안/인증 관련 알림cron.info: 예약 작업 관련 정보user.debug: 일반 사용자 프로그램의 디버그logger 명령어에 -p (priority) 옵션을 쓰면 레벨을 골라서 보낼 수 있습니다.
터미널 1 (감시):
Bash
journalctl -f
터미널 2 (발송):
Bash
# 1. 에러 레벨로 보내기 (빨간색으로 표시될 수 있음)
logger -p user.err "이것은 에러입니다!"
# 2. 경고 레벨로 보내기
logger -p user.warning "이것은 경고입니다."
# 3. 디버그 레벨로 보내기 (설정에 따라 안 보일 수 있음)
logger -p user.debug "이것은 개발용 잡담입니다."

리눅스 내부 설정 파일에서는 이 레벨을 이용해 "어떤 로그를 저장할지" 결정합니다.
Plaintext
# 예시: /etc/rsyslog.conf 내용 중
# 1. 모든 카테고리의 info 레벨 이상(*)만 저장해라 (debug는 버림)
*.info;mail.none;authpriv.none /var/log/syslog
# 2. 에러(err) 레벨 이상인 것만 따로 모아라
*.err /var/log/error.log
핵심: 여기서도 *.info라고 쓰면, Info(6)보다 숫자가 낮은(0~5, 더 중요한) 로그들은 자동으로 다 포함됩니다. (부등호 법칙 적용)
printk)드라이버 개발 중 사용하는 printk 메시지는 이미 시리얼로 나가고 있을 것입니다.
만약 안 나온다면, 로그 레벨이 너무 높게 잡혀 있어서 중요한 것만 나오는 상태입니다.
해결책 (모든 잡다한 커널 로그 다 뱉어내게 하기):
터미널에서 아래 명령어를 입력하세요.
Bash
# 콘솔 로그 레벨을 최고(8)로 높임
sudo sh -c "echo 8 > /proc/sys/kernel/printk"
이제 printk로 찍는 모든 내용이 시리얼 모니터에 실시간으로 뜹니다.

usb메모리등을 라즈베리파이의 usb에 꼽았다 빼면 커널로그가 보이기 시작함.
syslog, logger, 일반 앱)아까 logger "hello"로 보낸 메시지나, 파이썬/C++ 앱에서 printf로 찍은 것은 시리얼 콘솔로 자동으로 가지 않습니다. (이건 저널에만 기록됩니다.)
평상시(기본값)는 4 로 설정하는 것이 표준입니다.
리눅스 커널의 로그 레벨은 숫자가 낮을수록 심각한 문제이고, 높을수록 사소한 정보입니다.
보통 "경고(Warning, 4)" 단계까지만 화면에 보여주고, 잡다한 정보는 숨기는 것이 기본 설정입니다.
Bash
sudo sh -c "echo 4 > /proc/sys/kernel/printk"
cat /proc/sys/kernel/printk
커널 로그 레벨은 총 8단계(0~7)가 있습니다. 설정한 숫자보다 작은(더 심각한) 레벨만 화면에 출력됩니다.
| 레벨 | 이름 | 설명 | 출력 여부 (설정값 4일 때) |
|---|---|---|---|
| 0 | Emergency | 시스템 멈춤 (최악) | ✅ 출력됨 |
| 1 | Alert | 즉각 조치 필요 | ✅ 출력됨 |
| 2 | Critical | 치명적 에러 | ✅ 출력됨 |
| 3 | Error | 일반 에러 | ✅ 출력됨 |
| 4 | Warning | 경고 (주의 요망) | ❌ 여기서부터 차단 (화면엔 안 나옴) |
| 5 | Notice | 알림 (정상이지만 중요함) | ❌ 차단 |
| 6 | Info | 일반 정보 (드라이버 로딩 등) | ❌ 차단 |
| 7 | Debug | 디버깅용 잡다한 정보 | ❌ 차단 |
pr_info, pr_debug)까지 다 보여줌. 드라이버 개발할 때만 사용.두 가지 문제가 생깁니다.
Info)가 너무 빨리 스크롤 되어 지나가버려서, 진짜 중요한 에러(Error)를 못 보고 지나칠 수 있습니다.결론: 개발 끝나면 꼭 4로 돌려놓으세요!

/var/log/syslog 파일을 less로 열고 검색(/), 이동(G, g) 연습.head -n 20 vs tail -n 20 비교.tail -f 옵션 켜두고, 다른 터미널에서 시스템 변화(USB 꽂기 등) 실시간 모니터링.