Si vous exécutez ls -l sur un fichier qui contient une lettre, sa liste sera de 2B. Si votre système de fichiers est en blocs 4k, je pensais qu'il arrondissait les fichiers à la taille du bloc? Est-ce parce que ls -l lit réellement le nombre d'octets dans l'inode? Dans quelles circonstances obtenez-vous arrondi pour bloquer les réponses par rapport au nombre réel d'octets dans les utilitaires GNU du noyau Linux 2.6?
linux
filesystems
ls
ext3
Gregg Leventhal
la source
la source
Réponses:
Je suppose que vous avez cette lettre dans le fichier avec
echo a > file
ouvim file
, ce qui signifie que vous aurez cette lettre et un retour à la ligne supplémentaire (deux caractères, donc deux octets).ls -l
affiche la taille du fichier en octets, pas en blocs (pour être plus précis: longueur du fichier ):(notez que
cat -A
les sauts de ligne s'affichent sous forme de$
caractère)Contrairement à
ls -l
,du
affichera la taille réelle occupée sur le disque:(en fait,
du
affiche la taille en unités de 1 Ko, donc ici, la taille est de 4 × 1024 octets = 4096 octets = 4 Ko, ce qui correspond à la taille de bloc sur ce système de fichiers)Pour avoir
ls
cela, vous devrez utiliser l'-s
option au lieu de / en plus de-l
:La première colonne est la taille allouée, toujours en unités de 1 ko. La dernière peut être modifiée en spécifiant
--block-size
, par exemplela source
Je pense que la réponse profonde est la suivante:
Comme le montrent les autres réponses, en principe, un fichier créé avec deux octets a une longueur de deux octets (afficher par
ls -l
) et occupe 4 Ko (afficher pardu
ouls -ls
).Voir:
Ok,
test
a une longueur de 1 et une taille (sur le disque) de 4 Ko. Mais:(la première commande ajoute 8191 zéro octet
test
), le test a maintenant une longueur de 8192 mais occupe toujours 4 Ko sur le disque (il a un "trou") (1).Certains systèmes de fichiers peuvent également compacter des fichiers courts afin qu'ils occupent moins d'espace en partageant des blocs (voir par exemple l' empaquetage de queue ) et d'autres comme btrfs copient lors de l'écriture , de sorte que la relation entre un fichier, sa longueur logique et la quantité d'espace qu'il occupe un disque est complexe.
Notes de bas de page:
(1) Ce n'est pas vraiment un trou , c'est à la fin ... mais quand même, ça marche jusqu'à la fin de l'exemple.
la source
ls -l
est juste un format long.ls -ls
est utilisé pour afficher la taille du bloc.Essai
Comme nous pouvons le voir, la taille du fichier est indiquée comme 2B. Cependant, si vous devez vérifier la taille du bloc, vous devez exécuter la commande ci-dessous.
Le 4 ci-dessus affiche la taille de bloc utilisée. Nous pouvons également vérifier la même chose en utilisant la
stat
commande.Maintenant, la question se pose de savoir pourquoi
ls -ls
répertorie la taille du bloc comme 4 alors qu'ilstat
affiche la taille du bloc comme 8. La raison de ce comportement est clairement expliquée dans la réponse ici .la source