Como apagar arquivos mais rápido que rm -rf? [duplicado]

4

Existe alguma maneira de excluir pastas / arquivos mais rapidamente do que com o comando rm -rf?

Parece que meu disco está cheio de bilhões de arquivos (sessões de php5) que não foram deletados no cron, então eu preciso deletá-los manualmente, mas isso leva horas e ainda não está ajudando a reduzir a quantidade. Obrigado.

Meu comando: rm -rf /var/lib/php5/*

Tentei também estes comandos:

find /var/lib/php5 -name "sess_*" -exec rm {} \;

e

perl -e 'chdir "/var/lib/php5/" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'
    
por Byakugan 15.11.2012 / 04:18

2 respostas

2

O php5 deve vir com uma tarefa cron padrão para remover arquivos de sessão.

No Debian / Ubuntu, é como o seguinte (cópia direta do Ubuntu 12.04 LTS)

/etc/cron.d/php5

# /etc/cron.d/php5: crontab fragment for php5
#  This purges session files older than X, where X is defined in seconds
#  as the largest value of session.gc_maxlifetime from all your php.ini
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime

# Look for and purge old sessions every 30 minutes
09,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete

Ele é executado a cada meia hora e remove a base de sessão expirada em session.gc_maxlifetime em php.ini .

Então você deve fazer o seguinte:

  1. Verifique se você tem o arquivo de trabalho cron acima. Adicione se estiver faltando.
  2. Verifique o valor de session.gc_maxlifetime em /etc/php5/apache2/php.ini

    O valor padrão de session.gc_maxlifetime no Ubuntu é 1440sec = 24min

    session.gc_maxlifetime = 1440
    
  3. Se o 2 acima parecer normal, tente executar manualmente a linha de comando no cron job. Isso imprimirá todos os erros na tela.

  4. Grep para erro cron em / var / log / syslog. Veja se eles estão relacionados com php.

Com relação aos bilhões de arquivos de sessão já existentes, você precisa excluí-los manualmente por enquanto.

Para colocar a situação atual sob controle

service apache2 stop
mv /var/lib/php5 /var/lib/php5.delete
mkdir /var/lib/php5
chmod 733 /var/lib/php5
chmod o+t /var/lib/php5
service apache2 start

Em seguida, exclua /var/lib/php5.delete. Isso pode levar horas. Ao mesmo tempo, fique de olho no número do arquivo no novo diretório / var / lib / php5 . Se estiver aumentando de forma anormal, você tem um problema que não seja remover arquivos.

Executar manualmente a linha de comando do cron job

Basta colocar a parte depois de root no prompt de comando, como segue

[ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete
    
por 15.11.2012 / 05:03
3

O caminho mais rápido é provavelmente:

cd /var/lib/php5
ls -f | xargs -d "\n" rm

Além disso:

cd /var/lib/php5
for i in {1..999}
do
   find . -type f | head -1000 | xargs rm
done

E, se você gosta de perl :

perl -e 'chdir "/var/lib/php5" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'
    
por 15.11.2012 / 05:04