filosofia dezvoltării UNIX

Jeff Foster
Jeff Foster

Urmărește

iulie 31, 2019 * 5 min citit

Unix este un sistem de operare fascinant. Inițial conceput de la Bell Labs la sfârșitul anilor 1960, a fost susținută de frustrare cu sistemul de operare cunoscut sub numele de „Multics” (informații multiplexate și servicii de calcul). Unix are acum peste 50 de ani (!) și implementarea Linux are puteri uriașe ale Internetului.

deci — de ce este Unix atât de popular?

în mintea mea, Succesul Unix vine de la abordarea filosofică a dezvoltării. Filosofia UNIX este documentată de Doug McIlroy în Jurnalul tehnic al sistemului Bell în 1978:

1. Faceți fiecare program să facă un lucru bine. Pentru a face un nou loc de muncă, construi din nou, mai degrabă decât complica programe vechi prin adăugarea de noi „caracteristici”.

2. Așteptați ca ieșirea fiecărui program să devină intrarea către un alt program, încă necunoscut. Nu dezordine de ieșire cu informații străine. Evitați formatele de intrare stringent columnare sau binare. Nu insistați asupra intrărilor interactive.

3. Proiectați și construiți software, chiar și sisteme de operare, pentru a fi încercat devreme, în mod ideal în câteva săptămâni. Nu ezitați să aruncați părțile stângace și să le reconstruiți.

4. Utilizați instrumente de preferință pentru ajutor necalificat pentru a ușura o sarcină de programare, chiar dacă trebuie să ocoliți pentru a construi instrumentele și așteptați să aruncați unele dintre ele după ce ați terminat de utilizat.

acest lucru a fost de peste 40 de ani în urmă, și surprinde SOLID (principiul responsabilitate unică, deschis/închis), microservicii, conducte funcționale, agil și spiritul DevOps!

pentru mai multe detalii despre filosofia Unix, citiți această carte (disponibilă gratuit aici, dar cumpărați o copie pentru a sprijini autorul!).

să ne uităm la câteva exemple ale filozofiei Unix în acțiune.

faceți ca fiecare program să facă un lucru bine. Pentru a face un nou loc de muncă, construi din nou, mai degrabă decât complica programe vechi prin adăugarea de noi „caracteristici”.

cat face exact un singur lucru. Acesta concatenează fișiere și le afișează pe ieșire standard. Asta e tot ce face. Nu face paginare. Nu oferă funcționalitate de căutare. Doar face exact ceea ce spune pe tablă și nu mai mult.

tr este similar. Ea face „înlocuire textual” prin citirea de la intrare, ceea ce face orice Traduceri și scris la ieșire.

tr -d aeiouAEIOU < file # Display file without vowels
tr eao 340 < file # Partially leet speak file

true și false sunt probabil cele mai bune exemple de a face un lucru bine. true nu face nimic, cu succes! false nu face nimic.

false && echo Hi # does nothing
true && echi Hi # Prints Hi

compoziție

„așteptați ca ieșirea fiecărui program să devină intrarea către altul”

în Unix, majoritatea operațiilor au capacitatea de a citi și scrie la ieșire standard într-un format textual bine înțeles. Cu câteva comenzi, cum ar fi |, > și < putem alimenta ieșirea unui program la altul. Să ne uităm la câteva exemple:

în acest exemplu, folosim cat pentru a scoate conținutul unui fișier și a alimenta ieșirea în wc cine poate număra numărul de linii dintr-un fișier.

cat foo.txt | wc -l

în acest exemplu, folosim history pentru a găsi comenzile noastre cele mai frecvent utilizate combinându-le cu cut, sort, uniq și head.

history | cut -f5 -d" " | sort -rn | uniq -c | sort -rn | head

xargs este ultimul cuțit elvețian-armată care vă permite să construiți comenzi de la ieșirea standard. Să-l folosim pentru a șterge toate „.tmp ” fișiere în directorul curent după utilizarea find pentru a le localiza.

find -type f *.tmp | xargs rm

totul este un fișier

în UNIX totul este un fișier (sau mai precis, totul este un flux de octeți). Aceasta înseamnă că aceleași API-uri/comenzi pot fi utilizate pentru citirea unei unități CD-ROM, scrierea unui soclu de rețea sau aflarea informațiilor CPU.

de exemplu, întregul sistem de fișiere /proc de pe Linux nu este cu adevărat fișiere — este o vizualizare dinamică a informațiilor care este expusă ca o grămadă de descriptori de fișiere.

câteva exemple:

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

Automation

cu mult înainte de „automatizarea tuturor lucrurilor”, Unix era acolo, errr, automatizând toate lucrurile

automatizați Obligatoriu toate lucrurile imagine

cron (mai multe aici) a automatizat toate lucrurile în ultimii 40 + ani. Lucrările Cron sunt scripturi programate care pot rula la ore fixe sau intervale fixe.

fiecare utilizator de pe un sistem Unix are un set de sarcini programate, vizibile folosind comanda crontab. Fișierul este într-un format foarte simplu, care oferă data și ora scriptului care rulează.

comanda at este o alternativă mai prietenoasă, iată un exemplu de tragere a unei comenzi la 1145 pe 31 Ianuarie (de aici).

echo "cc -o foo foo.c" | at 1145 jan 31

Puppet, Chef, CFEngine, Ansible — toate aceste instrumente DevOps și născute și crescute pe sisteme bazate pe Unix.

Lasă un răspuns

Adresa ta de email nu va fi publicată.

Previous post cum să crească diferite soiuri de begonii
Next post vitamina B-100 complex oral