Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

O problema de care m-am lovit destul de des e eroarea „Argument list too long” in cazul in care vreau sa sterg mai multe fisiere dintr-un anumit director. De exemplu, pe un server se intampla sa apara in „/tmp” foarte multe fisiere cu numele „pThumbxxxxxxx„, fisiere create de un script conceput prost. Daca incerc sa le sterg din shell primesc eroarea „Argument list too long„:

[root@8vx4USpd /tmp]# rm -f pThumb*
bash: /bin/rm: Argument list too long
[root@8vx4USpd /tmp]#

Eroarea apare pentru ca comanda „rm” nu suporta un numar foarte mare de parametri. Exista cateva solutii pentru problema asta. Cea mai simpla e sa folosim comanda „find„:

[root@8vx4USpd /tmp]# find /tmp -name "pThumb*" -delete

O alta solutie care o putem aplica in cazul in care ne intereseaza sa verificam diferiti parametri ai fisierelor e sa folosim o „bucla for„:

[root@8vx4USpd /tmp]# export fisiere=`ls`
[root@8vx4USpd /tmp]# for fisier in $fisiere
> do
> rm -f $fisier
> done
..................................
[root@8vx4USpd /tmp]#

Avantajul acestei metode e ca inainte de „rm -f $fisier” putem alege sa facem unele verificari. De exemplu putem verifica marimea fisierului cu „ls -al nume.fisier„, putem verifica data crearii, modificarii sau a ultimei accesari cu „stat nume.fisier” sau putem face orice alte modificari care ar putea sa decida daca acel fisier trebuie sters sau nu.

O alta metoda la fel de draguta ca cea anterioara si care are aceleasi avantaje e crearea unei functii care sa faca toate verificarile pentru noi si sa initieze o anumita actiune. Un exemplu ar fi urmatorul:

[root@8vx4USpd /tmp]# function sterge()
> {
> while read linie; do
> rm -f $linie
> done
> }
[root@8vx4USpd /tmp]# ls | sterge

Ca in cazul anterior putem inainte de „rm -f $linie” sa adaugam diferite verificari. Avantajul mare fata de metoda anterioara e ca odata ce am declarat functia putem sa o folosim mai departe fara a fi nevoie sa o rescriem de fiecare data. De asemenea, functia poate fi inclusa si fi fisierul de initializare al shellului folosit – ex. „.bashrc„.

Linux

2 Responses so far.

  1. Confuzius says:

    Interesant. Mi-am luat un hdd mai mare acuma si am sa imi instalez si eu un ubuntu sau ceva, sa ma mai joc putin 😀

    Nice explanation, mersi!

  2. Marius says:

    Sau poți folosi „ls | xargs rm -f ” și ai scăpat de orice bătaie de cap 😉 am avut și eu aceeași problema pe un server și am făcut chiar și un mic bash script care il rulez cu cron 😉

    #!/bin/bash
    cd /tmp
    ls | xargs rm -f