What Is a Filesystem in Linux?

Linux supports more than a dozen types of filesystem

Documents getting exchanged from files

Westend61 / Brand X Pictures / Getty Images

Because Linux runs on a variety of hardware environments, some of which are bleeding-edge and some of which are decades old, the operating system supports more than a dozen different filesystems. Although most home-desktop setups rely on the default filesystems defined by the Linux distribution, the Linux kernel supports configurations of several disks with varying filesystem types.

Check out our list of 10 Essential Linux Commands for Navigating Your File System for a refresher about moving around Linux from a shell session.

What Is a Filesystem?

A filesystem is a method for organizing data on a hardware storage device. Without a filesystem, a computer operating system would not know how to read or write content from that device.

Look to music files as a good analogue for filesystems. Songs ship in a variety of formats, including MP3 and WAV and OGG. If your media player cannot recognize the content, it can't play the music. Likewise, if Linux cannot recognize the standard method by which content is stored on a device, it cannot read or write from it.

Just as there are many music-file formats, there are many filesystem types. Linux recognizes many of them.

Although filesystems organize content at a hardware level, virtual filesystems work in software containers. For example, the TrueCrypt utility generates encrypted files that mount as if they were physical hard drives.

Linux Filesystem Types

df command

The most commonly used, currently developed filesystems include:

  • ext2: Ext2 is the high-performance disk filesystem used by Linux for fixed disks as well as removable media. It offers the best performance (in terms of speed and CPU usage) of the filesystems supported under Linux.
  • ext3: Ext3 is a journaling version of the ext2 filesystem. It offers the most complete set of journaling options available among journaling filesystems.
  • ext4: The next-generation evolution of the ext3.
  • msdos: A blast from the past, MSDOS is the filesystem used by DOS, Windows, and some OS/2 computers. Its filenames can be no longer than eight characters, followed by an optional period and three-character extension.
  • vfat: VFAT is an extended DOS filesystem used by Microsoft Windows95 and Windows NT. VFAT adds the capability to use long filenames under the MSDOS filesystem.
  • proc: Proc is a pseudo-filesystem that interfaces to kernel data structures rather than reading and interpreting /dev/kmem. In particular, its files do not take disk space.
  • iso9660: ISO9660 is a CD-ROM filesystem type conforming to the ISO 9660 standard.
  • nfs: NFS is the network filesystem used to access disks located on remote computers.
  • smb: SMB is a network filesystem that supports the SMB protocol, used by Windows for Workgroups, Windows NT, and Lan Manager. To use smb fs, you need a special mount program, which can be found in the ksmbfs package.
  • squashfs: A virtual filesystem, squashfs is a compressed read-only filesystem. Ubuntu snap packages, for example, uses it.
  • tmpfs: Sometimes called a RAMdisk, tmpfs stores its data in memory instead rather than a disk.

Linux supports several more filesystems than what we've listed above, but these are the most common you'll encounter in desktop-focused Linux distributions.

Tools for Working with Linux Filesystems

To work with filesystems in Linux, you must first mount them. Mounting means that Linux recognizes a filesystem and makes it available to logged-in users. In most cases, filesystems mount automatically but Linux permits manual mounting and unmounting through the mount command.

Once mounted, a filesystem joins to the directory structure. From an end-user perspective, Linux offers a single, unified view of all filesystems simultaneously, but this perspective obscures the complexity of the underlying interrelationships.

For a simple overview of your mounted filesystems, use the du and df commands. The du utility shows how much disk space each directory consumes; the df utilty summarizes usage from the perspective of each mounted filesystem.

If you run a lot of Snap packages in Ubuntu, filter the results of df using grep by executing df -Th | grep -v 'squashfs'. This approach suppresses the read-only filesystems that support each Snap-installed application on your computer.