Python inotify로 파일시스템 이벤트 감시하기

특정 디렉터리에 새 파일이 생기거나 로그 파일이 갱신될 때마다 즉시 반응해야 하는 스크립트를 짤 때, 가장 손쉬운 방법은 os.listdir()이나 파일의 mtime을 주기적으로 비교하는 폴링(polling)이다. 하지만 폴링 주기를 짧게 잡으면 CPU를…

Continue ReadingPython inotify로 파일시스템 이벤트 감시하기

Ubuntu 커널 보안 패치(USN) 확인하고 적용하는 방법

Ubuntu 서버를 운영하다 보면 apt upgrade 알림이나 MOTD에서 "N개의 보안 업데이트가 있습니다" 같은 문구를 자주 보게 된다. 그런데 막상 그 N개가 어떤 취약점(CVE)을 고치는 건지, 커널 패치라 재부팅이 꼭 필요한지,…

Continue ReadingUbuntu 커널 보안 패치(USN) 확인하고 적용하는 방법

delayacct 사용법

CPU 사용률은 낮은데 프로세스가 유독 느리게 느껴질 때가 있다. top이나 ps는 프로세스가 CPU를 얼마나 썼는지는 보여주지만, 그 프로세스가 CPU를 기다리느라 얼마나 시간을 날렸는지, 디스크 I/O나 스왑·메모리 회수 때문에 얼마나 블로킹됐는지는…

Continue Readingdelayacct 사용법

ARMv8 AArch64 어셈블리 입문 가이드

C 코드를 gcc -S로 컴파일해 어셈블리 출력을 구경해본 적은 있어도, 처음부터 어셈블리만으로 프로그램을 짜서 빌드하고 실행해본 경험은 드물다. 하지만 커널의 부팅 초기 코드, 예외/인터럽트 벡터 핸들러, 컨텍스트 스위칭처럼 C로는 표현할…

Continue ReadingARMv8 AArch64 어셈블리 입문 가이드

bpftrace로 리눅스 시스템 콜과 지연시간 디버깅하기

특정 프로세스가 어떤 시스템 콜을 얼마나 자주 호출하는지, 혹은 파일 하나를 여는 데 왜 갑자기 수십 밀리초가 걸리는지 알아내야 할 때 strace부터 떠올리기 쉽다. 하지만 strace는 매 시스템 콜마다 대상…

Continue Readingbpftrace로 리눅스 시스템 콜과 지연시간 디버깅하기

‘GhostLock'(CVE-2026-43499): 15년 묵은 리눅스 커널 rtmutex 버그가 root와 컨테이너를 함께 내준 이유

리눅스 커널의 rtmutex(real-time mutex)는 스레드 간 우선순위 역전을 막기 위한 priority inheritance 로직을 담고 있는, 십수 년 넘게 손댈 일이 거의 없던 오래된 락(lock) 서브시스템입니다. 그런데 2026년 7월, 바로 이…

Continue Reading‘GhostLock'(CVE-2026-43499): 15년 묵은 리눅스 커널 rtmutex 버그가 root와 컨테이너를 함께 내준 이유