Αυτή είναι μια εντελώς άχρηστη, περιττή σε πρακτική εφαρμογή, αλλά αστεία μικρή ανάρτηση σχετικά με τους καταλόγους στα συστήματα *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 χρόνια είχε ήδη μια τέτοια συμπεριφορά
Πηγή: www.habr.com