728x90
님이 촬영 한 사진 마놀로 크레티앙 on Unsplash
프로덕션 서버는 수시로 정리해야 하는 수많은 파일을 축적할 수 있습니다. 예를 들어 로그, 캐시 또는 스크립트에서 생성된 기타 파일입니다.
조만간 이 혼란을 없애야 합니다.
$ rm /tmp/logs/*.log
파일 수가 매우 많은 경우 어느 시점에서 파일을 삭제하는 대신 콘솔에 다음 메시지가 표시됩니다.
/bin/rm: Argument list too long.
안 돼! 이것은 무엇을 의미합니까?
문제
사실 rm, cp 또는 find와 같은 명령에서 마스크를 사용하면 Linux 시스템에서 그 자체로 편리한 형식으로 변환되어 사람이 이해할 수 있는 명령을 마스크 아래의 파일 목록으로 변환합니다.
# this is what you're typing in the terminal
rm /tmp/logs/*.log
# this is what is about to execute when you hit "enter"
rm /tmp/logs/1.log /tmp/logs/2.log /tmp/logs/3.log ...
rm 명령에 대한 인수가 허용 한계를 초과할 때 문제점이 시작됩니다. 그런데, 이 한계는 getconf 명령을 사용하여 쉽게 확인할 수 있습니다.
$ getconf ARG_MAX
262144
그렇다면 결국 백만 개의 파일을 제거하는 가장 좋은 방법은 무엇입니까?
For 루프 사용
많은 수의 파일을 제거하는 가장 쉬운 방법은 for 루프에서 필요한 명령을 실행하는 것인데, 여기에는 두 가지 중요한 이점이 있습니다. 첫째, 루프는 리소스를 많이 사용하며 인수 수에 제한이 없습니다. 둘째, 파일 삭제보다 더 복잡한 작업을 수행해야 하는 경우 루프에 추가 논리를 쉽게 래핑할 수 있습니다.
예를 들어 한 줄로 모든 파일을 삭제하는 방법은 다음과 같습니다.
for f in /tmp/logs/*.log; do rm "$f"; done
또는 7일이 지난 파일을 삭제합니다.
for f in /tmp/logs/*.log
do
find $f -mtime +7 -exec rm {} \;
done
또는 파일 수를 계산하고, 변수에 쓰고, 번호를 표시합니다.
FILES_COUNT=`c=0; for f in /tmp/logs/*.log ; do ((c++)); done ; echo $c`
echo "$FILES_COUNT log files left";
기억해야 할 것들
- 자전거를 재발명하지 말고 LogRotate와 같은 도구를 사용하여 자동 회전 및 로그 파일 압축을 관리하십시오
- 프로덕션 서버에서 사용 가능한 디스크 공간을 항상 모니터링하고 디바이스에 남아 있는 공간이 충분하지 않은 경우 자동 경고를 설정합니다
- 라이브 서버에서 실수로 모든 항목을 삭제하지 않도록 실행하기 전에 터미널 명령을 두 번 읽으십시오.
728x90
'프로그래밍 > 리눅스' 카테고리의 다른 글
프로그래밍 「 리눅스 편」BASH 스크립팅 — 변수, 조건문 및 루핑 (0) | 2023.06.11 |
---|---|
프로그래밍 「 리눅스 편」Ligolo-ng를 사용하여 네트워크를 터널링하고 피벗하는 방법 (0) | 2023.06.11 |
프로그래밍 「 리눅스 편」구조화된 방식으로 Linux 학습 (0) | 2023.06.11 |
프로그래밍 「 리눅스 편」여러 앱에서 dockerized nginx를 사용하여 역방향 프록시를 구현하기 위한 실용적인 가이드 (0) | 2023.06.11 |
프로그래밍 「 리눅스 편」리눅스 'lsblk' 명령 마스터하기: 종합 가이드 (0) | 2023.06.11 |