[RISOLTO]/tmp

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
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
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

Messaggio da Communico »

phobos3576 ha scritto:
Mario Vanoni ha scritto:
Communico ha scritto:

Codice: Seleziona tutto

echo "Deleting temporary files ..."

rm -rf /tmp/*
rm -rf /tmp/.ICE-unix
rm -rf /tmp/.X11-unix
Io per correttezza li metterei in rc.local_shutdown....
Concordo, ma altri possibili cadaveri in /tmp, e quelli in /var/tmp?
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/.*
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 slack :D

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

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/.*
Perche' da errori di rm(1):
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.

Avatar utente
navajo
Staff
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

Messaggio da navajo »

per cancellare i file nascosti in tmp:

Codice: Seleziona tutto

rm -fr /tmp/* /tmp/.??*
spero di aver capito che fosse il problema

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

navajo ha scritto:per cancellare i file nascosti in tmp:

Codice: Seleziona tutto

rm -fr /tmp/* /tmp/.??*
spero di aver capito che fosse il problema
Scusa, ma rimane un problema,
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!

Avatar utente
targzeta
Iper Master
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

Messaggio da targzeta »

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:

Codice: Seleziona tutto

(il nome non è '.' AND il nome non è '..') AND elimina il file
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.

Insomma in definitiva io consiglierei il comando:

Codice: Seleziona tutto

find /tmp ! -name . ! -name .. | xargs rm -rf
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

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:

Codice: Seleziona tutto

(il nome non è '.' AND il nome non è '..') AND elimina il file
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.

Insomma in definitiva io consiglierei il comando:

Codice: Seleziona tutto

find /tmp ! -name . ! -name .. | xargs rm -rf
Emanuele
Scusa Emanuele, leggendo la man page di xargs(1):

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.

Quindi change che rimanga qualche cadavere in giro.

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
hai meno possibilita` che un errore di scrittura faccia danni,
soprattutto al primo test!

Avatar utente
targzeta
Iper Master
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

Messaggio da targzeta »

Mario Vanoni ha scritto:Scusa Emanuele, leggendo la man page di xargs(1):

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.

Quindi change che rimanga qualche cadavere in giro.
Giusto, quindi il comando corretto è:

Codice: Seleziona tutto

find /tmp ! -name . ! -name .. -print0 | xargs -0 rm -rf
Mario Vanoni ha scritto: So che le parentesi con GNU find sono lusso, ma:
- altri find lo pretendono, portabilita` su altri U*X
che vuoi dire?
Mario Vanoni ha scritto: - con le parentesi il comando e` piu` leggibile
dipende da chi lo deve leggere, io e la bash non abbiamo problemi :D
Mario Vanoni ha scritto: Usando:

Codice: Seleziona tutto

if [ -d /tmp ]
then
        cd /tmp
        find \( ! -name . ! -name .. \) -exec rm -rf {} \; 2> /dev/null
fi
hai meno possibilita` che un errore di scrittura faccia danni,
soprattutto al primo test!
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 mio :).

Diciamo che sono entrambi corretti e che "de gustibus non est disputandum", me lo concedi?
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
targzeta
Iper Master
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

Messaggio da targzeta »

Anzi Mario, ti dirò di più. Tra i comandi

Codice: Seleziona tutto

find /tmp
e

Codice: Seleziona tutto

cd /tmp; find
è sempre preferibile il primo perchè, se /tmp non esiste, il primo comando (find) abortisce mentre il secondo comando esegue find nella directory attuale. Immagina i danni che causerebbe un eventuale eliminazione dei dati prodotti da find.

Ad 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 -rf
o

Codice: Seleziona tutto

find ciao -print0 | xargs -0 rm -rf
Tu te la sentiresti di eseguire il primo comando sul tuo PC :)?

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

spina ha scritto:
Mario Vanoni ha scritto:

Codice: Seleziona tutto

if [ -d /tmp ]
then
        cd /tmp
        find \( ! -name . ! -name .. \) -exec rm -rf {} \; 2> /dev/null
fi
Diciamo che sono entrambi corretti e che "de gustibus non est disputandum", me lo concedi?
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.

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.

Avatar utente
targzeta
Iper Master
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

Messaggio da targzeta »

Mario 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.
Infatti #-o, come abbiamo fatto a non pensarci prima, il comando corretto (a questo punto metto) dovrebbe essere

Codice: Seleziona tutto

find /tmp ! -name . ! -name .. -maxdepth 1 -print0 | xargs -0 rm -rf
Comunque, dai tempi di esecuzione ormai non dovresti avere più dubbi sul fatto che è meglio dare tutto in pasto ad xargs. L'elevato tempo del find con -exec deriva proprio dall'elevato numero di processi che vengono eseguiti.
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.
Se 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.

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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
JohnnyMnemonic
Staff
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

Messaggio da JohnnyMnemonic »

Sposto un attimo il tema della discussione dalla tecnica al significato.
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
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

Messaggio da Mario Vanoni »

@spina
Hai provato di persona

find /tmp ! -name . ! -name .. -maxdepth 1 -print0 | xargs -0 rm -rf

/tmp non esiste piu`!

Avatar utente
targzeta
Iper Master
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

Messaggio da targzeta »

No Mario non l'avevo provato :). Comunque questo suggerisce un ennesimo comando (che da me funziona)

Codice: Seleziona tutto

find /tmp -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
(in questo modo non ritorna le directory '.' e '..'). Prima di provarlo con la pipe ti conviene provare

Codice: Seleziona tutto

find /tmp -mindepth 1 -maxdepth 1
per vedere se ritorna i file esatti che devono essere cancellati :).

Fammi 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/
[/offtopic]
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: /tmp

Messaggio da conraid »

Non voglio entrare nella discussione che mi sembra un poco "forzata", ma se non vogliamo utilizzare rm -rf .??* utilizzato in altre distribuzioni, a quel find ci aggiungerei

Codice: Seleziona tutto

-mount ! -name lost+found
ci scordiamo sempre che in ambiti non casalinghi /tmp e /var/tmp spesso sono su partizioni separate, per montarle con permessi particolari, etc...

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

@spina
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

Rispondi