DR:

DR:

Executei o comando apt autoremove mas essas pastas persistem.

Como o comando "du -h -x --max-profundidade=1 /usr/lib | sort -hr | head -n 10" me mostrou, eles estão usando atualmente quase 1G cada:

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

Como posso limpar isso? Obrigado.

Responder1

Eu precisava fazer isso, já que com mais de um ano de uso do Linux em um Chromebook, /usr/lib/modules estava ocupando mais de 10GiB de espaço em disco (o que é um valor premium neste dispositivo) e eu só estarei executando de qualquer maneira, uma única instância do kernel. O espaço em disconecessáriopara executar um único kernel era de apenas ~ 500 MiB, por outro lado, ~ 5% do espaço em disco realmente sendo usado.

Eu mesmo criei uma solução, baseada em minha distribuição (KDE Neon, baseada em Ubuntu LTS), que consiste em vários comandos Bash para fazer o seguinte:

  • Detecte a versão do Linux atualmente em execução
  • Detectar linux-modules-*pacotes que pertencem a versões do Linuxnãoatualmente em execução
  • Desinstale todos linux-modules-*os pacotes (e linux-image-*pacotes dependentes) que não estão em execução

Observe que eu apenas testei issoquando já está em execuçãoo kernel Linux mais recente instalado em minha distribuição. Sua distribuição pode vir com pacotes que dependem de um metapacote, como linux-generic-hwe-20.04para distribuições baseadas em Ubuntu 20.04 LTS, e não testei esse script ao executar um Linux antigo após instalar um mais recente.

DR:

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

OK, mas o que isso significa?

O primeiro comando a ser executado é uname -r. Isso imprime o número da versão do kernel Linux em execução no momento, em um formato como este:

$ uname -r
5.15.0-48-generic

Saiba mais emman uname.

O segundo comando a ser observado é o dpkg-query, que nos permite consultar pacotes instalados de diferentes maneiras. Você pode usar --listpara uma exibição bonita e interativa, mas optei --showpor tornar o script mais simples.

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

Saiba mais emman dpkg-query.

Um leitor determinado provavelmente poderia descobrir como usar a --showformatopção de pular esta etapa, mas eu preferi uma abordagem mais familiar - o cutcomando. O cutcomando simplesmente recebe uma entrada padrão, um delimitador opcional fornecido -d(um caractere de tabulação por padrão) e um argumento de campo fornecido com -f. Neste caso, ele pega a saída do nosso dpkg-querycomando e retorna a primeira coluna:

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

Saiba mais emman cut.

Canalizamos a saída dequeno grepcomando, que nos permite selecionar linhas que correspondam a um determinado padrão - ou, neste caso, linhas quenãocorresponder a um determinado padrão, usando a -v|--invert-matchopção. O "$(uname -r)"retorna uma linha como 5.15.0-48-generic, que é então usada como padrão para grep. É assim que selecionamos todos linux-modulesos pacotes que sãonãoatualmente em execução.

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

Saiba mais emman grep.

Finalmente, usamos esta lista apenas como argumentos para o sudo apt removecomando, que provavelmente é tão familiar para as pessoas neste momento que não precisa de muita explicação:

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

... mas caso sejamnãofamiliar para você,man sudopermite que você execute um comando como root, o administrador do sistema (ou teoricamente outro usuário), que é necessário para usarman apt, que gerencia pacotes e dependências em distribuições baseadas em Debian (daí Ubuntu).

Responder2

Eu estava tentando esvaziar /usr/lib e criar uma abordagem:

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

mostrará os pacotes que não são fornecidos atualmente por nenhum sources.list (para esta versão do Ubuntu). Inclui, por exemplo, pacotes instalados manualmente de versões anteriores do Ubuntu, se você estiver fazendo atualizações. O problema é que também existem pacotes que eu queria manter, como slack, draw.io etc., então você precisa inspecionar manualmente os pacotes que não precisa mais.

Se você encontrar um padrão nos pacotes que deseja excluir, como pacotes Ubuntu 16.04 no Ubuntu 22.04, você pode executar:

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

Responder3

Simplificando:Não.

Teoricamente, você poderia excluir módulos desnecessários na máquina em que está, mas se você der um passo errado em algum lugar, corre o risco de a máquina não inicializar mais. E você teria que repetir isso para cada atualização do kernel.

É um gigabyte. O disco é barato. Vive com isso.

informação relacionada