Unix on kiehtova käyttöjärjestelmä. Alun perin suunniteltu klo Bell Labs 1960-luvun lopulla, se kannettiin turhautumista käyttöjärjestelmä tunnetaan nimellä ”Multics” (multiplexed information and computing service). Unix on nyt yli 50-vuotias (!) ja Linux-toteutus valtaa valtavat määrät Internetiä.
So-miksi Unix on niin suosittu?
Unixin menestys kumpuaa mielestäni filosofisesta lähestymistavasta kehitykseen. UNIX-filosofiaa dokumentoi Doug McIlroy Bell System Technical Journalissa 1978:
1. Pane jokainen ohjelma tekemään yksi asia hyvin. Voit tehdä uuden työn rakentamalla uudelleen sen sijaan, että monimutkaistat vanhoja ohjelmia lisäämällä uusia ”ominaisuuksia”.
2. Odota, että jokaisen ohjelman ulostulo tulee toisen, toistaiseksi tuntemattoman ohjelman syötöksi. Älä sotke ulostuloa ylimääräisillä tiedoilla. Vältä tiukasti columnar tai binary tulo formaatteja. Älä vaadi interaktiivista palautetta.
3. Suunnitella ja rakentaa ohjelmistoja, jopa käyttöjärjestelmiä, kokeiltavaksi aikaisin, mieluiten viikkojen kuluessa. Älä epäröi heittää kömpelöitä osia pois ja rakentaa niitä uudelleen.
4. Käytä työkaluja mieluummin kuin ammattitaidotonta auttaa keventämään ohjelmointitehtävää, vaikka sinun täytyy kiertää rakentaa työkaluja ja odottaa heittää joitakin niistä pois, kun olet lopettanut niiden käytön.
tämä tapahtui yli 40 vuotta sitten ja vangitsee vankan (yhden vastuun periaate, avoin/suljettu), mikropalvelut, toimivat putkistot, ketterän ja DevOpsin hengen!
saadaksesi paljon enemmän tietoa Unix-filosofiasta, lue tämä kirja (vapaasti saatavilla täältä, mutta osta kopio kirjoittajan tueksi!).
Katsotaanpa joitakin esimerkkejä Unix filosofia toiminnassa.
laita jokainen ohjelma tekemään yksi asia hyvin. Voit tehdä uuden työn rakentamalla uudelleen sen sijaan, että monimutkaistat vanhoja ohjelmia lisäämällä uusia ”ominaisuuksia”.
cat
tekee tasan yhden asian. Se yhdistää tiedostoja ja näyttää ne vakiotulosteessa. Siinä kaikki. Se ei tee pakinointia. Se ei tarjoa hakutoimintoja. Se vain tekee juuri niin kuin pellillä lukee, eikä enempää.
tr
on samankaltainen. Se tekee ”tekstimuotoisen korvaamisen” lukemalla syötteestä, tekemällä mahdolliset käännökset ja kirjoittamalla tulosteeseen.
tr -d aeiouAEIOU < file # Display file without vowels
tr eao 340 < file # Partially leet speak file
true
ja false
ovat ehkä parhaita esimerkkejä yhden asian tekemisestä hyvin. true
ei tee mitään, onnistuneesti! false
ei tee mitään.
false && echo Hi # does nothing
true && echi Hi # Prints Hi
kokoonpano
”odottaa jokaisen ohjelman tuotoksen tulevan syötöksi toiseen”
Unixissa useimmilla operaatioilla on kyky lukea ja kirjoittaa vakiotulosteeseen hyvin ymmärretyssä tekstimuodossa. Muutamilla komennoilla, kuten |
, >
ja <
, voimme syöttää yhden ohjelman ulostuloa toiseen. Katsotaanpa joitakin esimerkkejä:
tässä esimerkissä käytetään cat
tiedoston sisällön tulostamiseen ja tulosteen syöttämiseen wc
, joka voi laskea tiedoston rivien määrän.
cat foo.txt | wc -l
tässä esimerkissä käytämme history
useimmin käytettyjen komentojemme etsimiseen yhdistämällä se cut
, sort
, uniq
ja head
.
history | cut -f5 -d" " | sort -rn | uniq -c | sort -rn | head
xargs
on perimmäinen Sveitsin armeijan veitsi, jonka avulla voit rakentaa komentoja standardilähdöstä. Käytetään sitä poistaa kaikki”.tmp ” tiedostot nykyisessä hakemistossa sen jälkeen, kun olet käyttänyt find
niiden paikantamiseen.
find -type f *.tmp | xargs rm
kaikki on tiedosto
Unixissa kaikki on tiedosto (tai tarkemmin sanottuna kaikki on tavuvirtaa). Tämä tarkoittaa, että samoja sovellusliittymiä/komentoja voidaan käyttää CD-ROM-aseman lukemiseen, verkkopistokkeen kirjoittamiseen tai suorittimen tietojen selvittämiseen.
esimerkiksi koko /proc
– tiedostojärjestelmä Linuxissa ei ole varsinaisesti tiedostoja — se on dynaaminen informaationäkymä, joka paljastuu joukko tiedostokuvaajia.
joitakin esimerkkejä:
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
automaatio
kauan ennen ”automate-all-the-things” ia Unix oli olemassa, errr, automatisoiden kaikki asiat
cron
(lisää täältä) on automatisoinut kaikkea jo yli 40 vuoden ajan. Cron-työt ovat ajoitettuja skriptejä, jotka voivat toimia kiinteinä aikoina tai tietyin väliajoin.
jokaisella Unix-järjestelmän käyttäjällä on joukko ajoitettuja tehtäviä, jotka näkyvät crontab
– komennolla. Tiedosto on hyvin yksinkertaisesti muodossa, joka antaa päivämäärän ja kellonajan skripti, joka suoritetaan.
at
komento on ystävällisempi vaihtoehto, tässä esimerkki komennon ampumisesta 1145 tammikuun 31.päivänä (täältä).
echo "cc -o foo foo.c" | at 1145 jan 31
Puppet, Chef, CFEngine, Ansable — kaikki nämä DevOps-työkalut ja syntyneet ja kasvaneet Unix-pohjaisissa järjestelmissä.