/ tmp의 내용을 수동으로 삭제해야합니까? 보입니다 . 어떤 사람들 /tmp은 디스크를 가득

“오래된”파일 /tmp이 정기적으로 삭제 될 것이라는 인상을 받았습니다 . 그러나 /tmp원하는만큼 오래 성장하고 아무것도 삭제되지 않는 것으로 보입니다 . 어떤 사람들 /tmp은 디스크를 가득 채우는 경우에만 내버려두고 내용을 삭제하는 것이 좋습니다 .

내 질문은, /tmp실제로 스스로를 돌보지 않도록 설계 되었습니까? 모범 사례는 무엇입니까?



답변

질문에 대답하려면 :

  • 되어 /tmp자동으로 비워 질 예정 :
  • /tmp정기적으로 수동으로 파일을 삭제해야합니까? 아니오 , 시스템에서 처리합니다.

스스로에게 물어볼 수있는 경우 :

  • 나는 파일을 삭제할 수 있습니다 /tmp(등 흔적을 제거 할 필요 공간) 어떤 이유 : 그것은 의존 , 읽어 .

파일 시스템 계층 표준 (FHS) 상태 :

/ tmp 디렉토리는 임시 파일이 필요한 프로그램에 사용 가능해야합니다.

프로그램은 / tmp의 파일 또는 디렉토리가 프로그램 호출간에 유지된다고 가정해서는 안됩니다.

/var/tmp/유사한 목적을 하지만, 재부팅시 삭제.

그것은됩니다 보장되지 것을 /tmp/또는 /var/tmp/정기적으로 정리됩니다. 대부분의 시스템은 때때로 일부 정리를 수행하지만 배포 및 설정에 따라 달라질 수 있습니다. 의 코멘트 를 참조하십시오 mike.

/ tmp 에서 파일을 삭제해야하는 경우 먼저 파일이 사용 중인지 확인하십시오. 당신은 이것을 쉽게 할 수 있습니다 :

lsof /tmp/file_to_delete

권한이있는 경우 프로세스 이름, PID 및 파일 유형과 같이 해당 파일에 대한 핸들을 보유하고있는 프로세스가 표시됩니다. 실제로 모든 프로세스를 표시하려면 sudo사용자 root 앞에 추가 하거나 실행하십시오 .

lsof +D /tmp

/tmp( +D) 아래 에 현재 열려 있는 모든 파일 과 디렉토리 가 표시됩니다 . 물론 이러한 파일을 삭제해서는 안됩니다.

실제로 열려있는 파일을 삭제할 때 (권한이있는 경우) 파일 시스템 네임 스페이스에서 액세스 할 수 없지만 파일 핸들이 열려있는 프로세스에는 여전히 존재합니다. 해당 핸들을 닫은 후에는 해당 프로세스에 대해 더 이상 파일에 액세스 할 수 없으며, 프로세스가 파일을 더 이상 열지 않으면 결국 삭제됩니다. 프로세스는 파일이 후속 open호출 간에도 존속한다고 가정해서는 안되지만 프로그래머는 느슨하며 알 수 없습니다. 따라서 일부 프로그램에서 여전히 사용중인 파일을 삭제 하는 것이 영리 하지 않습니다 .


답변

나는 이것이 운영 체제에 달려 있다고 생각합니다. 재부팅시 / tmp가 일반적으로 지워지고 실제로 어떤 파일이 활성화되어 있는지 알지 못하기 때문에 세션 중반에 시스템을 정리하는 것이 안전하지 않을 것이라고 생각합니다.

용감한 경우 특정 연령보다 오래된 파일을 삭제하는 명령을 crontab에 던지려고 할 수 있지만 여전히 사용중인 파일을 삭제하면 문제가 발생할 수 있습니다. 당신은 같은 명령을 시도 할 수 있습니다 (나는 그것을 시도하지 않았습니다)

/ tmp -type f -ctime +10 -exec rm {} + 찾기

