Πώς να αποκτήσετε το μέγεθος ενός αρχείου ή καταλόγου στο Linux

Όταν χρησιμοποιείτε την duεντολή Linux , αποκτάτε τόσο την πραγματική χρήση του δίσκου όσο και το πραγματικό μέγεθος ενός αρχείου ή καταλόγου. Θα εξηγήσουμε γιατί αυτές οι τιμές δεν είναι ίδιες.

Πραγματική χρήση δίσκου και πραγματικό μέγεθος

Το μέγεθος ενός αρχείου και ο χώρος που καταλαμβάνει στον σκληρό σας δίσκο είναι σπάνια το ίδιο. Ο χώρος στο δίσκο κατανέμεται σε μπλοκ. Εάν ένα αρχείο είναι μικρότερο από ένα μπλοκ, ένα ολόκληρο μπλοκ εξακολουθεί να εκχωρείται σε αυτό, επειδή το σύστημα αρχείων δεν διαθέτει μικρότερη μονάδα ακινήτων για χρήση.

Εκτός αν το μέγεθος ενός αρχείου είναι ένα ακριβές πολλαπλάσιο των μπλοκ, ο χώρος που χρησιμοποιεί στον σκληρό δίσκο πρέπει πάντα να στρογγυλοποιείται στο επόμενο ολόκληρο μπλοκ. Για παράδειγμα, εάν ένα αρχείο είναι μεγαλύτερο από δύο μπλοκ αλλά μικρότερο από τρία, χρειάζεται ακόμη τρία μπλοκ χώρου για να το αποθηκεύσετε.

Χρησιμοποιούνται δύο μετρήσεις σε σχέση με το μέγεθος του αρχείου. Το πρώτο είναι το πραγματικό μέγεθος του αρχείου, που είναι ο αριθμός των byte περιεχομένου που συνθέτουν το αρχείο. Το δεύτερο είναι το πραγματικό μέγεθος του αρχείου στον σκληρό δίσκο. Αυτός είναι ο αριθμός των μπλοκ συστήματος αρχείων που απαιτούνται για την αποθήκευση αυτού του αρχείου.

Ενα παράδειγμα

Ας δούμε ένα απλό παράδειγμα. Θα ανακατευθύνουμε έναν μόνο χαρακτήρα σε ένα αρχείο για να δημιουργήσουμε ένα μικρό αρχείο:

echo "1"> geek.txt

Τώρα, θα χρησιμοποιήσουμε τη λίστα με τη μεγάλη μορφή  ls, για να εξετάσουμε το μήκος του αρχείου:

ls -l geek.txt

Το μήκος είναι η αριθμητική τιμή που ακολουθεί τις dave dave  καταχωρήσεις, που είναι δύο byte. Γιατί είναι δύο byte όταν στείλαμε μόνο έναν χαρακτήρα στο αρχείο; Ας ρίξουμε μια ματιά στο τι συμβαίνει μέσα στο αρχείο.

Θα χρησιμοποιήσουμε την hexdumpεντολή, η οποία θα μας δώσει έναν ακριβή αριθμό byte και θα μας επιτρέψει να "δούμε" μη εκτυπώσιμους χαρακτήρες ως δεκαεξαδικές τιμές. Θα χρησιμοποιήσουμε επίσης την -Cεπιλογή (κανονική) για να εξαναγκάσουμε την έξοδο να δείξει δεκαεξαδικές τιμές στο σώμα της εξόδου, καθώς και τα αλφαριθμητικά ισοδύναμα χαρακτήρων τους:

hexdump -C geek.txt

Η έξοδος μας δείχνει ότι, ξεκινώντας από το όφσετ 00000000 στο αρχείο, υπάρχει ένα byte που περιέχει δεκαεξαδική τιμή 31, και ένα που περιέχει δεκαεξαδική τιμή 0A. Το δεξί τμήμα της εξόδου απεικονίζει αυτές τις τιμές ως αλφαριθμητικούς χαρακτήρες, όπου είναι δυνατόν.

Η δεκαεξαδική τιμή του 31 χρησιμοποιείται για την αναπαράσταση του ψηφίου. Η δεκαεξαδική τιμή του 0A χρησιμοποιείται για την αναπαράσταση του χαρακτήρα γραμμής ροής, ο οποίος δεν μπορεί να εμφανιστεί ως αλφαριθμητικός χαρακτήρας, επομένως εμφανίζεται ως τελεία (.). Ο χαρακτήρας Line Feed προστίθεται από το echo. Από προεπιλογή,  echoξεκινά μια νέα γραμμή αφού εμφανίσει το κείμενο που χρειάζεται να γράψει στο παράθυρο του τερματικού.

Αυτό συμβαδίζει με την έξοδο από  ls και συμφωνεί με το μήκος του αρχείου δύο byte.

ΣΧΕΤΙΚΟΙ: Πώς να χρησιμοποιήσετε την εντολή ls για τη λίστα αρχείων και καταλόγων σε Linux

Τώρα, θα χρησιμοποιήσουμε την duεντολή για να δούμε το μέγεθος του αρχείου:

du geek.txt

