(linux) 로그 파일 비우기, 로그 파일 내용 삭제 '/dev/ null'
(linux) 로그 파일 비우기, 로그 파일 내용 삭제 '/dev/null'
애플리케이션 등에서 기록되는 로그 파일의 경우 이상적으로는 rotatelogs, logrotate 등의 기능을 활용하여 날짜별로 파일을 분리하고, 일정 기간이 지난 파일은 자동으로 삭제하는 방식을 통해 로그 파일의 용량이 너무 커지지 않도록 관리합니다.
하지만 실제로는 위와 같은 조치를 하지 않고 있다가 로그 파일의 용량이 너무 커져서 시스템적인 문제가 발생하는 일도 종종 있을 수 있는데요.
해당 포스팅에서는 '로그 파일을 비우는 방법'과, '왜 파일 자체를 삭제하지 않고 내용만 비우는지'에 대해서 살펴보겠습니다.
1. 로그 파일 비우는 방법
## 기본 형식
cat /dev/null > target_file
## 로그 파일과 동일한 경로에 있을 경우
cat /dev/null > target_file.log
## 로그 파일과 다른 경로에 있을 경우(전체 경로 입력)
cat /dev/null > /target_file_full_path/target_file.log
로그 파일을 비우는 방법은 위 예시와 같이 'cat file_a > file_b' 명령어를 통해 파일의 내용을 덮어쓰는 방식을 활용하여 수행됩니다.
(file_a, file_b는 기존에 존재하는 파일)
* 해당 방식의 경우 'target_file'에 대한 쓰기 권한이 있어야 실행할 수 있습니다.
그리고 여기서 사용되는 '/dev/null' 파일은 리눅스 시스템에서 특수한 역할을 하는 디바이스 파일로 'null device'라고도 불리는데요.
'/dev/null' 파일에 쓰이는 모든 데이터는 소멸되며, 어떠한 출력도 생성하지 않는다는 특징이 있습니다.
## 아무것도 출력되지 않음
echo "hello" > /dev/null
## 내용이 없다는 것을 나타내는 EOF(End of File) 반환
cat /dev/null
이러한 특징으로 인해 '/dev/null' 파일은 출력 결과를 버릴 때에도 사용되며, 위 예시에서 처럼 파일을 비울 때도 사용됩니다.
(내용 흐름에 필요한 간략한 내용만 정리하였으며, 더 자세한 내용이 궁금하시다면 구글링을 통해 찾아보시면 좋을 것 같습니다.)
2. 로그 파일 자체를 삭제하지 않고 내용만 삭제하는 이유
파일을 삭제하지 않고 내용만 비우는 가장 큰 이유는 '시스템의 안전성 및 일관성 유지'입니다.
단순한 로그 파일처럼 보이더라도 해당 파일을 삭제했을 때 어떤 사이드 이펙트가 발생할지 모르는데요.
시스템 내에서 해당 로그 파일의 경로를 참조하고 있는 다른 기능이 있을 수도 있으며, 특정 프로세스가 실시간으로 로그 파일에 로그를 기록하고 있을 수도 있기 때문에, 시스템이 계속 동작될 수 있도록 파일의 내용만 비우고 파일 자체는 그대로 유지하는 것입니다.
(파일을 삭제하고 새로 생성하는 경우, 파일 권한을 동일하게 설정할 수 없다면 달라진 권한으로 인해 문제가 발생할 수 있습니다.)
또한 파일 용량이 클수록 파일을 삭제하고 새로 생성하는 데 많은 시간이 소요되지만, 파일의 내용만 비우는 작업은 훨씬 빠르기 때문에 효율적인 측면에서도 장점을 가집니다.
< '/dev/null' 파일 관련 참고 자료 >