/ tmp 디렉토리는 어떻게 정리됩니까?


300

/tmp디렉토리 는 어떻게 정리됩니까? 자동입니까? 그렇다면 얼마나 자주 정리합니까?


15
임시 파일이 디스크에 기록되지 않습니다. RAM 디스크에 기록됩니다. 나는 tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/ etc / fstab에 넣었다 .
Anonymous

답변:


192

노트! 이 답변은 적어도 우분투 14.04 이후로 구식입니다. 현재 상황에 대한 다른 답변을보고 그들이 올바른 것으로 판명되면 격렬하게 찬성하십시오. 또한 의견을 게시하여 현재 정답에 대한 링크를 여기에 넣을 수 있습니다.

14.04의 경우 https://askubuntu.com/a/759048/1366을 참조 하십시오.

16.10의 경우 https://askubuntu.com/a/857154/453746을 참조 하십시오.


2011 년의 오래된 답변 :

정리 /tmp는 upstart 스크립트에 의해 수행됩니다 /etc/init/mounted-tmp.conf. 스크립트는 /tmp마운트 될 때마다 upstart로 실행됩니다 . 실제로 그것은 모든 부팅에서 의미합니다.

스크립트는 대략 다음을 수행합니다. 파일 /tmp$TMPTIME며칠 이 지난 파일 은 삭제됩니다.

기본값 인 $TMPTIME0은 모든 파일과 디렉토리 /tmp가 삭제됨 을 의미합니다 . $TMPTIME에 정의 된 환경 변수입니다 /etc/default/rcS.


14.04의 경우 더 이상 사실이 아닙니다 (스크립트가 더 이상 존재하지 않음).
Martin Schröder

@Martin Schröder-스크립트가 시스템에 존재하며 14.04를 새로 설치했으며 tmpreaper가 존재하지 않습니다!
랜스 홀랜드

아치 리눅스를 사용하고 있으므로 확인할 수 없습니다. 죄송합니다. 누군가 이것을 확인하고 의견을 말하거나 편집하십시오.
lesmana 2016 년

4
우분투 16.04에서 tmpreaper는 안전하지 않은 상태로 버려졌습니다 : fossies.org/linux/tmpreaper/debian/README.security
tamerlaha

1
Ubuntu 16.04에서는 시스템 메커니즘으로 대체되었습니다. 이 문서를 읽고 실제로 찾을 수있는 것은 왜 불안하다고 주장하는 보안 분석에 결함이 있는지에 대한 설명입니다.
JdeBP

141

기본적으로 TMPTIME0 이므로 디렉토리는 부팅 할 때마다 기본적으로 지워집니다 .

다음 파일에서 시간을 변경할 수 있습니다.

/etc/default/rcS

TMPTIME tmp dir 영혼이 얼마나 자주 지워지는지를 말합니다.


9
부팅 할 때마다 서버와 같이 다시 부팅되지 않는 머신에는 지우기가 이상적이지 않습니다. 서버의 가동 시간이 378 일이므로 / tmp에 5Gb 공간을 차지하는 500,000 개가 넘는 파일이 있습니다. 재부팅 할 때 파일을 지우는 데 몇 시간이 걸리기 때문에 재부팅을 꺼려합니다.
rjmunro

10
귀하의 경우 tmpreaper에는 기회를 주어야 합니다.
qbi

1
CRON 작업은 쉽게 해결할 수 있습니다.
Ken Sharp

또한 tmpwatch적절한 도구 여야합니다.
ArekBulski

1
우분투 / systemd가 이미 솔루션을 제공하는 것 같습니다. 나는 더 많은 것을 말할 것입니다 .... 체계적.
Ken Sharp

65

그동안 /tmp폴더에 파일을 장기 저장하는 장소가 아니다, 때때로 당신은보다 조금 더 일을 유지하려면 재부팅 다음에 우분투 시스템의 기본이다. /tmp테스트 하는 동안 무언가를 다운로드 하고 변경 후 재부팅 한 다음 원래 데이터를 다시 잃어 버렸습니다. /tmp파일을 조금 더 길게 유지하려면 변경할 수 있습니다 .

/tmp정리 빈도 변경

/tmp재부트시 시스템을 지우도록하는 기본 설정 은 /etc/default/rcS파일에 유지 됩니다. 우리가 볼 가치는 TMPTIME입니다.

TMPTIME=0파일의 수명에도 불구하고 재부팅시 파일 삭제 의 현재 값은 다음과 같습니다 . 이 값을 다른 (양수) 숫자로 변경하면 파일이 생존 할 수있는 일수가 변경됩니다 /tmp.

TMPTIME=7

이 설정을 사용하면 파일 /tmp이 일주일이 될 때까지 머무른 다음 다음에 다시 부팅 할 때 파일을 삭제할 수 있습니다. 음수 ( TMPTIME=-1)는 시스템에서 아무것도 삭제하지 않도록 지시합니다 /tmp. 이것은 아마도 원하는 것이 아니지만 사용할 수 있습니다.


1
좋은 설명. 그러나 어떤 스크립트에서 정리 명령이 있습니까? 나는 보았지만 적용 할 수 없다고 생각 /etc/init/mounted-temp.conf하는 선 start on mounted MOUNTPOINT=/tmp이 있습니다.
enzotib

7
파일을 자동으로 제거하지 않으려면 /var/tmp대신 파일을 넣으십시오 /tmp.
Gilles

