Day 03- Linux File System

Day 03- Linux File System

·

10 min read

🐧Linux File System🐧

🐧A Linux file system is a structured collection of files on a disk drive or a partition. A partition is a segment of memory that contains some specific data. In our machine, there can be various partitions of the memory. Generally, every partition contains a file system.

🐧The general-purpose computer system needs to store data systematically so that we can easily access the files in less time. It stores the data on hard disks (HDD) or some equivalent storage type. There may be below reasons for maintaining the file system:

⚙️Primarily the computer saves data to the RAM storage; it may lose the data if it gets turned off. However, there is non-volatile RAM (Flash RAM and SSD) that is available to maintain the data after the power interruption.

⚙️Data storage is preferred on hard drives as compared to standard RAM as RAM costs more than disk space. The hard disk costs are dropping gradually compared to the RAM.

🐧The Linux file system contains the following sections:

🔦The root directory (/)

🔦A specific data storage format (EXT3, EXT4, BTRFS, XFS and so on)

🔦A partition or logical volume having a particular file system.

🐧What is the Linux File System?

💡Linux file system is generally a built-in layer of a Linux operating system used to handle the data management of the storage. It helps to arrange the file on the disk storage. It manages the file name, file size, creation date, and much more information about a file.

💡If we have an unsupported file format in our file system, we can download software to deal with it.

🐧Linux File System Structure🐧

💡Linux file system has a hierarchal file structure as it contains a root directory and its subdirectories. All other directories can be accessed from the root directory. A partition usually has only one file system, but it may have more than one file system.

💡A file system is designed in a way that it can manage and provide space for non-volatile storage data. All file systems require a namespace that is a naming and organizational methodology. The namespace defines the naming process, length of the file name, or a subset of characters that can be used for the file name. It also defines the logical structure of files on a memory segment, such as the use of directories for organizing specific files. Once a namespace is described, a Metadata description must be defined for that particular file.

💡The data structure needs to support a hierarchical directory structure; this structure is used to describe the available and used disk space for a particular block. It also has other details about the files such as file size, date & time of creation, update, and last modification.

💡Also, it stores advanced information about the section of the disk, such as partitions and volumes.

💡The advanced data and the structures that it represents contain the information about the file system stored on the drive; it is distinct and independent of the file system metadata.

💡The file system requires an API (Application programming interface) to access the function calls to interact with file system components like files and directories. API facilitates tasks such as creating, deleting, and copying the files. It facilitates an algorithm that defines the arrangement of files on a file system.

💡The first two parts of the given file system together are called a Linux virtual file system. It provides a single set of commands for the kernel and developers to access the file system. This virtual file system requires the specific system driver to give an interface to the file system.

📂Directory Structure📂

💡The directories help us to store the files and locate them when we need them. Also, directories are called folders as they can be assumed of as folders where files reside in the form of a physical desktop analogy. Directories can be organized in a tree-like hierarchy in Linux and several other operating systems.

💡The directory structure of Linux is well-documented and defined in the Linux FHS (Filesystem Hierarchy Standard). Referencing those directories if accessing them is achieved via the sequentially deeper names of the directory linked by '/' forward slash like /var/spool/mail and /var/log. These are known as paths.

💡The below table gives a very short standard, defined, and well-known top-level Linux directory list and their purposes:

🔧 (root filesystem): It is the top-level filesystem directory. It must include every file needed to boot the Linux system before another filesystem is mounted. Every other filesystem is mounted on a well-defined and standard mount point because of the root filesystem directories after the system is started.

👢/boot: It includes the static kernel and bootloader configuration and executable files needed to start a Linux computer.

⚙️/bin: This directory includes user executable files.

🖨️/dev: It includes the device file for all hardware devices connected to the system. These aren't device drivers; instead, they are files that indicate all devices on the system and provide access to these devices.

📚/etc: It includes the local system configuration files for the host system.

🗂️/lib: It includes shared library files that are needed to start the system.

⚙️/home: The home directory storage is available for user files. All users have a subdirectory inside /home.

⚙️/mnt: It is a temporary mount point for basic filesystems that can be used at the time when the administrator is working or repairing a filesystem.

💿/media: A place for mounting external removable media devices like USB thumb drives that might be linked to the host.

💽/opt: It contains optional files like vendor-supplied application programs that must be placed here.

🔧/root: It's the home directory for a root user. Keep in mind that it's not the '/' (root) file system.

⚙️/tmp: It is a temporary directory used by the OS and several programs for storing temporary files. Also, users may temporarily store files here. Remember that files may be removed without prior notice at any time in this directory.

🔦/sbin: These are system binary files. They are executables utilized for system administration.

⚙️/usr: They are read-only and shareable files, including executable libraries and binaries, man files, and several documentation types.

/⚙️var: Here, variable data files are saved. It can contain things such as MySQL, log files, other database files, email inboxes, web server data files, and much more.

🐧Linux File System Features🐧

In Linux, the file system creates a tree structure. All the files are arranged as a tree and its branches. The topmost directory is called the root (/) directory. All other directories in Linux can be accessed from the root directory.

