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 (elinux-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.04
para 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 --list
para uma exibição bonita e interativa, mas optei --show
por 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 --showformat
opção de pular esta etapa, mas eu preferi uma abordagem mais familiar - o cut
comando. O cut
comando 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-query
comando 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 grep
comando, 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-match
opçã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-modules
os 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 remove
comando, 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 sudo
permite 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.