1
또한 OOM으로 인해 시스템이 충돌 할 때 손실하고 싶지 않은 파일 (렌더링 된 비디오 프레임)을 유지하는 것이 편리합니다. 더 나은 해결책은 물론 문제를 해결하는 것입니다. :-)
Ken Sharp

Cygwin에서이 작업을 수행 할 수 있습니까?
CMCDragonkai

46

우분투 16.10에서 이것을 확인하고 있습니다. / etc / default / rcS를 편집해도 더 이상 효과가 없으며 tmp의 파일은 파일에 넣은 내용에 관계없이 재부팅으로 지워집니다. 다른 사람들이 언급했듯이 tmpreaper는 더 이상 사용되지 않습니다.

정답은 Ubuntu 16.10에 새로운 설정이 있다는 것입니다. 매뉴얼 페이지 "tmpfiles.d"에 문서화 된 /etc/tmpfiles.d 폴더가 있습니다. 해당 폴더에 / tmp를 지 울지 여부를 제어하는 ​​구성 파일을 배치해야합니다. 이것은 20 일이 지난 경우가 아니라면 / tmp에서 파일을 지울 때 재부팅을 중지하기 위해 수행하는 작업입니다.

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

파일을 삭제하지 않으려면 "20d"를 "-"로 바꾸십시오. 맨 페이지는 세부 사항으로 거의 뚫리지 않습니다.

새로운 설정의 장점은 시스템이 재부팅되지 않아도 파일 클리너가 계속 실행될 수 있다는 것입니다 (항상 서버에있는 경우). 그것은 큰 장점입니다.


5
man tmpfiles.d
Martin Schröder

하이픈을 사용하여 원본 파일 권한과 소유자를 유지할 수 있음을 발견했습니다.d /tmp/ - - - 20d
Dave Yarwood

2
또한 주목할 가치가 있습니다. 수동으로 청소 작업을 실행하여 구성을 테스트 할 수 있습니다.systemctl start systemd-tmpfiles-clean
Dave Yarwood

@ pauljohn32는 16.10 이후 버전에서도 마찬가지입니까?
kapad

3
@ kapad : 방금 우분투 18.04에서도 작동한다는 것을 확인했습니다.
유전자 빈센트

26

우분투 14.04에서이은에 의해 이루어집니다 tmpreaper크론 매일 호출 (에서있는 /etc/cron.daily). 프로그램을 통해 설정 가능 /etc/default/rcS하고 /etc/tmpreaper.conf.


내 시스템에서 tmpreaper는 /etc/cron.daily에 없었지만 apt-get과 함께 설치할 수있었습니다
Joe Germuska

10

14.04 이전 :

재부팅 할 때마다 정리됩니다.


14.04 이상으로 나타납니다. "부팅 당"스크립트가 아닌 tmpreaper 만 사용합니다. FWIW
rogerdpack

14.04 시스템은 모두 재부팅시 정리됩니다. 들어 본 적조차 없다 tmpreaper.
Ken Sharp

시스템을 다시 부팅하지 않으면 어떻게됩니까?
phuclv December

7

A의 systemd우분투 (15.10 및 이상),이는 사용 systemd에 의해 수행되는 systemd-tmpfiles-clean서비스와 타이머를 :

$ systemctl cat systemd-tmpfiles-clean.service 
# /lib/systemd/system/systemd-tmpfiles-clean.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-sync.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle

$ systemctl cat systemd-tmpfiles-clean.timer  
# /lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

따라서 systemd-tmpfiles-clean종료시, 그렇지 않으면 하루에 한 번 실행됩니다. 정리 한 파일 /etc/tmpfiles.d다른 답변 에서 언급 한대로 확장 할 수 있습니다 .

systemctl edit systemd-tmpfiles-clean.timer사용하고 다양한 시스템 Timer구성 옵션을 사용 하여 타이머 동작 자체를 변경할 수 있습니다 (참조 man 5 systemd.timer).


타이머를 20 분으로 변경했으며 status 명령이 실제로 20 분 구성을 사용하고 있음을 보여줍니다. 하지만 내 문제는 /tmp여전히 정리되지 않은 것입니다. 정리해야합니다. 수동 시작조차도 sudo systemctl start systemd-tmpfiles-clean트릭을 수행하지 않습니다. 어떤 아이디어가 있습니까?
user2932688

5

Ubuntu를 실행하는 서버 중 하나에는 / tmp에서 파일을 제거하는 스크립트가 있으며 야간에 실행됩니다.

스크립트는 다음과 같습니다

#!/bin/sh
# Clean file and dirs more than 3 days old in /tmp nightly

/usr/bin/find /tmp -type f -atime +2 -mtime +2  |xargs  /bin/rm -f &&

/usr/bin/find /tmp -type d -mtime +2 -exec /bin/rm -rf '{}' \; &&

/usr/bin/find /tmp -type l -ctime +2 |xargs /bin/rm -f &&

/usr/bin/find -L /tmp -mtime +2 -print -exec rm -f {} \;

위의 내용을 파일 chmod 775 파일에 저장하고 cron 항목을 만들어 실행하십시오. 이것은 웹 서버이므로 명백한 이유로 재부팅하지 않습니다.


6
tmpwatch를 사용하는 것이 좋습니다 .
poolie

9
마지막 줄은 매우 위험합니다. 일반적으로, 모두 실행할 수 ln -s /usr /tmp/kaboom도 나 ln -s /* /tmp/...
다니엘 알더
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.