Cosa c'è peggio di un rm -rf *? (Disavventure di un utente)

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.
Rispondi
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

Cosa c'è peggio di un rm -rf *? (Disavventure di un utente)

Messaggio da targzeta »

Ciao a tutti,
questa ve la voglio proprio raccontare.

Guardate questo codice per script.

Codice: Seleziona tutto

TMP_DIR=tmp_casa;
mkdir /${TMP_DIR};
rm -rf /${TMP_DER};
io l'ho eseguito con i diritti di root (per vari motivi che non sto qui a citare)....e patatrak....il comando eseguito, dato che TMP_DER non esiste è:

Codice: Seleziona tutto

rm -rf /
fortunatamente (si fa per dire) quando stava cancellando la directory /dev
c'erano delle tty in uso e mi è comparsa la scritta:

Codice: Seleziona tutto

rm: tty0 permission denied (o qualcosa del genere)
ehhehe io subito a premere ctrl-c insistentemente e sapete poi?
digitavo ls e mi diceva

Codice: Seleziona tutto

ls: command not found
eehheh mi sono dovuto spostare con i comandi interni della bash, tipo cd per vedere i danni e con TAB vedevo i file che c'erano rimasti.

Santi sorgenti
Fortunatamente si è fermato ai sorgenti di linux, prima però si è divertito a cancellarmi:

Codice: Seleziona tutto

/bin
/etc
/dev (in parte)
/usr (in parte)
Il kernel era ancora in fase di testing per il mio computer nuovo e quindi, un altra fortuna era quella di avere ancora la directory /boot con il config e i kernel.
Altra fortuna, nella disavventura è stata di avere ancora la directory /var, così ho potuto eseguire una installazione automatizzata (sempre tramite script) di tutti i pacchetti installati.
Ma quella assolutamente migliore è stata quella di non avermi cancellato le directory montate, ovvero la /home e quella immensa dove tengo tutti i miei dati.

Insomma, i nomi di variabini che rappresentano dircetory devono SEMPRE iniziare con un /!!!
Infatti se a TMP_DIR gli avessi assegnato il nome /tmp_casa, il comando

Codice: Seleziona tutto

rm -rf 
non avrebbe funzionato

Ciao a tutti e buon lavoro con linux (IL sistema operativo)

Spina

Avatar utente
IceSlack
Linux 4.x
Linux 4.x
Messaggi: 1313
Iscritto il: dom 30 ott 2005, 13:27

Messaggio da IceSlack »

Codice: Seleziona tutto

man rm
&

Codice: Seleziona tutto

root@IceBox:~# cat .bashrc
alias rm="rm --preserve-root"
cosi' eviti ste cavolate perche' se metti l'opzione "--preserve-root" lui non riesce a cancellare / in recursivo.............

per comodita' metti un alias su rm che viene eseguito ogni volta come rm --preserve-root

ecco.....

Avatar utente
Luke88
Linux 3.x
Linux 3.x
Messaggi: 624
Iscritto il: mer 7 set 2005, 0:00
Slackware: 13.0
Kernel: 2.6.30-zen4
Desktop: xfce4
Località: Udine

Messaggio da Luke88 »

e come si evita il "chown -R root:root /"? :)
me ne sono accorto subito, ma i danni li ho fatti e si sentono (niente su, problemi con alcune applicazioni...)
Meeting efficency = Average_Intelligence/( Number_Of_People^2 )

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

spina ha scritto:Insomma, i nomi di variabini che rappresentano dircetory devono SEMPRE iniziare con un /!!!

Codice: Seleziona tutto

mkdir mao
DIR=mao
rm -Rf $DIR
e mao non c'è più...scusa ma non ho capito quel che vuoi dire...

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

Luke88 ha scritto:e come si evita il "chown -R root:root /"? :)
me ne sono accorto subito, ma i danni li ho fatti e si sentono (niente su, problemi con alcune applicazioni...)
con la stessa opzione citata da iceslack per rm (man chown)
idem per chgrp e chmod

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio da absinthe »

Paoletta ha scritto:
spina ha scritto:Insomma, i nomi di variabini che rappresentano dircetory devono SEMPRE iniziare con un /!!!

Codice: Seleziona tutto

mkdir mao
DIR=mao
rm -Rf $DIR
e mao non c'è più...scusa ma non ho capito quel che vuoi dire...
penso inteddesse dire che se vuoi cancellare /pippo ti conviene fare questo

Codice: Seleziona tutto

DIR="/pippo"
rm -rf $DIR
e non

Codice: Seleziona tutto

DIR="pippo"
rm -rf /$DIR
M

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

absinthe ha scritto:
Paoletta ha scritto:
spina ha scritto:Insomma, i nomi di variabini che rappresentano dircetory devono SEMPRE iniziare con un /!!!

Codice: Seleziona tutto

mkdir mao
DIR=mao
rm -Rf $DIR
e mao non c'è più...scusa ma non ho capito quel che vuoi dire...
penso inteddesse dire che se vuoi cancellare /pippo ti conviene fare questo

Codice: Seleziona tutto

DIR="/pippo"
rm -rf $DIR
e non

Codice: Seleziona tutto