Λέει ότι το μέγεθος είναι τέσσερα, αλλά τέσσερα από τι;

Υπάρχουν μπλοκ και μετά υπάρχουν μπλοκ

Όταν du αναφέρει μεγέθη αρχείων σε μπλοκ, το μέγεθος που χρησιμοποιεί εξαρτάται από διάφορους παράγοντες. Μπορείτε να καθορίσετε ποιο μέγεθος μπλοκ θα πρέπει να χρησιμοποιεί στη γραμμή εντολών. Εάν δεν πιέζετε duνα χρησιμοποιήσετε ένα συγκεκριμένο μέγεθος μπλοκ, ακολουθεί ένα σύνολο κανόνων για να αποφασίσετε ποιο θα χρησιμοποιήσετε.

Πρώτον, ελέγχει τις ακόλουθες μεταβλητές περιβάλλοντος:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

Εάν υπάρχει κάποιο από αυτά, το μέγεθος του μπλοκ έχει οριστεί και duσταματά τον έλεγχο. Εάν δεν έχει οριστεί,  duπροεπιλογή σε μέγεθος μπλοκ 1.024 byte. Εκτός αν, δηλαδή, POSIXLY_CORRECTέχει οριστεί μια μεταβλητή περιβάλλοντος που ονομάζεται . Εάν συμβαίνει αυτό, duπροεπιλογή σε μέγεθος μπλοκ 512 byte.

Λοιπόν, πώς ανακαλύπτουμε ποιο χρησιμοποιείται; Μπορείτε να ελέγξετε κάθε μεταβλητή περιβάλλοντος για να την επιλύσετε, αλλά υπάρχει πιο γρήγορος τρόπος. Ας συγκρίνουμε τα αποτελέσματα με το μέγεθος μπλοκ που χρησιμοποιεί το σύστημα αρχείων.

Για να ανακαλύψουμε το μέγεθος του μπλοκ που χρησιμοποιεί το σύστημα αρχείων, θα χρησιμοποιήσουμε το tune2fsπρόγραμμα. Στη συνέχεια, θα χρησιμοποιήσουμε την επιλογή -l(superblock λίστας), θα διοχετεύσουμε την έξοδο grepκαι στη συνέχεια θα εκτυπώσουμε γραμμές που περιέχουν τη λέξη "Αποκλεισμός".

Σε αυτό το παράδειγμα, θα δούμε το σύστημα αρχείων στο πρώτο διαμέρισμα του πρώτου σκληρού δίσκου sda1και θα πρέπει να χρησιμοποιήσουμε sudo:

sudo tune2fs -l / dev / sda1 | μπλοκ grep

Το μέγεθος του μπλοκ συστήματος αρχείων είναι 4.096 byte. Εάν το διαιρέσουμε με το αποτέλεσμα που έχουμε από du (τέσσερα), δείχνει το  du προεπιλεγμένο μέγεθος μπλοκ είναι 1.024 bytes. Τώρα γνωρίζουμε πολλά σημαντικά πράγματα.

Πρώτον, γνωρίζουμε ότι η μικρότερη ποσότητα ακινήτων συστήματος αρχείων που μπορεί να αφιερωθεί στην αποθήκευση ενός αρχείου είναι 4.096 bytes. Αυτό σημαίνει ότι ακόμη και το μικροσκοπικό μας αρχείο δύο byte καταλαμβάνει 4 KB χώρου στο σκληρό δίσκο.

Το δεύτερο πράγμα που πρέπει να θυμάστε είναι εφαρμογές αφιερωμένη στην υποβολή εκθέσεων σχετικά με το αυτοκίνητο και το σύστημα αρχείων των στατιστικών σκληρά, όπως du, lsκαι  tune2fsμπορεί να έχουν διαφορετικές αντιλήψεις για το τι «μπλοκ» μέσα. Η tune2fsαίτηση αναφέρει αλήθεια τα μεγέθη μπλοκ του συστήματος αρχείων, ενώ  lsκαι duμπορεί να ρυθμιστεί ή να αναγκάζονται να χρησιμοποιούν άλλα μεγέθη μπλοκ. Αυτά τα μεγέθη μπλοκ δεν προορίζονται να σχετίζονται με το μέγεθος μπλοκ του συστήματος αρχείων. είναι απλώς «κομμάτια» που χρησιμοποιούν οι εντολές στην έξοδο τους

Τέλος, εκτός από τη χρήση διαφορετικών μεγεθών μπλοκ, οι απαντήσεις από duκαι tune2fs μεταφέρουν το ίδιο νόημα. Το tune2fsαποτέλεσμα ήταν ένα μπλοκ 4.096 bytes, και το duαποτέλεσμα ήταν τέσσερα μπλοκ 1.024 bytes.

Χρησιμοποιώντας du

Χωρίς παραμέτρους ή επιλογές γραμμής εντολών, duπαραθέτει τον συνολικό χώρο στο δίσκο που χρησιμοποιεί ο τρέχων κατάλογος και όλοι οι υποκατάλογοι.

Ας ρίξουμε μια ματιά σε ένα παράδειγμα:

du

