요약:

요약:

apt autoremo 명령을 실행했지만 해당 폴더는 지속됩니다.

"du -h -x --max-length=1 /usr/lib | sort -hr | head -n 10" 명령에서 알 수 있듯이 현재 각각 거의 1G를 사용하고 있습니다.

858M    /usr/lib/modules
823M    /usr/lib/x86_64-linux-gnu

이걸 어떻게 정리할 수 있나요? 감사합니다.

답변1

Chromebook에서 Linux를 1년 이상 사용하면서 /usr/lib/modules가 10GiB 이상의 디스크 공간을 차지했기 때문에 이 작업을 수행해야 했습니다(이 장치에서는 매우 중요함). 어쨌든 단일 커널 인스턴스입니다. 디스크 공간필요한단일 커널을 실행하는 데 필요한 용량은 ~500MiB에 불과했지만, 대조적으로 실제로 사용되는 디스크 공간은 ~5%입니다.

나는 다음을 수행하기 위한 여러 Bash 명령으로 구성된 내 배포판(KDE Neon, Ubuntu LTS 기반)을 기반으로 솔루션을 직접 생각해냈습니다.

  • 현재 실행 중인 Linux 버전 감지
  • linux-modules-*Linux 버전에 속하는 패키지 감지~ 아니다현재 실행 중
  • 실행되지 않는 모든 linux-modules-*패키지(및 종속 패키지)를 제거합니다.linux-image-*

저는 이것만 테스트했습니다.이미 실행 중일 때내 배포판에 설치된 최신 Linux 커널. 배포판에는 Ubuntu 20.04 LTS 기반 배포판과 같이 메타 패키지에 의존하는 패키지가 함께 제공될 수 있으며 linux-generic-hwe-20.04, 최신 Linux를 설치한 후 이전 Linux를 실행할 때는 이 스크립트를 테스트하지 않았습니다.

요약:

sudo apt remove $(dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)")

좋아요, 그런데 그게 무슨 뜻인가요?

실행할 첫 번째 명령은 입니다 uname -r. 현재 실행 중인 Linux 커널의 릴리스 번호가 다음과 같은 형식으로 인쇄됩니다.

$ uname -r
5.15.0-48-generic

자세한 내용은 다음에서 확인하세요.man uname.

살펴볼 두 번째 명령은 dpkg-query설치된 패키지를 다양한 방식으로 쿼리할 수 있는 명령입니다. --list예쁘고 대화형 디스플레이에 사용할 수 있지만 저는 --show스크립팅을 더 간단하게 만들기 위해 사용하기로 결정했습니다.

$ dpkg-query --show 'linux-modules-*'
linux-modules-5.11.0-44-generic 5.11.0-44.48~20.04.2
linux-modules-5.11.0-46-generic 5.11.0-46.51~20.04.1
# etc.

자세한 내용은 다음에서 확인하세요.man dpkg-query.

--showformat확고한 독자라면 옵션을 사용하여 이 단계를 건너뛰는 방법을 알아낼 수도 있지만 저는 좀 더 친숙한 접근 방식인 cut명령을 선호했습니다. 이 cut명령은 단순히 표준 입력, 에서 제공되는 선택적 구분 기호 -d(기본적으로 탭 문자) 및 에서 제공되는 필드 인수를 사용합니다 -f. 이 경우 명령의 출력을 가져와 dpkg-query첫 번째 열을 반환합니다.

$ dpkg-query --show 'linux-modules-*' | cut -f1
linux-modules-5.11.0-44-generic
linux-modules-5.11.0-46-generic
# etc.

자세한 내용은 다음에서 확인하세요.man cut.

우리는 출력을 파이프합니다저것grep특정 패턴과 일치하는 줄을 선택할 수 있는 명령 에 추가합니다 .~하지 않다옵션 을 사용하여 특정 패턴을 일치시킵니다 -v|--invert-match. 는 "$(uname -r)"와 같은 라인을 반환하며 5.15.0-48-generic, 이는 에 대한 패턴으로 사용됩니다 grep. 이것이 우리가 모든 linux-modules패키지를 선택하는 방법입니다.~ 아니다현재 실행 중입니다.

$ dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)"
# = dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "5.15.0-48-generic"
linux-modules-5.11.0-44-generic
linux-modules-5.11.0-46-generic
# etc.

자세한 내용은 다음에서 확인하세요.man grep.

마지막으로 우리는 이 목록을 명령에 대한 인수로 사용합니다 sudo apt remove. 이 시점에서는 사람들에게 매우 친숙하므로 많은 설명이 필요하지 않습니다.

$ sudo apt remove $(dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)")
# = sudo apt remove linux-modules-5.11.0-44-generic linux-modules-5.11.0-46-generic [...]

...하지만 그런 경우에는~ 아니다당신에게 친숙한,man sudo시스템 관리자(또는 이론적으로 다른 사용자)인 루트로 명령을 실행할 수 있습니다.man apt, Debian(따라서 Ubuntu) 기반 배포판의 패키지 및 종속성을 관리합니다.

답변2

나는 /usr/lib를 비우고 한 가지 접근 방식을 생각해내려고 했습니다.

apt-show-versions |grep "No available version in archive"

현재 어떤 source.list에서도 제공되지 않는 패키지를 표시합니다(이 Ubuntu 버전의 경우). 예를 들어 업그레이드를 수행한 경우 이전 Ubuntu 버전에서 수동으로 설치된 패키지가 포함됩니다. 문제는 slack, draw.io 등과 같이 유지하고 싶은 패키지도 있으므로 더 이상 필요하지 않은 패키지를 수동으로 검사해야 한다는 것입니다.

Ubuntu 22.04의 Ubuntu 16.04 패키지와 같이 확실히 삭제하려는 패키지에서 패턴을 찾은 경우 다음을 실행할 수 있습니다.

apt-show-versions |grep "No available version in archive" |grep 16.04 |cut -d " " -f1 |xargs apt remove --purge

답변3

간단히 말해서:하지 않다.

이론적으로는 현재 사용 중인 머신에 필요하지 않은 모듈을 삭제할 수 있지만, 어딘가에서 잘못된 단계를 수행하면 머신이 더 이상 부팅되지 않을 위험이 있습니다. 그리고 커널을 업데이트할 때마다 이를 반복해야 합니다.

기가바이트입니다. 디스크는 저렴합니다. 그것으로 살아라.

관련 정보