วิธีทำความสะอาด / tmp


73
rizhas@rizhas-laptop:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda7        67G   58G  5,2G  92% /
none            4,0K     0  4,0K   0% /sys/fs/cgroup
udev            1,5G   12K  1,5G   1% /dev
tmpfs           303M  1,2M  302M   1% /run
none            5,0M     0  5,0M   0% /run/lock
none            1,5G  348K  1,5G   1% /run/shm
none            100M   80K  100M   1% /run/user
overflow        1,0M  1,0M     0 100% /tmp
overflow        1,0M  1,0M     0 100% /tmp

วิธีการทำความสะอาด/tmp?


1
น่าจะเป็นคำตอบในUnix และ Linux ไม่แน่ใจว่าจะทำให้คำถามนี้ซ้ำหรือไม่
drc

ไม่ @drc แต่หาดี ฉันใช้ลิงก์จากที่นั่นเพื่ออัปเดตคำตอบของฉัน
Rinzwind


คำตอบ:


116

/ tmp ควรจะล้างข้อมูลเมื่อรีบูต แต่ถ้าคุณไม่รีบูต (ซึ่งเป็นเรื่องปกติสำหรับเซิร์ฟเวอร์) การล้างข้อมูลจะไม่เกิดขึ้น

find /tmp -ctime +10 -exec rm -rf {} +

จะลบไฟล์และโฟลเดอร์ทั้งหมดที่เก่ากว่า 10 วัน คุณอาจต้องการเพิ่มลงใน cron รายวัน


UPDATE

ในความคิดเห็นด้านล่าง @sfussenegger แนะนำรูปแบบที่แตกต่างกันเล็กน้อยของคำสั่งนี้ที่อาจเหมาะกับความต้องการของคุณและระบบที่คุณใช้งานอยู่

sudo find /tmp -type f -atime +10 -delete

นี่คือคำสั่งจะถูกใช้sudoเพื่อให้แน่ใจว่าทุกอย่างจะถูกลบ (หรือคุณสามารถเรียกใช้มันเป็น root) ในการดำเนินงานเกี่ยวกับไฟล์ที่ยังไม่ได้รับการเข้าถึงได้นานกว่า 10 วันและมีเพียงลบไฟล์ไม่ได้โฟลเดอร์ นอกจากนี้ยังใช้-deleteเพื่อหลีกเลี่ยงการเรียกใช้rmคำสั่ง


2
แทนการสร้างเวลา (-ctime) คุณอาจต้องการใช้เวลาในการเข้าถึง (-atime) แทน - แน่นอนเฉพาะเมื่อระบบไฟล์เก็บข้อมูลนี้ (ตรวจสอบเวลาว่างใน / etc / fstab)
sfussenegger

7
ตกลงโปรดอดทนกับฉัน แต่มีอีกอย่างหนึ่ง: คุณต้องการค้นหาไฟล์เท่านั้น ( -type f) มิฉะนั้นคุณอาจพบว่าพาเรนต์ของทรีไดเรกทอรีไม่ได้รับการเข้าถึงเป็นระยะเวลาหนึ่งและลบเนื้อหาทั้งหมดที่อาจยังคงใช้งานอยู่ ดังนั้นคำสั่งสุดท้ายที่ฉันอยากจะแนะนำคือsudo find /tmp -type f -atime +10 -delete
sfussenegger

2
@sfussenegger บางทีคุณสามารถโปรโมตความคิดเห็นของคุณเพื่อหาคำตอบ? ฉันคิดว่ามันจะดีกว่า "ซ่อน" ในความคิดเห็น
โจนาธาน

34

คุณสามารถสันนิษฐานได้ว่าสิ่งใดก็ตามภายในไดเร็กทอรี tmp (/ tmp / / usr / tmp etc) สามารถลบได้ ก่อนที่คุณจะเริ่มลบให้หยุดโปรแกรมและบริการทั้งหมดที่คุณใช้เนื่องจาก / tmp / สามารถใช้โดยโปรแกรมเพื่อเก็บข้อมูลชั่วคราวสำหรับเซสชันนั้น ดังนั้นทำsudo service mysql stopและsudo service apache2 stopถ้าคุณมี mysql และ / หรือ apache ทำงานอยู่ ชื่อของไฟล์ในไดเร็กตอรี่ / tmp / ส่วนใหญ่จะให้เบาะแสกับโปรแกรมที่พวกเขาอยู่

