Filesystem Hierarchy Standard

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.
  • Op 3 juni 2015 werd de FHS v3.0 gepubliceerd.[10]

Eigenschappen van bestanden

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.

Directory Beschrijving, eigenschappen en eisen
/
Dit is de root directory voor het hele bestandssysteem.
  • Door gebruikers mogen geen directory's of bestanden in de root-directory aangemaakt worden.
/bin
Essentiële command-line binary's die door alle gebruikers en in single user mode gebruikt kunnen worden, zoals mount, cat, ls en cp.
  • Er mogen geen subdirectory's in /bin voorkomen.
  • De (harde of symbolische link naar de) Bourne-shell sh moet in de /bin-directory staan.
/boot
Bestanden voor de bootloader en het opstarten van het systeem, zoals gegevensbestanden voor GRUB of LILO en init.
  • De kernels moeten in / of in /boot staan.
/dev
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.
/etc
Host-specifieke configuratiebestanden voor het hele systeem.
  • Onder de /etc-hiërarchie mogen geen binary's voorkomen.
  • Over het algemeen worden in /etc veel kleine configuratiebestanden opgeslagen.
/etc/opt
Bevat directory's met configuratiebestanden voor de applicaties in /opt.
/etc/sgml
Configuratiebestanden voor SGML.
/etc/X11
Configuratiebestanden voor het X Window System, versie 11.
  • In deze directory moet een Xconfig-, een XF86Config- of een Xmodmap-file staan.
  • In subdirectory's kunnen configuratiebestanden voor onder meer xinit, xdm en windowmanagers staan.
/etc/xml
Configuratiebestanden voor XML.
/home
Directory met daarin de home directory's van de gebruikers, waarin bestanden en persoonlijke configuratiebestanden opgeslagen worden.
/lib
Library's met objectcode voor kernel-modules en drivers en de binary's in /bin/ en /sbin/.
  • Essentiële objectcode om het systeem te kunnen opstarten en programma's te laden en uit te voeren.
  • De (links naar de) libc.so-library's en de linker/loader ld.so moeten in deze directory staan.
  • De (link naar de) C-preprocessor moet de naam /lib/cpp hebben.
/lib<qual>
Library's met objectcode voor een specifieke computerarchitectuur zoals lib32 of lib64 voor 32- en 64-bits processoren.
/media
Mount points voor verwisselbare gegevensdragers zoals cd-roms, USB-sticks, etc.
/mnt
Tijdelijk mount point voor een bestandssysteem.
/opt
Directory's voor optionele add-ons en andere software-packages.
  • 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.
/root
Home directory van de root user.
/sbin
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.
/usr/lib
Libraries met objectcode voor programmeren, gebruikerssoftware en binaries in /usr/bin/ en /usr/sbin/.
/usr/lib<qual>
Libraries met objectcode voor een specifieke computerarchitectuur zoals lib32 of lib64 voor 32- en 64-bits processoren.
/usr/local
De tertiaire /usr/local hiërarchie voor lokale gegevens, specifiek voor deze host.
  • De bestanden in de /usr/local-directory zijn bedoeld voor gebruik op de lokale host zodat /usr/local niet op een netwerk gemount dient te worden.
/usr/sbin
Niet-essentiële systeem binaries, zoals daemons voor verschillende network-services.
/usr/share
De tertiaire /usr/share hiërarchie met architectuur-onafhankelijke deelbare bestanden, zoals documentatiebestanden.
/usr/src
Source code, zoals de kernel source code met header files.
/usr/X11R6
X Window System, Version 11, Release 6.
Als /usr/X11R6 bestaat dan moeten de volgende links aangemaakt worden:
/usr/bin/X11 -> /usr/X11R6/bin
/usr/lib/X11 -> /usr/X11R6/lib/X11
/usr/include/X11 -> /usr/X11R6/include/X11

/usr/local

Tertiaire hiërarchie voor lokale, niet-deelbare gegevens en bestanden, specifiek voor deze host.

