몇 년 동안 내 $HOME
디렉토리에는 많은 숨겨진 파일과 디렉토리가 나타났습니다.
불필요한 것을 계속 삭제하고 싶습니다.
숨겨진 파일과 디렉토리를 만든 응용 프로그램을 어떻게 알 수 있습니까?
숨겨진 파일과 디렉토리를 제거하는 것이 안전하고 중요한 것이 손실되지 않으며 그에 따라 작동이 멈추지 않는지 어떻게 알 수 있습니까?
몇 년 동안 내 $HOME
디렉토리에는 많은 숨겨진 파일과 디렉토리가 나타났습니다.
불필요한 것을 계속 삭제하고 싶습니다.
숨겨진 파일과 디렉토리를 만든 응용 프로그램을 어떻게 알 수 있습니까?
숨겨진 파일과 디렉토리를 제거하는 것이 안전하고 중요한 것이 손실되지 않으며 그에 따라 작동이 멈추지 않는지 어떻게 알 수 있습니까?
답변:
당신은 그들을 일시적으로 변위시킬 수 있습니다.
cd ~
mkdir .trash
find . ! -name . -prune ! -type d -atime +365 -exec \
sh -c 'touch -a -- "$@"
mv -- "$@" ~/.trash
' -- {} +
그것은 $HOME
1 년 동안 액세스하지 않은 하위 디렉토리로 되풀이하지 않고 디렉토리의 모든 파일을 찾습니다 . 모든 사용자의 액세스 시간을 지금 업데이트 한 다음 모든 디렉토리를이라는 디렉토리로 이동합니다 .trash
. 실행 시간과 오래된 파일 삭제를 시작하기로 결정한 시점 사이에 문제가 발생하면 ~/.trash
일부 파일을 다시 이동하여 휴지통에 넣은 파일이 원인인지 확인할 수 있습니다.
relatime
대신 에 use를 사용 합니다. from man mount
: relatime
: 수정 또는 변경 시간을 기준으로 inode 액세스 시간을 업데이트합니다. 액세스 시간은 이전 액세스 시간이 현재 수정 또는 변경 시간보다 이전 인 경우에만 업데이트됩니다. (유사합니다 noatime
,하지만 휴식하지 않습니다 mutt
또는 다른 응용 프로그램 파일이 수정 된 마지막 시간 이후 읽은 경우 필요 알고있다.) 어쨌든, 사용 -m
및 -mtime
/ modtime w 작업에 있습니다. 또는 원하는대로.
시스템의 루트 인 경우 감사 커널 기능을 사용하여 누가 / 언제 / 액세스 / 생성 / 수정 된 파일에 대한 최대 정보를 가질 수 있습니다. 데비안 맛이 나는 예제는이 튜토리얼을 참조하십시오
루트 액세스 권한이없는 경우 crontab 또는 무한 루프 + 슬립이있는 스크립트를 사용 하여 homedir에서 lsof & grep 파일 을 실행할 수 있습니다. lsof 맨 페이지를 참조하십시오 . 그러나 lsof를 실행하는 순간에 파일 디스크립터가 열린 애플리케이션 만 표시됩니다. 응용 프로그램이 파일을 열고 편집 한 다음 닫으면 lsof에이 변경 사항이 표시되지 않습니다.
이와 같은 한 줄짜리가 일을해야합니다. lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'
다른 방법은 inotify 커널 API 를 사용하여 파일에 액세스하는시기를 확인하는 것입니다. 아아, 그것은 비동기 시스템이며, "어떤 앱", "정확히 언제", "어떤 사용자"와 같은 세부 정보가 없습니다. "이 파일은 수정 / 액세스되었습니다 ..."에 대한 콜백 만 있습니다. 일부 애플리케이션 (Inotify, FAM, gamin) 은 API에 대한 간단한 액세스를 제공합니다
inotify
트리거하는 데 사용하려고했습니다 lsof
. 시스템은이 아이디어가 작동하기에는 너무 빠릅니다. lsof를 실행하기 전에 프로세스가 종종 사라지거나 파일을 닫았습니다. 경우에 따라이 방법이 여전히 효과가있을 수는 있지만 매우 적을 수 있습니다.
atime
오랫동안 사용하지 않는 파일을 찾고 제거 할 수 있지만 (시간을 사용하지 않도록 시스템을 구성하지 않은 경우) 다소 위험합니다 ( tmpreaper
이 방법으로 이동하려는 경우 참조 ).
대신 cruft를 제거하는 대화식 GUI 프로그램 인 Bleachbit을 제안 합니다.