$ HOME 디렉토리 정리


16

몇 년 동안 내 $HOME디렉토리에는 많은 숨겨진 파일과 디렉토리가 나타났습니다.

불필요한 것을 계속 삭제하고 싶습니다.

숨겨진 파일과 디렉토리를 만든 응용 프로그램을 어떻게 알 수 있습니까?

숨겨진 파일과 디렉토리를 제거하는 것이 안전하고 중요한 것이 손실되지 않으며 그에 따라 작동이 멈추지 않는지 어떻게 알 수 있습니까?


2
폴더와 파일을 만든 응용 프로그램을 확인하는 것은 까다로울 수 있습니다. 일반적으로 괜찮은 개발자가 만든 앱과 관련된 파일을 상관시키는 것은 간단하지만 항상 그런 것은 아닙니다. 좋은 대답을 찾으면 나는 그것이 무엇인지 알고 싶습니다.
— 0xSheepdog

2
@ 0xSheepdog은 미래에 대해 감사했습니다. 역사에 대해서는 거의 아무것도 감사하지 않았습니다.
— Jenny D

파일을 제거하기 전에 파일 백업이 있는지 확인하십시오. (여기에는 파일을 복원 할 수 있는지 확인하는 것이 포함됩니다.)
— Jenny D

1. 리눅스를 사용하고 있습니까? 어떤 커널 버전? (주 / 소수만) 2. SELinux가 활성화되어 있습니까? 아니면 활성화 할 수 있습니까? 3. 루트 액세스 권한이 있습니까?
— Otheus

답변:


15

당신은 그들을 일시적으로 변위시킬 수 있습니다.

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

그것은 $HOME1 년 동안 액세스하지 않은 하위 디렉토리로 되풀이하지 않고 디렉토리의 모든 파일을 찾습니다 . 모든 사용자의 액세스 시간을 지금 업데이트 한 다음 모든 디렉토리를이라는 디렉토리로 이동합니다 .trash. 실행 시간과 오래된 파일 삭제를 시작하기로 결정한 시점 사이에 문제가 발생하면 ~/.trash일부 파일을 다시 이동하여 휴지통에 넣은 파일이 원인인지 확인할 수 있습니다.


이것이 기술적으로 질문에 대답하지는 않지만 꽤 좋은 해결책이라고 생각합니다.
— Jesse K

1
- @JesseKeilson은 내가 그것을 생각 않습니다 : 기술적으로 질문에 대답 어떻게 확인이 숨겨진 파일과 디렉토리 및 손실됩니다 중요한 아무것도 및 작동을 중지하지 않습니다 그들에 따라 아무것도를 제거하는 것이 안전하다고 할 수 있습니까?
— mikeserv

1
일부 파일 시스템은 "noatime"옵션으로 마운트됩니다. mtime 또는 ctime이더라도 atime은 수정되지 않습니다. 이로 인해 최근 파일이 잘못 이동하게됩니다.
— Adrien M.

@AdrienM. -맞습니다. 그럼에도 불구하고, 내가 접촉하는 모든 제정신 fs는 relatime대신 에 use를 사용 합니다. from man mount: relatime: 수정 또는 변경 시간을 기준으로 inode 액세스 시간을 업데이트합니다. 액세스 시간은 이전 액세스 시간이 현재 수정 또는 변경 시간보다 이전 인 경우에만 업데이트됩니다. (유사합니다 noatime,하지만 휴식하지 않습니다 mutt또는 다른 응용 프로그램 파일이 수정 된 마지막 시간 이후 읽은 경우 필요 알고있다.) 어쨌든, 사용 -m및 -mtime/ modtime w 작업에 있습니다. 또는 원하는대로.
— mikeserv

질문의 ' 및 디렉토리 '부분 에는 답하지 않습니다 . 따라서 각 .directory를 따라 가서 모든 파일이 1 년보다 오래된 지 확인해야합니다.
— naught101

6

시스템의 루트 인 경우 감사 커널 기능을 사용하여 누가 / 언제 / 액세스 / 생성 / 수정 된 파일에 대한 최대 정보를 가질 수 있습니다. 데비안 맛이 나는 예제는이 튜토리얼을 참조하십시오

루트 액세스 권한이없는 경우 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를 실행하기 전에 프로세스가 종종 사라지거나 파일을 닫았습니다. 경우에 따라이 방법이 여전히 효과가있을 수는 있지만 매우 적을 수 있습니다.
— Otheus

auditd 커널에서 특정 코드 경로를 사용하므로 아무것도 놓치지 않고 모든 세부 정보를 제공하는 유일한 시스템입니다. 다른 모든 도구는 정보가 누락되고 프로세스가 종료되거나 fd가 닫히므로 데이터가 누락됩니다.
— Adrien M.

동의했다. 방금 테스트에 미숙하고 여기에서 필요한 작업을 수행하지 않을 것임을 확인했습니다.
— Otheus

3

atime오랫동안 사용하지 않는 파일을 찾고 제거 할 수 있지만 (시간을 사용하지 않도록 시스템을 구성하지 않은 경우) 다소 위험합니다 ( tmpreaper이 방법으로 이동하려는 경우 참조 ).

대신 cruft를 제거하는 대화식 GUI 프로그램 인 Bleachbit을 제안 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.