Juste quelque chose que j'ai rencontré et je ne pouvais pas penser à une explication appropriée. Si je crée un fichier * .txt vide sur mon PC, puis que je regarde sa taille, il indique 0. Mais comment est-ce possible? Je veux dire, même si le fichier lui-même est vide, il doit quand même avoir une certaine taille, juste pour stocker son propre nom. Comment peut-on l'expliquer? (Non spécifique au système d'exploitation)
filesystems
Eugene S
la source
la source
Réponses:
C'est possible car il n'y a vraiment pas de fichier. Il y a juste une entrée de répertoire avec un nom et un propriétaire. L'entrée du répertoire est logiquement distincte du fichier. Par exemple, un même fichier peut avoir plusieurs noms dans plusieurs répertoires.
Malheureusement, le terme "fichier" ne signifie pas toujours exactement la même chose. Mais la logique de taille de fichier provient du modèle dans lequel une entrée de répertoire "attache" un fichier à un répertoire et les noms de fichier et les métadonnées associées sont stockés dans le répertoire.
la source
ls -ld <directory>
travaillera.La signification sémantique de "taille du fichier" est différente de celle que vous utilisez.
Il existe de nombreuses tailles de fichiers qui ont un sens. Le plus commun, et celui que vous voyez ici, est "le nombre d'octets dans le fichier". Si le fichier est un fichier texte vide, il peut en effet contenir 0 octet. Ce numéro est important pour les programmeurs car nous avons souvent besoin d'ouvrir un fichier, "lire toutes les données", et de le fermer. Nous devons savoir combien d'octets de données seront dans le fichier afin de pouvoir planifier à l'avance.
Une autre signification découle de la manière dont la plupart des systèmes de fichiers stockent des données. La plupart des systèmes de fichiers stockent les données par blocs. Par exemple, le système de fichiers peut stocker des données dans des blocs de 64 Ko, ce qui signifie qu'il n'allouera jamais quoi que ce soit qui ne soit pas un multiple de 64 Ko. Cela semble inefficace, mais cela peut rendre la comptabilité beaucoup plus simple et, souvent, plus simple signifie plus rapide.
Une troisième signification, à laquelle vous tirez, correspond au nombre réel de bits requis sur le disque dur pour décrire la présence d'un fichier. Cela inclut des informations qui sont généralement stockées séparément du fichier. Par exemple, sous Linux, le concept de "nom de fichier" est stocké dans l'inode du répertoire contenant le fichier (modifier: à partir de commentaires, techniquement, il est stocké dans les données du répertoire. Lorsque j'ai écrit cela, je pensais au petit -cas de répertoire: les données inférieures à 156 octets peuvent être stockées directement dans l'inode). Ce n'est pas un sens couramment utilisé, car il est extrêmement difficile à déterminer sans connaître les rouages profonds de votre système de fichiers (avez-vous pris en compte l'espace nécessaire pour stocker toutes les autorisations sur le fichier?). Cependant, si vous avez un disque dur de 1 000 000 octets,
la source
Le nom du fichier est stocké ailleurs.
Votre disque aura un "système de fichiers", simplement une méthode pour choisir comment les noms de fichiers et les fichiers sont représentés et interprétés sur le disque physique.
Sur la plupart des disques Windows, vous utiliserez un système de fichiers appelé "NTFS" (système de fichiers de nouvelle technologie), qui stocke les informations de nom de fichier dans la table de fichiers principale (MFT) séparément du contenu du fichier. Voir l'article de Wikipedia sur la table de fichiers principale .
Le fichier lui-même aura donc une longueur de 0 octet, mais son entrée dans la MFT occupera toujours un peu d’espace.
la source
C'est une question ontologique assez intéressante ...
Le fichier lui-même est le contenu du fichier. Si le fichier n'a pas de contenu, sa taille est zéro. Le nom de fichier fait autant partie du fichier que votre propre nom est physiquement une partie de vous (c'est-à-dire qu'il ne l'est pas).
Tout comme votre nom existe comme une idée dans la tête des gens (et la vôtre) qui fait référence / pointe vers votre physique, le nom de fichier existe dans l’arborescence du système de fichiers et il fait référence / pointe vers le fichier.
la source
(Un peu tard pour la réponse ...)
Comment un fichier peut-il être de taille zéro est un peu plus compliqué que prévu par les réponses ci-dessus. La question est étiquetée Win7, mais il peut être utile d' examiner d'autres systèmes de fichiers "plus simples" tels que FAT ou NTFS , car les concepts sont similaires.
Le disque ne "sait" pas ce qu'est un fichier et ce qu'est un répertoire; c'est toutes les données en petits blocs. Le système d'exploitation distingue la signification des blocs de données. Les quelques premiers sont spéciaux, mais le reste des blocs contient des informations sur les données (par exemple: nom du fichier, longueur du fichier, premier bloc de données contenant les données) ou les données elles-mêmes.
Un répertoire est un "fichier" spécial dont le système d'exploitation comprend les "données" est un bloc d'informations contenant des informations sur les fichiers, pas leur contenu. Une bonne analogie est une bibliothèque physique et le catalogue de cartes. Considérez les blocs d’information comme le catalogue de cartes et les étagères comme les blocs de données (le catalogue de cartes repose également sur une structure semblable à une étagère).
Lorsque vous "créez" un fichier (par exemple avec la
touch
commande UNIX ), le système d'exploitation crée d'abord une entrée dans un bloc d'informations (répertoire), avec les éléments suivants:Ce n'est que s'il y a des données à "écrire" qu'il tente de trouver un bloc de données vide pour stocker les données. Mais les blocs de données ont des tailles fixes (disons 32 Ko), ce qui est pratique pour le disque et le système d'exploitation pour le lire. Si vous n'écrivez que "Hello", la majeure partie du bloc est "vide" (en réalité, il ne s'agit pas de zéros, mais de déchets de ce qui existait auparavant), de sorte que le tableau met également à jour la taille à la longueur (disons 5 caractères + Fin de Fichier) pour ne pas avoir les mauvaises choses.
Lorsque vous mettez à jour le "fichier" à une longueur> taille de bloc, le système d'exploitation écrit les données dans le nouveau bloc et met à jour un bloc de données pour indiquer que le fichier continue sur le prochain bloc APRÈS le premier (et ainsi de suite) et que la longueur est mise à jour. nouvelle longueur (les détails diffèrent).
Vous vous retrouvez avec une collection de blocs de données d'informations (répertoires ou listes) contenant des informations sur les chaînes de blocs de données (contenu du fichier).
Logiquement, cela explique également pourquoi un déplacement de fichier sur le même système de fichiers clignote rapidement, alors qu'une copie prend beaucoup de temps. Le système d'exploitation n'a qu'à modifier 2 blocs de répertoire pour supprimer l'entrée d'un répertoire (bloc de données d'informations) et l'ajouter à un autre. Supprimer un fichier: supprimez simplement l'entrée dans le bloc de répertoires, libérant ainsi les blocs de données de fichiers à réaffecter.
ps: Le fait que le catalogue de cartes comporte une entrée pour un livre ne signifie pas que celui-ci est sur l'étagère (extrait ou perdu peut-être); taille de fichier 0.
pps: Un livre égaré dans une bibliothèque implique une bibliothèque de recherche, ou en termes informatiques: chkdsk ou disque de réparation!
Pour mieux comprendre, renseignez-vous sur les inodes UNIX ou apprenez comment les systèmes de contrôle de versions (ClearCase, TFS, Git, etc.) gèrent non seulement les fichiers et les répertoires, mais également les versions de fichiers et même les versions de répertoires. Dans la plupart des cas, tout est stocké dans une base de données et présenté à l'utilisateur sous forme de structure de répertoire classique et de fichiers!
la source
Nous avons d'excellentes réponses ici - je voudrais juste ajouter la version de l'image (mille mots et tout ça.)
Voici à quoi ressemble l'un de mes disques durs au format NTFS si vous le visualisez avec un outil de défragmentation de disque. Le MFT (Master File Table) est affiché en violet:
Ce petit carré violet décrit la liste des fichiers présents dans mon disque dur. En gros, il s'agit, pour un disque NTFS, de la table des matières pour un livre; au lieu de pages, il pointe vers leur emplacement physique sur le reste du disque 1 .
Un fichier dont la taille est égale à zéro octet peut être visualisé comme une entrée de la table des matières qui ne pointe vers aucune page:
L'entrée est là, listée - mais comme aucune page n'est indiquée, on peut supposer que le contenu est inexistant.
1 - C’est sûrement un peu plus compliqué que ça; mais des points tels que les cartes de secteurs, les MFT en miroir, etc. sont hors du champ de cette question.
la source
Les systèmes de fichiers stockent de nombreuses informations sur un fichier, telles que le nom de fichier, la taille du fichier, l'heure de création, l'heure d'accès, l'heure de modification, les autorisations utilisateur, utilisateur et groupe créées, les fragments, le pointeur sur les clusters stockant le fichier, les liens matériels / virtuels, les attributs ... Celles-ci sont appelées métadonnées de fichier . Pourquoi comptez-vous ces métadonnées dans la taille du fichier alors que les utilisateurs ne s’occupent pas (nécessairement) de celles-ci et ne les connaissent pas? Ils ne se soucient que du contenu du fichier
De plus, chaque système de fichiers stocke différents types de métadonnées qui occupent différentes quantités d’espace sur le disque. Par exemple, les autorisations POSIX sont très différentes de l'autorisation NTFS et certains
inode
numéros dans POSIX n'existent pas sous Windows. Même les systèmes de fichiers POSIX varient beaucoup, comme ext3 avec une adresse de bloc 32 bits, ext4 avec 48 bits, Btrfs avec 64 bits et ZFS avec une adresse 128 bits. Alors, comment allez-vous compter ces métadonnées dans la taille du fichier?Prenons un autre exemple avec un fichier de 100 octets dont les métadonnées consomment 56 octets sur le système de fichiers actuel. Nous copions le fichier sur un autre système de fichiers et cela prend maintenant 128 octets de métadonnées. Cependant, le contenu du fichier est exactement identique , le nombre d'octets dans les fichiers est également identique. Il est donc très déroutant et contre-intuitif d’ afficher une taille de fichier de 156 octets sur un système mais de 228 octets sur un système .
la source
Une taille de fichier de
0
, est similaire à dire: j'ai un papier avec des5
mots dessus. Et sur un autre papier, il y a des0
mots dessus. C'est donc0
tout à fait possible.Les métadonnées du fichier (date de création, date de la dernière modification, propriétaire du fichier, autorisations) sont toutes stockées ailleurs et ne sont pas incluses dans la taille du fichier.
la source
Comprenez-le d'une manière simple ... lorsque vous créez un fichier .. une entrée de répertoire est générée, qui fonctionne comme un pointeur pour l'emplacement de la mémoire du fichier identifié par le nom de fichier que vous indiquez. La taille du répertoire augmente à mesure que vous créez de plus en plus de pointeurs ou de fichiers .. tandis que la taille de fichier n'augmente que si vous placez quelques données à l'endroit indiqué, c'est-à-dire à l'intérieur du fichier lui-même. Jusque-là, la taille sera zéro. :)
la source
Donc, voici comment cela fonctionne:
Dès que vous créez un fichier sur un volume, il crée un enregistrement dans le fichier NTFS mata, par exemple $ MFT (table de fichiers maître). Puisqu'il y a un FRS (segment d'enregistrement) présent dans la MFT, vous verrez un enregistrement. Chaque enregistrement de fichier a une taille par défaut de 1 Ko dans le cas d’un système de fichiers NTFS. Mais cet espace n'est revendiqué que si vous stockez des informations à l'intérieur du fichier. Même si vous n’écrivez qu’une seule lettre "a", étant donné qu’il s’agit d’un fichier texte, il demandera 1 Ko d’espace car il s’agit de la taille par défaut du FRS. La lettre "a" va au flux de données par défaut et non nommé de ce FRS, $ Data qui est un attribut auquel toutes vos données vont si vous ne disposez pas d'un ADS (Alternate Data Stream).
Faites-moi savoir si vous avez des questions.
la source