ล้างไดเรกทอรี $ HOME


17

ในช่วงไม่กี่ปีที่ผ่านมาใน$HOMEไดเรกทอรีของฉันมีไฟล์และไดเรกทอรีที่ซ่อนอยู่ปรากฏขึ้นมากมาย

ฉันต้องการลบสิ่งที่ไม่จำเป็นอย่างต่อเนื่อง

ฉันจะทราบได้อย่างไรว่าแอปพลิเคชันใดสร้างไฟล์และไดเรกทอรีที่ซ่อนอยู่เหล่านั้น

ฉันจะแน่ใจได้อย่างไรว่ามันปลอดภัยที่จะลบไฟล์และไดเรกทอรีที่ซ่อนอยู่และไม่มีอะไรสำคัญที่จะหายไปและไม่มีสิ่งใดที่ขึ้นอยู่กับพวกเขาจะไม่หยุดทำงาน


2
การตรวจสอบว่าแอปพลิเคชันใดสร้างโฟลเดอร์และไฟล์ได้อย่างยุ่งยาก โดยปกติแล้วจะมีความสัมพันธ์กับไฟล์ที่เกี่ยวข้องกับแอพที่สร้างโดยนักพัฒนาที่มีความสามารถตรงไปตรงมา แต่ก็ไม่ได้เป็นเช่นนั้นเสมอไป หากคุณพบคำตอบที่ดีฉันก็อยากจะรู้ว่ามันคืออะไร
0xSheepdog

2
@ 0xSheepdog auditd สำหรับอนาคต - สำหรับประวัติไม่มีอะไรมาก
เจนนี่ D

ตรวจสอบให้แน่ใจว่าคุณมีข้อมูลสำรองของไฟล์ก่อนที่จะลบออก (ซึ่งรวมถึงการตรวจสอบว่าคุณสามารถกู้คืนไฟล์ได้)
Jenny D

1. คุณใช้งาน Linux หรือไม่? เคอร์เนลเวอร์ชันใด (โปรดเลือกหลัก / รอง) 2. เปิดใช้งาน SELinux หรือคุณเปิดใช้งานได้หรือไม่ 3. คุณมีสิทธิ์เข้าถึงรูตหรือไม่?
Otheus

คำตอบ:


15

คุณสามารถแทนที่พวกเขาได้ชั่วคราว

cd ~
mkdir .trash
find . ! -name . -prune ! -type d -atime +365 -exec \
    sh -c 'touch -a -- "$@"
           mv -- "$@" ~/.trash
    ' --   {} +

ที่จะค้นหาไฟล์ทั้งหมดใน$HOMEไดเรกทอรีของคุณ- โดยไม่ต้องเรียกคืนไปยังไดเร็กทอรีย่อย - ซึ่งยังไม่ได้เข้าถึงเป็นเวลาหนึ่งปี .trashมันจะปรับปรุงเวลาในการเข้าถึงทั้งหมดของพวกเขาที่จะอยู่ในขณะนี้และจากนั้นย้ายทั้งหมดของพวกเขาลงในไดเรกทอรีที่ชื่อว่า หากคุณพบปัญหาใด ๆ ระหว่างเวลาที่คุณเรียกใช้และเวลาใดก็ตามที่คุณตัดสินใจที่จะเริ่มการลบไฟล์เก่าใน~/.trashนั้นคุณสามารถลองย้ายบางส่วนของพวกเขากลับมาและดูว่ามีสิ่งใดที่คุณใส่ในถังขยะเป็นสาเหตุ


แม้ว่านี่จะไม่ตอบคำถามทางเทคนิค แต่ฉันคิดว่ามันเป็นวิธีแก้ปัญหาที่ดีทีเดียว
Jesse K

1
@JesseKeilson - ฉันคิดว่ามันไม่ได้ในทางเทคนิคตอบคำถาม: ฉันสามารถมั่นใจได้ว่ามันปลอดภัยที่จะลบไฟล์ที่ซ่อนอยู่และไดเรกทอรีและไม่มีอะไรที่สำคัญจะหายไปและไม่มีอะไรขึ้นอยู่กับพวกเขาจะไม่หยุดทำงาน?
mikeserv

