Python inotify로 파일시스템 이벤트 감시하기
특정 디렉터리에 새 파일이 생기거나 로그 파일이 갱신될 때마다 즉시 반응해야 하는 스크립트를 짤 때, 가장 손쉬운 방법은 os.listdir()이나 파일의 mtime을 주기적으로 비교하는 폴링(polling)이다. 하지만 폴링 주기를 짧게 잡으면 CPU를…
특정 디렉터리에 새 파일이 생기거나 로그 파일이 갱신될 때마다 즉시 반응해야 하는 스크립트를 짤 때, 가장 손쉬운 방법은 os.listdir()이나 파일의 mtime을 주기적으로 비교하는 폴링(polling)이다. 하지만 폴링 주기를 짧게 잡으면 CPU를…
Ubuntu 서버를 운영하다 보면 apt upgrade 알림이나 MOTD에서 "N개의 보안 업데이트가 있습니다" 같은 문구를 자주 보게 된다. 그런데 막상 그 N개가 어떤 취약점(CVE)을 고치는 건지, 커널 패치라 재부팅이 꼭 필요한지,…
CPU 사용률은 낮은데 프로세스가 유독 느리게 느껴질 때가 있다. top이나 ps는 프로세스가 CPU를 얼마나 썼는지는 보여주지만, 그 프로세스가 CPU를 기다리느라 얼마나 시간을 날렸는지, 디스크 I/O나 스왑·메모리 회수 때문에 얼마나 블로킹됐는지는…
AOSP(Android Open Source Project)처럼 수백 개의 Git 저장소로 쪼개진 대형 프로젝트를 다뤄본 적이 있다면, 저장소 하나하나를 git clone하고 브랜치를 맞추고 동시에 pull하는 일이 얼마나 번거로운지 알 것이다. 저장소마다 리비전이 어긋나거나,…
이번 주 LWN.net 위클리 에디션 주요 내용이다. AI 스크래퍼 봇 트래픽이 LWN 사이트 자체를 덮친 최악의 공격 사례와 그 대응, io_uring 7.2에 도입되는 락 없는 MPSC 큐, LSFMM+BPF 서밋에서 나온…
C 코드를 gcc -S로 컴파일해 어셈블리 출력을 구경해본 적은 있어도, 처음부터 어셈블리만으로 프로그램을 짜서 빌드하고 실행해본 경험은 드물다. 하지만 커널의 부팅 초기 코드, 예외/인터럽트 벡터 핸들러, 컨텍스트 스위칭처럼 C로는 표현할…
Ubuntu를 새로 설치하면 기본적으로 DHCP로 IP를 자동 할당받지만, 서버로 운영하거나 고정된 주소로 접근해야 하는 환경이라면 정적 IP를 직접 설정해야 한다. Ubuntu 24.04 LTS는 이전 버전과 몇 가지 차이가 있다. Desktop…
특정 프로세스가 어떤 시스템 콜을 얼마나 자주 호출하는지, 혹은 파일 하나를 여는 데 왜 갑자기 수십 밀리초가 걸리는지 알아내야 할 때 strace부터 떠올리기 쉽다. 하지만 strace는 매 시스템 콜마다 대상…
서버 상태를 점검할 때 uname -a, free -h, df -h, ip addr를 하나씩 따로 실행하고 눈으로 훑어보는 방식은 서버가 한두 대일 때는 문제없지만, 배포 전 자동 점검이나 정기 헬스체크처럼 반복적으로…
리눅스 커널의 rtmutex(real-time mutex)는 스레드 간 우선순위 역전을 막기 위한 priority inheritance 로직을 담고 있는, 십수 년 넘게 손댈 일이 거의 없던 오래된 락(lock) 서브시스템입니다. 그런데 2026년 7월, 바로 이…