Waarom zijn veel UNIX en GNU/Linux commando's eigenlijk zo kort?

ls, cd, rm, dd, mv, su: het barst van de super korte commando's onder UNIX en GNU/Linux. Soms best cryptisch en soms vraag je je ook af "waarom?". Vandaag de dag is er strict genomen nog maar 1 valide reden voor te bedenken. Het scheelt typen en kost daardoor minder tijd. De commando's zijn echter al sinds hun ontstaan in het begin van de jaren '70 zo en in die tijd was er nog een belangrijke reden om alles zo kort mogelijk te houden...

Kramp

De eerste versie van het UNIX besturingssysteem (1969) werd geschreven op een oude DEC PDP-7 uit 1964. Dit systeem had slechts 8k x 18 bits aan werkgeheugen beschikbaar: 4k voor de kernel en 4k voor al het andere. Om dit systeem te programmeren, gebruikten Ken Thompson en Dennis Ritchie een Teletype Model 33 schrijfmachine. Alles wat op de Teletype werd getypt, werd naar de computer gestuurd en de respons van de computer werd op een rol papier geprint. Je moest hier wel een beetje geduld voor hebben, want de maximale snelheid lag op 10 karakters per seconde. En een extra uitdaging? Typen op de Teletype Model 33 was zwaar voor de vingers. Dit heeft er volgens de overlevering aan bijgedragen dat de commando's zo kort mogelijk gehouden werden. Het hielp kramp in de vingers te voorkomen!

Eind 1971 kwam de eerste editie van de Unix Programmer's Manual uit. Er werd in die tijd nog volop aan het besturingssteem en de elementaire functionaliteit ervan gewerkt, getuige onder andere deze passage uit de handleiding:



"BUGS: rm probably should ask wheter a read-only file is really to be removed."


De gedachten van Ton Kersten

Er zijn diverse prachtige verhalen in omloop als het gaat om de historie van sommige UNIX commando's. Ik meen ooit te hebben gehoord dat het commando dd (convert and copy a file) zijn naam dankt aan het feit dat cc al in gebruik was voor de C-compiler. Een beetje zoals de taal B werd "opgevolgd" door C. Door de drang naar korte commando's was dd een passende keuze.

Op deze pagina kun je de nodige informatie vinden over de historie van diverse UNIX commando's. Hoewel ik geen onomstotelijk bewijs heb kunnen vinden voor mijn verhaal over dd en cc lijkt het er volgens dit draadje op Google Groups op dat grondlegger van UNIX en C wijlen Dennis Ritchie mijn memoires niet deelt. Hij doet het dd versus cc verhaal af als "spurious". Wie het weet mag het zeggen...

Nu ik me toch via dit kader met het blogje bemoei, kan ik het ook niet laten om iets over nog een tweetal commando's van twee letters te zeggen: vi en ed. vi is een grafische full screen editor en ed is een regel georienteerde editor. Van beiden wordt de kracht anno $(date) nog steeds onderschat.

Alias

Hoewel er tegenwoordig duizenden commando's bestaan voor alle smaken Linux distributies, is het nog steeds een gewoonte om een commando kort en bondig te houden. Is een commando toch lang en heb je geen zin om iedere keer alles te moeten typen? Dan is er de mogelijkheid om hiervoor een alias te maken.


                      #This example is made with Bash running on Fedora 37
                      $ alias k=kubectl
                      $ k version --output=yaml
                      clientVersion:
                        buildDate: "2022-12-08T19:58:30Z"
                        compiler: gc
                        gitCommit: b46a3f887ca979b1a5d14fd39cb1af43e7e5d12d
                        gitTreeState: clean
                        gitVersion: v1.26.0
                        goVersion: go1.19.4
                        major: "1"
                        minor: "26"
                        platform: linux/amd64
                      kustomizeVersion: v4.5.7
                    

bash

Je kunt een alias ook gebruiken voor commando's inclusief argumenten. Hierbij moet je dan wel dubbele aanhalingstekens gebruiken zodat de shell weet wanneer de waarde voor de alias begint en eindigt.


                      #This example is made with Bash running on Fedora 37
                      $ alias k="kubectl version --output=yaml"
                      $ k
                      clientVersion:
                        buildDate: "2022-12-08T19:58:30Z"
                        compiler: gc
                        gitCommit: b46a3f887ca979b1a5d14fd39cb1af43e7e5d12d
                        gitTreeState: clean
                        gitVersion: v1.26.0
                        goVersion: go1.19.4
                        major: "1"
                        minor: "26"
                        platform: linux/amd64
                      kustomizeVersion: v4.5.7
                    

bash

Stoom afblazen...

Creatief als de open source community is, zijn er ook diverse nieuwe tools gemaakt die ook uit slechts twee letters bestaan. In sommige gevallen zijn ze nuttig, in andere gevallen vooral bedoeld om de welwillende CLI-gebuiker tot waanzin te drijven. Neem bijvoorbeeld het command sl.

sudo dnf -y install sl

Wanneer je deze "tool" hebt draaien dan zul je iedere keer als je ls wilt typen en per ongeluk de letters omdraait moeten wachten tot de stoom opgetrokken is..... Gelukkig is deze digitale trein ook vlot weer vertrokken...sudo dnf -y remove sl

Voor wie meer wil lezen over de omgeving waaruit UNIX is voortgekomen en waarom er bepaalde quirks and features in het besturingssysteem zitten, kunnen we van harte het boek UNIX, A History and a Memoir van Brian Kernighan aanraden.

$ blog-details

  • $ categorie: Linux, tips, CLI, UNIX
  • $ tools: Bash, sl, ls, cd, su...
  • $ date: 2023-05-08T15:00:00 CEST

Dit vind je wellicht ook interessant...