a Unix egy lenyűgöző operációs rendszer. Eredetileg fogant a Bell Labs a késő 1960-as években, ez alátámasztotta a frusztráció az operációs rendszer néven ismert “Multics” (multiplexed information and computing service). A Unix már több mint 50 éves (!), és a Linux implementáció hatalmas területeket hatalmaz meg az Interneten.
tehát — miért olyan népszerű a Unix?
véleményem szerint a Unix sikere a fejlődés filozófiai megközelítéséből származik. A UNIX filozófiát Doug McIlroy dokumentálja a Bell System MŰSZAKI folyóiratban 1978:
1. Minden program jól csinál egy dolgot. Új munka elvégzéséhez építsen újra, ahelyett, hogy bonyolítaná a régi programokat új “funkciók”hozzáadásával.
2. Elvárják, hogy minden program kimenete egy másik, még ismeretlen program bemenetévé váljon. Ne zavarja a kimenetet idegen információkkal. Kerülje a szigorúan oszlopos vagy bináris bemeneti formátumokat. Ne ragaszkodjon az interaktív bemenethez.
3. Tervezzen és építsen szoftvereket, akár operációs rendszereket is, amelyeket Korán, ideális esetben heteken belül ki kell próbálni. Ne habozzon, dobja el az ügyetlen részeket, és újjáépíteni őket.
4. Használjon eszközöket a képzetlen segítség helyett a programozási feladat megkönnyítéséhez, még akkor is, ha kerülnie kell az eszközök felépítését, és elvárja, hogy néhányat kidobjon, miután befejezte a használatát.
ez volt több mint 40 évvel ezelőtt, és rögzíti szilárd (egységes felelősség elve, nyitott/zárt), mikroszolgáltatások, funkcionális csővezetékek, agilis és a szellem DevOps!
a Unix filozófiájával kapcsolatos további részletekért olvassa el ezt a könyvet (szabadon elérhető itt, de vásároljon egy példányt a szerző támogatására!).
nézzünk meg néhány példát a Unix filozófiájáról.
Minden program egy dolgot csináljon jól. Új munka elvégzéséhez építsen újra, ahelyett, hogy bonyolítaná a régi programokat új “funkciók”hozzáadásával.
cat
pontosan egy dolgot csinál. Összefűzi a fájlokat, és megjeleníti azokat a szabványos kimeneten. Ez minden. Nem csinál lapozást. Nem kínál keresési funkciót. Csak pontosan azt teszi, amit a dobozon mond, és nem többet.
tr
hasonló. “Szöveges helyettesítést” végez a bemenetről történő olvasással, bármilyen fordítással és írással a kimenetre.
tr -d aeiouAEIOU < file # Display file without vowels
tr eao 340 < file # Partially leet speak file
true
és a false
talán a legjobb példa arra, hogy egy dolgot jól csináljunk. true
nem csinál semmit, sikeresen! false
nem tesz semmit.
false && echo Hi # does nothing
true && echi Hi # Prints Hi
összetétel
“elvárják, hogy minden program kimenete egy másik bemenetévé váljon”
a Unix-ban a legtöbb művelet képes olvasni és írni a szabványos kimenetre egy jól érthető szöveges formátumban. Néhány paranccsal, mint például a |
, >
és <
, az egyik program kimenetét továbbíthatjuk a másikba. Nézzünk meg néhány példát:
ebben a példában a cat
– et használjuk a fájl tartalmának kiadására, és a kimenetet wc
– ba tápláljuk, aki meg tudja számolni a fájl sorainak számát.
cat foo.txt | wc -l
ebben a példában a history
– t használjuk a leggyakrabban használt parancsok megkeresésére, ha cut
, sort
, uniq
és head
.
history | cut -f5 -d" " | sort -rn | uniq -c | sort -rn | head
xargs
a végső svájci hadsereg kés, amely lehetővé teszi a parancsok felépítését a szabványos kimenetről. Használjuk az összes törléséhez”.tmp ” fájlok az aktuális könyvtárban a find
használata után.
find -type f *.tmp | xargs rm
Minden fájl
Unixban minden fájl (vagy pontosabban minden bájtfolyam). Ez azt jelenti, hogy ugyanazok az API-k/parancsok használhatók CD-ROM meghajtó olvasására, hálózati aljzat írására vagy CPU-információk megismerésére.
például a Linux teljes /proc
fájlrendszere valójában nem Fájlok — ez az információ dinamikus nézete, amely egy csomó fájlleíróként van kitéve.
néhány példa:
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
automatizálás
jóval a” mindent automatizálni ” előtt a Unix ott volt, errr, automatizálja az összes dolgot
cron
(bővebben itt) az elmúlt 40+ évben automatizálta az összes dolgot. A Cron feladatok ütemezett szkriptek, amelyek rögzített időpontokban vagy rögzített időközönként futtathatók.
a Unix rendszer minden felhasználójának van egy sor ütemezett feladata, amelyek a crontab
paranccsal láthatók. A fájl nagyon egyszerű formátumban van, amely megadja a futó szkript dátumát és idejét.
a at
parancs barátságosabb alternatíva, Itt van egy példa arra, hogy egy parancsot 1145-kor, Január 31-én (innen) lőjünk.
echo "cc -o foo foo.c" | at 1145 jan 31
Puppet, Chef, CFEngine, Ansible — ezek a DevOps eszközök Unix alapú rendszereken születtek és nevelkedtek.