cp 대용량 파일을 /dev/null로 저장하여 크기를 0으로 줄입니다.

cp 대용량 파일을 /dev/null로 저장하여 크기를 0으로 줄입니다.

방금 다음 제안을 발견했습니다. 큰 파일을 삭제하려고 하고 프로세스에 파일 핸들이 열려 있는 경우 해당 파일을 /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

짧은 대답은 '아니오'입니다. 작동하지 않습니다.

외국 유닉스에는 다양한 맛이 있습니다.일부이것은 유용할 수 있습니다. 링크를 제공할 수 있습니까?

이제 테스트할 수 있습니다:

  1. 시스템에서 두 개의 터미널을 엽니다.
  2. 루트가 아닌 사용자에게 대용량 파일 복사(예 /var/log/messages: )
  3. vi messages첫 번째 터미널에서 vi ​​( )를 입력하세요.
  4. cp messages /dev/null다른 측면에서.
  5. 첫 번째 출구 vi.

messages여전히 거기에 있어야 합니다.

(vi는 좋은 후보가 아닙니다. ( rm messages) 파일을 삭제하면 파일이 삭제됩니다(적어도 우분투 16.04에서는). vi에서 이를 무시할 수 있습니다(를 사용하지만 파일은 w현재 디렉터리에서 읽혀집니다)..messages.swp

관련 정보