ดังนั้นจากบรรทัดคำสั่ง ...

cd /tmp/
pwd
sudo rm -r *

จะล้างข้อมูลไดเร็กทอรี / tmp / และลบไฟล์และไดเรกทอรีย่อยทั้งหมด ระวังพิมพ์อย่างถูกต้อง คำสั่งpwdในการมีไม่จำเป็น /tmpแต่ควรจะแสดง

ถ้าคุณต้องการให้มันโต้ตอบ (ดังนั้นคุณต้องยืนยันการลบ):

cd /tmp/
sudo rm -ri *

นอกจากนี้ยังควรสังเกตว่าการรีบูตจะล้าง / tmp ด้วยดังที่แสดงไว้ที่นี่: ไดเร็กทอรี / tmp ถูกกำจัดอย่างไร? ดังนั้นหาก / tmp / เต็มไปด้วยไฟล์หลังจากรีบูตคุณต้องตรวจสอบว่าไฟล์เหล่านั้นมาจากที่ใด

ฉันต้องการจะระบุว่า 1 Mb สำหรับ / tmp นั้นมีพื้นที่ไม่มาก คุณใช้ MySQL อยู่หรือเปล่า? ดูhttps://unix.stackexchange.com/a/76058/10017เกี่ยวกับวิธีแก้ไข (ขอบคุณ @drc)


2
"ไม่มีอันตรายใด ๆ " เป็นจริงสำหรับไฟล์ที่ออกเดทก่อนที่จะรีบูตครั้งล่าสุด มิฉะนั้นอาจมีการใช้งานโดยโปรแกรมปัจจุบันและ (สำหรับโปรแกรมนั้น) อาจทำให้เกิดปัญหา ... ตัวอย่างเช่นฉันมีสคริปต์ที่สร้างไฟล์ใน / tmp แล้วอ่านใหม่อีกครั้งเพื่อทำขั้นตอนต่อไป . การลบ / ตัดทอนในระหว่างนั้นจะขัดขวางการทำงานของโปรแกรม (และอาจนำไปสู่ผลลัพธ์ที่เป็นอันตรายขึ้นอยู่กับไฟล์ที่ใช้)
Olivier Dulac

... ดังนั้นการใช้who –b(วันที่บูตครั้งสุดท้าย) จากนั้นสร้างไฟล์ / boottime ซึ่งเป็นช่วงเวลาของการบูท ( touch ....... /boottime) จะช่วยให้ผู้ใช้ปลอดภัยfind /tmp -type f \( ! -newer /boottime \) -delete \;โดยการลบเฉพาะไฟล์ที่เก่ากว่าการบูตครั้งล่าสุด
Olivier Dulac

ฉันสามารถใช้ความคิดเห็นเหล่านี้เพื่อขยายคำตอบได้ไหม? ใจคุณ: / tmp นี่อาจมาจาก mysql
Rinzwind

4
ในฐานะคนที่ใช้mktempสคริปต์ของฉันเป็นประจำฉันไม่เห็นด้วยอย่างยิ่งกับคำสั่ง "ไม่เป็นอันตราย"
hytromo

2
หาก/tmpมีสิ่งใดที่เก่ากว่ารีบูตครั้งล่าสุดสคริปต์เริ่มทำงานจะไม่ทำงาน
Simon Richter

10

tmpreaperโปรแกรมสามารถใช้ในการทำความสะอาด/ tmpเป็นระยะ ๆ โปรแกรมนี้จะลบทุกสิ่งที่ไม่ได้เข้าถึงในกรอบเวลาที่กำหนดซึ่งโดยปกติจะใช้เวลาสองสัปดาห์ เพื่อให้ทำงานได้อย่างถูกต้องระบบไฟล์ที่ใช้งานอยู่ควรatimesเปิดใช้งานตัวเลือก หากคุณใช้tmpfsซึ่งดูเหมือนว่าคุณกำลังทำอยู่คุณควรจะปรับ

