How to understand the Ubuntu file system layout?
You can read up on this on for instance wikipedia. An excerpt:
The Filesystem Hierarchy Standard (FHS) defines the main directories and their contents in Linux operating systems. For the most part, it is a formalization and extension of the traditional BSD filesystem hierarchy.
The FHS is maintained by the Linux Foundation, a non-profit organization consisting of major software and hardware vendors, such as HP, Red Hat, IBM and Dell. The current version is 3.0, released on June 3, 2015.
A visual representation with a short description:
Basically Linux has divided the directory structure based on the function of what is needed to make the system as secure as possible with the minimum amount of permissions needed. Otherwise someone is bound to have to do alot of avoidable work.
Remember that Unix and Linux where made as multi-user systems and Windows was created for a single user. Everything else can be explained from that idea. You can explain every directory when thinking about it being multi-user and security.
3 examples:
You will see that files and directories that are admin only are gathered in the same directory: the s in
/sbin
and/usr/sbin
and/usr/local/sbin
stands for system. A normal user can not even start programs that are in there. Files a normal user can start are in /bin, /usr/bin, /usr/local/bin based on where it most logically should reside. But if they are admin only they should go to thes
version of that directory. There is a famous utility calledfuser
. You can kill processes with it. If a normal user could use this (s)he would be able to kill your session.The same goes for
/home
: /home/user1 is property of user1. /home/user2 is property of user2. user2 has no business doing stuff in user1's home (and the other way around is also true: user1 has no business doing stuff in user2's home). If all the files would be in /home with no username underneath it you would have to give permissions to every file and asses if someone is allowed to write/remove those files. A nightmare if you have tens of users.Addition regarding libraries.
/lib/
,/usr/lib/
, and/usr/local/lib/
are the original locations, from before multilib systems existed and the exist to prevent breaking things./usr/lib32
,/usr/lib/64
,/usr/local/lib32/
,/usr/local/lib64/
are 32-/64-bit multilib inventions.
It is not a static concept by any means. Other Linux flavours made tweaks to this lay-out. For instance; currently you will see debian and Ubuntu changing a lot in the lay-out of the FHS since SSD is better off with read only files. There is a movement towards a new lay-out where files are split in to a 'read only' and a 'writable' directory/group so we can have a root partition that can be mounted read only (partition for a ssd) and writable (sata hdd).
The new directory that is used for this (not in the image) is /run/
.
Give this command a try...
man 7 hier
You can also view this manual page here: http://manpages.ubuntu.com/manpages/en/man7/hier.7.html
Hope it helps
Late Answer - I've created a roadmap for beginners to follow. If they are looking for a file but don't know where to look, they can use the map to roughly navigate around. You can download a hi-res PNG here. You can find the related post here. I will keep updating both the file and the post when time permits, incorporating helpful comments.