Directory Beschrijving, eigenschappen en eisen
/usr/local
De /usr/local/-directory is bedoeld voor gebruik op de lokale host zodat ze niet op een netwerk gemount dient te worden.
/usr/local/bin
Lokale binaries
/usr/local/etc
Host-specifieke systeem-configuratiebestanden voor lokale binaries.
Mag als link: /usr/local/etc -> /etc/local
/usr/local/games
Lokale binaries van spelletjes en educatieve software
/usr/local/include
Lokale headers
/usr/local/lib
Binaire bibliotheek.
/usr/local/lib<qual>
Moet geïmplementeerd worden als /lib<qual> of /usr/lib<qual> bestaat.
/usr/local/man
Lokale manual pages
/usr/local/sbin
Lokale systeem binaries
/usr/local/share
Lokaal gedeelde bestanden
/usr/local/src
Broncode

/usr/share

De tertiaire hiërarchie voor deelbare gegevens en bestanden die toegankelijk zijn voor verschillende hosts op een netwerk.

Directory Beschrijving, eigenschappen en eisen
/usr/share
Architectuur-onafhankelijke gedeelde gegevensbestanden zoals documentatie.
/usr/share/dict
Woordenlijsten.
/usr/share/doc
Documentatie.
/usr/share/games
Statische gegevens voor spelletjes.
/usr/share/info
GNU Info systeem-directory's.
/usr/share/locale
Locale (lokale) informatie.
/usr/share/man
Manual man-pagina's.
/usr/share/misc
Diversen.
/usr/share/nls
Catalogi voor ondersteuning in de taal van de gebruiker.
/usr/share/sgml
Gedeelde SGML-bestanden.
/usr/share/terminfo
Directory's voor de terminfo database.
/usr/share/tmac
troff-macros die niet bij groff geleverd worden.
/usr/share/xml
Gedeelde XML-bestanden.
/usr/share/zoneinfo
Tijdzone-informatie.

/var

/var bevat variabele gegevensbestanden. Dit omvat onder meer spool directory's en logbestanden en tijdelijke bestanden.

  • Sommige delen van /var zijn niet-deelbaar tussen verschillende hosts, zoals /var/log, /var/lock en /var/run.
  • Andere bestanden kunnen wel worden gedeeld, met name de bestanden in /var/mail, /var/cache/man, /var/cache/fonts en /var/spool/news.
Directory Beschrijving, eigenschappen en eisen
/var
Root van de secundaire /var-hiërarchie.
  • Gebruikersapplicaties mogen geen bestanden in de root van de /var-directory aanmaken.
/var/account
De huidige actieve logs met process-gegevens.
/var/cache
Ruimte voor opslag van cache gegevens in software. De gegevens worden lokaal gegenereerd tijdens tijdrovende I/O-operaties of berekeningen.
/var/crash
Ruimte voor opslag van crash-dumpgegevens.
/var/games
Ruimte voor opslag van tijdelijke gegeven van spelletjes.
/var/lib
Hiërarchie met persistente informatie over de toestand van het systeem zoals:
  • gegevens die tijdens het uitvoering van programma's veranderen;
  • databases, packaging system-gegevens, etc.
/var/lock
Lock files. Bestanden die bijhouden welke middelen en files in gebruik zijn.
/var/log
Verschillende log-files.
/var/mail
Mailbox van gebruikers.
/var/opt
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.
/var/yp
Network Information Service (NIS) database.

Zie ook

Referenties

  1. HIER(7) FreeBSD Miscellaneous Information Manual
  2. FILESYSTEM(7) FreeBSD Man Pages library
  3. FSSTND v1.0. Ibiblio.org. Geraadpleegd op 22 mei 2013.
  4. FSSTND v1.1. Ibiblio.org. Geraadpleegd op 22 mei 2013.
  5. FSSTND v1.2. Ibiblio.org. Geraadpleegd op 22 mei 2013.
  6. FHS v2.0. Gearchiveerd op 8 april 2023.
  7. 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.
  8. FHS v2.2 op pathname.com. Gearchiveerd op 2 juli 2023.
  9. a b FHS-2.3-specificaties. Gearchiveerd op 25 januari 2022.
  10. FHS Referenced Specifications. refspecs.linuxfoundation.org. Gearchiveerd op 20 september 2020. Geraadpleegd op 14 augustus 2020.