actions logging και undo στο bash ?

Nick Demou ndemou at gmail.com
Mon Feb 20 11:20:06 EET 2006


Τον τελευταίο καιρό έκανα πολλές επεμβάσεις (εγκαταστάσεις και
ρυθμίσεις) σε έναν linux server. Ήμουν τυχερός και έκανα μόνο ένα
λάθος που διορθώθηκε εύκολα. Συνειδητοποίησα όμως πως, ειδικά όταν
πρέπει να κάνεις πολλές αλλαγές, είναι πολύ εύκολο να χαλάσεις κάτι
και να μην θυμάσαι τι μπορεί να φταίει.

Το history μου φάνηκε πολύ χρήσιμο αλλά κατάλαβα ότι δεν θα είναι
πάντα αρκετό. Έψαξα στο google για κάτι πιο πλήρες και βρήκα την
εντολή script η οποία όμως αν ανοίξεις ένα vi/emacs/pico/less/... κτλ
γεμίζει σκουπίδια και γίνεται πολύ άβολη. Τελικά διαβάζοντας το bash
manual page σκαρφίστικά ένα κόλπο[1] που σου επιτρέπει να κάνεις ένα
history χωρίς πρακτικό όριο βάθους χρόνου στο οποίο εκτός από την
εντολή καταγράφεται και η ώρα εκτέλεσης[2] αλλά και το current
directory[2] μέσα στο οποίο εκτελέστηκε η εντολή (πολύ σημαντικό όταν
βλέπεις εντολές του τύπου rm *):

time stamp      command   pwd
-----------------------------------------------------
11/12 09:40     rm afile         /home/user
....

έτσι έλυσα το πρόβλημα του να ξέρω "πότε έκανα τι". Μου μένουν όμως
ακόμα δύο πράγματα για να κοιμάμαι πιο ήσυχος:

1) η rm αντί να σβήνει τα αρχεία να τα κρατάει backup σε κάποιο άλλο φάκελο
2) όλα τα αρχεία κειμένου που ανοίγω με τον text editor (pico) να
γίνονται backup με timestamp σε έναν άλλο φάκελο

 * Υπάρχει κάποιος άλλος στη λίστα με τους ίδιους προβληματισμούς?  Τι
λύση εφαρμόζει?
 * Ιδέες για logging χωρίς τα drawbacks της δικιάς μου μεθόδου (βλέπε [2])
 * Για τα 1), 2) ξέρετε κάτι έτοιμο ή πρέπει να γράψω τα δυο σχετικά
scripts (μου έκανε εντύπωση που δεν βρήκα κάτι στο πρώτο googling
around αλλά μπορεί να ήμουν και πολύ νυσταγμένος :-) )?


_________________
[1] αρκεί να έχεις αυτό το one-liner στο .bashrc  (και ενεργοποιημένο
το history με depth τουλάχιστον 1):
PROMPT_COMMAND='echo -ne $(date +%d-%m_%H:%M)"\t" >> /${HOME}/.hist;
echo -ne $(history 1 | sed "s/^ *[0123456789]* *//")"\t" >>
/${HOME}/.hist; pwd >> /${HOME}/.hist'

(η παραπάνω εντολή εκτελείται ΠΡΙΝ από κάθε άλλη εντολή που εισάγουμε
στο bash και δημιουργεί τις γραμμές του αρχείου ~/.hist)

[2] για την ακρίβεια ή ώρα και το current dir αφορούν στην στιγμή που
εκτελέστηκε η αμέσως επόμενη εντολή από το bash. Επίσης δεν
καταγράφεται η τελευταία εντολή κάθε session.




More information about the Linux-greek-users mailing list