![정규식과 일치하는 sed 저장 라인의 -i 옵션은 어디에 있습니까?](https://linux55.com/image/20660/%EC%A0%95%EA%B7%9C%EC%8B%9D%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20sed%20%EC%A0%80%EC%9E%A5%20%EB%9D%BC%EC%9D%B8%EC%9D%98%20-i%20%EC%98%B5%EC%85%98%EC%9D%80%20%EC%96%B4%EB%94%94%EC%97%90%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
내 서버 하드 드라이브의 공간을 확보하려고 sed를 사용하여 로그 파일의 이전 날짜를 일치시켰더니 줄어들었지만 내 루트 파티션은 이전에 사용했던 91 대신 이제 98%의 공간을 사용하고 있습니다. %sed에게 전화했어요. 이렇게 했는데 sed -i '/^Jan/ d' file.log
로그 파일이 6G에서 400M로 줄었습니다. 임시 파일이나 이와 유사한 파일을 검색하려고 하는데 find / -size +1G
새 파일과 일치하지 않습니다.
편집하다:echo -n > file.log
서비스 충돌을 피하기 위해 이렇게 했지만 문제가 여전히 존재하므로 이는 일시적인 현상일 뿐입니다.
답변1
sed의 옵션은 --in-place
실제로 파일을 그 자리에서 편집하지 않으므로 다음과 같습니다.
if sed ... input > /tmp/output$$ ; then
mv /tmp/output$$ input
else
rm /tmp/output$$
fi
이는 명령을 실행하기 mv
전에 디스크의 입력 파일 크기를 두 배로 늘릴 수 있음을 의미합니다. 파일 시스템이 가득 차면 매우 비효율적이 됩니다.
더 큰 문제는 디스크 공간이 부족하거나 /var/log 및 /tmp를 /와 동일한 파티션에 마운트하고 /가 작은 파티션에 있는 경우 이를 채우는 것입니다. 지금 그리고 다음 일주일 전체와 그 다음 주 등등.
디스크가 어떻게 설정되어 있는지 확인 하세요 mount
. 당신이 필요로 할:df /tmp
df /var/log
- 디스크 설치 복구
- 더 큰 디스크를 구입하세요
- 조사
logrotate
- 너무 많이 기록하지 마세요
- 또는 위의 조합
답변2
sed -i에서 strace를 실행하면 임시 파일의 위치가 명확하게 표시됩니다. 그러나 가장 쉬운 방법은 -i를 사용하지 않는 것입니다. 공간이 있는 파티션의 파일로 출력을 리디렉션합니다.