Some key features of Linux file system are as following:

💡Specifying paths: Linux does not use the backslash (\) to separate the components; it uses the forward slash (/) as an alternative. For example, as in Windows, the data may be stored in C:\ My Documents\ Work, whereas, in Linux, it would be stored in /home/ My Document/ Work.

💡Partition, Directories, and Drives: Linux does not use drive letters to organize the drive as Windows does. In Linux, we cannot tell whether we are addressing a partition, a network device, or an "ordinary" directory and a Drive.

💡Case Sensitivity: Linux file system is case sensitive. It distinguishes between lowercase and uppercase file names. Such as, there is a difference between test.txt and Test.txt in Linux. This rule is also applied to directories and Linux commands.

💡File Extensions: In Linux, a file may have the extension '.txt,' but a file doesn't need to have a file extension. While working with Shell, it creates some problems for beginners to differentiate between files and directories. If we use the graphical file manager, it symbolizes the files and folders.

💡Hidden files: Linux distinguishes between standard files and hidden files, mostly the configuration files are hidden in Linux OS. Usually, we don't need to access or read the hidden files. The hidden files in Linux are represented by a dot (.) before the file name (e.g., .ignore). To access the files, we need to change the view in the file manager or need to use a specific command in the shell.

🐧Types of Linux File System🐧

🔦When we install the Linux operating system, Linux offers many file systems such as Ext, Ext2, Ext3, Ext4, JFS, ReiserFS, XFS, btrfs, and swap.

🗂️Let's understand each of these file systems in detail🗂️

🔦1. Ext, Ext2, Ext3 and Ext4 file system

🔦The file system Ext stands for Extended File System. It was primarily developed for MINIX OS. The Ext file system is an older version and is no longer used due to some limitations.

🔦Ext2 is the first Linux file system that allows managing two terabytes of data. Ext3 is developed through Ext2; it is an upgraded version of Ext2 and contains backward compatibility. The major drawback of Ext3 is that it does not support servers because this file system does not support file recovery and disk snapshots.

🔦Ext4 file system is the faster file system among all the Ext file systems. It is a very compatible option for the SSD (solid-state drive) disks, and it is the default file system in Linux distribution.

🔦JFS File System

🔦JFS stands for Journaled File System, and it is developed by IBM for AIX Unix. It is an alternative to the Ext file system. It can also be used in place of Ext4, where stability is needed with few resources. It is a handy file system when CPU power is limited.

🔦XFS File System

XFS file system was considered as high-speed JFS, which is developed for parallel I/O processing. NASA still using this file system with its high storage server (300+ Terabyte server).

🔦Btrfs File System

Btrfs stands for the B tree file system. It is used for fault tolerance, repair systems, fun administration, extensive storage configuration, and more. It is not a good suit for the production system.

📁Swap File System

The swap file system is used for memory paging in Linux operating system during the system hibernation. A system that never goes in a hibernate state is required to have swap space equal to its RAM size.

What is Mounting in the Linux Filesystem?

In Linux, the "to mount", a filesystem term, refers to the initial days of computing when a removable disk or tape pack would physically need to be mounted on a correct drive device. On the disk pack, the filesystem would logically be mounted by the OS to make contents available to access by application programs, OS, and users after being located on the drive physically.

Simply, a mount point is a directory that's made as a component of the filesystem. For instance, the home filesystem is placed on the /home directory. Filesystems can be placed on mount points on many non-root filesystems, but it's less common.

🔦The root filesystem of Linux is mounted on the / directory (root directory) very early inside the boot sequence.

🔦Several filesystems are later mounted by the start-up programs of Linux, either rc upon SystemV or via systemd in new Linux versions.

🔦Filesystem mounting during startup is handled by the configuration file, i.e., /etc/fstab.

👉An easy way to understand that is fstab is short for "file system table", and it's a filesystem list that is to be mounted, their options, and designated mount points that may be required for particular filesystems.

👉Filesystems can be mounted on an available mount point/directory with the help of the mount command. In other words, any directory that's applied as a mount point shouldn't have other files in it and should be empty. Linux will not prevent users from mounting a filesystem on one that's already available or on a directory that includes files. The actual contents will be covered, and just the freshly mounted filesystem content will be visible if we mount any filesystem on any existing filesystem or directory.

🗄️INODE🗄️

💡An inode contains all information about a file, except its name. The name is stored in the directory, together with the number of the inode. A directory entry consists of a filename and the number of the inode which represents the file. The inode contains the numbers of several data blocks, which are used to store the data in the file. There is space only for a few data block numbers in the inode, however, and if more are needed, more space for pointers to the data blocks is allocated dynamically. These dynamically allocated blocks are indirect blocks; the name indicates that to find the data block, one has to find its number in the indirect block first.

💡To check the Inode Number of the file we can use the following command:

👉*ls -li <File name>

👉Above, the First field is the Inode 258420 number which is always unique for each filesystem, the Second field is Permission for the file, the Third field is Owner, the Fourth field is the Group name of the file, the Timestamp of the file (Creation date and time) & File name.

Thank You !!

Happy Learning!!