Το μέγεθος αναφέρεται στο προεπιλεγμένο μέγεθος μπλοκ 1.024 byte ανά μπλοκ. Διασχίζεται ολόκληρο το δέντρο υποκαταλόγου.

Χρήση duσε διαφορετικό κατάλογο

Εάν θέλετε  du να αναφέρετε έναν διαφορετικό κατάλογο από τον τρέχοντα, μπορείτε να περάσετε τη διαδρομή στον κατάλογο στη γραμμή εντολών:

du ~ / .cach / εξέλιξη /

Χρήση duσε συγκεκριμένο αρχείο

Εάν θέλετε  du να αναφέρετε ένα συγκεκριμένο αρχείο, περάστε τη διαδρομή προς αυτό το αρχείο στη γραμμή εντολών. Μπορείτε επίσης να περάσετε ένα μοτίβο κελύφους σε μια ομάδα επιλογών αρχείων, όπως *.txt:

du ~ / .bash_aliases

Αναφορά για αρχεία σε καταλόγους

Για να duαναφέρετε τα αρχεία στον τρέχοντα κατάλογο και τους υποκαταλόγους, χρησιμοποιήστε την επιλογή -a(όλα τα αρχεία):

du-α

Για κάθε κατάλογο, αναφέρεται το μέγεθος κάθε αρχείου, καθώς και ένα σύνολο για κάθε κατάλογο.

Περιορισμός βάθους δέντρου καταλόγου

Μπορείτε να πείτε duνα παραθέσετε το δέντρο καταλόγου σε ένα ορισμένο βάθος. Για να το κάνετε αυτό, χρησιμοποιήστε την επιλογή -d(μέγιστο βάθος) και παρέχετε μια τιμή βάθους ως παράμετρο. Σημειώστε ότι όλοι οι υποκατάλογοι σαρώνονται και χρησιμοποιούνται για τον υπολογισμό των συνόλων που αναφέρονται, αλλά δεν αναφέρονται όλοι. Για να ορίσετε ένα μέγιστο βάθος καταλόγου ενός επιπέδου, χρησιμοποιήστε αυτήν την εντολή:

du -d 1

Η έξοδος παραθέτει το συνολικό μέγεθος αυτού του υποκαταλόγου στον τρέχοντα κατάλογο και παρέχει επίσης ένα σύνολο για κάθε έναν.

Για να καταγράψετε καταλόγους ένα επίπεδο βαθύτερα, χρησιμοποιήστε αυτήν την εντολή:

du -d 2

Ρύθμιση του μεγέθους μπλοκ

Μπορείτε να χρησιμοποιήσετε την blockεπιλογή για να ορίσετε ένα μέγεθος μπλοκ du για την τρέχουσα λειτουργία. Για να χρησιμοποιήσετε ένα μέγεθος μπλοκ ενός byte, χρησιμοποιήστε την ακόλουθη εντολή για να λάβετε τα ακριβή μεγέθη των καταλόγων και των αρχείων:

du - μπλοκ = 1

Εάν θέλετε να χρησιμοποιήσετε ένα μέγεθος μπλοκ ενός megabyte, μπορείτε να χρησιμοποιήσετε την -mεπιλογή (megabyte), η οποία είναι η ίδια με --block=1M:

du-μ

Εάν θέλετε τα μεγέθη που αναφέρονται στο πιο κατάλληλο μέγεθος μπλοκ ανάλογα με το χώρο στο δίσκο που χρησιμοποιείται από τους καταλόγους και τα αρχεία, χρησιμοποιήστε την επιλογή -h(αναγνώσιμη από τον άνθρωπο)

du-ω

Για να δείτε το φαινόμενο μέγεθος του αρχείου και όχι το μέγεθος του χώρου στο σκληρό δίσκο που χρησιμοποιείται για την αποθήκευση του αρχείου, χρησιμοποιήστε την --apparent-sizeεπιλογή:

du - εμφανές μέγεθος

Μπορείτε να το συνδυάσετε με την -aεπιλογή (όλα) για να δείτε το φαινόμενο μέγεθος κάθε αρχείου:

du - φαινόμενο μέγεθος -α

Κάθε αρχείο παρατίθεται, μαζί με το φαινόμενο του μέγεθος.

Εμφάνιση μόνο συνόλων

Εάν θέλετε  du να αναφέρετε μόνο το σύνολο για τον κατάλογο, χρησιμοποιήστε την -sεπιλογή (σύνοψη). Μπορείτε επίσης να το συνδυάσετε με άλλες επιλογές, όπως η επιλογή -h(αναγνώσιμη από τον άνθρωπο):

du -h -s

Εδώ, θα το χρησιμοποιήσουμε με την --apparent-sizeεπιλογή:

du - εμφανές μέγεθος -s

Εμφάνιση χρόνων τροποποίησης

Για να δείτε τη δημιουργία και την τελευταία ώρα και ημερομηνία τροποποίησης, χρησιμοποιήστε την --timeεπιλογή:

du - ώρα -d 2

Παράξενα αποτελέσματα;

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

Εάν πρέπει να αντιστοιχίσετε την έξοδο άλλων εντολών, πειραματιστείτε με την --blockεπιλογή στο du.