1
ระบบไฟล์บางตัวถูกเมาท์พร้อมตัวเลือก "noatime" atime จะไม่ถูกแก้ไขแม้ว่าจะเป็น mtime หรือ ctime ก็ตาม สิ่งนี้จะนำคุณไปสู่การย้ายไฟล์ล่าสุดอย่างไม่ถูกต้อง
Adrien M.

@AdrienM - นั่นเป็นเรื่องจริง โดยและขนาดใหญ่แม้ว่าทุก fs มีสติฉันมาติดต่อกับการใช้งานrelatimeแทน จากman mount:: relatimeอัปเดตเวลาเข้าถึง inode ที่เกี่ยวข้องกับการแก้ไขหรือเปลี่ยนแปลงเวลา เวลาในการเข้าถึงจะอัปเดตก็ต่อเมื่อเวลาในการเข้าถึงก่อนหน้านั้นเร็วกว่าเวลาที่แก้ไขหรือเปลี่ยนแปลงในปัจจุบัน (คล้ายกับnoatimeแต่ไม่แตกmuttหรือแอพพลิเคชั่นอื่น ๆ ที่จำเป็นต้องรู้ว่ามีการอ่านไฟล์ตั้งแต่ครั้งสุดท้ายที่มีการแก้ไข)และต่อไปให้ใช้-mและ-mtimeทำงานกับ modtime หรืออะไรก็ได้ที่คุณชอบ
mikeserv

ไม่ตอบ 'และไดเรกทอรี "ของคำถามสำหรับสิ่งที่คุณต้องดำเนินการในแต่ละไดเรกทอรี. และตรวจสอบไฟล์ทั้งหมดที่เก่ากว่าปี
naught101

6

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

หากไม่มีการเข้าถึงรูทคุณสามารถใช้ crontab หรือสคริปต์ที่มีลูป + อนันต์เพื่อเรียกใช้ไฟล์lsof & grep ในบ้านของคุณ ดู manpage ของ lsof อย่างไรก็ตามมันจะแสดงเฉพาะแอปพลิเคชั่นของคุณที่เปิดไฟล์ filscriptor ในขณะที่คุณเปิด lsof หากแอปพลิเคชันเปิดไฟล์แก้ไขแล้วปิดคุณจะไม่เห็นการเปลี่ยนแปลงนี้ในรูปของ lsof

หนึ่งซับแบบนี้ควรทำงาน: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'

อีกวิธีหนึ่งคือใช้inotify kernel APIเพื่อตรวจสอบเมื่อมีการเข้าถึงไฟล์ อนิจจามันเป็นระบบอะซิงก์และคุณจะไม่มีรายละเอียดเช่น "แอพอะไร", "แม่นยำเมื่อ", "ผู้ใช้อะไร" คุณจะมีการติดต่อกลับเกี่ยวกับ "ไฟล์นี้ถูกแก้ไข / เข้าถึง ... " แอปพลิเคชั่นบางตัว(Inotify, FAM, gamin)ช่วยให้คุณเข้าถึง api ได้ง่าย


ฉันเพียงแค่พยายามที่จะใช้ทริกเกอร์inotify lsofระบบนั้นเร็วเกินไปสำหรับแนวคิดนี้ในการทำงาน: กระบวนการมักจะหายไปหรือปิดไฟล์ก่อนที่จะสามารถเรียกใช้ lsof ได้ ในบางกรณีอาจยังใช้งานได้ แต่อาจมีน้อยมาก
Otheus

auditdมันเป็นระบบเดียวที่ให้รายละเอียดทั้งหมดแก่คุณโดยไม่พลาดอะไรเลยเพราะมันใช้เส้นทางรหัสเฉพาะในเคอร์เนล เครื่องมืออื่น ๆ ทั้งหมดจะพลาดข้อมูลพลาดข้อมูลเนื่องจากกระบวนการจะถูกยกเลิก / ปิด fd
Adrien M.

ตกลง ฉันแค่ใส่ความไม่รู้เข้าไปในการทดสอบและยืนยันว่ามันจะไม่ทำงานที่จำเป็นที่นี่จริงๆ
Otheus

3

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

แต่ฉันขอแนะนำBleachbitโปรแกรม GUI เชิงโต้ตอบเพื่อลบ cruft

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