방금 다음 제안을 발견했습니다. 큰 파일을 삭제하려고 하고 프로세스에 파일 핸들이 열려 있는 경우 해당 파일을 /dev/null에 복사해야 하며 크기가 0으로 줄어듭니다.
어떻게 작동하나요? 아니면 이게 정말 효과가 있는 걸까요?
빠른 검색 후 "예, 완전히 작동합니다"부터 "전체 시스템이 폭발할 것입니다"까지 상충되는 답변을 찾았습니다. 누군가 나를 깨달을 수 있습니까?
여기서 이 질문을 찾았습니다. https://syedali.net/engineer-interview-questions/
답변1
당신은 조언을 잘못 읽고 있습니다. 큰 파일을 에 복사하지 마십시오 /dev/null
. 이것은 어떤 식으로든 영향을 미치지 않으며 공간이 있으면 캐시에 넣으십시오.
cp bigfile /dev/null # useless
파일을 삭제한 다음 복사하지 않는 것이 좋습니다. 이렇게 /dev/null
하면 원본 inode가 그대로 유지되고 프로세스에서 파일이 열려 있는 동안에는 디스크 공간이 해제되지 않습니다.
파일 내용을 1로 바꾸는 것이 좋습니다 . 그러면 디자인 타임 크기가 0 /dev/null
인 경우 /dev/null
파일이 0바이트로 효과적으로 잘립니다 .
cp /dev/null bigfile # works
cat /dev/null > bigfile # works
이러한 명령을 실행하기 위해 셸을 사용하는 경우에는 필요하지 않습니다 /dev/null
. 간단한 빈 리디렉션이 동일한 효과를 가지며 더 효율적이므로 cat /dev/null
어쨌든 작동하지 않습니다.
: > bigfile # better
> bigfile # even better if the shell used supports it
답변2
짧은 대답은 '아니오'입니다. 작동하지 않습니다.
외국 유닉스에는 다양한 맛이 있습니다.일부이것은 유용할 수 있습니다. 링크를 제공할 수 있습니까?
이제 테스트할 수 있습니다:
- 시스템에서 두 개의 터미널을 엽니다.
- 루트가 아닌 사용자에게 대용량 파일 복사(예
/var/log/messages
: ) vi messages
첫 번째 터미널에서 vi ( )를 입력하세요.cp messages /dev/null
다른 측면에서.- 첫 번째 출구 vi.
messages
여전히 거기에 있어야 합니다.
(vi는 좋은 후보가 아닙니다. ( rm messages
) 파일을 삭제하면 파일이 삭제됩니다(적어도 우분투 16.04에서는). vi에서 이를 무시할 수 있습니다(를 사용하지만 파일은 w현재 디렉터리에서 읽혀집니다)..messages.swp