Làm sạch thư mục $ HOME


16

Trong một vài năm, trong $HOMEthư mục của tôi có rất nhiều tập tin và thư mục ẩn xuất hiện.

Tôi muốn liên tục xóa những cái không cần thiết.

Làm thế nào tôi có thể tìm ra ứng dụng nào đã tạo ra các tệp và thư mục ẩn đó.

Làm thế nào tôi có thể chắc chắn rằng an toàn để xóa các tệp và thư mục ẩn và không có gì quan trọng sẽ bị mất và không có gì phụ thuộc vào chúng sẽ không hoạt động?


2
Làm sáng tỏ những ứng dụng nào tạo ra các thư mục và tập tin có thể khó khăn. Thông thường việc tương quan các tệp được liên kết với các ứng dụng được tạo bởi các nhà phát triển tốt là đơn giản, nhưng điều này không phải lúc nào cũng đúng. Nếu bạn tìm thấy một câu trả lời tốt, tôi cho người ta muốn biết nó là gì.
0xSheepdog

2
@ 0xSheepdog Audd cho tương lai - đối với lịch sử, không có gì nhiều.
Jenny D

Hãy chắc chắn rằng bạn có một bản sao lưu của các tập tin trước khi bạn loại bỏ chúng. (Điều này bao gồm xác minh rằng bạn có thể khôi phục các tệp.)
Jenny D

1. Bạn có đang sử dụng Linux không? Phiên bản kernel nào? (chỉ chính / phụ vui lòng) 2. Đã bật Selinux hay bạn có thể bật nó không? 3. Bạn có quyền truy cập root?
Otheus

Câu trả lời:


15

Bạn chỉ có thể tạm thời thay thế chúng.

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

Điều đó sẽ tìm thấy tất cả các tệp trong $HOMEthư mục của bạn - mà không cần đệ quy vào các thư mục con - vốn không được truy cập trong một năm. Nó sẽ cập nhật thời gian truy cập cho tất cả chúng ngay bây giờ, và sau đó di chuyển tất cả chúng vào một thư mục có tên .trash. Nếu bạn gặp phải bất kỳ vấn đề nào giữa thời gian bạn chạy nó và bất cứ khi nào bạn quyết định bắt đầu xóa các tệp cũ ~/.trashthì bạn có thể thử di chuyển một số trong số chúng trở lại và xem liệu có bất kỳ lỗi nào bạn bỏ vào thùng rác là nguyên nhân không.


Mặc dù điều này không trả lời về mặt kỹ thuật câu hỏi, tôi nghĩ đó là một cách giải quyết khá tốt.
Jesse K

1
@JesseKeilson - tôi nghĩ rằng nó không kỹ thuật trả lời câu hỏi: Làm thế nào tôi có thể chắc chắn rằng nó an toàn để loại bỏ các tập tin ẩn và thư mục và không có gì quan trọng sẽ bị mất và không có gì phụ thuộc vào họ sẽ không ngừng làm việc?
mikeerv

1
Một số hệ thống tập tin được gắn kết với tùy chọn "noatime". Đồng thời sẽ không bao giờ được sửa đổi, ngay cả khi mtime hoặc ctime là. Điều này sẽ dẫn đến việc bạn tìm thấy để di chuyển sai các tập tin gần đây.
Adrien M.

@AdrienM. - đúng. thay vào đó, mặc dù vậy, mỗi fs lành mạnh tôi tiếp xúc với việc sử dụng relatimethay thế. từ man mount:: relatimeCập nhật thời gian truy cập inode liên quan đến sửa đổi hoặc thay đổi thời gian. Thời gian truy cập chỉ được cập nhật nếu thời gian truy cập trước đó sớm hơn thời gian sửa đổi hoặc thay đổi hiện tại. (Tương tự noatime, nhưng nó không bị mutthỏng hoặc các ứng dụng khác cần biết nếu một tệp đã được đọc kể từ lần sửa đổi cuối cùng.) Và dù sao, hãy sử dụng -m-mtimeđể làm việc với thời gian. hoặc bất cứ điều gì bạn thích.
mikeerv

Nó không trả lời phần ' và thư mục "của câu hỏi. Vì vậy, bạn cần phải đi bộ từng thư mục và kiểm tra tất cả các tệp cũ hơn một năm.
naught101

6

Nếu bạn là root của hệ thống, bạn có thể sử dụng tính năng nhân kiểm toán để có thông tin tối đa về ai / khi / những gì truy cập / tạo / sửa đổi tệp. xem hướng dẫn này cho các ví dụ hương vị debian

Nếu không có quyền truy cập root, bạn có thể sử dụng crontab hoặc tập lệnh có vòng lặp vô hạn + ngủ để chạy các tệp lsof & grep trong homedir của bạn. Xem trang của lsof . Tuy nhiên, nó sẽ chỉ hiển thị các ứng dụng của bạn đã mở filedescriptor tại thời điểm bạn khởi chạy lsof. Nếu một ứng dụng mở một tệp, chỉnh sửa nó, sau đó đóng nó, bạn sẽ không thấy sự thay đổi này trong lsof.

một lớp lót như thế này sẽ thực hiện công việc: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'

Một cách khác là sử dụng API kernel inotify để kiểm tra khi tệp đang được truy cập. Than ôi, đó là một hệ thống không đồng bộ và bạn sẽ không có các chi tiết như "ứng dụng nào", "chính xác là khi nào", "người dùng nào". Bạn sẽ chỉ có một cuộc gọi lại về "tệp này đã được sửa đổi / truy cập ...". Một số ứng dụng (Inotify, FAM, gamin) cung cấp cho bạn quyền truy cập đơn giản vào api


Tôi chỉ cố gắng sử dụng inotifyđể kích hoạt lsof. Hệ thống đơn giản là quá nhanh để ý tưởng này hoạt động: quá trình thường không còn hoặc đã đóng tệp trước khi lsof có thể chạy. Trong một số trường hợp, điều này có thể vẫn hoạt động, nhưng có lẽ rất ít.
Otheus

Audd Đây là hệ thống duy nhất cung cấp cho bạn tất cả các chi tiết, không bỏ sót điều gì, vì nó sử dụng đường dẫn mã cụ thể trong kernel. Tất cả các công cụ khác sẽ bỏ lỡ thông tin, bỏ lỡ dữ liệu vì quá trình sẽ bị chấm dứt / đã đóng fd.
Adrien M.

Đã đồng ý. Tôi vừa mới đưa vào kiểm tra và xác nhận rằng nó sẽ không thực sự làm công việc cần thiết ở đây.
Otheus

3

Bạn có thể tìm kiếm atimevà xóa các tệp không được sử dụng trong một thời gian dài (với điều kiện bạn không định cấu hình hệ thống của mình không sử dụng đồng thời), nhưng điều đó khá rủi ro (xem tmpreaperbạn có muốn đi theo cách này không).

Thay vào đó, tôi đề nghị Bleachbit , một chương trình GUI tương tác để loại bỏ hành trình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.