Linux Directory Structure Kevin B. O’Brien Washtenaw Linux Users Group http://www.lugwash.org
General Notes● Linux derives from Unix and is designed to be multi-user● This explains some otherwise puzzling choices● This may have something to do with Fedora proposing to change this Directory Structure
Drives 1● Linux derives from Unix● Different from Windows● Windows starts with drives, which are explicit – C: – D:
Drives 2● Linux does not make drives explicit.● You can have one physical drive, several physical drives, partition the drives into multiple partitions, and normally you won’t be aware of it.● In a file manager, you won’t see drives, just directories● But if you look in fstab, you will see things like hda1, hda2, sda1, sda2. These are logical drives (either physical or from partitioning)
Root● In Windows, every drive has its own root – C: is the root of the C drive● In Linux, there is only one root, no matter how many drives you may have – In Linux, / is the root● Root is ambiguous in one respect, since it can refer to the top of the file structure, and is also the name of the Administrator- type account in Linux.
Root 2● For our purposes, we will refer to root as the top of the file structure in this presentation.
Comparison Linux Windows /home C: Disk /home/data Partitions D: /root /var E: •/boot •/bin F: •etc.
Watch out for...● Windows uses a backslash for everything● Linux uses a forward slash for everything● In Windows, the logical drive (e.g. C:) is an important part of the directory structure● In Linux, logical drives dont mean much. You can even mount a separate physical drive under a directory that is on another drive.
Watch out for 2● In Windows, case does not matter. The C:Windows directory is the same as the c:windows directory.● In Linux, everything is case sensitive. The convention in Linux is to use lower case for most things, but the important thing to remember is that /usr/bin is not the same thing as /USR/BIN.
Drives vs. directories● In Windows, drives are directories● In Linux, you can have several drives all under one overall directory, or nested one in another in the directory structure.● In Linux, you tell the file system where you want a drive to appear by where it is mounted. See fstab for more on this.
Where did this come from?● This started with a Linux effort in August, 1993● In 1996 some BSD folks decided it should be expanded to all Unix-like systems● This resulted in the Filesystem Hierarchy Standard, which can be found at http://www.pathname.com/fhs/pub/fhs- 2.3.html
Standard?● Of course, many distros vary from this to some degree, some (Gobo) reject it entirely, and MacOS tends to substitute more “readable” names, like Library in place of lib, etc.● Red Hat seems to be pretty faithful http://www.redhat.com/docs/manuals/linux/ RHL-9-Manual/ref-guide/s1-filesystem- fhs.html
Standard? 2● Distros can vary, but so can programs● When you install a program, it may not follow the FHS in deciding where to place its files● So this presentation should be considered a guide to how things more- or-less ought to work, but YMMV
/● This is the symbol for the root of the file system in Linux● Every directory is “under” root, ultimately● This is not the same as the user “root”, which is the user with God-like powers over the system● The user “root” does have a directory, called /root
/bin● Contains many of the commands used on the command line● Examples include cat, chmod,dmesg, kill, ls, mkdir more, ps, pwd, sed, su● the above commands, and many others, must be in /bin to meet the standard.● Other commands can be optionally included, such as tar. gzip, netstat, and ping
/bin 2● There are other commands that are not in here● They are part of the shell (e.g. cd)● For most users, this will be bash, the Bourne-Again Shell● You can tell by looking at the man pages● Commands in /bin will have their own man page, commands in bash will have info in the bash man page
/boot● Contains files needed for boot – kernel – Grub menu (good to know if you are dual- booting) – Lilo boot sector backups● Contains data that is used before the kernel starts executing user-mode programs
/dev● Kinda-sorta an equivalent to a mashup of the Device Manager and C:WindowsSystem in Windows● Contains a file describing every device, and these files can send data to each device● In Linux, everything is a file or a directory● We mean it. We really mean it.
/dev 2● hda1, hda2, etc. are partitions on the first physical IDE drive● sda1, sda2, etc. are partitions on the first physical SATA drive● /dev/cdrom is the optical drive● /dev/fd0 is the floppy drive, if you have one● /dev/dsp is the speaker device
Fun with /dev● Try this command out: cat /etc/lilo.conf > /dev/dsp● The sound you will hear is the sound of your /etc/lilo.conf file● If you dont have /etc/lilo.conf, substitute any other file you do have● So, /dev/dsp is the speaker, and the speaker is the file /dev/dsp.
More /dev fun● The most famous device in /dev is the ubiquitous /dev/null● Anything sent to this device disappears into a black hole, and reappears in another galaxy, much to the puzzlement of the Lizard people of Zorg in the CmfR!&v Galaxy.
/etc● Perhaps the most important to understand● No binaries can be here, per the standard● This is just for configuration files● Examples include /etc/inittab, /etc/fstab, /etc/passwd, /etc/hosts, /etc/x11,and /etc/opt
/etc 2● These files are generally text files and can be edited using any text editor: emacs or vi on the command line, or whatever graphical equivalent (e.g. gedit, kate) your desktop offers
/etc/inittab● Describes what takes place at bootup● Includes the runlevel of the system, and which processes should be run at each runlevel● Linux has seven runlevels, from 0-6
/etc/fstab● Automatically mounts filesystems across multiple drives or partitions, or even from remote systems● This is where you would place an entry if you added a hard drive● This file tells the system what drive to access, and where to mount it in your system
/etc/hosts● This is the famous hosts file, which matches up names with IP addresses● This is like level 1 DNS. The system looks here first.● This can be used to block sites by putting their URL in here and mapping it to 127.0.0.1. Great way to get rid of Double-Click.
/etc/passwd● This is the password file, but it contains more: user name, user password, user ID, group ID, home directory, and shell. It can optionally contain the users “real name”● Each user is on its own line● Each user can select the shell they want to use (most use bash these days)
/etc/opt/● This is a directory for the configuration files for each system application you install. Each application gets its own subdirectory under /etc/opt/● System applications are not just for one user, but for anyone logged in to the system● This is not mandatory, so see the man pages or help for your application
/etc/x11● Configuration directory for x11, which is the display system for graphical interfaces in Linux● This can vary with different distros, so again you need to check● /etc/x11/xorg.conf is the configuration file that lets you specify the resolutions your monitor and graphics card can display, for instance
/home● This is where the home directories for all of the “ordinary” users are located.● The exception is root, which has its own home directory, /root/● Each user gets a directory with their user name: e.g. /home/baracko● This can contain configuration files for applications that are user-specific
User-specific Configurations● These files should be in the /home directory, and should begin with a “.” character (i.e. “dot files”)● If more than one, the files should go into a directory with a name that begins with the “.” character (i.e. “dot directory), and then the files should not begin with a “.”
/home Partition?● Your home directory is where you would place all of your documents, videos, MP3s, etc.● It can get fairly large● It is also the stuff you want to back up, and you dont want to lose● Putting it on its own partition, or even its own physical drive, is not a bad idea
Reinstalling● If you have a separate /home partition, you can reinstall (or do a clean upgrade) and still keep not only your data, but many of your file configurations● Examples are Firefox bookmarks, Thunderbird or Evolution e-mail settings and mail files, etc.
/lib● This is the location for shared library files that are used by system programs● Shared library files are equivalent to Windows “*.dll” files● The files here are intended to be libraries for programs in /bin and /sbin, i.e. needed to boot the system and run the commands in the root file system
/lib 2● Also in this directory are kernel modules● Other library locations for other programs include /usr/lib and /usr/local/lib● Generally these correspond to where the binary is installed, i.e. a binary in /usr/bin would put a library in /usr/lib, and a binary in /usr/local/bin would put a library in usr/local/lib
/media, /mnt● This is one where there is no general agreement● Either directory can be a place to mount removable media (e.g. CD, USB drive, Floppy disk)● /mnt is the older way, and is still used for temporarily-mounted file systems● At one time, these devices were often mounted in the root directory, but that is less common today
/media, /mnt 2● Either directory is allowed by the standard● Most current distro versions will mount these devices automatically● When they are mounted, an entry will go in the directory● For USB devices, you want to safely unmount before removing. Current graphical file managers let you do so in the directory (right-click on the device).
/mnt vs. /etc/fstab● The distinction is temporary vs. permanent● A file system that will be permanently mounted should get an entry in fstab● A file system mounted temporarily will get an entry in /mnt when you mount it● Again, everything in Linux is a file or a directory. If you mount something on the command line, a file is created in /mnt.
/opt● Intended as a place for “optional” software, i.e. add-on packages that are not part of the default installation● Intended for use by sysadmins doing something locally, not for software developers creating packages● Treat this as something deprecated, but possibly still there.
/proc● Have we mentioned that everything in Linux is a file or a directory?● Any time a process is created in Linux, a corresponding file goes in here● Most users have no need to go here, but youre an adult, do what you want● Gosh, what would happen if you deleted a file here?
/root● Home directory for the root account● Normally, you dont want to be root, and you dont want to go here● Give yourself a user account, and use that for day-to-day stuff. It is much safer that way.
/sbin● Place for System binaries● One of three such directories – /sbin – /usr/sbin – /usr/local/sbin● All three hold utilities used for system administration, and are intended for the root user
/sbin 2● /sbin should have those utilities essential for booting, restoring, recovering, and/or repairing the system● Programs used after /usr is known to be mounted (i.e. when there are no problems) go into /usr/sbin● Locally installed sysadmin programs go in /usr/local/sbin
/tmp● Guess what this one is?● Yes, temporary files are placed here● Assume that anything in this directory will be deleted whenever the system is booted● If you want to have your own temporary directory and not lose files at reboot, create one in your home directory, i.e. /home/username/temp
/usr● Lots of stuff in here● Back in the mists of prehistory, these were the user directories, equivalent to what are now /home directories● Now /usr is for shareable data● Not intended for software packages, in general
/usr/bin● Contains executable files for many Linux commands● These are commands that are not part of the core Linux operating system● They would go in /bin● Examples of commands in here: perl, python
/usr/include● General use include files, including header files, for C and C++ programming languages
/usr/lib● Contains libraries for the C and C++ programming languages● Object files, libraries, and internal files not intended to be executed directly by users or shell scripts
/usr/local● For use by System Administrator when installing software locally● Must not be over-written when system software is updated● Generally has same subdirectories as /usr
/usr/sbin● Non-essential standard system binaries, i.e. utilities● Essential utilities go in /sbin
/usr/share● For read-only architecture independent data files● Intended to be shared across platforms (e.g. i386, Alpha, PPC)● Must not change● If the contents are variable, go to /var e.g. a game file in /usr/share/games must be static. Game play logs go in /var/games.
/usr/share/man● Primary location for man pages for the system
/usr/src● Source code is placed here, for reference purposes only● This includes the source code for the Linux kernel
/var● This is for files that are expected to be updated and changed● This includes: – mail directories – print spool – logs – web sites
/var 2● Because these can be written to constantly, they can grow over time● On a server, you may want to put /var on its own partition to limit the growth● This can also prevent the /var directory from bringing down the server by using up all of the drive space.
/var/lock● Contains lock files● These files prevent two users (or two programs) from trying to access the same data at the same time● You may need to delete a lock file from time to time
/var/log● Contains the log files generated by programs
Fedora Proposal● You may have noticed a lot of /bin directories in this strcuture● So did Fedora developers Harald Hoyer and Kay Sievers● Their proposal is called /usr merge
What is /usr merge?● Move all executables into /usr/bin● Move all related libraries into either /usr/lib or /usr/lib64, as needed
Problems with /usr merge● LSB adheres to FHS● Would break most shell scripts that (for example) start #!/bin/sh or #!/bin/bash● Would other distros go along? Doe Fedora care if they do?
Some benefits to /usr merge● Matches what Solaris does already● Simplifies● Easier to run multiple instances of OS on different machines in a network. This is particularly true with btrfs.