Ημερομηνία «γέννησης» ενός αρχείου – stat και debugfs

Τις προάλλες έψαχνα να βρω πότε δημιουργήθηκε ένα συγκεκριμένο αρχείο στον Ubuntu/Server που έχω. Ήξερα ότι η stat ήταν η εντολή που έπρεπε να επικαλεστώ, αλλά δεν θυμόμουν εκείνο το περιβόητο Birth το οποίο είναι πάντα κενό.

Η stat είναι μια πολύ χρήσιμη εντολή όταν θέλουμε να πάρουμε πληροφορίες για κάποιο αρχείο ή κάποιο σύστημα αρχείων. Έχει πολλές παραμέτρους για να μετριάσουμε το output. Αν τη δώσουμε ως έχει, ακολουθούμενη από το όνομα ενός αρχείου, τότε θα μας επιστρέψει διάφορες πληροφορίες σχετικά με αυτό.
Ας δούμε ένα παράδειγμα παρακάτω.

Στη παραπάνω εικόνα βλέπουμε πόσες πληροφορίες επιστρέφει η stat για το αρχείο profile. Από τα δικαιώματα Read-Write-Execute, τα uid, gid καθώς και Access, Modify και Change Time. Αυτό που δεν επιστρέφει, και είναι σημειωμένο με κόκκινο, είναι το Birth. Πότε ακριβώς δημιουργήθηκε αυτό το αρχειό στο σύστημα αρχείων;

Σημείωση: Βρισκόμαστε σε σύστημα αρχείων ext4

Ψάχνοντας ανακάλυψα συζητήσεις και enhancement requests που αφορούσαν τη συγκεκριμένη έλλειψη στο output της stat.
Το σύστημα αρχείων φυσικά και αποθηκεύει όλες αυτές τις πληροφορίες, και την ημερομηνία «γέννησης» ενός αρχείου, αυτό που η stat δεν μπορεί να κάνει είναι να το διαβάσει να το επιστρέψει στο δικό της output.

Εδώ έρχεται να δώσει λύση η debugfs. Η συγκεκριμένη εντολή έχει άμεση σχέση με το σύστημα αρχείων και όπως το όνομά της προδίδει, χρησιμοποιείται για αποσφαλμάτωση.

Πάμε να δούμε παρακάτω πως θα πάρουμε τις πληροφορίες που θέλουμε χρησιμοποιώντας τη debugfs.

Να υπενθυμίσω ότι οι πληροφορίες που χρειαζόμαστε εδώ είναι τα Access, Modify, Change αλλά και Creation(Birth) time.

Αυτά που χρειαζόμαστε είναι η τοποθεσία του αρχείου και το inode. Τις πληροφορίες αυτές μπορούμε να τις πάρουμε είτε από την stat που ήδη αναφέραμε, είτε από την εντολή ls σε συνδυασμό με την εντολή df.
Ας δούμε παρακάτω για το αρχείο /etc/profile που βρίσκεται στο /etc/

Παραπάνω βλέπουμε το inode (6816253) του αρχείου. Θα μας χρειαστεί αργότερα.

Με τη βοήθεια της df εντοπίζουμε σε ποιο Filesystem βρίσκεται το αρχείο /etc/profile.

Από το παραπάνω αποτέλεσμα βλέπουμε ότι ανήκει στο /dev/sdb1.

Αφού έχουμε συγκεντρώσει τις πληροφορίες που χρειαζόμαστε, δίνουμε την εντολή debugfs.


Βλέπουμε ότι μας επιστρέφει τα ίδια αποτελέσματα με τη stat παραπάνω, με τη διαφορά ότι εκτυπώνει και το crtime.
Ας δούμε τι σημαίνει το κάθε ένα από αυτά.

  • ctime: Είναι το Change Time και δηλώνει πότε ένα αρχείο άλλαξε καθ ‘οιονδήποτε τρόπο, είτε αυτό αφορά τα περιεχόμενά του, είτε τα attributes του αρχείου.
  • atime: Είναι το Access Time και δηλώνει πότε κάποιος χρήστης, διεργασία …κλπ, είχε πρόσβαση σε αυτό.
  • mtime: Είναι το Modification Time και δηλώνει πότε ένα αρχείο άλλαξε σε σχέση με τα περιεχόμενά του (όχι τα attributes)
  • crtime: Είναι το Creation Time και αυτό που αναζητούσαμε να βρούμε. Αυτό το οποίο δεν εκτυπώνει η stat. Η ημερομηνία δημιουργίας του αρχείου.

Για να ανακεφαλαιώσουμε:

  1. Βρίσκουμε το inode του αρχείου με τη stat ή την ls
  2. Βρίσκουμε το Filesystem του αρχείου με την df
  3. Εκτελούμε τη debugfs με τις παραπάνω πληροφορίες ενσωματωμένες και τη βοήθεια της grep για το επιθυμητό αποτέλεσμα

Until next time …
Thanks for reading!

One thought on “Ημερομηνία «γέννησης» ενός αρχείου – stat και debugfs

Συμβάλετε κι εσείς με ένα σχόλιο

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s