Pagina 1 di 1

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

Inviato: ven 10 nov 2006, 17:08
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

Inviato: ven 10 nov 2006, 22:11
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.....

Inviato: ven 10 nov 2006, 22:31
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...)

Inviato: sab 11 nov 2006, 16:31
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...

Inviato: sab 11 nov 2006, 16:35
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

Inviato: sab 11 nov 2006, 17:10
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

Inviato: sab 11 nov 2006, 17:15
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..

Inviato: sab 11 nov 2006, 21:09
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:.

Inviato: dom 12 nov 2006, 10:53
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

Inviato: lun 13 nov 2006, 12:44
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