De Filesystem Hierarchy Standard (FHS) definieert een open standaard voor de directory-structuur voor UNIX-achtige besturingssystemen. De standaardisatie van de directory-structuur is onder meer belangrijk voor software-ontwikkeling en pakketbeheer op platforms met een Unix-achtig bestandssysteem. Daarom is de directory-structuur die door BSD en Linux gebruikt wordt terug te vinden in de Filesystem Hierarchy Standard.
Voor het systeembeheer op een Unixachtig-platform, zoals een pc met een Linux-desktop, is inzicht in de basisprincipes en de opbouw van de FHS vereist. De FHS maakt deel uit van de Linux Standard Base en wordt ontwikkeld op basis van de IEEE 1003.n POSIX-norm. De FHS wordt onderhouden door The Linux Foundation.
Typische Linux-rootdirectory
Inleiding
Hoe de 'schijfinhoud', de inhoud van een computer-systeem te zien is voor de gebruiker, is voor "MS-DOS-systemen" en "Unixachtige systemen" zeer verschillend. Op een Windows computer ziet men stationsletters (drive letters), C:\, D:\ enzovoorts met daarachter padnamen (path names) zoals C:\WINDOWS\SYSTEM32\ eindigend op de naam van een bestand, bijvoorbeeld NOTEPAD.EXE. Als een schijfeenheid zoals een harde schijf of USB-stick wordt toegevoegd, verschijnt een nieuwe stationsletter.
Op een 'Linux-achtig' systeem is een vaststaand systeem te zien. De top van de 'boom', de tophiërarchie is altijd een schuine streep (/) zonder toevoeging, ongeacht hoeveel schijven binnen de 'boom' vallen. De vaststaande directory's zijn /bin, /dev, /home, /lib enzovoorts, op alle POSIX-systemen is deze structuur terug te vinden. Deze structuur dient praktische doelen, elke directory heeft een functie. De vastgelegde afspraken over deze voorstelling van directory's en bestanden is waar FHS over gaat.
Geschiedenis
De Filesystem Hierarchy Standard is ontwikkeld op initiatief van de Filesystem Hierarchy Standard Group. Voordat de eerste versies van de Filesystem Hierarchy Standard opgesteld werden, bestonden al een aantal conventies over de indeling van Unix-bestandssystemen.[1][2] Voor de komst van package managers werd de installatie en het beheer van software op Unix-platforms vaak handmatig en op ad-hocbasis uitgevoerd.
Op 14 februari 1994 werd FSSTND v1.0[3] gepubliceerd, waarna in ruim een jaar de 1.1[4] en 1.2[5] versies volgden.
Op 26 oktober 1997 werd de FHS v2.0[6] gepubliceerd.
Op 4 december 2000, werd FHS v2.1[7] gepubliceerd, ruim een half jaar later gevolgd door de 2.2-versie.[8]
Op 29 januari 2004, werd de FHS v2.3[9] gepubliceerd.
De bestanden in het bestandssysteem worden afhankelijk van hun functie en eigenschappen binnen een overzichtelijk systeem ingedeeld. In de tabellen worden een paar eigenschappen van de directory's en bestanden met een kleurcode aangegeven.
Statisch vs. variabel
Kleurcode
Eigenschappen
Statisch
De inhoud van een statische map of directory wordt meestal tijdens de installatie van het systeem in de directory geplaatst. Doorgaans kan de inhoud van een statische directory alleen door de systeembeheerder, de gebruiker met de naam 'root' veranderd worden tijdens het installeren, updaten of upgraden van software.
Variabel
Een variabele map of directory is bedoeld voor de opslag van tijdelijke en variabele gegevens en bestanden. De directory's voor variabele bestanden hebben meestal de naam var of tmp.
Om een systeem te optimaliseren worden voor variabele directory's soms aparte, snel toegankelijke partities op een harde schijf aangemaakt. Tijdens het formatteren kunnen de cilinders op een harde schijf die het snelst toegankelijk zijn voor deze variabele directory's gereserveerd worden.
Essentieel vs. optioneel
Kleurcode
Eigenschappen
Essentieel
In deze statische directory's bevinden zich essentiële onderdelen van het systeem die onder andere nodig zijn tijdens het opstarten en het werken in single user mode.
Optioneel
Optionele directory's hoeven niet aanwezig te zijn in een bestandssysteem dat aan de FHS-standaard voldoet. Deze mappen zijn binnen de FHS gedefinieerd om hun locaties binnen het bestandssysteem te reserveren en hun namen vast te leggen. De inhoud van een optionele directory kan zowel statisch als variabel zijn.
Bestanden delen
In de Filesystem Hierarchy Standard staan alle bestanden en directory's (mappen) onder de root directory "/". Dat is zelfs het geval als de bestanden zich op een andere fysieke locatie bevinden (een andere computer), bijvoorbeeld bij een netwerkbestandssysteem. Bestanden kunnen via netwerken met andere hosts gedeeld worden als ze aan een aantal voorwaarden voldoen. Architectuur-onafhankelijke bestanden zijn meestal deelbaar tussen verschillende hosts terwijl configuratiebestanden over het algemeen niet deelbaar zijn. In onderstaande tabel worden een paar voorbeelden gegeven.
Deelbaar
Niet deelbaar
Statisch
/usr/share/man
/opt
/boot
/etc
Variabel
/var/mail
/var/spool/news
/var/run
/var/lock
Er is geen algemene regel waarmee in alle gevallen een onderscheid gemaakt kan worden tussen deelbare en niet-deelbare bestanden. Soms kan architectuur-afhankelijkheid een beperking zijn. Daardoor kan een bestand deelbaar zijn met een host met dezelfde architectuur terwijl dat bestand niet-deelbaar is met een host met een andere architectuur.
Secundaire en tertiaire hiërarchieën
Behalve de primaire hiërarchie aan de basis van het bestandssysteem komen in de FHS secundaire en tertiaire hiërarchieën voor. De secundaire en tertiaire hiërarchieën zijn meestal afspiegelingen van de primaire hiërarchie. De secundaire en tertiaire hiërarchieën bevatten bestandssystemen met een speciale functie in relatie tot de bestanden in de primaire hiërarchie. Secundaire en tertiaire hiërarchieën zijn onder andere te vinden in /opt, /usr, /usr/local, /var en /var/opt.
Bestandssysteem
De onderstaande omschrijvingen gelden voor de FHS-2.3-specificatie[9] die door The Linux Foundation gepubliceerd is. De omschrijvingen in onderstaande tabellen hoeven niet juist te zijn voor andere versies of voor afwijkende implementaties van de FHS.
/
De slash, /, geeft de rootdirectory van het bestandssysteem op de host aan.
Device files voor gegevensoverdracht via randapparatuur, zoals toetsenborden (tty), harde schijven (hda of sda) en de lege "vacuüm" en null-devices/dev/null en /dev/zero.
In /dev moet (een link naar) een programma MAKEDEV staan waarmee device files aangemaakt kunnen worden.
De subdirectory's in /opt moeten de naam van een softwarepakket (package) of een leverancier (provider) dragen, zoals /opt/<package> en /opt/<provider>. De provider moet een LANANA (Linux Assigned Names and Numbers Authority) registratie hebben.
De directory's met de namen /opt/bin, /opt/doc, /opt/include, /opt/info, /opt/lib en /opt/man zijn gereserveerd voor systeembeheer.
Voor de specifieke bestanden voor add-ons kunnen subdirectory's als /opt/<package>/bin en /opt/<package>/man aangemaakt worden.
Configuratiebestanden en variabele bestanden moeten in hiërarchieën als /etc/opt/<package> of /var/opt/<package> ondergebracht worden.
/proc
Een virtueel of pseudo-filesysteem dat dient als interface voor de uitwisseling van gegevens tussen de kernel en applicaties.
Via /proc kunnen applicaties datastructuren met de kernel uitwisselen die onder meer informatie bevatten over de toestand van processen en het gebruik van het geheugen.
Essentiële systeembinary's voor root-only-systeembeheer, configuratie, booting en initialisatie, zoals init, ip en fdisk.
In /sbin moet (een link naar) shutdown staan.
/srv
Site-specifieke gegevens die door services op het systeem, zoals ftp en cvs, geleverd worden.
/tmp
Tijdelijke bestanden (zie ook /var/tmp). Deze gegevens blijven vaak niet bestaan tussen reboots. /tmp is vaak beperkt in grootte wanneer het door het systeemgeheugen wordt geleverd.
/usr
Root van de secundaire hiërarchie voor programma's en read-only gegevens van gebruikers.
Bevat de meeste (multi-)user utilities en applicaties.
/var
Root van de secundaire /var hiërarchie met bestanden voor de opslag van gegevens die frequent veranderen tijdens een sessie, zoals log- en spool-files en tijdelijke e-mail-files.
/usr
De /usr-directory is de op een na grootste directory in het bestandssysteem. De afkorting staat voor ""unix system resources"" en heeft niets te maken met ""user"". Het is een gedeelde directory voor alle gebruikers op het systeem en het bevat alleen read-only-gegevens. Dat houdt in dat de /usr-directory gedeeld kan worden met verschillende hosts met een FHS-compliant bestandssysteem. Host-specifieke gegevens of veranderlijke gegevens dienen elders opgeslagen te worden.
Directory
Beschrijving, eigenschappen en eisen
/usr
Root van de secundaire /usr-hiërarchie.
Om compatibiliteit met oudere configuraties te verwezenlijken bevat /usr vaak de volgende symbolische links:
/usr/spool -> /var/spool
/usr/tmp -> /var/tmp
/usr/spool/locks -> /var/lock
/usr/bin
Binaries en commando's die door alle gebruikers gedeeld worden, zoals de python-, perl- en tcl-interpreters.
/usr/games
Spelletjes en educatieve software.
/usr/include
Standaard header files voor algemene toepassingen.
Variabele gegevens van de pakketten in /opt moeten worden opgeslagen in /var/opt/<subdir>, waar <subdir> de naam van de subdirectory in /opt is waar de statische gegevens van een add-on softwarepakket wordt opgeslagen
/var/run
Informatie over het systeem sinds de laatste boot, zoals gegevens over momenteel aangemelde gebruikers en actieve daemons.
/var/spool
Spool-taken die op verwerking wachten, zoals een print-queue en ongelezen mail.
/var/tmp
Tijdelijke bestanden die bewaard moeten blijven tussen opeenvolgende reboots.
↑Quinlan, Daniel, Filesystem Hierarchy Standard — Version 2.1, Filesystem Hierarchy Standard Group. Acadia Linux Tutorials. Gearchiveerd op 27 maart 2012. Geraadpleegd op 22 mei 2013.
↑FHS v2.2 op pathname.com. Gearchiveerd op 2 juli 2023.
↑ abFHS-2.3-specificaties. Gearchiveerd op 25 januari 2022.
↑FHS Referenced Specifications. refspecs.linuxfoundation.org. Gearchiveerd op 20 september 2020. Geraadpleegd op 14 augustus 2020.