Το μέγεθος των καταλόγων δεν αξίζει τον κόπο μας

Αυτή είναι μια εντελώς άχρηστη, περιττή σε πρακτική εφαρμογή, αλλά αστεία μικρή ανάρτηση σχετικά με τους καταλόγους στα συστήματα *nix. Είναι Παρασκευή.

Κατά τη διάρκεια των συνεντεύξεων, συχνά προκύπτουν βαρετές ερωτήσεις σχετικά με τα inodes, τα πάντα-είναι-αρχεία, στα οποία λίγοι άνθρωποι μπορούν να απαντήσουν λογικά. Αλλά αν σκάψετε λίγο πιο βαθιά, μπορείτε να βρείτε ενδιαφέροντα πράγματα.

Για να κατανοήσετε την ανάρτηση, μερικά σημεία:

  • όλα είναι ένα αρχείο. κατάλογος είναι επίσης ένα αρχείο
  • το inode αποθηκεύει μεταδεδομένα από το αρχείο, αλλά το όνομα του αρχείου δεν αποθηκεύεται εκεί
  • το όνομα αρχείου αποθηκεύεται στα δεδομένα καταλόγου
  • Το μέγεθος του καταλόγου, το ίδιο που εμφανίζεται σε ls και είναι 4Kb από προεπιλογή, εξαρτάται από τον αριθμό των αρχείων στον κατάλογο και το μήκος των ονομάτων τους
  • Προφανώς, όσο περισσότερα αρχεία, τόσο μεγαλύτερο είναι το μέγεθος του καταλόγου

Τώρα εδώ είναι το ενδιαφέρον μέρος: δημιουργούμε έναν κατάλογο με ένα εκατομμύριο αρχεία, ελέγχουμε το μέγεθος του καταλόγου και, στη συνέχεια, διαγράφουμε όλα τα αρχεία και εξετάζουμε το μέγεθος του καταλόγου.

$ mkdir niceDir && cd niceDir
# в зависимости от скорости носителя, следующая команда может занять 2-10 минут
$ for ((i=1;i<133700;i++)); do touch long_long_looong_man_sakeru_$i ; done
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug  2 13:37 .

Όπως μπορείτε να δείτε, το μέγεθος του καταλόγου δεν έχει αλλάξει, αν και φαίνεται :)

Μπορείτε να διορθώσετε μόνο το μέγεθος ενός καταλόγου (χωρίς να τον διαγράψετε) χρησιμοποιώντας το fsck (και την επιλογή -D) σε μη προσαρτημένη κατάσταση.

Αλλά όταν πήγα να ψάξω γιατί ήταν έτσι, αποδείχθηκε ότι πριν από 10 χρόνια είχε ήδη μια τέτοια συμπεριφορά συζητήθηκε σε lkml. Και σύμφωνα με τους προγραμματιστές, η επιδιόρθωση απλά δεν αξίζει τον κόπο.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο