Linux Directory Structure - FHS
Linux Directory Structure - FHS
Linux Directory Structure - FHS
i always thought /usr stood for "user". Please tell me I'm not the only one
Ken Thompson and Dennis Ritchie created Unix on a PDP-7 in 1969. Well around 1971 they upgraded to a PDP-11 with a pair of RK05 disk packs (1.5 megabytes each) for storage.
When the operating system grew too big to fit on the first RK05 disk pack (their root filesystem) they let it leak into the second one, which is where all the user home directories lived (which is why the mount was called /usr). They replicated all the OS directories under there (/bin, /sbin, /lib, /tmp...) and wrote files to those new directories because their original disk was out of space. When they got a third disk, they mounted it on /home and relocated all the user directories to there so the OS could consume all the space on both disks and grow to THREE WHOLE MEGABYTES. And thereafter /usr is used to store user programs while /home is used to store user data.
source: http://lists.busybox.net/pipermail/busybox/2010-December/074114.html
THREE WHOLE MEGABYTES
Me in 2024 holding a 4TB NVMe stick: Still not enough (it's never enough)
This thread is 3 MB
You're not the only one 😅 🙋
I thought it was United System Resources.
And I still don't know what's the point in separating /bin, /sbin, /usr/bin and /usr/sbin.
Also /mnt and /media
Or why it's /root and not /home/root
Mostly historical reasons, /home was often a network mounted directory, but /root must be local.
And only regular users have their home in /home
/home is often on a separate volume. You’d want root to be available in a maintenance situation where /home may not be mounted.
I don't recall the reasons for the addition but /media is newer than /mnt.
And I still don't know what's the point in separating /bin, /sbin, /usr/bin and /usr/sbin.
This goes back to the olden days when disk space was measured in kilo and megabytes. /sbin/ and /usr/sbin have the files needed to start a bare bone Unix/Linux system, so that you could boot from a 800kb floppy and mount all other directories via network or other storage devices as needed.
They hold "system binaries" meant for root user. It's not a hard distinction but many if not most Linux fundamentals have their roots in very early computing, mainframes, Bell and Xerox, and this good idea has been carried into the here&now. Not sure about the provenance of this one, but it makes sense. isn't /mnt /media different between distros? These aren't hard and fast rules - some distros choose to keep files elsewhere from the "standard".
/bin and /usr/bin, one is typically a symbolic link to another - they used to be stored on disks of different size, cost, and speed.
https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s16.html
https://unix.stackexchange.com/questions/5915/difference-between-bin-and-usr-bin
I think /mnt is where you manually mount a hard drive or other device if you’re just doing it temporarily, and /media has sub folders for stuff like cdrom drives or thumb drives?
/sbin are system binaries, eg root only stuff, dunno the rest but I would guess there are some historical reasons for the bin usr/bin separation
I think it originally did under old Unix, it was what /home is nowadays; "Unix System Resources" is a backronym.
You are correct and this can be seen in some of the old AT&T demos from the '80s floating around on YouTube. There is even a chart that specifically labels a directory like /usr/bwk
as the user's home.
Plan 9 also uses this old convention; users live under /usr
and there is no /home
.
It's always been for USeR binaries. It's the first time I've seen this bizarre backronym (40 years of Unix here).
I was just about to post the same thing. I've been using Linux for almost 10 years. I never really understood the folder layout anyway into this detail. My reasoning always was that /lib was more system-wide and /usr/lib was for stuff installed for me only. That never made sense though, since there is only one /usr and not one for every user. But I never really thought further, I just let it be.
Yup same. I always wondered why there was a user folder when we already have home.
Same. I actually feel like I remember the professor of my only unix class saying that. Hoping I'm wrong.
Likewise.
It's also only just now dawning on me /bin is short for /binaries. I always thought it was like... A bin. like a junk drawer hidden in a cupboard
Thanks! I'll save this, tell myself I'm going to strictly follow it this time and forget about it (again) lol
Cool. Thanks for sharing!
Much better, thanks!
Edit: Thank you, found it on your shared link ! 😄
Oh wow thank you ! Would it be to much to ask for a dark mode version? If there's a one hit button to change into a more eye friendly color mode :)
Either way, thank your for sharing your work :))
Look at the post behind the link. There is a dark mode version.
I still have no clue where permanently attached USB SSDs are supposed to be mounted. I just shove them into LVM2 and put the mapper under /mnt since putting them under /home wouldn't let other users access them.
permanently attached USB SSDs are supposed to be mounted
Just mount them somewhere under /
device, so if a disk/mount fails the mounts depended on the path can´t also fail.
I keep my permanent mounts at /media/
and I have a udev rule, that all auto mounted media goes there, so /mnt
stays empty. A funny case is that my projects BTRFS sub-volume also is mounted this way, although it is technically on the same device.
It can fits as a desktop wallpaper.
I don’t get why this sort of picture always gets posted and upvoted when it’s wrong for most distros nowadays.
Can you recommend one that is correct? I use pop_os (Ubuntu) and Arch. Kinda curious about either one
Not aware of any correct pictures, but I can tell you what's wrong with this one
I would also like the mention that the FHS standard wasn't designed to be elegant, well thought out system. It mainly documents how the filesystem has been traditionally laid out. I forget which folder(s), but once a new folder has been made just because the main hard drive in a developer's system filled up so they created a new folder named something different on a secondary hard drive.
See file-hierarchy(7).
It seems handy when you're learning about stuff but only when you haven't learned enough to realize it's not correct.
wait /usr doesn't mean user?
/etc has to be the worst name in there
usr does mean user. It was the place for user managed stuff originally. The home directory used to be a sub directory of the usr directory.
The meaning and purpose of unix directories has very organically evolved. Heck, it's still evolving. For example, the new .config directory in the home directory.
For example, the new .config directory in the home directory.
I hope slowly but surely no program will ever dump its config(s) as ~/.xyz.conf
(or even worse in a program specific ~/.thisapp/
;
The ~/.config/
scheme works as long as the programs don't repeat the bad way of dumping files as ~/.config/thisconfig.txt
. (I'm looking at you kde folks..) A unique dir in .config directory should be mandatory.
If I ever need to shed some cruft accumulated over the years in ~/.config/ this would make it a lot easier.
Per the graphic, it means Unix System Resources....
I wonder why that isn't /cfg? Is there a historical reason?
According to this, it's been around since the 70's and was originally just a catch-all for files that didn't fit in the other default directories, but over time has come to be mostly used for config files. I assume it would cause utter mayhem to try and change the name now so I guess it just sticks. Someone suggested "Edit To Configure" as a backronym to try and make it make more sense if that helps anyone lol.
Is there a historical reason?
If you're asking that in anything Linux related, it's probably a Yes 99% of the time LMAO
Try naming a folder "CON" in Windows and learn the magic of old spaghetti code by a multi billion dollar company.
It's probably the standard in both POSIX and the Single UNIX Specification, so I guess ask Ken Thompson?
It meant user, as in user-installed programs and libraries for this system over the core system programs and libraries of the operating system in /bin and /lib.
Someone learned it wrong, but otherwise I think the image is right.
I learned about 16 years ago on a Solaris course that /usr wasn't "user", I still say "user", but I'm happy to see the information spreading that that isn't what it actually is.
I learned that just now.
It's going to be TOUGH to mentally replace.
Wow, what an odd coincidence.
I always thought it was user and never questioned it. Yeah man there's shared libraries in there for all the users, so it's user. This makes more sense now.
usr did originally mean user and held user data.
Pretty sure this is a bacronym
I used to pronounce it like yuzr, knowing that it wasn't user, but not knowing what it was.
Now I have better context. Maybe I'll go with U.S.R.
If you want to confuse people... I pronounce /etc as "ets", but one of my coworkers recently called it "slash e t c" and I had to ask him to repeat it a couple times before I figured out what he meant...
/home is for every program to store its personal junk in hidden files apaprently
A pedantic thing to say, surely, but the title really should've been: "Linux Directory Structure" -- 'Linux filesystems' (the title in the graphic) refers to a different topic entirely; the title of this post mitigates the confusion a bit, though still, 'directory structure' is the better term.
To be more pedantic the correct title would be the Filesystem Hierarchy Standard (FHS)...which describes the directory structures
Sure but for example I understand that /dev and /proc are actually kind of filesystems on their own
Right?
I was expecting superiors to the fat & exfat file storage systems
Yep, You are right. Done
/opt/(app)/bin /usr/lib/(app)/bin /usr/lib64/app/bin /usr/local/(s)bin
I know there is logic and mapping of where everything's supposed to be in theory but in practice s***'s kind of all over the place.
The logic was just that when UNIX was originally evolving, they ran out of disk space on their PDP-11 and had to start moving less-essential binaries to a different disk. That's why it's "/usr/" which was originally for user data but that disk happened to have free space.
Any other explanation is just retcon. Some distros try to simplify things.
Here's a higher quality version
Great username
I always thought /usr was for "user".... TIL
It is, this infographic is wrong. Or I guess technically some other standard could define it like the infographic, but the Filesystem Hierarchy Standard defines it as a secondary hierarchy specifically for user data.
/usr used to be the user home directory on Unix...well most of them. I think Solaris/SunOS has always been /export/home as I recall.
It did, let me explain:
On the original (ie Thompson and Ritchie at Bell in 1969-71), I think it was a PDP-11, they installed to a 512kb hard disk.
As their "stuff" grew they needed to sprawl the OS to another drive, so they mounted it under /usr and threw OS components that didn't fit.
https://landley.net/writing/unixpaths.pdf
I've done the same, outgrew so you mount under a tree to keep going, it just never became a historical artifact.
Huh. I did as well. Like /use/bin was for user installed applications and such. You learn something everyday.
A good first approximation.
So where in this setup would you mount a network share? Or am additional hard drive for storage? The latter is neither removable nor temporary. Also /run
is quite more than what this makes it seem (e.g. user mounts can be located there), there is practically only one system path for executables (/usr/bin
)...
Not saying that the graphic is inherently wrong or bad, but one shouldn't think it's the end all be all.
I do /volumX for additional hard drives.
For most network share I use /mnt/$server.
For most network share I use /mnt/$server.
I use /mnt/$proto/$server
, though that level of organization was probably overkill. Whatever...
I do /volumX for additional hard drives.
Or /home/me/drive
I'm gonna blow everyone's mind.... I have my Linux system in a relatively small 4gb drive, and my home in a 4Tb drive. I mount my 4tb drive to /home/me as someone already said.
If my SSD for my OS takes a shit as people say, all you do is install it again, change fstab to swap the home directory and you're back in business like nothing happened. That's like 10 minutes install time on a good SSD these days. The other guy who mentioned this, didn't point this out. The idea of separating my home folder into its own drive didn't occur to me for years and years of using Linux. Every wrong update I was there copying home like a total windows 11 noob. I also install my extra drives and shares on /mnt, that's standard.
On debian when i mount an ftp server through my file browser it uses gvfs
This will mount it to /run/user/1000/gvfs/ftp:host=
<IP>
,port=<PORT>
,user=<fpt-user>
I never understood the title for /usr. Now I do. Thanks!
It’s just short for “user;” “User System Resources” is probably a backronym.
I always thought it stood for user. I even say it that way.
This email explains it in detail: http://lists.busybox.net/pipermail/busybox/2010-December/074114.html
TLDR: /usr
stands for user
That's what I'd always thought. Thanks for correcting the bad info from the image. I'd hate to carry that bad info forward.
Those are directories, not filesystems.
It feels like /opt
's official meaning is completely lost on developers/packagers (depending on who's at fault), every single directory in my /opt
belongs to standalone software that should just be put into either /usr/lib
or /usr/share
with some symlinks or scripts into /usr/bin
.
I've also seen creating there deployment or configuration stack of your choice.
No, they have it right. Add-on software means “added to this node/machine”, as in not part of the system image used to configure multiple machines. It’s all very archaic.
what a mess
There's a little historical baggage, but look at Windows: multiple letters for drives, and all of the paths can be modified, so you have to ask Windows where any important directory is physically mapped (like SystemRoot or Documents or Temp or Roaming AppData or many others), because it doesn't have this nice consistent structure like Linux. Linux presents a logical layer and manages the physical location automatically. Windows makes you do the logical lookup yourself, but doesn't enforce it, so inexperienced programmers make assumptions and put stuff where the path usually is.
That's part of why logging in to Windows over a slow connection can take forever if you have a bunch of Electron apps installed: they've mismapped their temp/cache directory under the Roaming AppData, so it gets synched at every login, often GiB of data, and they refuse to fix it.
I switched to Linux a few years ago and you are not wrong.
Windows is a nightmare with directory organization.
Saved games can go:
<app>
/saved-gamesVisualizing it like this makes it so clear how incredibly outdated this design is.
What is outdated?
Fun fact: you get more accurate info by simply running man hier
I'm pretty sure sbin
originally meant static binaries and not system binaries lol
Would like an easy way to remember.
/srv stands probably for serve
as in serving static files like static websites. (Source)
More information here: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
Is Gobo case-insensitive by default? Typing those seems annoying.
except nowadays many distro mounts removable media under /run/media instead of /media (for good reason).
What's the reason?
/run is a temporary fs, so if the mount, filesystem or even the entire system crashed, all the mounted data will be cleaned up after a reboot.
On the contrary, if the mount crashed, it might leave a folder or data on /media, making subsequent mount problematic.
Here is a well-written comment about the rationale behind this mount point: https://www.reddit.com/r/linuxquestions/comments/tzo984/comment/i40e2za/
Probably so that you don't accidentally write to a directory by mistake when it isn't mounted, and then lose access when you mount something over it, all while services are looking for files that are only there sometimes.
Where would you mount non-removable media?
I think there is no rule, but I like to mount them on /mnt
.
A good discussion can be found here: https://www.reddit.com/r/linuxquestions/comments/u0ri07/where_do_you_usually_mount_your_internal_drives/
I have always wondered why there was a developer folder(/dev)
Now i know that the government is trying to make people think it stands for something else so they can replace all programmers with advanced random number generators
Also /lib is where some people keep discarded capitalists
/lib/tar.d/
So where are programs installed?
I was playing with Linux the other day and installed something and was tearing my hair out trying to find where the exe or whatever was to launch the damn program.
None of the folders made any sense to me.
It should be in /bin or /usr/bin or /usr/local/bin. You can use "which" command to know
or /opt, or a binary in some hidden folder in /home...
I need to get this in sticker form
Me too
Why is \mnt a "temporary" mounting point? I alwags put my permanent ones there. I'd say /media is temporary...
Just forwarded this pic to my dad. I'll be guiding him in installing Mint on one of his old Windows desktops this coming Saturday! Wish us luck in the coming years 😂
Thank you for that, I always wondered about the meaning behind a few of these directories.
Just know this isn't a universal layout and depends on the distro.
Yeah I know, like sbin isn't used in most modern distros, right?
immuatables be all about /var
NixOS enters the room wearing a “/nix/store” t-shirt.
Nix really has a kickass way of doing this. Won't conflict anywhere and always let's you know what is managed by Nix.
For many systems out there, /bin and /lib are no longer a thing. Instead, they are just a link to /usr/bin and /usr/lib. And for some systems even /sbin has been merged with /bin (in turn linked to /usr/bin).
learned this the hard way when I started to get usrmerge errors when I tested an upgrade to Debian trixie.
/bin confused me for a while because I thought it meant 'this stuff is trash, don't worry about it'.
Linux file system is ext* tho.
If my /bin contains exe files, something has gone very wrong somewhere...
Also, all these infographics are a sad casualty of the /usr/bin merge.
Is there a version of this that wasn't awkwardly resized?
Best I could find is this copy on imgur.
idk if unix or linux file system
reminded me of this picture
Since almost everything on the right would be located in /home/
<username>
on the left, it should include some of the subdirectories of %windir%\welp, it's another story how useful is this picture 😄, it just came to my mind and brought me some nostalgia in the meantime towards the artist. (yeah, saying artist in this case is strange, but otherwise who made this is a digital artist, or was, idk how active still)
I've been using Linux on and off for years and I've never really understood what these different directories are for. If I don't know where something is I just search for it, though more often than not whatever I'm looking for is somewhere in the home directory. I'm also not sure of the accuracy of this though. I have a VM in /run, and an SSD and thumb drive in /media. I would've expected these to be in /mnt.
The icon for media reminds me of a bidet on a floor plan.
huh... an exe in my /bin ?
sus...
Holy shit. I’ve been wondering about this for so long
Distros should ship with this this under /readme.jpg
A blast from the past!
Not when I use it!
wow i have needed this forever and im printing it and pinning it to my wall
Yes, you put the app in /opt, no not in /bin or /usr/bin
Is it just me, or are the definitions for /sys and /proc mixed up?
Nah, it's just that /proc
is incorrect - it contains information about running processes, as well as kernel data structures as visible by the process reading them.
No I thinks is basically right although could be better worded maybe
/sys is virtual file structure for kernel system info
/proc is virtual file structure of kernel process info
My understanding is /proc came first but was abused/free for all and started being used for all sorts of non standard/process kernel access. So /sys was created with stricter rules to make it more standardised.
Don't forget /auto, for things that get automatically mounted when you first access them (autofs)
I rarely spot /srv in the wild.
I use /data for local server data.
Pretty sure openmediavault uses it, but that's the only one I've seen
FHS is an absolute dumpster fire that would never be dreamed up in this day and age
it usually seems more like whatever distro doing things however they want rather than following any standard
New knowledge. Thanks.
honestly /home should has never been created we should have kept user homes in /usr
why
Because housing prices are ridiculous.