The Linux Filesystem Hierarchy
Social Share:
Sunday, July 28, 2024 at 1:30 PM | 23 min read
Last modified on Monday, July 27, 2026 at 4:20 AM
#command line, #debian, #linux, #linux mint, #filesystem, #tree, #ls, #ld.so, #fhs

Photo by cottonbro studio on pexels.com
Table of Contents
- The Linux filesystem
- Types of files in Linux
- /
- /bin
- /boot
- /cdrom
- /dev
- /etc
- /home
- /lib
- /lib64
- /lost+found
- /media
- /mnt
- /opt
- /proc
- /root
- /run
- /sbin
- /srv
- /swapfile
- /sys
- /tmp
- /usr
- /var
- Related Resources
- Footnotes
I have been a long-time Mac user, so when I started working with Linux, I realized that there were differences between the macOS and Linux filesystems. I initially wrote this post for myself, but perhaps others might be interested in the subject matter as well.
The Linux filesystem
At a high level, the Linux filesystem follows the Filesystem Hierarchy Standard (FHS). This standard describes the common layout conventions used by most UNIX and UNIX-like systems. It consists of a single primary or root directory with multiple branching sub-directories.
/ represents the root of the Linux filesystem. It is under this root directory that all other files and directories reside. The Filesystem Hierarchy Standard (FHS) describes the different directories and what files are located in which directories.
If you have Ubuntu or a Ubuntu derivative installed (like Linux Mint for example), you can install a package called tree by running the following command in Terminal:
# to update current packages. updates the list of available packages and their versions, but it does not install or upgrade any packages. sudo apt update # actually installs newer versions of the packages you have. After updating the lists, the package manager knows about available updates for the software you have installed. This is why you first want to update. sudo apt upgrade # now you are ready to install tree sudo apt install tree
Now you can run a command like:
tree /
The tree command lists the contents of directories in a tree-like format in Linux. With no args, it lists the files and sub-directories in the current directory. With directory args (such as / or ~), tree lists all the files and/or directories found in the given directories. When completing the list of all files and directories found, tree returns the total number of files`and/or directories listed. It is far too long to share here, but you should definitely run this command to see what the resulting output looks like.
If I want a short list of files and directories in root (/), for example, I can run something like the following instead:
# run from root directory `/` tree -L 1 /
This yields the following stdout to Terminal:
/ |___ bin -> usr/bin |___ boot |___ cdrom |___ dev |___ etc |___ home |___ lib -> usr/lib |___ lib64 -> usr/lib64 |___ lost+found |___ media |___ mnt |___ opt |___ proc |___ root |___ run |___ sbin -> usr/sbin |___ srv |___ swapfile |___ sys |___ tmp |___ usr |___ var 21 directories. 1 file
This command shows only the first level of the directory tree starting at root (/). The -L option tells tree how many levels down I want to see. Here, I indicate one level.
Let's say I run the following command instead, also from / root:
tree -L 2 /
This displays the following stdout to Terminal:
... 479 directories, 369 files
The stdout is too long to share here, but, as shown above, it provides 479 directories and 369 files! And so on.
Types of files in Linux
In Linux and Unix systems, everything is considered a file. If it isn't, it's a running process.
Files fall under three different categories in Linux:
- Regular files: these include text files, photos, videos, programs, and executable files.
- Directories: in Linux, directories are also considered files since they provide storage for other files and sub-directories.
- Special files: device files that are made up of symbolic links, block files, socket files, and named pipe files.
/
The forward slash (/) represents the root directory of the filesystem, which is the top-level directory from which all other directories and files emanate. Every file and directory in Linux resides under this root directory.
/bin
Historically, the /bin directory, which stands for 'binary', is the root /bin directory where executable files are stored. Now is also the symlink to `/usr/bin.
# ls -la bin from inside / lrwxrwxrwx 1 root root 7 Aug 7 2024 bin -> usr/bin
The /bindirectories are storage locations for important commands and programs.
If I run thels /bincommand from inside/, it responds with:
'[' 7z 7za 7zr aa-enabled aa-exec aa-features-abi aconnect acpi_listen add-apt-repository addpart addr2line add-remove-locales airscan-discover alpine alpinef alsabat alsaloop alsamixer ... join ... tar ... touch ... whoami ... zless zmore znew zstd zstdcat zstdgrep zstdless zstdmt
And if I run ls /bin | wc -l, it delivers:
1941
That is a lot of commands and programs! I can find out the path to a command by running the which command followed by the command itself. Something like:
which crontab # which returns: /usr/bin/crontab
The which command locates a command in /bin. Here it locates the path to the crontab command. I can also locate the grep command, for example:
which grep # which returns: /usr/bin/grep
On the other hand, a command like cd is a built-in shell command, so running which cd returns nothing. To learn more about built-in shell commands in Ubuntu bash, please visit Ubuntu bash builtins. There is also a great explanation of why cd, for example, cannot be an executable on "ask Ubuntu" in the thread entitled Why wouldn't the which command work for cd? I can't find the executable for cd either!.
To view /usr/bin, please visit /usr/bin.
/boot
The /boot directory contains all the files needed for starting the system (aka boot process). The /boot directory is mounted directly on the root directory (/) and is called /boot.
When I run ls /boot in my Linux Mint OS Virtual Machine, I get back:
config-5.15.0-117-generic initrd.img.old config-5.15.0-91-generic System.map-5.15.0-117-generic efi System.map-5.15.0-91-generic grub vmlinuz initrd.img vmlinuz-5.15.0-117-generic initrd.img-5.15.0-117-generic vmlinuz-5.15.0-91-generic initrd.img-5.15.0-91-generic vmlinuz.old
Files included in /boot are grub boot loader files1, root filesystem files, Linux kernel files (vmlinuz), and other boot configuration files.
grub, or GRand Unified Bootloader, is the boot loader. The current grub is also known as GRUB 2.
GRUB includes its own support for multiple file systems, especially FAT32, ext4, Btrfs or XFS.
initrd, or initial ramdisk, is used for loading a temporary root filesystem into memory, to be used as part of the Linux startup process. initramfs is used as another way of loading a temporary root filesystem into memory and is used as part of the Linux startup process as well. Both methods are commonly used to make preparations before the real root file system can be mounted.
/boot partition
According to archlinux (a lightweight Linux distribution),
The boot loader must be able to access the /boot partition. In other words, the boot loader must have support for everything starting from the block devices, stacked block devices (LVM, RAID, dm-crypt, LUKS, etc) and ending with the file system on which the kernel(s) and initramfs image(s) reside...File systems can get new features not yet supported by boot loaders (e.g. archlinux/packaging/packages/grub#7, FS#79857, FS#59047, FS#58137, FS#51879, FS#46856, FS#38750, FS#21733 and fscrypt encrypted directories), making them unsuitable for a /boot partition unless disabling incompatible features. This can be typically avoided by using FAT32 since it is supported by practically everything and it will not be getting any new features.
In addition, FAT32 works with all versions of macOS, Windows, Linux machines, and gaming devices.
That being said and shown, I should not touch anything in /boot, otherwise it might break my system and I wouldn't be able to run my Linux OS. However, as long as I'm not running as root, I wouldn't be able to access /boot anyway.
/cdrom
When I ran ls -l /cdrom, it produced:
total 0
Apparently, it is an empty directory in Linux Mint. I couldn't find anything specific about this directory in Linux Mint, but I did find the following about /cdrom on askUbuntu:
While /mnt/ and /media/ are common places to mount devices, the device location can be just about anywhere. /cdrom/ was probably chosen for either brevity or legacy support.
But this was from 2010, so who knows what its function is today on Linux Mint, especially since it is an empty directory. I subsequently found another thread entitled cdrom folder empty on the Linux Mint forum, and a user there stated the following in response to another user's question as to why the /cdrom directory was empty:
What makes you think that the folders should go anywhere other than where they already are?... and what makes you think that you should open them?
My system has been working perfectly for years... my cdrom folder is empty and my dev folder has almost 200 files - all of which contain 0 bytes! What I am trying to say here is that I don't think there is anything wrong with your cdrom folder or your dev folder...
I would suggest starting another thread or retitling this thread to something like "I can't use my DVD drive". Then edit your first post to include more information... the whole error message including what happens if you press S or M; what Mint version and DE your are using; does the DVD icon appear in you Computer view?; etc...
Don't worry about this one, especially if you are a Linux Mint user like me. It's an empty directory, and it seems to be meant to be empty. Just move on!
/dev
/dev contains device files. When we connect a device to our machine, the device usually needs a device driver to function properly. We can interact with device drivers through device files or device nodes1. These are special files that look like regular files. Since these device files are just like regular files, I can use programs such as ls, cat, etc., to interact with them.
The system creates /dev files during installation, and they must be available during the boot process. Device files are abstractions of standard devices that applications interact with via I/O system calls2.
Most of the files listed (ls -l /dev) are either block or character devices. We can tell which is which by the first character in the file's permissions. For example, if the first character in the file's permissions is a c, that means it is a character file.
Block devices
# example of a black file in /dev brw-rw---- 1 root disk 7, 0 Jul 28 09:33 loop0
The above is a block device file as indicated by the b in column 1, the file permissions.
Column 2 is the number of links.
Column 3 is the owner (root).
Column 4 is the group (disk).
Column 5 is the major device number (7).
Column 6 is the minor device number (0).
Column 7 is the timestamp (Jul 28 09:33).
Column 8 is the device name (loop0).
/dev/loop are loop devices making plain files accessible as block devices. They are typically used for mounting disk images. Drivers access data from block devices via a cache, and drivers communicate with block devices by sending blocks of data. Examples of block devices are hard drives, filesystems, or USBs (Universal Serial Bus).
Character devices
Character device files in Linux are special files that allow direct communication between user programs and hardware devices. They are part of the Linux filesystem and play a crucial role in Linux system administration.
Character device files, also known as character special files, provide access to devices that transfer data character by character. These devices typically include terminals, serial ports, and input/output (I/O) devices such as keyboards and mice. Unlike regular files, character device files do not store data but act as a conduit for data transfer between user programs and the underlying hardware.
Device major and minor numbers
Devices are characterized by using two numbers, a major device number and minor device number. The major device number represents the device driver that is used, and the minor device number tells the kernel which unique device it is in the driver class. A 0 as shown in the example below, indicates that it's the first device.
brw-rw---- 1 root disk 8, 0 Jul 28 09:33 sda # first hard disk
Each driver is assigned a unique major number, and all device files with the same major number are controlled by the same driver.
The minor number is used by the driver to distinguish between the different hardwares it controls. For example, although three devices may be handled by the same driver, they have unique minor numbers because the driver sees them as being different pieces of hardware.
Device names
The most common device names that appear in /dev are SCSI devices, Pseudo devices, and PATA devices.
SCSI devices use the SCSI protocol. SCSI stands for Small Computer System Interface, and it is used to allow communications between disks, printers, scanners, and other peripherals on the system. SCSI devices are not used on modern systems, but in Linux, SCSI disks correspond with hard disk drives in /dev. They are identified by the sd prefix (SCSI disk). In my Linux Mint OS, I have the following sds:
brw-rw---- 1 root disk 8, 0 Jul 28 09:33 sda # first hard disk brw-rw---- 1 root disk 8, 1 Jul 28 09:33 sda1 # first partition on the first hard disk brw-rw---- 1 root disk 8, 2 Jul 28 09:33 sda2 # second partition on the first hard disk brw-rw---- 1 root disk 8, 3 Jul 28 09:33 sda3 # third partition on the first hard disk
And if I had /dev/sdb, it would represent the second hard disk.
Pseudo devices are not really connected to the system. And most pseudo devices are character devices such as the following:
# accepts and discards all input, produces no output crw-rw-rw- 1 root root 1, 3 Jul 28 09:33 null # produces random numbers crw-rw-rw- 1 root root 1, 8 Jul 28 09:33 random # accepts and discards all input, produces a continuous stream of NULL (zero value) bytes crw-rw-rw- 1 root root 1, 4 Jul 28 09:33 zero
With PATA devices, which appear in older systems, we may see hard drives that are represented by the hd prefix:
/dev/hda # First hard disk /dev/hdd2 # Second partition on 4th hard disk
Symbolic links
Symbolic links in /dev are there for a number of reasons.
Examples of symbolic links are /dev/stdin, /dev/stdout, and /dev/stderr:
lrwxrwxrwx 1 root root 15 Jul 28 09:33 stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 Jul 28 09:33 stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 Jul 28 09:33 stdout -> /proc/self/fd/1
A symbolic link, aka symlink, to another file, is indicated by an l at the beginning of the file permission as above. A symbolic link is a file in Linux that points to other files or directories and represents their absolute or relative path.
/dev/stdin points to /proc/self/fd/0, for example, because /proc/self sits on the /proc filesystem. When a process reads /proc/self, it gets information about itself using its process id. The /proc/self directory is a symbolic link as well:
lrwx------ 1 maria maria 64 Jul 29 06:53 /proc/self/fd/0 -> /dev/pts/0
When I run ls -l /dev/cdrom, it returns:
lrwxrwxrwx root root 3 Jul 28 09:33 /dev/cdrom -> sr0
And what does /dev/cdrom -> sr0 mean? sr0 is a device on the SCSI controller3 (hypervisor). For those of us that use Linux in A VM (virtual machine) like VirtualBox, for instance, it is the "cdrom" that we use to upload our Linux ".iso" image4 file into VirtualBox to install our Linux distribution.
There are 203 files and folders in my Linux Mint /dev directory. Among them (and in Linux in general) is /dev/null, which is a virtual device that discards any output of a script or command that I redirect to it.
There is more to /dev than covered here. To learn more, you can visit devices on linuxjourney.com.
/etc
/etc originally stood for "et cetera" because it was where anything that was difficult to find a place for was placed. Now "etc" refers to everything that needs to be configured. It contains most, if not all, system-wide configuration files. Some examples of configuration files in /etc:
# The user database, with fields giving the username, real name, home directory, and other information about each user. The format is documented in the passwd manual page. -rw-r--r-- 1 root root 2983 Aug 7 2024 /etc/passwd # /etc/shadow is an encrypted file the holds user passwords. -rw-r----- 1 root shadow 1417 Aug 7 2024 /etc/shadow # Files executed at login or startup time by the Bourne, BASH , or C shells. These allow the system administrator to set global defaults for all users. Users can also create individual copies of these in their home directory to personalize their environment. See the manual pages for the respective shells. -rw-r--r-- 1 root root 582 Apr 22 2024 /etc/profile -rw-r--r-- 1 root root 2319 Mar 31 2024 /etc/bash.bashrc # Lists trusted shells. The chsh command allows users to change their login shell only to shells listed in this file. ftpd, is the server process that provides FTP services for a machine, will check that the user's shell is listed in /etc/shells and will not let people log in unless the shell is listed there. -rw-r--r-- 1 root root 118 Jul 21 2024 /etc/shells
/home
/home is where users' personal directories reside. In my case, there is one directory under /home: /home/maria. I have created another user on the system called magdala, and her /home directory contains /home/magdala.
/lib
/lib is a symbolic link for usr/lib:
# ls -la lib from insde / lrwxrwxrwx 1 root root 7 Jul 12 20:38 /lib -> usr/lib
To learn more about /usr/lib, please go to /usr/lib.
/lib64
The /lib64 directory holds 64-bit shared libraries that applications need to run on 64-bit architectures.
/lib64 is a symbolic link to /usr/lib64:
# ls -la lib64 from inside / lrwxrwxrwx 1 root root 9 Jul 12 20:38 /lib64 -> usr/lib64
To view /usr/lib64, please visit /usr/lib64.
/lost+found
My /lost+found directory is empty, and oftentimes they are. However, they are system-created directories and should not be touched. They may be used by the system, specifically the fsck command.
According to man fsck,
The fsck command checks and repairs a Linux filesystem. fsck is used to check and optionally repair one or more Linux filesystems. Filesystem can be a device name such as /dev/hdc1 or /dev/sdb2, a mount point (i.e. /usr or /home), or a filesystem label or UUID specifier (i.e., UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd, or LABL=root). Normally, the fsck program will try to handle filesystems on different physical disk drives in parallel to reduce the total amount of time needed to check all of them.
Another great source of information on fsck and /lost+found is the UNIX & LINUX Stack Exchange thread entitled What is the purpose of the lost+found folder in Linux and Unix?.
/media
On my Linux Mint OS in VirtualBox, the /media directory contains:
ls -lh /media # which returns: total 4.0K drwxr-x---+ 3 root root 4.0K Jul 28 09:33 maria # to find out what is in the maria directory: ls -lh /media/maria # which returns: total 3.0K dr-xr-xr-x 5 maria maria 2.6K May 22 05:22 VBox_GAs_7.0.18
The above is my Guest Additions, which is needed to select bidirectional "Drag and Drop" and "Shared Clipboard". By default, they are both disabled. To change them to "Bidirectional", I have to go to the General tab in my Linux Mint Settings and then select the "Advanced" tab. If I want to be able to copy from Linux Mint in VirtualBox onto my native OS (like Windows 11, for example), I need to properly mount and install VBox_GAs_7.0.18 ".iso" in VirtualBox.
/mnt
/mnt is a legacy directory. It is where we used to manually mount storage devices or partitions. It is not used much these days.
According to the Linux Mint forum, I can delete /mnt if I want to as long as the directory is empty. For example, mine is empty, but I'm not going to touch it anyway.
/opt
The /opt directory is used for optional add-on software packages, or anything that is not part of the base system. For example, in my /opt directory, I have:
ls -lh /opt # returns: total 4.0K drwxr-xr-x 8 root root 4.0K Jul 26 00:08 VBoxGuestAdditions-7.0.18
Only some distributions use /opt. Others use /usr/local.
/proc
/proc, aka the proc filesystem, like /dev, is a virtual directory. It contains special files that provide me with information about my computer such as the CPU and the kernel my Linux OS is running. The files and directories are generated when our computer starts, or on the fly, as our system is running and things change. /proc is regarded as the information and control center of the Linux kernel.
The OS removes the proc filesystem once the system is powered off. It is mounted at the /proc mount point during the booting process.
/root
The /root directory, as opposed to /, contains the following in Linux Mint OS:
ls -lah /root # which returns: total 28K drwx------ 4 root root 4.0K Jul 25 23:51 . drwxr-xr-x 19 root root 4.0K Jul 12 20:46 .. -rw-r--r-- 1 root root 3.1K Oct 15 2021 .bashrc drwx------ 2 root root 4.0K Jan 9 2024 .cache -rw-r--r-- 1 root root 161 Jul 9 2019 .profile drwx------ 3 root root 4.0K Jul 25 23:53 .synaptic -rw------- 1 root root 1.3K Jul 21 19:37 .viminfo
The root (/) directory, mentioned earlier, represents the root of the Linux filesystem. It is under this /root directory that all other files and directories reside. On the other hand, the /root directory is the home directory for the root user. /root contains the files I create when I am the root user and also the hidden configuration files for some applications or packages I install. For example, I installed the Vim text editor, and now /root contains a filecalled .viminfo`.
The .viminfo file is used to store:
- The command line history. - The search string history. - The input-line history. - Contents of non-empty registers. - Marks for several files. - File marks, pointing to locations in files. - Last search/substitute pattern (for 'n' and '&'). - The buffer list. - Global variables.
/run
/run is a temporary filesystem that contains volatile runtime data that shows what the system has since it was booted. The OS must delete (remove or truncate for convenience) files under the /run directory at the start of the boot process.
When I run ls /run inside /run, it responds with:
acpid.pid cups lvm speech-dispatcher acpid.socket dbus mount sudo agetty.reload dmeventd-client network systemd alsa dmeventd-server NetworkManager tmpfiles.d avahi-daemon fsck openvpn udev blkid initctl openvpn-client udisks2 casper-md5check.json initramfs openvpn-server user console-setup irqbalance plymouth utmp credentials lightdm pppconfig uuidd crond.pid lightdm.pid samba VBoxDRMClient crond.reboot lock sendsigs.omit.d zed.pid cryptsetup log shm zed.state
/sbin
/sbin is similar to /bin, but it contains applications that only the superuser needs. I can use these applications with the sudo command that provides me with superuser powers on many distributions. /sbin typically contains tools that can install things, delete things and format things. Some of these instructions are lethal if I don't use them properly, so I have to handle them very carefully.
/sbin now is also the symlink for /usr/sbin.
# la -la from inside / lrwxrwxrwx 1 root root 8 August 7 2024 sbin -> usr/sbin
To view /usr/sbin, please visit /usr/sbin.
/srv
/srv contains data for servers. My /srv directory is empty, but then I have not yet tried to set up a server. I have, however, installed Node.js and will be testing out creating simple servers with it. This is so I can re-build projects I have created on macOS to quickly see what the similarities and differences are in the build process.
/swapfile
/swapfile is a swap-space partition which is either configured by the user or system installer. Such a partition is dedicated to swapping. It may be slightly faster than using a swapfile which is just a regular file inside my directory tree (and likely stored in the /root folder) if it is on the same disk as the OS. The size of my swapfile partition is 6.0GB, which is pretty large.
When I run ls -lah /swapfile, it renders:
-rw------- 1 root root 6.0G Aug 7 2024 /swapfile
/sys
/sys is another virtual directory-like /proc, and it also contains information from devices connected to my computer. In some cases I can also manipulate those devices. But to do that I have to become superuser. The reason for that is, as with so many other virtual directories, messing with the contents and files in /sys can be dangerous, and can destroy my system. Writing to these files may or may not write to the actual device, depending on the setting I'm changing. It isn't only for managing devices, but it is mostly used for that.
When I run ls /sys, it produces:
block class devices fs kernel power bus dev firmware hypervisor module
/tmp
The /tmp directory contains temporary files, usually placed there by applications that I am running. The files and directories often (not always) contain data that an application doesn’t need right now, but may need later on.
We can also use /tmp to store our own temporary files. /tmp is one of the few directories under / that we can actually interact with without the need to become superuser.
When I run ls -lah /tmp, it yields:
total 68K drwxrwxrwt 16 root root 4.0K Jul 29 12:29 . drwxr-xr-x 19 root root 4.0K Jul 12 20:46 .. -rw------- 1 maria maria 0 Jul 29 09:27 config-err-rXGF3b drwxrwxrwt 2 root root 4.0K Jul 29 09:27 .font-unix drwxrwxrwt 2 root root 4.0K Jul 29 09:27 .ICE-unix srw-rw-rw- 1 root root 0 Jul 29 09:27 .iprt-localipc-DRMIpcServer drwxrwxrwx 2 maria maria 4.0K Jul 29 09:27 mintUpdate drwx------ 3 root root 4.0K Jul 29 09:27 systemd-private-1c36d4307da64425a7f807f98ab15818-colord.service-q0oBPs drwx------ 3 root root 4.0K Jul 29 09:27 systemd-private-1c36d4307da64425a7f807f98ab15818-ModemManager.service-9iFgLL drwx------ 3 root root 4.0K Jul 29 09:27 systemd-private-1c36d4307da64425a7f807f98ab15818-switcheroo-control.service-mePlYv drwx------ 3 root root 4.0K Jul 29 12:29 systemd-private-1c36d4307da64425a7f807f98ab15818-systemd-logind.service-vApiMX drwx------ 3 root root 4.0K Jul 29 10:55 systemd-private-1c36d4307da64425a7f807f98ab15818-systemd-resolved.service-y4F3hZ drwx------ 3 root root 4.0K Jul 29 12:29 systemd-private-1c36d4307da64425a7f807f98ab15818-systemd-timesyncd.service-O1h3qX drwx------ 3 root root 4.0K Jul 29 09:27 systemd-private-1c36d4307da64425a7f807f98ab15818-upower.service-TY3ZQQ drwxrwxrwt 2 root root 4.0K Jul 29 09:27 .Test-unix drwxrwxrwt 2 root root 4.0K Jul 29 09:27 VMwareDnD -r--r--r-- 1 root root 11 Jul 29 09:27 .X0-lock drwxrwxrwt 2 root root 4.0K Jul 29 09:27 .X11-unix drwxrwxrwt 2 root root 4.0K Jul 29 09:27 .XIM-unix
/usr
According to tldp.org,
/usr usually contains by far the largest share of data on a system. Hence, this is one of the most important directories in the system as it contains all the user binaries, their documentation, libraries, header files, etc.... X and its supporting libraries can be found here. User programs like telnet, ftp, etc.... are also placed here. In the original Unix implementations, /usr was where the home directories of the users were placed (that is to say, /usr/someone was then the directory now known as /home/someone). In current Unices, /usr is where user-land programs and data (as opposed to 'system land' programs and data) are. The name hasn't changed, but it's meaning has narrowed and lengthened from "everything user related" to "user usable programs and data".
When I run ls -lah /usr, I get back:
total 136K drwxr-xr-x 12 root root 4.0K Jan 9 2024 . drwxr-xr-x 19 root root 4.0K Jul 12 20:46 .. drwxr-xr-x 2 root root 68K Jul 27 11:22 bin drwxr-xr-x 2 root root 4.0K Jan 9 2024 games drwxr-xr-x 41 root root 4.0K Jul 26 00:04 include drwxr-xr-x 128 root root 4.0K Jul 27 07:32 lib drwxr-xr-x 2 root root 4.0K Jul 25 13:13 lib64 drwxr-xr-x 20 root root 4.0K Jul 25 13:14 libexec drwxr-xr-x 10 root root 4.0K Jan 9 2024 local drwxr-xr-x 2 root root 20K Jul 26 00:08 sbin drwxr-xr-x 322 root root 12K Jul 27 07:32 share drwxr-xr-x 6 root root 4.0K Jul 26 00:06 src
History of the /bin, /lib, /lib64, and /sbin symlinks in Linux distributions
Debian, the second oldest Linux distribution still being developed5, changed its filesystem hierarchy. It officially dropped the /bin, /sbin, /lib, and /lib64 legacy directories for /usr/bin, /usr/sbin, /usr/lib, and /usr/lib64, and replaced them with symlinks to /usr/bin, /usr/sbin, /usr/lib, and /usr/lib64 with the release of Debian 12, codenamed "Bookworm," on June 10, 2023. This change was dubbed “merged-/usr”, and it was required with the Debian 12 release. Ubuntu followed suit later, and since Linux Mint is an Ubuntu derivative, it did as well.
/usr subdirectories
Below are the /usr subdirectories on my Linux Mint OS:
bin games include lib lib64 libexec local sbin share src
/usr/bin
This is the directory where most executable programs reside. Like apt, bash, cat, chmod, chown, cinnamon, cinnamon-remove-application, curl, dpkg, du, dumpcap, echo, find, geany, wireshark, just to name a few.
When I run ls | wc -l inside /usr/bin, it returns:
1975
/usr/games
The /usr/games subdirectory is where binaries for games and educational programs reside.
When I run ls | wc -l inside /usr/games, it yields:
3
And since the list is so short, I run ls and get back:
gamemodelist gamemoderun gamemode-simulate-game
/usr/include
The /usr/include subdirectory contains user header files that end with the .h extension. These header files define interfaces, set system constants, and provide declarations necessary for compiling programs.
When I run ls | wc -l inside /usr/include, it returns:
187
And ls responds with:
... cryot.h ... math.h ... md2.h md4.h md5.h ... regex.h regexp.h ... sha256.h sha2.h sha512.h ...
/usr/lib
The /usr/lib subdirectory serves as storage for libraries necessary for programming and software packages.
According to linuxfoundation.org,
/usr/lib includes libraries for programming and packages. On some systems, it may also include internal binaries that are not intended to be executed directly by users or shell scripts.
Applications may use a single sub-directory under /usr/lib. If an application uses a sub-directory, all architecture-dependent data exclusively used by the application must be placed within that sub-directory.
There are 137 files and folders in /usr/lib:
ls -l /usr/lib | wc -l # which returns: 137
In my Linux Mint OS, /usr/lib contains:
ls # which yields: 7zip locale apg lp_solve apparmor lsb apt man-db aspell mime bfd-plugins mintstick binfmt.d modprobe.d brltty modules bulky modules-load.d caribou mutt casper netplan cnf-update-db networkd-dispatcher command-not-found NetworkManager compat-ld nvidia console-setup nvidia-prime-applet cpp openssh cryptsetup openvpn cups os-probes dbus-1.0 os-release debug pam.d dhcpcd pcmciautils dkms pcrlock.d dpkg pkgconfig dracut pm-utils emacsen-common policykit-1 environment.d policykit-1-gnome evolution-data-server polkit-1 file postfix finalrd pppd firefox python3 firewalld python3.10 firmware python3.12 gcc recovery-mode ghc rhythmbox girepository-1.0 rsyslog git-core sasl2 gnome-settings-daemon-3.0 sendmail gnupg shim gnupg2 speech-dispatcher-modules gold-ld ssl groff sticky grub sysctl.d grub-legacy syslinux gvfs SYSLINUX haskell-packages systemd hdparm sysusers.d hypnotix thingy init thunderbird initramfs-tools tmpfiles.d ispell ubiquity kernel udev klibc udisks2 klibc-sw0VayLfV0hmLGCQE9vyfOnj81g.so ufw libreoffice unity-settings-daemon-1.0 lightdm user-setup lightdm-settings valgrind linux webapp-manager linux-boot-probes X11 linuxmint x86_64-linux-gnu linux-sound-base xorg linux-tools xserver-xorg-video-intel linux-tools-6.8.0-124 xviewer linux-tools-6.8.0-39 zfs-linux linux-tools-6.8.0-40
If I run ls -la inside /usr/lib, I get:
# inside /usr/lib ls -la ... drwxr-xr-x 5 root root 4096 Jul 25 13:14 libreoffice drwxr-xr-x 3 root root 4096 Jan 9 2024 linux drwxr-xr-x 13 root root 4096 Jan 9 2024 linuxmint ...
/usr/lib64
/usr/lib64 is where the dynamic linker file ld-linux-x86-64.so.2 physically resides. The top-level /lib64 is the compatibility symlink pointing to it.
To invoke this dynamic linker, I run ld.so, which stands for dynamic linker/loader.
When I run ld.so --help, it returns:
Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...] You have invoked 'ld.so', the program interpreter for dynamically-linked ELF programs. Usually, the program interpreter is invoked automatically when a dynamically-linked executable is started. You may invoke the program interpreter program directly from the command line to load and run an ELF executable file; this is like executing that file itself, but always uses the program interpreter you invoked, instead of the program interpreter specified in the executable file you run. Invoking the program interpreter directly provides access to additional diagnostics, and changing the dynamic linker behavior without setting environment variables (which would be inherited by subprocesses). --list list all dependencies and how they are resolved --verify verify that given object really is a dynamically linked object we can handle --inhibit-cache Do not use /etc/ld.so.cache --library-path PATH use given PATH instead of content of the environment variable LD_LIBRARY_PATH --glibc-hwcaps-prepend LIST search glibc-hwcaps subdirectories in LIST --glibc-hwcaps-mask LIST only search built-in subdirectories if in LIST --inhibit-rpath LIST ignore RUNPATH and RPATH information in object names in LIST --audit LIST use objects named in LIST as auditors --preload LIST preload objects named in LIST --argv0 STRING set argv[0] to STRING before running --list-tunables list all tunables with minimum and maximum values --list-diagnostics list diagnostics information --help display this help and exit --version output version information and exit This program interpreter self-identifies as: /lib64/ld-linux-x86-64.so.2 Shared library search path: (libraries located via /etc/ld.so.cache) /lib/x86_64-linux-gnu (system search path) /usr/lib/x86_64-linux-gnu (system search path) /lib (system search path) /usr/lib (system search path) Subdirectories of glibc-hwcaps directories, in priority order: x86-64-v4 x86-64-v3 x86-64-v2 (supported, searched)
/usr/libexec
/usr/libexec usually contains internal binaries that are not executed directly by users or shell scripts. They are usually used by applications to run specific tasks.
When I run ls inside /usr/libexec, it responds with:
accounts-daemon gvfsd-afp-browse at-spi2-registryd gvfsd-archive at-spi-bus-launcher gvfsd-burn blueman-mechanism gvfsd-cdda blueman-rfcomm-watcher gvfsd-computer bluetooth gvfsd-dav boltd gvfsd-dnssd camel-gpg-photo-saver gvfsd-ftp camel-index-control-1.2 gvfsd-fuse camel-lock-helper-1.2 gvfsd-google cinnamon gvfsd-gphoto2 colord gvfsd-http colord-sane gvfsd-localtest colord-session gvfsd-metadata coreutils gvfsd-mtp cpucorectl gvfsd-network cpugovctl gvfsd-nfs csd-a11y-settings gvfsd-onedrive csd-automount gvfsd-recent csd-background gvfsd-sftp csd-backlight-helper gvfsd-smb csd-clipboard gvfsd-smb-browse csd-color gvfsd-trash csd-datetime-mechanism gvfsd-wsdd csd-housekeeping gvfs-goa-volume-monitor csd-input-helper gvfs-gphoto2-volume-monitor csd-keyboard gvfs-mtp-volume-monitor csd-media-keys gvfs-udisks2-volume-monitor csd-power iio-sensor-proxy csd-printer installed-tests csd-print-notifications man-db csd-screensaver-proxy mate-panel csd-settings-remap mbim-proxy csd-smartcard muffin-restart-helper csd-wacom nemo-preview-start csd-wacom-led-helper netplan csd-wacom-oled-helper nm-daemon-helper csd-xsettings nm-dhcp-helper dconf-service nm-dispatcher dpkg nm-initrd-generator evolution-addressbook-factory nm-openvpn-auth-dialog evolution-addressbook-factory-subprocess nm-openvpn-service evolution-calendar-factory nm-openvpn-service-openvpn-helper evolution-calendar-factory-subprocess nm-pptp-auth-dialog evolution-data-server nm-pptp-service evolution-scan-gconf-tree-xml nm-priv-helper evolution-source-registry p11-kit evolution-user-prompter packagekitd file-roller packagekit-direct flatpak-oci-authenticator pk-debconf-helper flatpak-portal pk-gstreamer-install flatpak-session-helper pk-offline-update flatpak-system-helper plymouth flatpak-validate-icon polkit-agent-helper-1 fprintd polkit-mate-authentication-agent-1 fwupd procsysctl gcc qmi-proxy gcr4-ssh-askpass revokefs-fuse gcr-prompter rhythmbox-metadata gcr-ssh-agent rtkit-daemon gcr-ssh-askpass samba geoclue seahorse geoclue-2.0 sudo glib-pacrunner switcheroo-control gnome-calculator-search-provider udisks2 gnome-system-monitor upowerd gnome-terminal-preferences vte-urlencode-cwd gnome-terminal-server warpinator goa-daemon xapps goa-identity-service xdg-desktop-portal goa-oauth2-handler xdg-desktop-portal-gtk gpuclockctl xdg-desktop-portal-rewrite-launchers gsd-disk-utility-notify xdg-desktop-portal-validate-icon gst-install-plugins-helper xdg-desktop-portal-validate-sound gvfs-afc-volume-monitor xdg-desktop-portal-xapp gvfsd xdg-document-portal gvfsd-admin xdg-permission-store gvfsd-afc xfsprogs gvfsd-afp xreaderd
/usr/local
/usr/local is used for programs and data that are shareable among multiple machines but not found in the standard /usr directory.
When I run ls inside /usr/local, I get back:
bin etc games include lib man sbin share src
/usr/sbin
/usr/sbin contains executable programs, mostly used by system administrators, usually the superuser. These programs require root permissions.
When I run ls inside /usr/sbin, it returns:
aa-load mkfs.exfat aa-remove-unknown mkfs.ext2 aa-status mkfs.ext3 aa-teardown mkfs.ext4 accessdb mkfs.fat addgnupghome mkfs.hfs addgroup mkfs.hfsplus add-shell mkfs.jfs adduser mkfs.minix agetty mkfs.msdos alsa mkfs.ntfs alsabat-test mkfs.reiserfs alsactl mkfs.vfat alsa-info mkfs.xfs anacron mkhomedir_helper apparmor_parser mkinitramfs apparmor_status mklost+found applygnupgdefaults mkntfs aptd mkreiserfs aptk mkswap arcstat ModemManager arc_summary modinfo arp modprobe arpd mount.cifs arptables mount.ecryptfs arptables-nft mount.ecryptfs_private arptables-nft-restore mount.exfat-fuse arptables-nft-save mount.fuse arptables-restore mount.fuse3 arptables-save mount.lowntfs-3g aspell-autobuildhash mount.ntfs avahi-autoipd mount.ntfs-3g avahi-daemon mount.smb3 badblocks mount.vboxsf biosdecode mount.zfs blkdeactivate nameif blkdiscard netplan blkid NetworkManager blkzone newusers blockdev nfnl_osf bluetoothd nft bpftool nologin bridge ntfsclone brltty ntfscp brltty-setup ntfslabel capsh ntfsresize casper-getty ntfsundelete casper-login on_ac_power casper-new-uuid openvpn casper-snapshot ownership casper-stop pam-auth-update cfdisk pam_extrausers_chkpwd cgdisk pam_extrausers_update chat pam_getenv chcpu pam_namespace_helper chgpasswd pam_timestamp_check chmem paperconfig chpasswd parted chroot partprobe cifs.idmap pccardctl cifs.upcall pivot_root cpgr plipconfig cppw plocate-build cracklib-check plymouthd cracklib-format pm-hibernate cracklib-packer pm-powersave cracklib-unpacker pm-suspend create-cracklib-dict pm-suspend-hybrid cron postalias cryptdisks_start postcat cryptdisks_stop postconf cryptsetup postdrop ctrlaltdel postfix cupsaccept postfix-add-filter cups-browsed postfix-add-policy cupsctl postfix-collate cupsd postkick cupsdisable postlock cupsenable postlog cupsfilter postmap cups-genppdupdate postmulti cupsreject postqueue dbufstat postsuper dcb posttls-finger debugfs poweroff debugfs.reiserfs pppd debugreiserfs pppdump delgroup pppoe-discovery deluser pppstats depmod pptp devlink pptpsetup dhclient pvchange dhclient-script pvck dhcpcd pvcreate dkms pvdisplay dmeventd pvmove dmidecode pvremove dmraid pvresize dmraid-activate pvs dmsetup pvscan dmstats pwck dnsmasq pwconv dosfsck pwhistory_helper dosfslabel pwunconv dpkg-preconfigure qmqp-sink dpkg-reconfigure qmqp-source dumpe2fs qshape dump.exfat rarp e2freefrag rcvboxadd e2fsck rcvboxadd-service e2image rdate e2label readprofile e2mmpstatus reboot e2scrub reiserfsck e2scrub_all reiserfstune e2undo remove-default-ispell e4crypt remove-default-wordlist e4defrag remove-shell ebtables request-key ebtables-nft resize2fs ebtables-nft-restore resize_reiserfs ebtables-nft-save resolvconf ebtables-restore rfkill ebtables-save rmail ebtables-translate rmmod ethtool rmt exfat2img rmt-tar exfatlabel route faillock rsyslogd fatlabel rtacct fdisk rtcwake filefrag rtkitctl findfs rtmon fixparts runlevel fsadm runuser fsck samba_kcc fsck.btrfs saned fsck.cramfs select-default-ispell fsck.exfat select-default-wordlist fsck.ext2 sendmail fsck.ext3 sensors-detect fsck.ext4 service fsck.fat setcap fsck.hfs setvesablank fsck.hfsplus setvtrgb fsck.jfs sfdisk fsck.minix sgdisk fsck.msdos shadowconfig fsck.reiserfs shutdown fsck.vfat slattach fsck.xfs slick-greeter fsck.zfs smtp-sink fsfreeze smtp-source fstab-decode start-stop-daemon fstrim sudo_logsrvd gdisk sudo_sendlog genl sulogin getcap swaplabel getpcaps swapoff getty swapon getweb switch_root gnome-menus-blacklist synaptic groupadd sync-available groupdel sysctl groupmems system-tools-backends groupmod tarcat grpck tc grpconv telinit grpunconv thermald grub-bios-setup tipc grub-install tune2fs grub-macbless tune.exfat grub-mkconfig tunefs.reiserfs grub-mkdevicemap u-d-c-print-pci-ids grub-probe ufw grub-reboot umount.ecryptfs grub-set-default umount.ecryptfs_private guest-account umount.udisks2 halt unix_chkpwd hdparm unix_update iconvconfig update-ca-certificates ifconfig update-catalog init update-cracklib insmod updatedb.plocate installkernel update-default-aspell install-sgmlcatalog update-default-ispell integritysetup update-default-wordlist invoke-rc.d update-dictcommon-aspell ip update-dictcommon-hunspell ip6tables update-fonts-alias ip6tables-apply update-fonts-dir ip6tables-legacy update-fonts-scale ip6tables-legacy-restore update-grub ip6tables-legacy-save update-grub2 ip6tables-nft update-grub-gfxpayload ip6tables-nft-restore update-gsfontmap ip6tables-nft-save update-icon-caches ip6tables-restore update-ieee-data ip6tables-restore-translate update-inetd ip6tables-save update-info-dir ip6tables-translate update-initramfs ipmaddr update-locale ippevepcl update-mime ippeveprinter update-passwd ippeveps update-pciids ipp-usb update-rc.d iptables update-secureboot-policy iptables-apply update-shells iptables-legacy update-xmlcatalog iptables-legacy-restore upgrade-from-grub-legacy iptables-legacy-save usb_modeswitch iptables-nft usb_modeswitch_dispatcher iptables-nft-restore usbmuxd iptables-nft-save useradd iptables-restore userdel iptables-restore-translate usermod iptables-save uuidd iptables-translate validlocale iptunnel vbox-greeter irqbalance VBoxService irqbalance-ui vbox-uninstall-guest-additions isadump vcstime isaset vdpa isosize veritysetup ispell-autobuildhash vgcfgbackup iucode-tool vgcfgrestore iucode_tool vgchange iwconfig vgck iwevent vgconvert iwgetid vgcreate iwlist vgdisplay iwpriv vgexport iwspy vgextend jfs_debugfs vgimport jfs_fsck vgimportclone jfs_fscklog vgmerge jfs_logdump vgmknodes jfs_mkfs vgreduce jfs_tune vgremove kbdrate vgrename kerneloops vgs key.dns_resolver vgscan killall5 vgsplit kpartx vigr ldattach vipw ldconfig visudo ldconfig.real vpddecode lightdm wipefs lightdm-session wpa_action locale-gen wpa_cli logrotate wpa_supplicant logsave xfs_admin losetup xfs_bmap lpadmin xfs_copy lpc xfs_db lpinfo xfs_estimate lpmove xfs_freeze lsmod xfs_fsr lspcmcia xfs_growfs luksformat xfs_info lvchange xfs_io lvconvert xfs_logprint lvcreate xfs_mdrestore lvdisplay xfs_metadump lvextend xfs_mkfile lvm xfs_ncheck lvmconfig xfs_quota lvmdiskscan xfs_repair lvmdump xfs_rtcp lvmpolld xfs_scrub lvmsadc xfs_scrub_all lvmsar xfs_spaceman lvreduce xtables-legacy-multi lvremove xtables-monitor lvrename xtables-nft-multi lvresize zdb lvs zed lvscan zerofree make-ssl-cert zfs mdadm zfs_ids_to_path mdmon zgenhostid mii-tool zhack mkdosfs zic mke2fs zpool mkfs zramctl mkfs.bfs zstream mkfs.btrfs zstreamdump mkfs.cramfs zvol_wait
/usr/share
/usr/share contains manuals and guides for applications, online manuals for command line tools, data related to language and regional settings, and other shared resources that don't require modification.
When I run ls inside /usr/share, I get back:
accountsservice liblouis aclocal liblouisutdml alsa libmate-desktop alsa-base libmateweather alsa-card-profile libmysofa app-install libreoffice application-registry libthai applications libtimezonemap apport libvisual-plugins-0.4 apps libwacom appstream lightdm aptitude lintian apturl linuxmint aspell linux-sound-base avahi locale backgrounds localechooser base-files locale-langpack base-passwd locales bash-completion lto-disabled-list binfmts m2300w blueman man brasero man-db brltty mate bug mate-about build-essential mate-background-properties bulky mate-menus ca-certificates mate-panel caja-python maven-repo caribou mdadm casper mdm catdoc media-player-info cinnamon menu cinnamon-background-properties mesa-demos cinnamon-control-center metainfo cinnamon-screensaver mfx cinnamon-session mime cinnamon-settings-daemon mint-artwork circle-flags-svg mint-mirrors cmake mintsources color mintstick colord mint-upgrade-info common-licenses misc consolefonts mobile-broadband-provider-info console-setup ModemManager consoletrans motd cryptsetup mousetweaks cups mysql-common dbus-1 mythes debconf nano debhelper nautilus debianutils nemo defaults nemo-preview desktop-directories nemo-python dhcpcd nemo-share dict netplan dictionaries-common networks directfb-1.7.7 onboard distro-info openal djvu open-vm-tools dns openvpn dnsmasq-base orca doc os-prober doc-base p11-kit dot.bashrc PackageKit dot.profile pam dot.profile.md5sums pam-configs dpkg perl drawing perl5 drirc.d perl-openssl-defaults ecryptfs-utils pipewire emacs pix emacsen-common pixmaps enchant-2 pkgconfig evolution-data-server plymouth file pnm2ppa file-roller polkit-1 finalrd poppler fish postfix flatpak ppd folder-color-switcher ppdc fontconfig ppp fonts profile fonts-droid-fallback profile.md5sums foo2qpdl publicsuffix foo2zjs python3 fwupd python-apt gamemode python-tinycss2-common gcc qt5 GConf qt6 gdb readline gdebi rhythmbox gdm rsync geany rsyslog geany-plugins samba GeoIP seahorse gettext secureboot gettext-0.21 sensible-utils ghostscript session-migration gir-1.0 sgml git-core sgml-base gitweb sgml-data glade simplescreenrecorder glib-2.0 slick-greeter glvnd snmp gnome software-center gnome-background-properties sounds gnome-control-center source-highlight gnome-shell spa-0.2 gnome-system-monitor speech-dispatcher gnupg ssl-cert groff staff-group-for-usr-local grub sticky grub-gfxpayload-lists synaptic gst-plugins-base system-config-printer gstreamer-1.0 systemd gtk-3.0 system-tools-backends-2.0 gtk-4.0 tabset gtk-doc tcltk gtk-engines terminfo gtksourceview-2.0 themes gtksourceview-3.0 thingy gtksourceview-4 thumbnailers gufw Thunar guile timeshift gutenprint touchegg gvfs tracker3 help transmission help-langpack ubuntu-drivers-common hfsprogs ubuntu-system-adjustments hplip ucf hunspell ufw hwdata upstart hyphen usb_modeswitch hypnotix util-linux i18n vala icons vim ieee-data vulkan ImageMagick-6 wallpapers im-config warpinator info wayland-sessions info.dir webapp-manager initramfs-tools wireplumber installed-tests wireshark ipp-usb X11 iptables xapp iso-codes xawtv iso-flag-png xdg-desktop-portal java xdg-terminals javascript xed kde4 xfce4 keyrings xfsprogs keyutils xgreeters ladspa xml language-tools xml-core ldm xreader libc-bin xsessions libdebuginfod-common xviewer libdrm yelp libexttextcat yelp-xsl libgcrypt20 zenity libgnomekbd zfs libgweather-4 zoneinfo libinput zsh liblangtag
/usr/src
/usr/src stores Linux kernel source files for compilation and is used to build third-party kernel modules that require access to the kernel source.
When I run ls inside /usr/src, it responds with:
linux-headers-6.8.0-124 linux-headers-6.8.0-39 linux-headers-6.8.0-124-generic linux-headers-6.8.0-39-generic linux-headers-6.8.0-38 linux-headers-6.8.0-40 linux-headers-6.8.0-38-generic linux-headers-6.8.0-40-generic
/var
The /var directory originally got its name because its contents were considered variable. This is because it changed frequently. Today the name is a bit misleading, because there are many other directories that also contain data that changes frequently, especially virtual directories such as /proc, /sys, and /dev, for example.
/var contains things like log files in the /var/log sub-directories. Logs register events that happen on the system. If something fails in the kernel, it is logged in a file in /var/log. If someone tries to break into my computer from outside, my firewall will also log the attempt in /var. It also contains spools for tasks. These “tasks”can be the jobs I send to a shared printer when the task is queued, because another user is printing a long document, or mail that is queued to be delivered to users on the system.
When I run ls -lah /var, it responds with:
total 48K drwxr-xr-x 11 root root 4.0K Aug 7 2024 . drwxr-xr-x 22 root root 4.0K Aug 7 2024 .. drwxr-xr-x 2 root root 4.0K Jul 26 17:51 backups drwxr-xr-x 23 root root 4.0K Aug 7 2024 cache drwxr-xr-x 74 root root 4.0K Jul 17 13:55 lib drwxrwsr-x 2 root staff 4.0K Apr 22 2024 local lrwxrwxrwx 1 root root 9 Aug 7 2024 lock -> /run/lock drwxrwxr-x 13 root syslog 4.0K Jul 26 09:17 log drwxrwsr-x 2 root mail 4.0K Jul 25 09:15 mail drwxr-xr-x 2 root root 4.0K Jul 21 2024 opt lrwxrwxrwx 1 root root 4 Aug 7 2024 run -> /run drwxr-xr-x 8 root root 4.0K Aug 7 2024 spool drwxrwxrwt 11 root root 4.0K Jul 26 22:54 tmp -rw-r--r-- 1 root root 208 Jul 21 2024 .updated
Related Resources
- hier(7) — Linux manual page: man7.org
- GRUB: archlinux
- Classic SysAdmin: The Linux Filesystem Explained: The Linux Foundation
- Understanding the /dev Directory in Linux: baeldung.com
- The /etc directory: Linux System Administrators Guide
- The lost+found Directory in Linux and UNIX: baeldung.com
- Linux Mint 22: qt applications no longer use system theme #718: Linux Mint issues on GitHub
- Linux Mint 20 did not follow upstream usrmerge #294: Linux Mint issues on GitHub
- ld.so(8) — Linux manual page: man7.org
- What Is /lib64/ld-linux-x86-64.so.2?: by Burak Gökmen, baeldung.com
- The Debian /usr Merge: debian.org
- TC decision on "Merged /usr" - #914897: debian.org
- The Case for the /usr Merge: freedesktop.org
- Seeking the endgame for Debian's /usr merge: lwn.net
- Chapter 5. Issues to be aware of for bookworm: debian.org
- What is /lib64/ld-linux-x86-64.so.2 and why can it be used to execute file?
Footnotes
-
Device nodes, aka devices, are the files that the kernel, applications, and even command-line tools use when they need to access the hardware. ↩ ↩2
-
I/O (input/output) system calls are calls that a program makes to the system kernel to provide services the program does not have direct access to. Examples are providing access to stdin devices such as keyboards and stdout devices such as a terminal window/screen. ↩
-
Storage controllers connect disk drives to a computer. In the context of virtual machines, they are used to access virtual disks, CD/DVD-ROM, and SCSI devices. An SCSI controller is a type of storage controller. ↩
-
An ISO image (.iso) a CD-ROM image saved in ISO-9660 format. ISO images are mainly used as source files from which to create CDs. As an example, most distributions of Linux release ISO images of the installation CDs. These images are usually freely available online. -- LinuxLookup ↩
-
As per the Debian page on Wikipedia. ↩