แน่นอนว่าการรีบูตเครื่องจะลบล้าง/ tmpด้วย แต่ก็น่าเบื่อ


น่าแปลกใจสำหรับฉันที่นี่ไม่ใช่ตัวเลือกมาตรฐานใน Ubuntu และ Debian เป็นเรื่องปกติที่ฉันจะพบกับกระบวนการผู้ใช้ที่ไม่มีสิทธิพิเศษที่เต็มไปด้วย / tmp
ปราชญ์

1
ใช่ แต่เป็นนโยบายที่ต้องกำหนดโดยผู้ดูแลระบบ หากคุณมีบริการระยะยาวที่คาดว่าข้อมูลของพวกเขาจะถูกเก็บไว้เริ่มต้นใด ๆ แต่ "ไม่มีการทำความสะอาด" จะเป็นอันตราย
Simon Richter

7

ไดเรกทอรี/tmpหมายถึงชั่วคราว

ไดเรกทอรีนี้เก็บข้อมูลชั่วคราว คุณไม่จำเป็นต้องลบอะไรเลยข้อมูลที่อยู่ในนั้นจะถูกลบโดยอัตโนมัติทุกครั้งที่ทำการรีบูต

ยังถ้าคุณต้องการลบข้อมูลที่มีอยู่ในการใช้งาน

sudo rm -r /tmp/*

การลบออกจะไม่ทำให้เกิดปัญหาใด ๆ เนื่องจากเป็นไฟล์ชั่วคราว


9
พวกเขาชั่วคราวในแง่ที่ว่าพวกเขาไม่ต้องการหลังจากรีบูตมันไม่ได้หมายความว่าพวกเขาไม่ต้องการในตอนนี้หรือว่าพวกเขาจะไม่ต้องการใน 5 นาที
Daniel Serodio

5
ไม่เป็นความจริงที่ว่า "จะไม่ทำให้เกิดปัญหาใด ๆ " ฉันทำสิ่งนี้ครั้งเดียวก่อนที่ฉันจะรู้ดีกว่าและซ่อนเครื่องจักรของฉันไว้
Kyle Strand


4

rm -r ./*โปรดใช้ความระมัดระวังก่อนที่จะใช้คำสั่งเช่น เมื่อคุณเรียกใช้มันจะยากมากหรือเป็นไปไม่ได้ที่จะกู้คืนข้อมูลใด ๆ

ทั้งหมดจะถูกลบออก ตรวจสอบให้แน่ใจว่าไดเรกทอรีที่คุณกำลังลบนั้นถูกต้อง

มีวิธีที่ปลอดภัยกว่าในการจัดการกับสิ่งต่าง ๆ

# sudo rm -r /tmp/*

ด้วยวิธีนี้เมื่อคุณเรียกใช้คำสั่งนี้โดยไม่ตั้งใจจากภายในเชลล์ของคุณคำสั่งhistoryจะไม่ลบไฟล์ที่ไม่ถูกต้อง (เว้นแต่คุณจะเก็บไว้/tmp)


2

/tmpไดเรกทอรีเคลียร์โดยค่าเริ่มต้นในทุกบูตเพราะTMPTIMEเป็น0ค่าเริ่มต้น


1

หากการเมานต์“ / tmp” ของคุณบนระบบไฟล์ linux นั้นถูกเมาท์เป็นล้น (มักจะมีขนาด 1MB) อาจเป็นเพราะคุณไม่ได้ระบุ“ / tmp” เป็นพาร์ติชันของตัวเองและระบบไฟล์รูทของคุณเต็มและ“ / tmp” ประกอบใหม่เป็นทางเลือก หากต้องการแก้ไขปัญหานี้หลังจากที่คุณล้างพื้นที่แล้วให้ยกเลิกการต่อเชื่อมทางเลือกและควรติดตั้งใหม่ที่จุดเดิม:

sudo umount overflow

หากอุปกรณ์ไม่ว่างใช้งาน

sudo umount -l overflow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.