Unix is een fascinerend besturingssysteem. Oorspronkelijk bedacht op Bell Labs in de late jaren 1960, het werd voortgekomen uit frustratie met het besturingssysteem bekend als “Multics” (multiplexed information and computing service). Unix is nu meer dan 50 jaar oud (!) en de Linux-implementatie zorgt voor enorme delen van het Internet.
so-waarom is Unix zo populair?In mijn gedachten komt het succes van Unix voort uit de filosofische benadering van ontwikkeling. De UNIX filosofie is gedocumenteerd door Doug McIlroy in het Bell System Technical Journal in 1978:
1. Zorg dat elk programma één ding goed doet. Om een nieuw werk te doen, bouwt u opnieuw in plaats van het compliceren van oude programma ‘ s door het toevoegen van nieuwe “functies”.
2. Verwacht dat de uitvoer van elk programma de input wordt voor een ander, nog onbekend programma. Don ‘ t rommel output met vreemde informatie. Vermijd streng zuilvormige of binaire invoerformaten. Dring niet aan op interactieve input.
3. Ontwerp en bouw software, zelfs besturingssystemen, om vroeg te worden geprobeerd, idealiter binnen enkele weken. Aarzel niet om de onhandige delen weg te gooien en ze opnieuw op te bouwen.
4. Gebruik tools in plaats van ongeschoolde hulp om een programmeertaak te verlichten, zelfs als je moet omwegen om de tools te bouwen en verwachten om een aantal van hen te gooien nadat u klaar bent met het gebruik ervan.
dit was meer dan 40 jaar geleden, en vangt SOLID (single responsibility principle, open / closed), microservices, functional pipelines, agile en the spirit of DevOps!
voor veel meer details over de UNIX filosofie, lees dit boek (gratis beschikbaar hier, maar koop een exemplaar om de auteur te ondersteunen!).
laten we eens kijken naar enkele voorbeelden van de UNIX filosofie in actie.
zorg dat elk programma één ding goed doet. Om een nieuw werk te doen, bouwt u opnieuw in plaats van het compliceren van oude programma ‘ s door het toevoegen van nieuwe “functies”.
cat
doet precies één ding. Het concatenates bestanden en geeft ze op standaard uitvoer. Dat is alles wat het doet. Het doet geen paginering. Het biedt geen zoekfunctionaliteit. Het doet precies wat er op het blik staat en niet meer.
tr
is vergelijkbaar. Het doet “tekstuele vervanging” door het lezen van input, het maken van vertalingen en schrijven naar output.
tr -d aeiouAEIOU < file # Display file without vowels
tr eao 340 < file # Partially leet speak file
true
en false
zijn misschien wel de beste voorbeelden om één ding goed te doen. true
doet niets, met succes! false
doet niets.
false && echo Hi # does nothing
true && echi Hi # Prints Hi
samenstelling
“verwacht dat de uitvoer van elk programma de input wordt voor een ander programma”
in Unix hebben de meeste bewerkingen de mogelijkheid om te lezen en te schrijven naar standaarduitvoer in een goed begrepen tekstueel formaat. Met een paar commando ‘ s, zoals |
, >
en <
kunnen we de uitvoer van het ene programma naar het andere voeden. Laten we eens kijken naar enkele voorbeelden:
in dit voorbeeld gebruiken we cat
om de inhoud van een bestand uit te voeren en de uitvoer naar wc
te voeren die het aantal regels in een bestand kan tellen.
cat foo.txt | wc -l
in dit voorbeeld gebruiken we history
om onze meest gebruikte commando ‘ s te vinden door het te combineren met cut
, sort
, uniq
en head
.
history | cut -f5 -d" " | sort -rn | uniq -c | sort -rn | head
xargs
is het ultieme Zwitsers-legermes waarmee u commando ‘ s kunt opbouwen van standaard uitvoer. Laten we het gebruiken om alles te verwijderen”.tmp ” bestanden in de huidige map na gebruik van find
om ze te lokaliseren.
find -type f *.tmp | xargs rm
alles is een bestand
in UNIX is alles een bestand (of beter gezegd, alles is een stroom van bytes). Dit betekent dat dezelfde API ‘s/commando’ s kunnen worden gebruikt voor het lezen van een CD-ROM station, het schrijven van een netwerk socket of het vinden van CPU info.
bijvoorbeeld, het gehele /proc
bestandssysteem op Linux is niet echt bestanden — het is een dynamische weergave van informatie die wordt blootgesteld als een stel bestandsdescriptoren.
enkele voorbeelden:
cat /proc/cpuinfo # Displays your CPU info exposed as a filefoo > /dev/null # Redirect output into a file called
# null (which discards everything)od -vAn -N1 -td1 < /dev/urandom # Display a random 1 byte number
# (via https://unix.stackexchange.com/a/268960
automatisering
lang voor de “automate-all-the-things” was Unix er, errr, automatiseren van alle dingen
cron
(meer hier) is het automatiseren van alle dingen voor de laatste 40+ jaar. Cron-taken zijn geplande scripts die op vaste tijden of vaste intervallen kunnen worden uitgevoerd.
elke gebruiker op een Unix-systeem heeft een set van geplande taken, zichtbaar met het crontab
Commando. Het bestand is in een zeer eenvoudig formaat dat de datum en tijd van het script dat draait geeft.
het at
commando is een vriendelijker alternatief, hier is een voorbeeld van het afvuren van een commando op 1145 op 31 januari (vanaf hier).
echo "cc -o foo foo.c" | at 1145 jan 31
Puppet, Chef, CFEngine, Ansible-al deze DevOps gereedschappen en geboren en getogen op Unix gebaseerde systemen.