thumb|300px|Beknopte stamboom van de Unixfamilie Unix (of UNIX) is een familie van besturingssystemen met multitasking- en multiuser-mogelijkheden voor zeer uiteenlopende typen computers, ontwikkeld door verscheidene fabrikanten en groepen. De eerste versie van Unix werd ontworpen bij Bell Labs in 1969, door (onder anderen) Ken Thompson en Dennis Ritchie.
Unix wordt gekenmerkt door de centrale rol van het bestandssysteem, dat niet alleen gebruikt wordt om bestanden op schijven en andere fysieke media aan te spreken, maar ook randapparatuur en in sommige varianten ook netwerkverbindingen.
Om met het bestandssysteem te werken maakt Unix van oudsher gebruik van een groot aantal kleine, niet-interactieve programma's, die allemaal één zeer specifieke taak verrichten, en die via de shell gecombineerd kunnen worden tot grotere programma's.
Hoewel Unix vaak geassocieerd wordt met een opdrachtregelinterface, zijn grafische gebruikersomgevingen op Unix al sinds begin jaren 80 beschikbaar. Ook macOS, het besturingssysteem van Apple, is "onder de motorkap" Unix (meer specifiek BSD-gebaseerd). Dat geldt ook voor iOS, het besturingsysteem van de iPad en de iPhone. Android, het besturingssysteem van Google voor mobiele apparaten, zoals smartphones en tablets, is gebaseerd op Linux, dat ook veel eigenschappen van Unix heeft.
Naam en handelsmerk De naam Unix wordt vaak met hoofdletters geschreven, maar is geen afkorting. Unix is een woordspeling op de naam van een eerder systeem, Multics (zie verderop). "UNIX" is een geregistreerd handelsmerk van The Open Group; dit consortium verleent het recht om het merk te gebruiken aan producten die voldoen aan de Single UNIX Specification.The Open Group (2001) The Single UNIX Specification URL bezocht op 11 mei 2006. De meeste systemen die aan deze standaard voldoen stammen af van de "oer-Unix" van Bell Labs, maar er zijn uitzonderingen, waaronder SOX en z/OS.
In de praktijk wordt de naam Unix ook wel gebruikt als generiek handelsmerk (soortnaam), ter aanduiding van alle besturingssystemen die op enigerlei wijze hun oorsprong vinden in het eerste Unixsysteem van Bell Labs. Voor meerdere Unixsystemen wordt wel het pseudo Latijnse meervoud unices gebruikt.
Werkomgeving Traditioneel biedt Unix de gebruiker een opdrachtregelinterface, de shell. Deze biedt de gebruiker niet alleen de mogelijkheid om programma's op te starten, maar heeft in feite een complete ingebouwde scripttaal met variabelen en control flow. De meest gebruikte shell op moderne Unix- en Linux-systemen is Bash.
Naast de shell beschikken veel Unices sinds de jaren 80 over grafische vensteromgevingen. Aanvankelijk had elke leverancier zijn eigen vensteromgeving, maar vanaf midden jaren 80 begon het X Window System (kortweg X of X11) langzaam de standaard te worden. Vandaag de dag wordt X gebruikt op bijna alle Unices, behalve Mac OS X (hoewel hiervoor wel een versie van X beschikbaar is, om grafische Unixprogramma's te kunnen draaien die niet specifiek voor OS X geschreven zijn) en enkele uitzonderingen die zijn overgegaan op Wayland. Voor X.Org bestaan daarnaast desktopomgevingen zoals KDE, GNOME, Xfce, LXDE en Enlightenment.
Bestandssysteem Het bestandssysteem van Unix vormt één grote boomstructuur. In tegenstelling tot systemen als MS-DOS en Windows kent Unix dus geen schijfletters; in plaats daarvan wordt een (fysieke of virtuele) schijf aan een bestaande directory gehecht met het commando mount; die directory wordt dan mountpoint genoemd. Als bijvoorbeeld systeembestanden op harde schijf 1 staan, en gebruikersbestanden op schijf 2, dan kan schijf 1 als root (wortel) van het bestandssysteem ingesteld worden, en wordt schijf 2 "gemount" op de directory /home. Deze directory gedraagt zich verder zo veel mogelijk als een gewone directory; de grens tussen beide schijven wordt zo veel mogelijk voor de gebruiker verborgen gehouden.
Bestanden worden op Unix aangeduid met een "pad" dat bestaat uit een aantal namen van directory's, gescheiden door slashes, en uiteindelijk een bestandsnaam. De root wordt aangeduid met /. Als in de root een directory foo staat met daarin een directory bar en daarin een bestand baz, dan kan dit bestand aangeduid worden met /foo/bar/baz. Deze manier van bestanden aanduiden komt ook voor in URL's (die op de Unixconventie gebaseerd zijn).
Een aantal directory's bestaat standaard op vrijwel elk Unixsysteem, de volgende zelfs al sinds eind jaren 70:
/bin bevat systeemcommando's /dev bevat apparaatbestanden (device files; zie hieronder) /etc bevat configuratiebestanden (en oorspronkelijk ook programma's voor systeembeheer) /lib bevat programmabibliotheken /tmp bevat tijdelijke bestanden /usr bevat programma's die niet nodig zijn tijdens de opstartfase
Onder /usr bevindt zich weer een hele hiërarchie die gedeeltelijk vergelijkbaar is met de root (zo is er een /usr/bin en een /usr/lib).
Verder heeft elke gebruiker een eigen directory, de homedirectory, die alle privébestanden (documenten, instellingen, programma's) van die gebruiker bevat. Natuurlijk kunnen binnen deze directory weer subdirectory's aangemaakt worden. De homedirectory's zijn weer verzameld in een overkoepelende directory; oorspronkelijk was dit /usr, maar tegenwoordig is het meestal een aparte directory als /home of /users.
De verdeling van programma's over /bin en /usr/bin is gedeeltelijk een historische: op de oudste Unixinstallaties bij Bell Labs waren de harde schijven zo klein (10 à 25 MB) dat de programma's verdeeld moesten worden. Vanaf één schijf werd opgestart, waarna de andere werd gemount.
De huidige POSIX-standaard voor Unix-bestandssystemen is vastgelegd in de Filesystem Hierarchy Standard.
Koppelingen (links) Op Unix is het mogelijk een bestand meer dan één naam te geven, door middel van harde en zachte/symbolische koppelingen (hard links en soft of symbolic links).
Een harde koppeling is een koppeling tussen een bestandsnaam en het onderliggende bestand. Gewoonlijk heeft een bestand één koppeling, en dus één naam, maar nieuwe koppelingen kunnen gemaakt worden met het commando ln:
ln foo bar
maakt een nieuwe koppeling genaamd bar die naar hetzelfde bestand verwijst als foo. Bewerkingen die op de inhoud van foo worden uitgevoerd werken door in bar en vice versa. Alleen het verwijderen van een van beide heeft geen effect op de ander; het verwijderen van een bestand (met het commando rm) verwijdert eigenlijk alleen de koppeling.
Symbolische of zachte koppelingen (symlinks) werken anders. Een symbolische koppeling is een speciaal type bestand dat een verwijzing is naar een ander pad. Ze worden aangemaakt met ln -s:
ln -s foo bar
bar is nu een symlink naar foo. foo hoeft hiervoor geen bestand te zijn; het mag ook een directory zijn, en hoeft zelfs niet te bestaan. bar verwijst alleen naar de naam (het symbool) foo.
Eigendom en permissies Omdat Unix meerdere gebruikers op hetzelfde systeem toestaat, hebben alle bestanden in het systeem een eigenaar, die bepaalt wie er toestemming hebben om een bestand in te lezen, te wijzigen of uit te voeren (in het geval van een programma). Deze rechten worden apart toegekend aan de eigenaar van het bestand (die ze zelf kan wijzigen, maar op deze manier zijn bestanden tegen eigen fouten kan beschermen), de groep van het bestand (een gebruikersgroep waar de eigenaar lid van moet zijn) en alle andere gebruikers op het systeem.
Apparaatbestanden Unix heeft een vrij aparte manier om randapparatuur aan te spreken: in de directory /dev staan zogenaamde "apparaatbestanden", die gekoppeld zijn aan de apparaten. Op een modern systeem kunnen bijvoorbeeld bestanden met namen als /dev/usb0 (usb1, usb2, ...) aanwezig zijn. Door een dergelijk bestand te openen en de inhoud te lezen of er naar te schrijven, kan met een USB-apparaat gecommuniceerd worden. Voor de gebruiker, en zelfs voor softwareontwikkelaars gedraagt een apparaatbestand zich als een gewoon bestand, maar "onder de motorkap" worden alle in- en uitvoerhandelingen doorgesluisd naar het corresponderende apparaat.
Geschiedenis Voorgeschiedenis: Multics thumb|Ken Thompson (links) en Dennis Ritchie In 1965 ging Bell Labs, de onderzoeksafdeling van de Amerikaanse telecomgigant AT&T, met General Electric en het MIT in zee om samen een besturingssysteem voor de GE-645 te ontwikkelen, dat Multics zou gaan heten. Het project was zeer ambitieus: Multics zou een timesharingsysteem worden, waarop meerdere gebruikers tegelijk interactief konden werken (aan meerdere terminals). Dergelijke faciliteiten waren medio jaren 60 bijzonder geavanceerd: de meeste computers werden gebruikt en geprogrammeerd door middel van ponskaarten. Voor Bell Labs werkten de softwareontwikkelaars Ken Thompson en Dennis Ritchie aan het project.
Omdat Multics echter niet op tijd aan de eisen van Bell Labs kon voldoen werd de deelname van Bell Labs aan de ontwikkeling van het systeem in april 1969 stopgezet. Het project werd echter wel met succes voortgezet door GE en MIT.Van Vleck, Thomas H. (1995) Unix and Multics, Multicians.org. URL bezocht op 11 mei 2006.
Om te proberen er toch nog wat van te maken, besloten Ritchie en Thompson er een nieuw bestandssysteem voor te schrijven. Dit zou later het bestandssysteem voor Unix worden. Om het concept uit te werken schreef Ken Thompson zelfs een kernel voor de GE-645. Intussen schreef hij ook een spelletje voor deze machine, maar omdat het veel te duur was om te draaien en omdat het niet soepel liep ging hij op zoek naar een andere computer waar het beter op zou draaien. Dat werd een op dat moment ongebruikte PDP-7, een toen al verouderd type minicomputer. Door het programmeren hiervan leerde hij deze machine zo goed kennen dat hij later de kernel overbracht naar deze machine. Later werden er een hoop nieuwe hulpprogramma's geschreven door Ritchie en Thompson en anderen en het systeem ontwikkelde zich steeds meer tot een volwaardig bruikbaar besturingssysteem op de PDP-7. Toen er een naam voor het systeem moest komen werd UNICS voorgesteld (naar verluidt door Brian Kernighan), voor Uniplexed Information and Computation Service, een woordspeling op Multics, dat stond voor Multiplexed Information and Computation Service. Uniplexed is een onzinwoord, dat zoiets zou moeten betekenen als "in enen gesplitst". In het Engels klinkt UNICS echter hetzelfde als eunuchs, "eunuchen;" het systeem was dus een "ontmande Multics."Salus, Peter H. (1994) A Quarter Century of UNIX. Reading, MA: Addison-Wesley, p. 9. .
PDP-11 Om te laten zien wat het besturingssysteem waard was werd het in 1971 overgezet naar de PDP-11. Financiering voor dit experiment was beschikbaar omdat de patentenafdeling van Bell Labs een nieuw tekstverwerkingssysteem nodig had; dit zou samen met het nieuwe systeem ontwikkeld worden. Intussen was UNICS veranderd in UNIX; het precieze moment waarop de naamsverandering werd ingevoerd, en wiens idee dat was, is niet meer te achterhalen.
Al snel probeerde Thompson een compiler voor de destijds universele programmeertaal Fortran te ontwikkelen. Na een tijdje bedacht hij zich echter, en vond hij de programmeertaal B uit, gebaseerd op de eerdere taal BCPL. Deze taal werd door een interpreter uitgevoerd, waardoor programma's relatief traag draaiden. Er werd daarom al snel gewerkt aan een nieuwe gecompileerde taal die C werd genoemd.
Verspreiding buiten Bell Labs