$ 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.