리눅스를 설치하고 나면 대체로 기대한 대로 잘 작동합니다. 백그라운드에서는 조용히 파일이 생성되고, 설정이 업데이트되고, 캐시가 구축됩니다. 하지만 아무런 문제가 없다면 이런 내부 과정을 들여다볼 일은 거의 없죠.
이번에는 다른 방식으로 접근해 보기로 했습니다. 백그라운드에서 벌어지는 모든 일을 실시간으로 지켜보는 것입니다. 그래서 inotifywait 명령어를 사용해 실시간 활동을 모니터링해 봤습니다. 결과는 놀라웠습니다. 가장 단순한 동작조차 수많은 백그라운드 작업을 만들어낸다는 사실을 직접 확인할 수 있었으니까요.
모든 것을 추적하는 리눅스 기능
파일 활동 모니터링, 생각보다 쉽습니다
inotify는 리눅스 커널 2.6.13 버전에 추가된 커널 레벨 서브시스템입니다. 이 기능은 파일 시스템 이벤트를 실시간으로 포착해 발생 즉시 보고합니다. 쉽게 말해 커널이 사용자에게 변경 사항을 알려주는 것입니다.
inotify는 파일 생성, 수정, 삭제, 접근, 이동을 끊임없이 추적하며 이벤트를 보고합니다. 제가 inotify를 사용하면서 좋았던 점은 일반적인 사용 환경에서 오버헤드가 매우 적다는 것입니다. 백그라운드 스캐너를 따로 돌리는 게 아니라, 커널이 이미 생성하는 신호를 전달만 하기 때문입니다.
다만 inotify와는 직접 상호작용할 수 없기 때문에 inotify-tools 패키지가 필요합니다. 이 패키지는 커널 기능을 터미널에서 사용할 수 있게 해주는 두 가지 사용자 공간 유틸리티를 제공합니다.
| 구성 요소 | 역할 |
|---|---|
| inotify | 파일 시스템 이벤트를 생성하는 커널 서브시스템 |
| inotifywait | 이벤트를 터미널에 실시간으로 출력 |
| inotifywatch | 일정 기간 동안 이벤트 유형별 발생 횟수 집계 |
이 중에서 실시간 모니터링을 담당하는 도구가 바로 inotifywait입니다.
앱을 실시간으로 지켜보게 해주는 단 한 줄의 명령어
몇 초 만에 실시간 파일 추적 시작하기
시작은 간단합니다. inotify는 이미 커널에 내장되어 있으므로, 명령어 한 줄로 inotify-tools만 설치하면 됩니다.
| 배포판 | 설치 명령어 |
|---|---|
| Ubuntu / Debian | sudo apt install inotify-tools |
| Fedora | sudo dnf install inotify-tools |
| Arch Linux | sudo pacman -S inotify-tools |
| openSUSE | sudo zypper install inotify-tools |
설치가 끝나면 inotifywait --version으로 정상 설치 여부를 확인한 뒤, inotifywait -m ~/Documents를 실행합니다. 이때 -m 플래그를 반드시 붙여야 합니다. 그렇지 않으면 첫 번째 이벤트 발생 후 곧바로 종료되기 때문입니다. 명령을 실행하면 해당 디렉터리(예제에서는 'Documents')의 변화가 즉시 화면에 표시됩니다.
출력되는 이벤트는 "감시 대상 디렉터리 / 이벤트 유형 / 이벤트를 발생시킨 파일" 형식을 따릅니다. 예를 들어 /home/user/Documents/ MODIFY notes.txt처럼 나타납니다.
기본 동작을 확인했다면 몇 가지 플래그를 조합해 더 유용한 결과를 얻을 수 있습니다.
| 플래그 | 용도 |
|---|---|
| -m | 한 번의 이벤트 후 종료하지 않고 계속 실행 |
| -r | 모든 하위 디렉터리를 재귀적으로 감시 |
| -e | 특정 이벤트 유형만 필터링, 예: -e create,modify,delete |
| --format | 출력 구조를 제어해 가독성 향상 및 로깅에 최적화 |
| --timefmt | 각 이벤트에 타임스탬프 추가 |
이것만 알면 기본적인 사용에는 충분합니다. 이제 실제 대상만 지정해 주면 됩니다.
실제 앱에 적용해 본 결과
평소 눈치채지 못했던 파일 동작들
내 컴퓨터에서 실제로 어떤 일이 벌어지는지 확인하기 위해, 평소처럼 앱을 사용하면서 inotifywait를 특정 디렉터리에 향하게 했습니다. 놀라웠던 점은 무엇이 보였느냐가 아니라, 백그라운드 활동량 그 자체였습니다.
먼저 텍스트 편집기부터 시작했습니다. Documents 폴더를 감시하는 상태에서 파일을 저장했는데, 이벤트 하나만 알림될 거라 예상했지만 실제로는 연속된 이벤트 시퀀스가 나타났습니다. 임시 파일이 먼저 생성되고, 이어서 moved_from과 moved_to 이벤트가 발생했습니다. 즉, 텍스트 편집기는 원본 파일을 직접 수정하지 않습니다. 저장 시 임시 파일에 먼저 쓴 뒤 원본과 교체하는 방식을 사용하는데, 덕분에 쓰기 도중 문제가 생겨도 원본 파일은 안전하게 보존됩니다.
다음은 ~/.mozilla/firefox/ 디렉터리에서 파이어폭스를 감시해 봤습니다. 브라우저를 실행하자마자 쓰기 작업이 쏟아졌습니다. 몇 초 안에 북마크와 방문 기록을 담당하는 places.sqlite, 열려 있는 탭 정보를 저장하는 sessionstore.jsonlz4에 쓰기가 일어났습니다. 흥미로웠던 점은 브라우저가 유휴 상태일 때도 쓰기 작업이 계속된다는 것이었습니다. 이는 정상적인 브라우저 동작으로 보이며, 크롬에서도 비슷한 유휴 상태의 쓰기를 본 적이 있습니다. 파이어폭스의 배경 활동이 많은 이유는 세션 데이터를 디스크에 지속적으로 기록해, 크래시가 발생해도 탭을 복구할 수 있도록 하기 위함입니다.
하지만 이 모든 것 중 가장 많은 소음을 낸 것은 역시 패키지 설치였습니다. /var/lib/dpkg/를 감시하는 상태에서 apt install을 실행했더니, 가장 먼저 lock-frontend 파일이 나타났습니다. 이는 패키지 작업이 동시에 실행되지 않도록 막아주는 중요한 잠금 메커니즘입니다. 그 후에는 패키지 데이터베이스 전반에서 수많은 쓰기 작업이 벌어졌습니다.
세 디렉터리를 관찰하며 일관되게 확인된 사실 하나는, 깔끔한 단일 파일 작업은 없었다는 점입니다. 모든 작업에는 여러 겹의 계층이 따랐습니다.
실제로 유용해지는 순간
실험으로 시작했지만, 몇 번의 세션만 거치니 inotifywait는 자연스럽게 손이 가는 필수 도구가 되었습니다. 설정 관련 문제를 디버깅할 때 특히 빛을 발합니다. 설정 디렉터리를 감시하며 어떤 파일이 덮어쓰여지는지 실시간으로 확인하면, 설정값이 계속 초기화되는 원인을 좁혀 나갈 수 있습니다.
익숙하지 않은 소프트웨어를 평가할 때도 이 도구를 꺼내곤 합니다. 프로그램이 어디에 데이터를 저장하는지 추측할 필요 없이, 실제로 어떤 파일에 접근하는지 지켜보면 됩니다. 어떤 앱이 예상 밖의 디렉터리에 쓰기를 하는지 쉽게 잡아낼 수 있는 방법이기도 합니다.
다만 inotifywait를 사용한다면 매우 시끄러운 출력을 받아들일 각오가 필요합니다. 또 하나의 한계는 무엇이 변경되었는지는 보여주지만, 그 이유까지 설명해 주지는 않는다는 점입니다. 그럼에도 이 명령어는 리눅스를 관리할 때 가장 유용하게 쓰는 도구 중 하나가 되었습니다.
글쓴이 소개
Afam은 2018년 Make Tech Easier에서 테크 글쓰기를 시작했으며, 이후 Windows, Linux, 오픈소스 도구를 아우르는 가이드·리뷰·팁·해설 기사를 꾸준히 발표해 왔습니다. Technical Ustad, Windows Report, Guiding Tech, Alphr, Next of Windows 등 주요 사이트에도 글을 기고했습니다. 컴퓨터공학 학사 학위를 보유하고 있으며, 데이터 프라이버시와 보안 분야의 열렬한 지지자로 Fuzo Tech 유튜브 채널에서 관련 팁과 튜토리얼을 공유하고 있습니다.