Penso che questo problema si possa risolvere con lo script di Mario (che cosi mi sembra non considerare i file che iniziano per . giusto?), io intendevo solo di salvare i comandi in rc.local_shutdown invece che in rc.6 in modo da non avere casini quando si aggiorna slackphobos3576 ha scritto:Infatti, tempo fa avevo trovato una marea di file in /tmp che iniziavano per . e che quindi non venivano cancellati con i comandi precedenti.Mario Vanoni ha scritto:Concordo, ma altri possibili cadaveri in /tmp, e quelli in /var/tmp?Communico ha scritto:Io per correttezza li metterei in rc.local_shutdown....Codice: Seleziona tutto
echo "Deleting temporary files ..." rm -rf /tmp/* rm -rf /tmp/.ICE-unix rm -rf /tmp/.X11-unix
Il problema è, come cancellare quei file senza conoscerne il nome?
Se non sbaglio, qualcuno aveva espresso dubbi su un comando del tipo:Codice: Seleziona tutto
rm -rf /tmp/.*
[RISOLTO]/tmp
Moderatore: Staff
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
-
Communico
- Packager

- Messaggi: 200
- Iscritto il: sab 3 mag 2008, 19:59
- Nome Cognome: Stefano Cereda
- Slackware: current
- Kernel: 2.6.29.1
- Desktop: kde 4.2.2
- Località: Seriate (BG)
Re: /tmp
-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: /tmp
Perche' da errori di rm(1):phobos3576 ha scritto: Infatti, tempo fa avevo trovato una marea di file in /tmp che iniziavano per . e che quindi non venivano cancellati con i comandi precedenti.
Il problema è, come cancellare quei file senza conoscerne il nome?
Se non sbaglio, qualcuno aveva espresso dubbi su un comando del tipo:Codice: Seleziona tutto
rm -rf /tmp/.*
rm -rf /tmp/.*
rm: cannot remove `.' directory `/tmp/.'
rm: cannot remove `..' directory `/tmp/..'
echo $?
1
Quindi in uno script da errore, non usabile.
Con quanto espresso nel mio post sopra del 29/11/09 15:52
risolvi il problema perche' non prova a cancellare . e ..
per di piu` non tocca dirs che non coinvolti,
dovuti a typos nello scrivere ecc.
E non dimenticare /var/tmp,
occasionalmente bello pieno anche lui,
soprattutto se aborti qualche programma che compila.
- navajo
- Staff

- Messaggi: 3884
- Iscritto il: gio 8 gen 2004, 0:00
- Nome Cognome: Massimiliano
- Slackware: 13.37 (x86_64)
- Kernel: 2.6.37.6
- Desktop: KDE 4.7.0 (Alien)
- Località: Roma
Re: /tmp
Codice: Seleziona tutto
rm -fr /tmp/* /tmp/.??*-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: /tmp
Scusa, ma rimane un problema,navajo ha scritto:per cancellare i file nascosti in tmp:spero di aver capito che fosse il problemaCodice: Seleziona tutto
rm -fr /tmp/* /tmp/.??*
cancellare dirs/files ".X", punto con un solo segno:
rm -fr /tmp/.?* da errore
rm: cannot remove `..' directory `/tmp/..'
echo $?
1
Quindi in uno script non e` usabile.
Unica soluzione pulita e` usare find(1):
cd /tmp
find \( ! -name . ! -name .. \) -exec rm -rf {} \;
e fai piazza pulita!
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: /tmp
Codice: Seleziona tutto
(il nome non è '.' AND il nome non è '..') AND elimina il fileInsomma in definitiva io consiglierei il comando:
Codice: Seleziona tutto
find /tmp ! -name . ! -name .. | xargs rm -rf-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: /tmp
Scusa Emanuele, leggendo la man page di xargs(1):spina ha scritto:Concordo con Mario, se esiste un file chiamato /tmp/.a il comando di navajo non lo elimina. Solo che, Mario, io consiglio sempre di non usare mai 'exec rm' nel find, ma di mettere il comando in pipe con 'xargs', perchè, come tu ben sai, l'exec di find esegue un processo 'rm' per ogni match, mentre xargs esegue un unico processo 'rm'. Inoltre le parentesi non servono perchè le espressioni sono tutte in AND tra loro. Il tuo comando è come se valutasse:le parentesi non servono. E ancora, non capisco perchè fai un 'cd /tmp' se find di per se accetta un path in cui fare le ricerche.Codice: Seleziona tutto
(il nome non è '.' AND il nome non è '..') AND elimina il file
Insomma in definitiva io consiglierei il comando:EmanueleCodice: Seleziona tutto
find /tmp ! -name . ! -name .. | xargs rm -rf
Codice: Seleziona tutto
EXAMPLES
find /tmp -name core -type f -print | xargs /bin/rm -f
Find files named core in or below the directory /tmp and delete them. Note that this will work incorrectly if there are any filenames containing newlines or spaces.
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Find files named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing spaces or newlines are correctly han-
dled.
So che le parentesi con GNU find sono lusso, ma:
- altri find lo pretendono, portabilita` su altri U*X
- con le parentesi il comando e` piu` leggibile
Usando:
Codice: Seleziona tutto
if [ -d /tmp ]
then
cd /tmp
find \( ! -name . ! -name .. \) -exec rm -rf {} \; 2> /dev/null
fi
soprattutto al primo test!
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: /tmp
Giusto, quindi il comando corretto è:Mario Vanoni ha scritto:Scusa Emanuele, leggendo la man page di xargs(1):Quindi change che rimanga qualche cadavere in giro.Codice: Seleziona tutto
EXAMPLES find /tmp -name core -type f -print | xargs /bin/rm -f Find files named core in or below the directory /tmp and delete them. Note that this will work incorrectly if there are any filenames containing newlines or spaces. find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f Find files named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing spaces or newlines are correctly han- dled.
Codice: Seleziona tutto
find /tmp ! -name . ! -name .. -print0 | xargs -0 rm -rfche vuoi dire?Mario Vanoni ha scritto: So che le parentesi con GNU find sono lusso, ma:
- altri find lo pretendono, portabilita` su altri U*X
dipende da chi lo deve leggere, io e la bash non abbiamo problemiMario Vanoni ha scritto: - con le parentesi il comando e` piu` leggibile
Si vabbé, però lo script lo scrivi una volta sola, non è che lo devi scrivere sempre, dai, errori di scrittura non si fanno. E poi, probabilisticamente parlando, più scrivi e più hai probabilità di commettere errori, e il tuo comando è molto più lungo del mioMario Vanoni ha scritto: Usando:hai meno possibilita` che un errore di scrittura faccia danni,Codice: Seleziona tutto
if [ -d /tmp ] then cd /tmp find \( ! -name . ! -name .. \) -exec rm -rf {} \; 2> /dev/null fi
soprattutto al primo test!
Diciamo che sono entrambi corretti e che "de gustibus non est disputandum", me lo concedi?
Emanuele
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: /tmp
Codice: Seleziona tutto
find /tmpCodice: Seleziona tutto
cd /tmp; findAd esempio, da utente root e supposto che siamo nella directory '/', quale dei due comandi è più fatale
Codice: Seleziona tutto
cd ciao; find -print0 | xargs -0 rm -rfCodice: Seleziona tutto
find ciao -print0 | xargs -0 rm -rfEmanuele
-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: /tmp
Lo concedo e concordo al 99%, perche' solo 99%?spina ha scritto:Mario Vanoni ha scritto:Diciamo che sono entrambi corretti e che "de gustibus non est disputandum", me lo concedi?Codice: Seleziona tutto
if [ -d /tmp ] then cd /tmp find \( ! -name . ! -name .. \) -exec rm -rf {} \; 2> /dev/null fi
Con 5.6GB e 321382 dirs/files
time find ... -exec rm -fr ... 0m57.834s
1 errore
time find ... | xargs ... rm -fr 0m28.187s
164 errori, quindi mettere sempre
find ... >2 /dev/null
Reclama non piu` esistenti dirs, da lui gia` cancellati.
Rispondo anche al tuo post seguente.
Perche' pensi che usi il codice sopra, mai problemi.
E se usi nello script una variabile stile ${DIRNAME},
se sgarri a scrivere la variabile
if [ -d ${DIRNAME} ]
impedisce di accedere all dir non esistente,
quindi nessun find ... rm -fr
Piu` righe OK, ma piu` controllo non nuoce IMVHO.
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: /tmp
InfattiMario Vanoni ha scritto: Lo concedo e concordo al 99%, perche' solo 99%?
Con 5.6GB e 321382 dirs/files
time find ... -exec rm -fr ... 0m57.834s
1 errore
time find ... | xargs ... rm -fr 0m28.187s
164 errori, quindi mettere sempre
find ... >2 /dev/null
Reclama non piu` esistenti dirs, da lui gia` cancellati.
Codice: Seleziona tutto
find /tmp ! -name . ! -name .. -maxdepth 1 -print0 | xargs -0 rm -rfSe la directory è inesistente anche l'altro comando è innocuo. Quello che ti voglio dire è che è inutile controllare l'esistenza della directory prima di invocare find, perchè find fallisce se la directory è inestente, la tua soluzione è ridondante, ed inoltre, per come l'hai scritta, se la inserisci in uno script che poi deve fare altre cose, sarebbe buona regola anche ricordarsi di ritornare alla directory in cui stava prima del comando 'cd /tmp'. Insomma, a mio avviso sono solo controlli in più che non servono.Mario Vanoni ha scritto: Rispondo anche al tuo post seguente.
Perche' pensi che usi il codice sopra, mai problemi.
E se usi nello script una variabile stile ${DIRNAME},
se sgarri a scrivere la variabile
if [ -d ${DIRNAME} ]
impedisce di accedere all dir non esistente,
quindi nessun find ... rm -fr
Piu` righe OK, ma piu` controllo non nuoce IMVHO.
Tra l'altro, se si vuole cancellare l'intero contenuto di /tmp basta veramente due semplici 'rm -rf', è vero che ritorna errore, però se uno sa quello che fa basta e avanza. Io per cancellare il contenuto di un intera directory non uso mai il find+xargs, ma sempre un 'rm -rf'.
Emanuele
- JohnnyMnemonic
- Staff

- Messaggi: 2733
- Iscritto il: dom 5 set 2004, 0:00
- Nome Cognome: Giuseppe Palmiotto
- Slackware: 14.0
- Kernel: 3.5.5-thanatos
- Località: Bologna
- Contatta:
Re: /tmp
Ho fatto un controllo e la mia /tmp pesava quasi 3GB, un'enormità in effetti... poi però ho visto che erano al 99% sorgenti rimasti da compilazioni e pacchetti prodotti dalle compilazioni stesse.
Risultato, ora sono 16MB.... per me stanno bene dove stanno!
-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: /tmp
Hai provato di persona
find /tmp ! -name . ! -name .. -maxdepth 1 -print0 | xargs -0 rm -rf
/tmp non esiste piu`!
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: /tmp
Codice: Seleziona tutto
find /tmp -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rfCodice: Seleziona tutto
find /tmp -mindepth 1 -maxdepth 1Fammi sapere,
Emanuele
Offtopic: Mario se ti può essere utile
Codice: Seleziona tutto
ls -ld /tmp/
drwxrwxrwt 10 root root 496 2009-12-02 12:45 /tmp/- conraid
- Staff

- Messaggi: 13631
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: /tmp
Codice: Seleziona tutto
-mount ! -name lost+found-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: /tmp
find /tmp -mindepth 1 -maxdepth 1
e` corretto!
mkdir /tmp && chmod 1777 /tmp
risolve la perdita di /tmp
@conraid
-mount ! -name lost+found
ottimo argomento in piu`, grazie