Hey, I’ve recently designed a Poster about the FHS since I often forget where I should place or find things. Do you have any feedback how to make it better?

I updated the poster: https://whimsical.com/fhs-L6iL5t8kBtCFzAQywZyP4X use the link to see online.

Dark mode

Old version

  • @Admax
    link
    3110 months ago

    Damn that’s some great work ! When I started linux I wish I had found such ressources, I was really curious what each of these directories were for.

    Would you mind if your material was reused (with credit) for education purposes ?

    • @callccOP
      link
      2310 months ago

      I’d be more than happy if this was used. Do whatever you want with it as long as you abide by the CC BY-SA-4.0 license. This means you can share freely and modify as long as you keep the authorship information and share with same license.

    • @hansl
      link
      110 months ago

      The FHS was started in 1994 and is free to use. It should be used now by all major Linux systems and most Unix too.

      The only credit is to the Linux Foundation.

      • @[email protected]
        link
        fedilink
        210 months ago

        But $vendor, which supplies $application, doesn’t give a flying fuck about this. I’ve seen binaries in /etc/opt/$application or something like that.

        • @hansl
          link
          -210 months ago

          Tell them. Many people don’t know about FHS. Seriously, just the person I was answering to was giving credit to some rando who copy pasted an image from the Linux foundation.

          I’ve been educating people on this all my professional life. I try to make a change with the people around me, but I’ve also filed big to some FOSS projects that got it wrong. Some did the change, some were unwilling. But it’s unknown if even those did follow the right convention in their next project.

          • @callccOP
            link
            810 months ago

            I spent a few hours making it myself. Of course based on the standard document.

    • Eager Eagle
      link
      English
      810 months ago

      it bothers me a little the entry is not called fhs: man fhs

    • @callccOP
      link
      410 months ago

      Added to new version. Thanks for the suggestion.

  • @KISSmyOS
    link
    17
    edit-2
    9 months ago

    deleted by creator

    • @seaQueue
      link
      18
      edit-2
      10 months ago

      I just mount mine into /mnt and bind mount subdirectories from them into wherever I need the space.

      Edit: if you want a more theoretically correct location according to the FHS you could mount drives somewhere under /run and bind their contents from there. I’ve done that before as well.

    • Eager Eagle
      link
      English
      10
      edit-2
      10 months ago

      tbh I don’t think it matters, so wherever you feel like doing it. I just leave it where the distro or file manager defaults to: in Ubuntu-based distros that’s /media/$USER/mount-name. For mounts shared across users you could drop the $USER.

      Since FHS doesn’t specify where “non-removable media” should go, I don’t think it makes sense to adopt this recommendation as “/media should be removable”, but rather, “in case the media IS removable, then mount it to /media/”.

    • TheEntity
      link
      fedilink
      910 months ago

      If they are internal and permanent (read: unlikely to be removed on a daily basis), I’d just mount them based on their purpose and not them being separate HDDs physically. If they are meant for logs, mount them at /var/log. If they are meant for your movies, /home/user/data is more than fine. In general FHS describes the directory hierarchy, not which parts of it are mountpoints and which are physically on the same media. Technically you’re fine having each and every directory on a separate HDD.

    • @[email protected]
      link
      fedilink
      English
      510 months ago

      I’m also mounting them into /home/user/data while I don’t think hard-coding the user name in the mountpoint is a good idea. Besides, it needs the assumption that I’m the only “human-user” of this computer.

      I may also mount them at /opt/data, but I’m not sure if it’s a good idea

      • @callccOP
        link
        210 months ago

        From my humble knowledge I would suggest /var/opt/XXX. It’s the variable part of the /opt hierarchy.

    • @[email protected]
      link
      fedilink
      English
      410 months ago

      I originally had mine mounted on /, to make them easy to type. But that set one of my highly opinionated friends wretching, so I re-mounted them to /media// to placate him and symlinked them to my home directory instead.

      It’s frustrating how often Linux systems, when approached with a “where is the canonical location for ?” question, have an answer ancient use cases practically no one has anymore, but no satisfying answer for extremely common use cases like permanently mounted backup drives, where to put web server hosted files, or even where to install applications that don’t come from package managers (/opt/? /usr/bin/? /home//.local/?).

      • @KISSmyOS
        link
        2
        edit-2
        9 months ago

        deleted by creator

    • @[email protected]
      link
      fedilink
      English
      410 months ago

      I’m coming more from a server perspective but, fundamentally, all HDDs are “temporary”. Eventually that data might be in a bigger/faster/functioning replacement - so it’s best to treat the drive as something which can always be replaced.

      Continuing that, you might mount to /mnt and then symlink that where you really want it, say …/games. That layer of abstraction allows you to replace the drive without much effect on install. Also allows for expansion via something like mergerfs (*no idea if that’s a good idea for your use cases)

      • @callccOP
        link
        310 months ago

        /mnt is explicitly meant to be used as temporary mountpoint for admins. That’s not a good place.

        • @[email protected]
          link
          fedilink
          English
          -110 months ago

          I’m still learning myself, but I think in a good number of uses cases it qualifies. There are two parts of that explicit definition which seem important, “temporary” and “non-installation”. “Temporary” is the most ambiguous. An array of JBoD storing media files, which can be unplugged really at any time without affecting any system, meets that definition. Game installs or the operating system, less so. I totally get my specific usage may not lend to generic advice. In the interest of me learning, here’s where I started (which advises /mnt): https://perfectmediaserver.com/02-tech-stack/mergerfs/

    • 520
      link
      fedilink
      3
      edit-2
      10 months ago

      If it’s just personal files and backups, there’s absolutely nothing wrong with what you’re doing.

      If you had, say, active system config files there, it would make things… complicated to say the least.

    • L3ft_F13ld!
      link
      fedilink
      210 months ago

      Not sure if this is proper procedure since I searched around and didn’t find much, but I’ve got an internal drive just for games mounted at /home/games. Haven’t had any issues so far.

    • @devfuuu
      link
      110 months ago

      Usb devices are nowadays when connected mounted somewhere in /run/%user

  • Rustmilian
    link
    English
    1310 months ago

    I really like this, but can I have a black background version please?

    • @callccOP
      link
      210 months ago

      Added a black background version.

    • @callccOP
      link
      110 months ago

      You could invert the colors in GIMP or similar.

      • Rustmilian
        link
        English
        1
        edit-2
        10 months ago

        That wouldn’t look as good tho. I want the black text to be white and the white background to be black not invert everything.

  • @[email protected]
    link
    fedilink
    12
    edit-2
    10 months ago

    We need something like this for home, I hate that programs like steam and firefox place themselves directly into home instead of ~/.config and ~/.llocal.

    I even move my personal themes to /usr/share/themes because not everything works with ~/.local/share/themes and needs a ~/themes directory instead.

  • @[email protected]
    link
    fedilink
    1210 months ago

    Super useful, thanks. Actually made a lot of things click in my head about how Linux works.

    When did /home get deprecated? Is /usr/local the replacement?

    Sorry for the n00b question (I’m not a noob, but I have been off Linux for a few years), figured the answer may be useful to other users too

      • @[email protected]
        link
        fedilink
        English
        5
        edit-2
        10 months ago

        then the legend should be fixed its confusing, as is the whole idea of FHS is outdated and a chore for new users to get into (i still don’t fully understand it)

        • difference between /media and /mnt
        • wtf is /run? some glorified /temp?
        • /usr/sbin “non vital system binaries” … aha ok, whatever don’t tell me you understand the difference between 6 (SIX !) differen bin/sbin folders
        • could continue forever…
        • @callccOP
          link
          410 months ago

          The legend is a bit broken. Will fix it maybe.

          As for the rest, yes, the FHS can be confusing. It’s from a time where mostly professional admins would deal with it and requirements were pretty different from today’s end-user systems. If you want to understand more, I urge you to read the spec. It’s highly readable! https://refspecs.linuxfoundation.org/FHS_3.0/fhs.html

        • @[email protected]
          link
          fedilink
          110 months ago

          /mnt is for more permanent stuff. /run is for shit like a USB drive some user has connected. It’s the place that most distro automount your attached storage by default (/run/$USER/$DEVICE/)

  • @netwren
    link
    910 months ago

    I don’t understand the ambiguity of where to put your projects.

    I’ve typically always put things under /opt/ TIL /etc/opt was where the config should go.

    • @callccOP
      link
      210 months ago

      Depends on the scope of your project. But if they are services for example or you want them to be run by different users on the system, you could either use /opt or /usr/local. There is some discussion about which is better or how to choose: eg. https://www.linuxjournal.com/magazine/pointcounterpoint-opt-vs-usrlocal . The FHS is mostly relevant when packaging your software though.

      • @netwren
        link
        210 months ago

        Less relevant with Docker or FlatPaks though right?

        • @callccOP
          link
          210 months ago

          I’m not into those since they just shift the complexity. People should learn how to package things and just do it. Ok, documentation on making dpkgs is pretty tough to understand and confusing.

          But yeah, I guess with docker it’s complete anarchy ( the bad kind of)

          • @[email protected]
            link
            fedilink
            210 months ago

            But yeah, I guess with docker it’s complete anarchy ( the bad kind of)

            Not really, usually stuff will be all self contained (no pun intended), container volumes inside docker’s own directory and mounts of folders that will most often all reside under the same repository, then you don’t have to worry about breaking stuff by touching the root, even better if you do that with Podman.

            Flatpak is similar in the way that it also has its own standards and apps are pretty much obligated to follow them. Now the fact that data lives under .var/app/ completely disregarding the XDG spec, while both things are part of Freedesktop… Well that’s just ironic lol

            • @callccOP
              link
              110 months ago

              But who knows what’s inside?

              • @netwren
                link
                210 months ago

                Not at all true. Go inspect the Dockerfile. If done correctly you should be able to inspect the full container build.

                • @callccOP
                  link
                  010 months ago

                  Of course you can, but few people care and do it. There is a saying about docker: “Docker images are like smoothies, you immediately know if you like it but you don’t know what’s inside”. The idea being that there is no good quality control and transparency. People just install random blobs, like in the old days where you would install a cracked game from eMule.

                  If you care about security, docker is not what you want, they are not reproducible nor transparent nor is it possible to easily update broken shared libraries (eg openssl).

                  But then again people have different requirements. Some just wanna have things running quickly without the hassle. That’s where docker shines. But it leads us to a world where we hide ugly stuff under the carpet instead of fixing things.

  • ancap shark
    cake
    link
    fedilink
    9
    edit-2
    10 months ago

    This is a very useful, very well done chart, congratulations.

    But what a mess is FHS. Easily the worst thing of linux design for me

    • @callccOP
      link
      310 months ago

      The better you understand it the less it seems bad.

    • @callccOP
      link
      510 months ago

      I guess the reason it’s not in FHS is that FHS is concerned about system wide things whereas /home is the opposite. It’s the user’s realm.

      There is XDG for /home/$user though.

      • Rustmilian
        link
        English
        410 months ago

        Are you planning on doing one for XDG?

        • @callccOP
          link
          210 months ago

          I’ll have a look but probably not.

  • Max_Power
    link
    fedilink
    English
    810 months ago

    Great but what I’m missing is the information that “usr” does not stand for “user”, like many people think or even say. If it would the name could actually be “user” and not “usr”.

    The chart actually does not say what exactly it stands for. It’s “user resources” AFAIK.

    It’s worth clearing this up in my opinion.

    • @callccOP
      link
      510 months ago

      Thanks for the input. Things are complicated: https://askubuntu.com/a/135679 . Apparently it originally meant “user” but then slowly was used for system stuff. So people invented backcronyms.

    • DefederateLemmyMl
      link
      fedilink
      410 months ago

      That’s just retconning/backronyming it.

      /usr does historically stand for user. It’s where the user home directories were on old Unix versions.

    • @[email protected]
      link
      fedilink
      English
      410 months ago

      does guix go the same was as nixos in that regard? where can I find info regarding FHS in guix?

      • @callccOP
        link
        510 months ago

        Afaik guix is very similar to nixos in that respect. The store where applications are installed is called /gnu there.

    • @callccOP
      link
      410 months ago

      Thanks! Unfortunately I’ve used closed source whimsical.com for this and don’t have a paid subscription. They only offer low-res for those accounts since recently :(

      • @uis
        link
        210 months ago

        Maybe try to do inkscape?

      • @Admax
        link
        110 months ago

        Maybe some AI upscaling could do the trick ?

  • callyral [he/they]
    link
    fedilink
    English
    7
    edit-2
    10 months ago

    how is /usr/local local and not system-wide? i though it was for programs you compiled yourself?

    • TheEntity
      link
      fedilink
      1410 months ago

      “Local” in this context means local to this whole machine. From the perspective of a single user, it’s system-wide. But then from the perspective of a sysadmin managing dozens of such systems, it’s local.

    • @callccOP
      link
      5
      edit-2
      10 months ago

      Many FHS things don’t make much sense for single-user (human user) systems on modern hardware. /usr/local does though. It’s for you (as admin) to install software that doesn’t come with the os.

    • Danny M
      link
      fedilink
      310 months ago

      well nix still uses the same structure, the only difference is that files are symlinked to files in subfolders of the /nix/store folder.

      For example you may find that /etc/hosts is just a symlink to /nix/store/69420aaabbbcccdddfffggghhhiii420-hosts

      • Alex
        link
        fedilink
        210 months ago

        Not everything is in its FHS location, unless you use steam-run. Binaries arwn’t in /bin, for example

        • Danny M
          link
          fedilink
          2
          edit-2
          10 months ago

          I mean fair enough, some files are in /run/current-system/sw/