DIR="pippo"
rm -rf /$DIR
M
a questo punto meglio

Codice: Seleziona tutto

DIR="pippo"
rm -rf $DIR
visto che va lo stesso..

Avatar utente
Sari
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: mer 16 feb 2005, 0:00
Slackware: 12.1
Kernel: 2.6.24
Desktop: Gnome
Località: Verona

Messaggio da Sari »

Paoletta ha scritto:
absinthe ha scritto:
Paoletta ha scritto:

Codice: Seleziona tutto

mkdir mao
DIR=mao
rm -Rf $DIR
e mao non c'è più...scusa ma non ho capito quel che vuoi dire...
penso inteddesse dire che se vuoi cancellare /pippo ti conviene fare questo

Codice: Seleziona tutto

DIR="/pippo"
rm -rf $DIR
e non

Codice: Seleziona tutto

DIR="pippo"
rm -rf /$DIR
M
a questo punto meglio

Codice: Seleziona tutto

DIR="pippo"
rm -rf $DIR
visto che va lo stesso..
Ma dovresti lanciare lo script da ../pippo ;).
Se voglio svuotare tmp da qualsiasi posizione nel FS devo usare il percorso assoluto di tmp e cioe' /tmp, e cosi' vale per qualsiasi altra directory ovviamente.
Effettivamente spina ha trovato uno script scritto senza pensare :lol:.

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

Sari ha scritto: Ma dovresti lanciare lo script da ../pippo ;).
Se voglio svuotare tmp da qualsiasi posizione nel FS devo usare il percorso assoluto di tmp e cioe' /tmp, e cosi' vale per qualsiasi altra directory ovviamente.
Effettivamente spina ha trovato uno script scritto senza pensare :lol:.
hai ragione.

Avevo in testa che se vuoi inizializzare la variabile usando un pathname assoluto ti conviene utilizzare tutto il path, come

Codice: Seleziona tutto

dir=/tmp/prova
rm -R $dir
secondo me non aveva nessun senso senso voler inizializzare "dir" con il pathname di una directory per poi aggingere lo slash iniziale dopo (come nel caso di spina)...è come inizializzare una variabile "a metà", come in questo caso:

Codice: Seleziona tutto

dir=tmp/prova
rm -R /$dir

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

Messaggio da targzeta »

Chiarisco:
1) Mea culpa sul --preserve-root, non sapevo esistesse (non mi è mai servito e non leggo proprio tutti i man dei comandi che uso). Comunque se esiste forse è perchè non sono l'unico salamino del mondo :)

2) Lo scriptino fatto male era, ovviamente, fatto da me!!!

3) La variabile inizia senza la / perchè lo scriptino serviva per modificare il pacchetto in /var/log/package/nome-pacchetto. In questa directory il contenuto dei pacchetti viene mostrato senza la / iniziale.

Ma a voi temerari della programmazione (mi piaceva come frase) vi racconto cosa ho fatto e perchè.

Avete mai fatto dei pacchetti per la slackware? Vi sarete accorti che non è difficile ma che però si ha bisogno del path assoluto in cui installare i file. Ma supponiamo di voler creare un pacchetto con dentro moduli esterni al kernel (nel mio caso era il modulo fglrx per il DRM della ATI).
Ho fatto uno scriptino che, partendo dall'RPM scaricato dal sito della ati ti genera direttamente il pacchetto slackware. Questo significa che lo scriptino fà:
1) Estrae i dati dall'RPM
2) Compila il modulo per il kernel corrente
3) Crea i file slack-desc e doinst.sh
4) Crea il pacchetto slackware con makepkg

E' tutto molto figo ora che funziona :D
comunque, visto che il modulo va installato nella sottodirectory:

Codice: Seleziona tutto

/lib/modules/`uname -r`/
Come faccio, una volta creato il pacchetto, a portarlo su un altra versione del kernel? Mi spiego. Posso creare il pacchetto per la versione corrente, nel mio caso quando creo il pacchetto lo metto in

Codice: Seleziona tutto

/lib/modules/2.6.18.1/fglrx.ko.gz
ma ogni volta che installo il pacchetto questo file mi finirà sempre nella stessa directory e, se ho una versione nuova del kernel, andrà in una directory sbagliata.
Insomma, come risolvo il problema? Ecco la mia soluzione (se avete di meglio suggerite) :)
Il modulo lo metto in una directory temporanea e poi, con il doinst.sh lo sposto nella directory corretta ed elimino la directory temporanea. Inoltre il doinst.sh si deve preoccupare di modificare il file:

Codice: Seleziona tutto

/var/log/mio-pacchetto
in modo che ogni riferimento alla directory temporanea sia modificato con quello alla directory in cui ho spostato il file.
Il casino è successo al punto 3 (creazione dei file slack-desc e doinst.sh).
Come fa uno script a creare dei file, semplice fa un echo blablabla su un file.
Ma avete mai provato a creare un file che a sua volta faccia un echo? Non è così immediato, e quindi.....

Ciao ciao
Spina

P.S. ahh, se qualcuno vuole vedere il pacchetto, glielo mando volentieri hihihihihi, fidatevi :D

Rispondi