이론적으로 10 일보다 오래된 / tmp 아래의 모든 파일을 제거합니다.


답변

/ tmp 및 / var / tmp 디렉토리는 정상적인 스케줄에 따라 정리됩니다. 배포판에 따라 다를 수 있습니다. CentOS 시스템 (RedHat 복제본)에는 매일 스케줄 에 따라 tmp 디렉토리 클리너 인 tmpwatch 를 실행하도록 예약 된 cron 작업이 있습니다 . / var / tmp의 파일은 / tmp /의 파일보다 조금 더 오래 사용할 수 있습니다. 또한 모든 프로세스가 새로운 프로세스이기 때문에 파일을 열어 두는 것이 아무것도 없다는 것을 알고 재부팅 할 때 / tmp를 제거하는 스크립트를 보았습니다 (그러나 명시 적으로 / var / tmp는 아닙니다).

예, / tmp는 기본 스크립트를 유지 관리합니다. 이 유지 보수 시간이 지나면 여전히 채워질 수 있습니다. 수동으로 정리하도록 선택한 경우 최상의 sysadmin 관행이주의해야합니다. Sysadmin lore는 n00b sysadmins가 간단한 find스크립트를 실행할 때 삭제 된 필요한 시스템 파일을 가리키는 / tmp의 심볼릭 링크에 대해 설명합니다 .


답변

CentOS에는 주어진 시간 동안 액세스되지 않은 파일을 재귀 적으로 제거 하는 작업이 /etc/cron.daily호출 tmpwatch됩니다. 일반적으로 / tmp와 같은 임시 보유 공간에 사용되는 디렉토리를 정리하는 데 사용됩니다.

이것은 /etc/cron.daily/tmpwatch스크립트입니다

#! / bin / sh
flags = -umc
/ usr / sbin / tmpwatch "$ flags"-x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/ tmp / hsperfdata_ *'10d / tmp
/ usr / sbin / tmpwatch "$ flags"30 일 / var / tmp
/ var / {cache / man, catman} / {cat?, X11R6 / cat?, local / cat?}에서 d의 경우; 해야 할 것
    [-d "$ d"] 인 경우; 그때
        / usr / sbin / tmpwatch "$ flags"-f 30d "$ d"
    fi
끝난

/tmp 실행중인 프로세스가 해당 디렉토리에서 파일에 액세스 할 수 있으므로 시스템을 재부팅 할 때만 디렉토리 내용이 삭제됩니다.


답변

에서 컨텐츠를 제거 할 수 있습니다 /tmp/. 그러나 그렇게하는 문제는 정기적으로 쓰는 서비스가 /tmp/있고 파일을 삭제하면 다시 시작될 때까지 서비스가 중단되거나 중단 될 수 있다는 것입니다.


답변

FHS는 정의 /tmp하고, “종종 시스템 재부팅 사이에 유지되지, (또한은 / var / tmp를 참조) 임시 파일”등의 디렉토리를 /var/tmp“임시 파일이 재부팅 사이에 보존 할”로.

오늘날 /tmp많은 GNU / Linux 배포판에서 기본적으로 RAM 파일 시스템 (tmpfs)으로되어 있지만 (선택적임) /tmp사실상 비 영구적입니다.

(Arguibly) 응용 프로그램은 임시 파일을 적절하게 관리해야하며, 여기에는 사용이 끝나면 삭제하는 것이 포함되며 관리자가 파괴적인 삭제를 예약하지 않아도됩니다.


답변

데비안 (또는 우분투와 같은 파생어)을 실행하고 있다면 / etc / default / rcS 파일을보고 TMPTIME환경 변수를 조정해야 합니다. 정의에 따르면 / tmp에있는 내용은 다음에 다시 부팅 할 때 여기서 수행 할 작업이 없습니다.

나는 추천한다

  • TMPTIME서버 에서 변수 사용
  • 데스크탑에서 / tmp를 tmpfs (ram로)로 마운트하십시오 (더 빠른 속도를 위해).