In unix, the inode is the central concept of the filesystem, and contains all the interesting file attributes, all of which can be read by the user using the stat or fstat system calls.

The inode also lists other data less interesting to the user that can't be read with stat, including the location of the first 12 data blocks of the file, and the first indirect, double indirect, and tripple indirect blocks. (The first indirect block is a list of the next BLOCKSIZE/4 blocks, and the first double indirect block is the list of the next BLOCKSIZE/4 indirect blocks, etc..., assuming 32 bit block numbers.) This pattern of direct and indirect blocks has not really changed since the first unix file system, and limits the maximum file size to (12+BLOCKSIZE/4 + (BLOCKSIZE/4)**2 + (BLOCKSIZE/4)**3) blocks, which is usually much larger than st_size anyway, so st_size limits the real maximum file size (if the size of your disk doesn't first).

The inode and indirect blocks contain all the metadata and attributes for the file. (The filename is not part of the file nor an attribute of the file in unix. Some files don't have names at all.) All files in unix have inodes; if the underlying filesystem does not have inodes, the file will still have one in memory. (Some unixes call an inode cached in memory a vnode.)

The inode may also contain other unix flavor specific information, such as fragmentation maps, extended attributes, or pointers to extended attributes.