루트 파티션에서 최근에 어떤 파일과 디렉터리가 디스크 공간을 차지했는지 확인할 수 있는 믿을 수 있는 방법이 있습니까?

루트 파티션에서 최근에 어떤 파일과 디렉터리가 디스크 공간을 차지했는지 확인할 수 있는 믿을 수 있는 방법이 있습니까?

나는 sudo du -csh *(루트 디렉토리에서) sudo find /usr/lib/ -type f -printf "%s\t%p\n" | sort -n | tail -10 sudo du -a / --exclude=/media --exclude=/home | sort -n -r | head -n 100유사한 명령을 시도했습니다. 나는 이것에 관해 뭔가를 찾고 있어요최근의디스크 공간 사용량 및 유효안정적으로(내 사용 사례에서도).

이것의 문제는 "장치에 남은 공간이 없기 때문에" 실행할 수 없다는 것입니다. 디스크 공간을 확보하는 경우(예: 블리치 비트를 실행하거나 불필요한 크고 불필요한 패키지를 제거하거나 /tmp/에서 일부 파일을 삭제하는 경우) ) 그 이후에는 곧 공간도 차지하게 됩니다./var/lib/docker를 옮겼습니다.크기가 수 기가바이트에 달했고 나중에 해제되었습니다. 이제 무언가가 그 기가바이트의 디스크 공간을 차지하고 있는 것 같습니다.

두 번째 문제는 여유 디스크 공간이 있을 때 이러한 명령을 실행할 때 현재 어떤 파일과 디렉터리가 새롭고 불필요한지 쉽게 식별할 수 없다는 것입니다. 가장 큰 디렉토리는 /usr/share인 것으로 보입니다.

하지만 sudo du -csh /usr/share/* | grep "G"7GB만 표시되므로 너무 크지는 않습니다. 다른 파티션에 저장한 초기 출력에는 sudo du -ah / --exclude=/media --exclude=/proc --exclude=/home | sort -n -r | head -n 1001MB 파일(/usr/share/에 있는 파일 포함)만 표시되었습니다.


최근에 추가된 가장 큰 파일 및 디렉토리 목록을 훌륭하고 신속하게 출력하는 좋은 방법이 있습니까? 어쩌면 이를 담당하는 프로세스도 포함할 수 있습니까?가능하다면 명령을 실행할 다른 /tmp/ 디렉터리를 지정할 수 있으면 유용할 것입니다. 저는 Debian10/KDE를 사용하고 있습니다.

최근에 디스크 공간을 차지하고 있는 항목을 나열하는 간단하고 신뢰할 수 있는 방법이 여기에서 유용할 것입니다.

고쳐 쓰다: 사전 설치된 지정된 파일 크기보다 큰 최근 수정된 파일을 루트 디렉터리에 표시할 수 있습니다.찾다. 디렉터리를 제외할 수도 없고 "veracrypt가 이미 실행 중입니다"라는 메시지만 표시되기 때문에 veracrypt를 시작하여 파티션을 마운트 해제할 수도 없습니다. 그러나 여전히 문제의 파일을 찾을 수 있습니다.

명령을 중단해도 디스크 공간이 확보되지 않는 하나의 명령만 실행하는 konsole의 공개 인스턴스인 /proc/pid/task/pid/fd입니다. konsole 창과 모든 탭을 닫은 후 몇 GB가 필요합니다. 여유 디스크 공간.

답변1

위의 간단한 명령을 사용하여 마지막으로 수정된 파일과 디렉터리를 가져올 수 있습니다 mtime.

# Get files/dirs modified during the last 15 days and then desc  sort with disk usage and print the first 10 lines
find / -mtime -15  | xargs -I {} du -sm {} | sort -rn | head -10
# Get files/dirs modified during the last 60 minutes and then desc sort with disk usage and print the first 10 lines
find / -mmin -60 | xargs -I {} du -sm {} | sort -rn | head -10
# Get files/dirs modified between 2020-12-18 and 2020-12-19 then desc sort with disk usage  and print the first 10 lines
find / -newermt 2020-12-18 ! -newermt 2020-12-19 | xargs -I {} du -sm {} | sort -rn | head -10

시스템이 생성 시간을 저장할 수 있으면 이를 대신 사용할 수 있습니다 crtime.

crtime먼저 설정된 파일을 확인하십시오 .

## Output should be different than - sign
stat -c '%w' <file>

B그런 다음 옵션과 함께 동일한 find 명령을 사용할 수 있습니다 Birth Time.

# Get files/dirs **created** between 2020-12-18 and 2020-12-19 then desc  sort with disk usage and print the first 10 lines
find / -newerBt 2020-12-18 ! -newerBt 2020-12-19 | xargs -I {} du -sm {} | sort -rn | head -10

파일 시스템에서 이를 처리할 수 있지만 Birth Timestat 명령에 표시되지 않는 경우 다음을 통해 파일이 저장된 장치의 수준을 직접 확인할 수 있습니다.

# Getting the inode number
ls -i <file>
# Then get crtime 
debugfs -R 'stat <inode_no>' <device>

@PascalVKooten이 작성한 Python 패키지가 있습니다.스택 오버플로 스레드생성 시간을 가져오는 데 사용할 수 있는 호출 crtime이 재귀적(테스트되지 않음)인지는 모르겠지만 다음과 같은 출력을 제공합니다.

1552938281  /home/pascal/crtime/.gitignore
1552938285  /home/pascal/crtime/README.md
1552938282  /home/pascal/crtime/crtime
1552938288  /home/pascal/crtime/deploy.py

그런 다음 타임스탬프를 내림차순으로 정렬하고 날짜/시간으로 변환할 수 있습니다(필요한 경우).

sudo crtime ./ | awk '{print$1}' | sort -rn |  xargs -I {} date -d @{}

Mon Mar 18 20:44:48 +01 2019
Mon Mar 18 20:44:45 +01 2019
Mon Mar 18 20:44:42 +01 2019
Mon Mar 18 20:44:41 +01 2019

마지막으로 특정 파일이나 디렉터리를 편집한 마지막 프로세스를 얻으려면 사용자 auditctl정의 규칙을 사용 및 설정한 다음 ausearch.

동일한 작업을 수행할 수도 있지만 inotify-tools전체 루트 파일 시스템에 대해 수행하면 메모리 사용량에 심각한 영향을 미칠 것이라고 생각합니다.

Lsof가장 최근 파일이 아닌 현재 열려 있는 파일을 포함하기 때문에 작동하지 않습니다.

또한 타사 도구에 액세스할 수 있는 경우 ncdu 확장 정보 모드 활성화를 사용하여 추가 속성별로 정렬하면 mtime출력을 파일로 내보낼 수 있습니다.

관련 정보